package qso import "testing" // The search box is the one place an operator types a callsign fragment, and // the three shapes below are what they expect from every other logger. A plain // word is a PREFIX: it used to be an unconditional contains-match, so asking // for "calls starting with 4S" was impossible. func TestQuickCallsignLike(t *testing.T) { for _, tc := range []struct{ in, want, why string }{ {"4S", "4S%", "plain text is a prefix"}, {"*4S", "%4S", "a leading star means ends-with"}, {"*4S*", "%4S%", "stars both ends mean contains"}, {"4S*", "4S%", "a trailing star is the same prefix, written out"}, {"4S?", "4S_", "? is exactly one character"}, {"*", "%", "a lone star matches everything"}, {" 4S ", "4S%", "surrounding space is not part of the call"}, // Escaping: a LIKE metacharacter the operator typed is a literal. {"A_B", "A!_B%", "_ typed by hand is a literal underscore"}, {"50%", "50!%%", "% typed by hand is a literal percent"}, {"A!B", "A!!B%", "the escape character escapes itself"}, {"*A_B*", "%A!_B%", "escaping still applies inside a wildcard pattern"}, } { if got := quickCallsignLike(tc.in); got != tc.want { t.Errorf("quickCallsignLike(%q) = %q, want %q — %s", tc.in, got, tc.want, tc.why) } } }