first commit
This commit is contained in:
@@ -0,0 +1,55 @@
|
||||
package memory
|
||||
|
||||
import "testing"
|
||||
|
||||
func TestBuildFtsQueryMultiWordOrJoin(t *testing.T) {
|
||||
got := buildFtsQuery("permission deadlock retry")
|
||||
want := `"permission" OR "deadlock" OR "retry"`
|
||||
if got != want {
|
||||
t.Fatalf("buildFtsQuery multi-word: got %q want %q", got, want)
|
||||
}
|
||||
}
|
||||
|
||||
func TestBuildFtsQuerySingleToken(t *testing.T) {
|
||||
if got := buildFtsQuery("checkpoint"); got != `"checkpoint"` {
|
||||
t.Fatalf("buildFtsQuery single: got %q", got)
|
||||
}
|
||||
}
|
||||
|
||||
func TestBuildFtsQueryCJKTokensKept(t *testing.T) {
|
||||
// CJK letters are \p{L} and must survive tokenization. Whitespace splits
|
||||
// them into separate tokens; punctuation is a separator.
|
||||
got := buildFtsQuery("配置文件 端口")
|
||||
want := `"配置文件" OR "端口"`
|
||||
if got != want {
|
||||
t.Fatalf("buildFtsQuery CJK: got %q want %q", got, want)
|
||||
}
|
||||
}
|
||||
|
||||
func TestBuildFtsQueryPunctuationStripped(t *testing.T) {
|
||||
// FTS5 special chars and punctuation become separators; underscores and
|
||||
// digits are word characters.
|
||||
got := buildFtsQuery(`port: 5433 (postgres-db) foo_bar`)
|
||||
want := `"port" OR "5433" OR "postgres" OR "db" OR "foo_bar"`
|
||||
if got != want {
|
||||
t.Fatalf("buildFtsQuery punctuation: got %q want %q", got, want)
|
||||
}
|
||||
}
|
||||
|
||||
func TestBuildFtsQueryStripsEmbeddedQuotes(t *testing.T) {
|
||||
// A token can only contain word chars, so a raw double-quote is a
|
||||
// separator; but guard the strip explicitly.
|
||||
got := buildFtsQuery(`say "hello"`)
|
||||
want := `"say" OR "hello"`
|
||||
if got != want {
|
||||
t.Fatalf("buildFtsQuery quotes: got %q want %q", got, want)
|
||||
}
|
||||
}
|
||||
|
||||
func TestBuildFtsQueryEmptyAndWhitespace(t *testing.T) {
|
||||
for _, in := range []string{"", " ", "\t\n", "!!! ??? ... ---", "()[]{}"} {
|
||||
if got := buildFtsQuery(in); got != "" {
|
||||
t.Fatalf("buildFtsQuery(%q): got %q want empty", in, got)
|
||||
}
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user