Spaces:
Paused
Paused
| package executor | |
| import ( | |
| "bytes" | |
| "testing" | |
| "github.com/tidwall/gjson" | |
| ) | |
| func TestApplyClaudeToolPrefix(t *testing.T) { | |
| input := []byte(`{"tools":[{"name":"alpha"},{"name":"proxy_bravo"}],"tool_choice":{"type":"tool","name":"charlie"},"messages":[{"role":"assistant","content":[{"type":"tool_use","name":"delta","id":"t1","input":{}}]}]}`) | |
| out := applyClaudeToolPrefix(input, "proxy_") | |
| if got := gjson.GetBytes(out, "tools.0.name").String(); got != "proxy_alpha" { | |
| t.Fatalf("tools.0.name = %q, want %q", got, "proxy_alpha") | |
| } | |
| if got := gjson.GetBytes(out, "tools.1.name").String(); got != "proxy_bravo" { | |
| t.Fatalf("tools.1.name = %q, want %q", got, "proxy_bravo") | |
| } | |
| if got := gjson.GetBytes(out, "tool_choice.name").String(); got != "proxy_charlie" { | |
| t.Fatalf("tool_choice.name = %q, want %q", got, "proxy_charlie") | |
| } | |
| if got := gjson.GetBytes(out, "messages.0.content.0.name").String(); got != "proxy_delta" { | |
| t.Fatalf("messages.0.content.0.name = %q, want %q", got, "proxy_delta") | |
| } | |
| } | |
| func TestApplyClaudeToolPrefix_SkipsBuiltinTools(t *testing.T) { | |
| input := []byte(`{"tools":[{"type":"web_search_20250305","name":"web_search"},{"name":"my_custom_tool","input_schema":{"type":"object"}}]}`) | |
| out := applyClaudeToolPrefix(input, "proxy_") | |
| if got := gjson.GetBytes(out, "tools.0.name").String(); got != "web_search" { | |
| t.Fatalf("built-in tool name should not be prefixed: tools.0.name = %q, want %q", got, "web_search") | |
| } | |
| if got := gjson.GetBytes(out, "tools.1.name").String(); got != "proxy_my_custom_tool" { | |
| t.Fatalf("custom tool should be prefixed: tools.1.name = %q, want %q", got, "proxy_my_custom_tool") | |
| } | |
| } | |
| func TestStripClaudeToolPrefixFromResponse(t *testing.T) { | |
| input := []byte(`{"content":[{"type":"tool_use","name":"proxy_alpha","id":"t1","input":{}},{"type":"tool_use","name":"bravo","id":"t2","input":{}}]}`) | |
| out := stripClaudeToolPrefixFromResponse(input, "proxy_") | |
| if got := gjson.GetBytes(out, "content.0.name").String(); got != "alpha" { | |
| t.Fatalf("content.0.name = %q, want %q", got, "alpha") | |
| } | |
| if got := gjson.GetBytes(out, "content.1.name").String(); got != "bravo" { | |
| t.Fatalf("content.1.name = %q, want %q", got, "bravo") | |
| } | |
| } | |
| func TestStripClaudeToolPrefixFromStreamLine(t *testing.T) { | |
| line := []byte(`data: {"type":"content_block_start","content_block":{"type":"tool_use","name":"proxy_alpha","id":"t1"},"index":0}`) | |
| out := stripClaudeToolPrefixFromStreamLine(line, "proxy_") | |
| payload := bytes.TrimSpace(out) | |
| if bytes.HasPrefix(payload, []byte("data:")) { | |
| payload = bytes.TrimSpace(payload[len("data:"):]) | |
| } | |
| if got := gjson.GetBytes(payload, "content_block.name").String(); got != "alpha" { | |
| t.Fatalf("content_block.name = %q, want %q", got, "alpha") | |
| } | |
| } | |