56 lines
1.7 KiB
Go
56 lines
1.7 KiB
Go
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)
|
|
}
|
|
}
|
|
}
|