mirror of
https://github.com/YspCoder/clawgo.git
synced 2026-04-13 04:27:28 +08:00
103 lines
3.0 KiB
Go
103 lines
3.0 KiB
Go
package tools
|
|
|
|
import (
|
|
"context"
|
|
"os"
|
|
"path/filepath"
|
|
"strings"
|
|
"testing"
|
|
)
|
|
|
|
func TestMemorySearchToolClampsMaxResults(t *testing.T) {
|
|
workspace := t.TempDir()
|
|
memDir := filepath.Join(workspace, "memory")
|
|
if err := os.MkdirAll(memDir, 0755); err != nil {
|
|
t.Fatalf("mkdir failed: %v", err)
|
|
}
|
|
content := "# Long-term Memory\n\nalpha one\n\nalpha two\n"
|
|
if err := os.WriteFile(filepath.Join(memDir, "MEMORY.md"), []byte(content), 0644); err != nil {
|
|
t.Fatalf("write failed: %v", err)
|
|
}
|
|
|
|
tool := NewMemorySearchTool(workspace)
|
|
out, err := tool.Execute(context.Background(), map[string]interface{}{
|
|
"query": "alpha",
|
|
"maxResults": -5,
|
|
})
|
|
if err != nil {
|
|
t.Fatalf("unexpected error: %v", err)
|
|
}
|
|
if !strings.Contains(out, "Found 1 memories") {
|
|
t.Fatalf("expected clamped result count, got: %s", out)
|
|
}
|
|
}
|
|
|
|
func TestMemorySearchToolScannerHandlesLargeLine(t *testing.T) {
|
|
workspace := t.TempDir()
|
|
memDir := filepath.Join(workspace, "memory")
|
|
if err := os.MkdirAll(memDir, 0755); err != nil {
|
|
t.Fatalf("mkdir failed: %v", err)
|
|
}
|
|
large := strings.Repeat("x", 80*1024) + " needle"
|
|
if err := os.WriteFile(filepath.Join(memDir, "MEMORY.md"), []byte(large), 0644); err != nil {
|
|
t.Fatalf("write failed: %v", err)
|
|
}
|
|
|
|
tool := NewMemorySearchTool(workspace)
|
|
out, err := tool.Execute(context.Background(), map[string]interface{}{
|
|
"query": "needle",
|
|
})
|
|
if err != nil {
|
|
t.Fatalf("unexpected error: %v", err)
|
|
}
|
|
if !strings.Contains(out, "needle") {
|
|
t.Fatalf("expected search hit in large line, got: %s", out)
|
|
}
|
|
}
|
|
|
|
func TestMemorySearchToolPrefersCanonicalMemoryPath(t *testing.T) {
|
|
workspace := t.TempDir()
|
|
memDir := filepath.Join(workspace, "memory")
|
|
if err := os.MkdirAll(memDir, 0755); err != nil {
|
|
t.Fatalf("mkdir failed: %v", err)
|
|
}
|
|
if err := os.WriteFile(filepath.Join(memDir, "MEMORY.md"), []byte("canonical"), 0644); err != nil {
|
|
t.Fatalf("write canonical failed: %v", err)
|
|
}
|
|
if err := os.WriteFile(filepath.Join(workspace, "MEMORY.md"), []byte("legacy"), 0644); err != nil {
|
|
t.Fatalf("write legacy failed: %v", err)
|
|
}
|
|
|
|
tool := NewMemorySearchTool(workspace)
|
|
files := tool.getMemoryFiles()
|
|
for _, file := range files {
|
|
if file == filepath.Join(workspace, "MEMORY.md") {
|
|
t.Fatalf("legacy path should be ignored when canonical exists: %v", files)
|
|
}
|
|
}
|
|
}
|
|
|
|
func TestMemorySearchToolReportsFileScanWarnings(t *testing.T) {
|
|
workspace := t.TempDir()
|
|
memDir := filepath.Join(workspace, "memory")
|
|
if err := os.MkdirAll(memDir, 0755); err != nil {
|
|
t.Fatalf("mkdir failed: %v", err)
|
|
}
|
|
|
|
tooLargeLine := strings.Repeat("x", 2*1024*1024) + "\n"
|
|
if err := os.WriteFile(filepath.Join(memDir, "bad.md"), []byte(tooLargeLine), 0644); err != nil {
|
|
t.Fatalf("write bad file failed: %v", err)
|
|
}
|
|
|
|
tool := NewMemorySearchTool(workspace)
|
|
out, err := tool.Execute(context.Background(), map[string]interface{}{
|
|
"query": "needle",
|
|
})
|
|
if err != nil {
|
|
t.Fatalf("unexpected error: %v", err)
|
|
}
|
|
if !strings.Contains(out, "Warning: memory_search skipped") {
|
|
t.Fatalf("expected warning suffix when scan errors happen, got: %s", out)
|
|
}
|
|
}
|