blob: 0addd971ba3e5dd7f37cdb92011fcf4b10b0c582 [file] [log] [blame]
// Copyright 2021 The Go Authors. All rights reserved.
// Use of this source code is governed by a BSD-style
// license that can be found in the LICENSE file.
package symbolsearch
import (
"testing"
"github.com/google/go-cmp/cmp"
)
func TestProcessArg(t *testing.T) {
for _, test := range []struct {
arg, want string
}{
{"$1", "replace($1, '_', '-')"},
{"to_tsquery('symbols', $3)", "to_tsquery('symbols', replace($3, '_', '-'))"},
{"foo($10)", "foo(replace($10, '_', '-'))"},
} {
got := processArg(test.arg)
if diff := cmp.Diff(test.want, got); diff != "" {
t.Errorf("mismatch (-want, +got):\n%s", diff)
}
}
}
func TestParseInputType(t *testing.T) {
for _, test := range []struct {
name, q string
want InputType
}{
{"no dot symbol name", "DB", InputTypeNoDot},
{"one dot symbol name", "DB.Begin", InputTypeOneDot},
{"one dot package dot symbol name", "sql.DB", InputTypeOneDot},
{"two dots package name dot symbol name", "sql.DB.Begin", InputTypeTwoDots},
{"two dots stdlib package path dot symbol name", "database/sql.DB.Begin", InputTypeTwoDots},
{"multiword two words", "foo bar", InputTypeMultiWord},
{"multiword three words", "foo bar baz", InputTypeMultiWord},
{"two dots package path dot symbol name not supported", "github.com/foo/bar.DB", InputTypeNoMatch},
{"three dots package path dot symbol name not supported", "github.com/foo/bar.DB.Begin", InputTypeNoMatch},
} {
t.Run(test.name, func(t *testing.T) {
got := ParseInputType(test.q)
if got != test.want {
t.Errorf("ParseInputType(%q) = %q; want = %q", test.q, got, test.want)
}
})
}
}
// TestGenerateQuery ensure that go generate was run and the generated queries
// are up to date with the raw queries.
func TestGenerateQuery(t *testing.T) {
for _, test := range []struct {
name, q, want string
}{
{"querySearchSymbol", Query(SearchTypeSymbol), querySearchSymbol},
{"querySearchPackageDotSymbol", Query(SearchTypePackageDotSymbol), querySearchPackageDotSymbol},
{"querySearchMultiWordExact", Query(SearchTypeMultiWordExact), querySearchMultiWordExact},
{"querySearchMultiWordOr", Query(SearchTypeMultiWordOr), querySearchMultiWordOr},
{"queryMatchingSymbolIDsSymbol", MatchingSymbolIDsQuery(SearchTypeSymbol), queryMatchingSymbolIDsSymbol},
{"queryMatchingSymbolIDsPackageDotSymbol", MatchingSymbolIDsQuery(SearchTypePackageDotSymbol), queryMatchingSymbolIDsPackageDotSymbol},
{"queryMatchingSymbolIDsMultiWordExact", MatchingSymbolIDsQuery(SearchTypeMultiWordExact), queryMatchingSymbolIDsMultiWordExact},
{"queryMatchingSymbolIDsMultiWordOr", MatchingSymbolIDsQuery(SearchTypeMultiWordOr), queryMatchingSymbolIDsMultiWordOr},
} {
t.Run(test.name, func(t *testing.T) {
if diff := cmp.Diff(test.want, test.q); diff != "" {
t.Errorf("mismatch (-want, +got):\n%s", diff)
}
})
}
}