toolset_test.go

  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}