Files
2026-06-02 23:14:41 +08:00

80 lines
3.1 KiB
Go

//go:build blackbox
package p0
import (
"strings"
"testing"
"github.com/chenhg5/cc-connect/tests/blackbox/helper"
)
// ── P0-14: 工具调用 ───────────────────────────────────────────────────────────
// TestP0_14_ToolInvocation_ClaudeCode verifies that cc-connect routes a task
// requiring tool use to the agent and the agent successfully executes it.
// A real agent calling real tools is the only way to verify this end-to-end.
func TestP0_14_ToolInvocation_ClaudeCode(t *testing.T) {
t.Parallel()
testToolInvocation(t, "claudecode")
}
func testToolInvocation(t *testing.T, agentType string) {
t.Helper()
env := helper.NewEnv(t, agentType)
// Ask something that requires a Bash/filesystem tool call.
msgs := env.SendComplete("List the files in the current directory using a shell command. Just show me the output.")
combined := helper.AnyText(msgs)
if strings.TrimSpace(combined) == "" {
t.Fatalf("empty reply; all messages:\n%s", env.Platform.AllText())
}
// The agent should have invoked a tool — expect a tool-call indicator or
// file listing output. We check for the Tool indicator message or any
// file/directory names in the response.
hasToolEvidence := strings.Contains(combined, "🔧") ||
strings.Contains(combined, "Tool") ||
strings.Contains(combined, "Bash") ||
strings.Contains(combined, ".go") ||
strings.Contains(combined, "go.mod") ||
strings.Contains(combined, "main") ||
strings.Contains(combined, "ls") ||
strings.Contains(strings.ToLower(combined), "file") ||
strings.Contains(strings.ToLower(combined), "directory") ||
strings.Contains(strings.ToLower(combined), "目录") ||
strings.Contains(strings.ToLower(combined), "文件")
if !hasToolEvidence {
t.Errorf("P0-14: no evidence of tool invocation in response\nall messages:\n%s", env.Platform.AllText())
} else {
t.Logf("P0-14 OK: tool invocation detected (%d msgs, %d chars)", len(msgs), len(combined))
}
}
// ── P0-15: 长消息流式输出 ─────────────────────────────────────────────────────
// TestP0_15_LongResponse_ClaudeCode verifies that cc-connect correctly handles
// a long agent response without truncation or corruption. The agent must
// produce a substantive response (≥ 200 chars total).
func TestP0_15_LongResponse_ClaudeCode(t *testing.T) {
t.Parallel()
testLongResponse(t, "claudecode")
}
func testLongResponse(t *testing.T, agentType string) {
t.Helper()
env := helper.NewEnv(t, agentType)
msgs := env.SendComplete("Write a short paragraph (about 150 words) explaining what software testing is. Write in plain text.")
combined := helper.AnyText(msgs)
if len(strings.TrimSpace(combined)) < 200 {
t.Errorf("P0-15: response too short (%d chars); expected ≥ 200\nall messages:\n%s",
len(combined), env.Platform.AllText())
} else {
t.Logf("P0-15 OK: long response received (%d msgs, %d chars)", len(msgs), len(combined))
}
}