1package claudetool
2
3import (
4 "context"
5 "testing"
6)
7
8func TestIsStrongModel(t *testing.T) {
9 tests := []struct {
10 modelID string
11 expected bool
12 }{
13 {"claude-3-sonnet-20240229", true},
14 {"claude-3-opus-20240229", true},
15 {"claude-3-haiku-20240307", false},
16 {"Sonnet Model", true},
17 {"OPUS Model", true},
18 {"haiku model", false},
19 {"other-model", false},
20 {"", false},
21 }
22
23 for _, test := range tests {
24 result := isStrongModel(test.modelID)
25 if result != test.expected {
26 t.Errorf("isStrongModel(%q) = %v, expected %v", test.modelID, result, test.expected)
27 }
28 }
29}
30
31func TestNewToolSet(t *testing.T) {
32 provider := &mockLLMProvider{}
33
34 cfg := ToolSetConfig{
35 LLMProvider: provider,
36 ModelID: "test-model",
37 WorkingDir: "/test",
38 }
39
40 ctx := context.Background()
41 ts := NewToolSet(ctx, cfg)
42
43 if ts == nil {
44 t.Fatal("NewToolSet returned nil")
45 }
46
47 if ts.wd == nil {
48 t.Error("Working directory not initialized")
49 }
50
51 if ts.tools == nil {
52 t.Error("Tools not initialized")
53 }
54}
55
56func TestToolSet_Tools(t *testing.T) {
57 provider := &mockLLMProvider{}
58
59 cfg := ToolSetConfig{
60 LLMProvider: provider,
61 ModelID: "test-model",
62 WorkingDir: "/test",
63 }
64
65 ctx := context.Background()
66 ts := NewToolSet(ctx, cfg)
67
68 tools := ts.Tools()
69 if tools == nil {
70 t.Fatal("Tools() returned nil")
71 }
72
73 if len(tools) == 0 {
74 t.Error("expected at least one tool")
75 }
76}
77
78func TestToolSet_WorkingDir(t *testing.T) {
79 provider := &mockLLMProvider{}
80
81 cfg := ToolSetConfig{
82 LLMProvider: provider,
83 ModelID: "test-model",
84 WorkingDir: "/test",
85 }
86
87 ctx := context.Background()
88 ts := NewToolSet(ctx, cfg)
89
90 wd := ts.WorkingDir()
91 if wd == nil {
92 t.Fatal("WorkingDir() returned nil")
93 }
94
95 if wd.Get() != "/test" {
96 t.Errorf("expected working dir '/test', got %q", wd.Get())
97 }
98}
99
100func TestToolSet_Cleanup(t *testing.T) {
101 provider := &mockLLMProvider{}
102
103 cfg := ToolSetConfig{
104 LLMProvider: provider,
105 ModelID: "test-model",
106 WorkingDir: "/test",
107 }
108
109 ctx := context.Background()
110 ts := NewToolSet(ctx, cfg)
111
112 // Cleanup should not panic
113 ts.Cleanup()
114}
115
116func TestNewToolSet_DefaultWorkingDir(t *testing.T) {
117 provider := &mockLLMProvider{}
118
119 // Test with empty working dir (should default to "/")
120 cfg := ToolSetConfig{
121 LLMProvider: provider,
122 ModelID: "test-model",
123 WorkingDir: "",
124 }
125
126 ctx := context.Background()
127 ts := NewToolSet(ctx, cfg)
128
129 wd := ts.WorkingDir()
130 if wd.Get() != "/" {
131 t.Errorf("expected default working dir '/', got %q", wd.Get())
132 }
133}
134
135func TestNewToolSet_WithBrowser(t *testing.T) {
136 provider := &mockLLMProvider{}
137
138 cfg := ToolSetConfig{
139 LLMProvider: provider,
140 ModelID: "test-model",
141 WorkingDir: "/test",
142 EnableBrowser: true,
143 }
144
145 ctx := context.Background()
146 ts := NewToolSet(ctx, cfg)
147
148 if ts == nil {
149 t.Fatal("NewToolSet returned nil")
150 }
151
152 if ts.wd == nil {
153 t.Error("Working directory not initialized")
154 }
155
156 if ts.tools == nil {
157 t.Error("Tools not initialized")
158 }
159}