blob: 655b4b36e164bdec7c5179796a3ac86089434222 [file] [log] [blame]
// 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)
}
}
}