| // 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) |
| } |
| } |
| } |