64 lines
1.6 KiB
Go
64 lines
1.6 KiB
Go
package tools
|
|
|
|
import (
|
|
"encoding/json"
|
|
"fmt"
|
|
"strings"
|
|
"testing"
|
|
)
|
|
|
|
type stubTool struct{}
|
|
|
|
func (stubTool) Name() string { return "stub" }
|
|
func (stubTool) Description() string { return "测试桩工具" }
|
|
func (stubTool) Parameters() map[string]any {
|
|
return map[string]any{"type": "object"}
|
|
}
|
|
func (stubTool) Execute(args json.RawMessage) (string, error) {
|
|
return fmt.Sprintf("stub:%s", args), nil
|
|
}
|
|
|
|
type stubTool2 struct{}
|
|
|
|
func (stubTool2) Name() string { return "stub2" }
|
|
func (stubTool2) Description() string { return "测试桩工具2" }
|
|
func (stubTool2) Parameters() map[string]any {
|
|
return map[string]any{"type": "object"}
|
|
}
|
|
func (stubTool2) Execute(args json.RawMessage) (string, error) {
|
|
return "stub2", nil
|
|
}
|
|
|
|
func TestRegistry(t *testing.T) {
|
|
r := NewRegistry(stubTool{}, stubTool2{})
|
|
if _, ok := r.Get("stub"); !ok {
|
|
t.Error("stub 未注册")
|
|
}
|
|
if _, ok := r.Get("nonexistent"); ok {
|
|
t.Error("未知工具不应存在")
|
|
}
|
|
if len(r.ParamList()) != 2 {
|
|
t.Errorf("ParamList 数量 = %d, want 2", len(r.ParamList()))
|
|
}
|
|
if _, err := r.Execute("nonexistent", nil); err == nil {
|
|
t.Error("执行未知工具应返回错误")
|
|
}
|
|
out, err := r.Execute("stub", json.RawMessage(`{"a":1}`))
|
|
if err != nil {
|
|
t.Fatalf("Execute 出错: %v", err)
|
|
}
|
|
if out != `stub:{"a":1}` {
|
|
t.Errorf("Execute 输出 = %q", out)
|
|
}
|
|
list := r.List()
|
|
if len(list) != 2 {
|
|
t.Fatalf("List 数量 = %d, want 2", len(list))
|
|
}
|
|
wantOrder := []string{"stub", "stub2"}
|
|
for i, want := range wantOrder {
|
|
if !strings.HasPrefix(list[i], want+" - ") {
|
|
t.Errorf("List[%d] = %q, want 前缀 %q", i, list[i], want+" - ")
|
|
}
|
|
}
|
|
}
|