// 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 doc import ( "go/ast" "testing" ) var badSynopsis = []string{ "+build !release", "COPYRIGHT Jimmy Bob", "### Markdown heading", "-*- indent-tabs-mode: nil -*-", "vim:set ts=2 sw=2 et ai ft=go:", } func TestBadSynopsis(t *testing.T) { for _, s := range badSynopsis { if synopsis(s) != "" { t.Errorf(`synopsis(%q) did not return ""`, s) } } } const readme = ` $ go get github.com/user/repo/pkg1 [foo](http://gopkgdoc.appspot.com/pkg/github.com/user/repo/pkg2) [foo](http://go.pkgdoc.org/github.com/user/repo/pkg3) [foo](http://godoc.org/github.com/user/repo/pkg4) [foo](http://godoc.org/github.com/user/repo/pkg6#Export) http://gowalker.org/github.com/user/repo/pkg7 Build Status: [![Build Status](https://drone.io/github.com/user/repo1/status.png)](https://drone.io/github.com/user/repo1/latest) 'go get example.org/package1' will install package1. (http://go.pkgdoc.org/example.org/package2 "Package2's documentation on GoPkgDoc"). import "example.org/package3" ` var expectedReferences = []string{ "github.com/user/repo/pkg1", "github.com/user/repo/pkg2", "github.com/user/repo/pkg3", "github.com/user/repo/pkg4", "github.com/user/repo/pkg5", "github.com/user/repo/pkg6", "github.com/user/repo/pkg7", "github.com/user/repo1", "example.org/package1", "example.org/package2", "example.org/package3", } func TestReferences(t *testing.T) { references := make(map[string]bool) addReferences(references, []byte(readme)) for _, r := range expectedReferences { if !references[r] { t.Errorf("missing %s", r) } delete(references, r) } for r := range references { t.Errorf("extra %s", r) } } var simpleImporterTests = []struct { path string name string }{ // Last element with .suffix removed. {"example.com/user/name.git", "name"}, {"example.com/user/name.svn", "name"}, {"example.com/user/name.hg", "name"}, {"example.com/user/name.bzr", "name"}, {"example.com/name.v0", "name"}, {"example.com/user/repo/name.v11", "name"}, // Last element with "go" prefix or suffix removed. {"github.com/user/go-name", "name"}, {"github.com/user/go.name", "name"}, {"github.com/user/name.go", "name"}, {"github.com/user/name-go", "name"}, // Special cases for popular repos. {"code.google.com/p/biogo.name", "name"}, {"code.google.com/p/google-api-go-client/name/v3", "name"}, // Use last element of path. {"example.com/user/name.other", "name.other"}, {"example.com/.v0", ".v0"}, {"example.com/user/repo.v2/name", "name"}, {"github.com/user/namev0", "namev0"}, {"github.com/user/goname", "goname"}, {"github.com/user/namego", "namego"}, {"github.com/user/name", "name"}, {"name", "name"}, {"user/name", "name"}, } func TestSimpleImporter(t *testing.T) { for _, tt := range simpleImporterTests { m := make(map[string]*ast.Object) obj, _ := simpleImporter(m, tt.path) if obj.Name != tt.name { t.Errorf("simpleImporter(%q) = %q, want %q", tt.path, obj.Name, tt.name) } } }