tests/search: check expected mode
The expected search mode is now checked.
This will allow us to expand tests/search/main.go to package search
tests.
Change-Id: I2e2bd8636794d2c75a9b642cc470c6234da7ea3a
Reviewed-on: https://go-review.googlesource.com/c/pkgsite/+/346533
Trust: Julie Qiu <julie@golang.org>
Run-TryBot: Julie Qiu <julie@golang.org>
Reviewed-by: Jonathan Amsterdam <jba@google.com>
Reviewed-by: Jamal Carvalho <jamal@golang.org>
diff --git a/internal/frontend/client.go b/internal/frontend/client.go
index 2012877..a71469d 100644
--- a/internal/frontend/client.go
+++ b/internal/frontend/client.go
@@ -56,7 +56,7 @@
// Search returns a SearchPage for a search query and mode.
func (c *Client) Search(q, mode string) (_ *SearchPage, err error) {
- defer derrors.Wrap(&err, "Search(%q)", q)
+ defer derrors.Wrap(&err, "Search(%q, %q)", q, mode)
u := fmt.Sprintf("%s/search?q=%s&content=json&m=%s", c.url, url.QueryEscape(q), mode)
body, err := c.fetchJSONPage(u)
if err != nil {
diff --git a/tests/search/main.go b/tests/search/main.go
index 8d8a450..881d6be 100755
--- a/tests/search/main.go
+++ b/tests/search/main.go
@@ -50,9 +50,12 @@
const (
importedbyFile = "tests/search/importedby.txt"
- testFile = "tests/search/scripts/symbolsearch.txt"
)
+var testFiles = []string{
+ "tests/search/scripts/symbolsearch.txt",
+}
+
var symbolSearchExperiments = []string{
internal.ExperimentSearchGrouping,
internal.ExperimentSymbolSearch,
@@ -74,9 +77,13 @@
}
func run(frontendHost string) error {
- tests, err := readSearchTests(testFile)
- if err != nil {
- return err
+ var tests []*searchTest
+ for _, testFile := range testFiles {
+ ts, err := readSearchTests(testFile)
+ if err != nil {
+ return err
+ }
+ tests = append(tests, ts...)
}
client := frontend.NewClient(frontendHost)
var failed bool
@@ -103,7 +110,7 @@
func runTest(client *frontend.Client, st *searchTest) (output []string, err error) {
defer derrors.Wrap(&err, "runTest(ctx, db, st.title: %q)", st.title)
- searchPage, err := client.Search(st.query, "symbol")
+ searchPage, err := client.Search(st.query, "")
if err != nil {
return nil, err
}
@@ -113,12 +120,12 @@
if len(gotResults) > i {
got = gotResults[i]
}
- if want.symbol != got.SymbolName || want.pkg != got.PackagePath {
+ if want.symbol != got.SymbolName || want.pkg != got.PackagePath || st.mode != searchPage.SearchMode {
output = append(output,
- fmt.Sprintf("query %s, mismatch result %d:\n\twant: %q %q\n\t got: %q %q\n",
+ fmt.Sprintf("query %s, mismatch result %d:\n\twant: %q %q [%q]\n\t got: %q %q [%q]\n",
st.query, i+1,
- want.pkg, want.symbol,
- got.PackagePath, got.SymbolName))
+ want.pkg, want.symbol, st.mode,
+ got.PackagePath, got.SymbolName, searchPage.SearchMode))
}
}
return output, nil
@@ -127,6 +134,7 @@
type searchTest struct {
title string
query string
+ mode string
results []*searchResult
}
@@ -191,7 +199,16 @@
// The last position was a title, so this must be the start
// of a new test set.
curr = posQuery
- test.query = line
+ parts := strings.Fields(line)
+ mode := strings.TrimSuffix(strings.TrimPrefix(parts[0], "["), "]")
+ if len(parts) <= 1 {
+ return nil, fmt.Errorf("invalid syntax on line %d: %q (not enough elements)", num, line)
+ }
+ if mode != "" && mode != "package" && mode != "symbol" {
+ return nil, fmt.Errorf("invalid syntax on line %d: %q (invalid mode: %q)", num, line, mode)
+ }
+ test.mode = mode
+ test.query = strings.Join(parts[1:], " ")
case posQuery, posResult:
// The last position was a query or a result, so this must be
// an expected search result.
diff --git a/tests/search/scripts/symbolsearch.txt b/tests/search/scripts/symbolsearch.txt
index 8467a3e..5de7c23 100644
--- a/tests/search/scripts/symbolsearch.txt
+++ b/tests/search/scripts/symbolsearch.txt
@@ -5,20 +5,20 @@
# This file contains test scripts for symbol search.
Same symbol appears multiple times in one package.
-Foo
+[symbol] symbol:Foo
Foo gopkg.in/foo.v1
FOO github.com/julieqiu/api-demo
FoO github.com/julieqiu/api-demo
Foo github.com/julieqiu/api-demo
Prefer symbols by popularity, then alphabetically, Add
-Add
+[symbol] symbol:Add
Add math/bits
Prefer symbols by package path, then symbol name
# TODO: derank fields and methods; log.Logger.Writer should not
# appear in this list.
-Writer
+[symbol] symbol:Writer
Writer archive/tar
Writer archive/zip
Writer bufio
@@ -30,39 +30,39 @@
Writer log
Search for package path element and symbol.
-math Add
+[symbol] symbol:math Add
Add math/bits
Search for package path element with slash and symbol.
-math/big Float
+[symbol] symbol:math/big Float
Float math/big
Search for <package path>.<symbol>.
-math/big.Float
+[symbol] symbol:math/big.Float
Float math/big
Search for <package name>.<symbol>.
-big.Float
+[symbol] symbol:big.Float
Float math/big
Multi-word search without subpaths
-julieqiu foo
+[symbol] symbol:julieqiu foo
FOO github.com/julieqiu/api-demo
FoO github.com/julieqiu/api-demo
Foo github.com/julieqiu/api-demo
Multi-word search with subpaths
-github.com/julieqiu foo
+[symbol] symbol:github.com/julieqiu foo
FOO github.com/julieqiu/api-demo
FoO github.com/julieqiu/api-demo
Foo github.com/julieqiu/api-demo
Multi-word search with hostname
-github.com foo
+[symbol] symbol:github.com foo
FOO github.com/julieqiu/api-demo
FoO github.com/julieqiu/api-demo
Foo github.com/julieqiu/api-demo
Multi-word three word search
-bee cmd command
+[symbol] symbol:bee cmd command
Command github.com/beego/bee/cmd/commands