65 lines
2.0 KiB
Go
65 lines
2.0 KiB
Go
package helpers
|
|
|
|
import (
|
|
"errors"
|
|
"os"
|
|
"path/filepath"
|
|
"strings"
|
|
"testing"
|
|
)
|
|
|
|
func TestCrossPlatformCoverageKnowledgeLoadAndAugmentRemainingCoverage(t *testing.T) {
|
|
if _, err := loadKnowledgeBase(filepath.Join(t.TempDir(), "missing")); err == nil {
|
|
t.Fatal("missing knowledge directory returned nil")
|
|
}
|
|
dir := t.TempDir()
|
|
if err := os.Mkdir(filepath.Join(dir, ".hidden"), 0o700); err != nil {
|
|
t.Fatal(err)
|
|
}
|
|
if err := os.WriteFile(filepath.Join(dir, ".hidden", "secret.md"), []byte("hidden"), 0o600); err != nil {
|
|
t.Fatal(err)
|
|
}
|
|
if err := os.WriteFile(filepath.Join(dir, "visible.md"), []byte("# First\nbody\n# Second\n"+strings.Repeat("x", knowledgeMaxChunkRunes)), 0o600); err != nil {
|
|
t.Fatal(err)
|
|
}
|
|
large := filepath.Join(dir, "large.txt")
|
|
f, err := os.Create(large)
|
|
if err != nil {
|
|
t.Fatal(err)
|
|
}
|
|
if err := f.Truncate(knowledgeMaxFileBytes + 1); err != nil {
|
|
t.Fatal(err)
|
|
}
|
|
if err := f.Close(); err != nil {
|
|
t.Fatal(err)
|
|
}
|
|
kb, err := loadKnowledgeBase(dir)
|
|
if err != nil || len(kb.chunks) < 2 {
|
|
t.Fatalf("load chunks=%d err=%v", len(kb.chunks), err)
|
|
}
|
|
|
|
origRead := knowledgeReadFile
|
|
knowledgeReadFile = func(string) ([]byte, error) { return nil, errors.New("read failed") }
|
|
if _, err := loadKnowledgeBase(dir); err == nil || !strings.Contains(err.Error(), "read failed") {
|
|
t.Fatalf("read failure err=%v", err)
|
|
}
|
|
knowledgeReadFile = origRead
|
|
t.Cleanup(func() { knowledgeReadFile = origRead })
|
|
|
|
if got := kb.augment("!"); got != "!" {
|
|
t.Fatalf("term-free question=%q", got)
|
|
}
|
|
|
|
long := strings.Repeat("alpha beta ", 150)
|
|
ranked := &knowledgeBase{chunks: []knowledgeChunk{
|
|
{source: "one", text: long, terms: map[string]int{"alpha": 1, "beta": 1}},
|
|
{source: "two", text: long, terms: map[string]int{"alpha": 3}},
|
|
{source: "three", text: long, terms: map[string]int{"alpha": 2}},
|
|
{source: "four", text: long, terms: map[string]int{"alpha": 1}},
|
|
}}
|
|
got := ranked.augment("alpha beta")
|
|
if !strings.Contains(got, "用户问题:alpha beta") {
|
|
t.Fatalf("augmented prompt missing question: %q", got)
|
|
}
|
|
}
|