// Copyright 2013 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 or at // https://developers.google.com/open-source/licenses/bsd. package database import ( "reflect" "sort" "testing" "github.com/golang/gddo/doc" ) var indexTests = []struct { pdoc *doc.Package terms []string }{ {&doc.Package{ ImportPath: "strconv", ProjectRoot: "", ProjectName: "Go", Name: "strconv", Synopsis: "Package strconv implements conversions to and from string representations of basic data types.", Doc: "Package strconv implements conversions to and from string representations\nof basic data types.", Imports: []string{"errors", "math", "unicode/utf8"}, Funcs: []*doc.Func{{}}, }, []string{ "bas", "convert", "dat", "import:errors", "import:math", "import:unicode/utf8", "project:go", "repres", "strconv", "string", "typ"}, }, {&doc.Package{ ImportPath: "github.com/user/repo/dir", ProjectRoot: "github.com/user/repo", ProjectName: "go-oauth", ProjectURL: "https://github.com/user/repo/", Name: "dir", Synopsis: "Package dir implements a subset of the OAuth client interface as defined in RFC 5849.", Doc: "Package oauth implements a subset of the OAuth client interface as defined in RFC 5849.\n\n" + "This package assumes that the application writes request URL paths to the\nnetwork using " + "the encoding implemented by the net/url URL RequestURI method.\n" + "The HTTP client in the standard net/http package uses this encoding.", IsCmd: false, Imports: []string{ "bytes", "crypto/hmac", "crypto/sha1", "encoding/base64", "encoding/binary", "errors", "fmt", "io", "io/ioutil", "net/http", "net/url", "regexp", "sort", "strconv", "strings", "sync", "time", }, TestImports: []string{"bytes", "net/url", "testing"}, Funcs: []*doc.Func{{}}, }, []string{ "all:", "5849", "cly", "defin", "dir", "github.com", "go", "import:bytes", "import:crypto/hmac", "import:crypto/sha1", "import:encoding/base64", "import:encoding/binary", "import:errors", "import:fmt", "import:io", "import:io/ioutil", "import:net/http", "import:net/url", "import:regexp", "import:sort", "import:strconv", "import:strings", "import:sync", "import:time", "interfac", "oau", "project:github.com/user/repo", "repo", "rfc", "subset", "us", }, }, } func TestDocTerms(t *testing.T) { for _, tt := range indexTests { score := documentScore(tt.pdoc) terms := documentTerms(tt.pdoc, score) sort.Strings(terms) sort.Strings(tt.terms) if !reflect.DeepEqual(terms, tt.terms) { t.Errorf("documentTerms(%s) ->\n got: %#v\nwant: %#v", tt.pdoc.ImportPath, terms, tt.terms) } } } var vendorPatTests = []struct { path string match bool }{ {"camlistore.org/third_party/github.com/user/repo", true}, {"camlistore.org/third_party/dir", false}, {"camlistore.org/third_party", false}, {"camlistore.org/xthird_party/github.com/user/repo", false}, {"camlistore.org/third_partyx/github.com/user/repo", false}, {"example.org/_third_party/github.com/user/repo/dir", true}, {"example.org/_third_party/dir", false}, {"github.com/user/repo/Godeps/_workspace/src/github.com/user/repo", true}, {"github.com/user/repo/Godeps/_workspace/src/dir", false}, {"github.com/user/repo", false}, } func TestVendorPat(t *testing.T) { for _, tt := range vendorPatTests { match := vendorPat.MatchString(tt.path) if match != tt.match { t.Errorf("match(%q) = %v, want %v", tt.path, match, match) } } } var synopsisTermTests = []struct { synopsis string terms []string }{ { "Package foo implements bar.", []string{"bar", "foo"}, }, { "Package foo provides bar.", []string{"bar", "foo"}, }, { "The foo package provides bar.", []string{"bar", "foo"}, }, { "Package foo contains an implementation of bar.", []string{"bar", "foo", "impl"}, }, { "Package foo is awesome", []string{"awesom", "foo"}, }, { "The foo package is awesome", []string{"awesom", "foo"}, }, { "The foo command is awesome", []string{"awesom", "foo"}, }, { "Command foo is awesome", []string{"awesom", "foo"}, }, { "The foo package", []string{"foo"}, }, { "Package foo", []string{"foo"}, }, { "Command foo", []string{"foo"}, }, { "Package", []string{}, }, { "Command", []string{}, }, } func TestSynopsisTerms(t *testing.T) { for _, tt := range synopsisTermTests { terms := make(map[string]bool) collectSynopsisTerms(terms, tt.synopsis) actual := termSlice(terms) expected := tt.terms sort.Strings(actual) sort.Strings(expected) if !reflect.DeepEqual(actual, expected) { t.Errorf("%q ->\n got: %#v\nwant: %#v", tt.synopsis, actual, expected) } } }