mirror of
https://github.com/golang/go
synced 2024-11-07 15:36:23 -07:00
go/doc: do not treat methods as test functions
The example code was treating a method starting with Test as a test function when considering whether to produce a whole-file example or not. As a method can never be a test function, this isn't correct. Change-Id: Idd8ec9eaf0904af076e941d7fe7d967f6b7eef78 Reviewed-on: https://go-review.googlesource.com/125257 Reviewed-by: Daniel Martí <mvdan@mvdan.cc> Reviewed-by: Brad Fitzpatrick <bradfitz@golang.org> Reviewed-by: Andrew Bonventre <andybons@golang.org> Run-TryBot: Daniel Martí <mvdan@mvdan.cc> TryBot-Result: Gobot Gobot <gobot@golang.org>
This commit is contained in:
parent
5332b5e75a
commit
1a5350e123
@ -56,7 +56,7 @@ func Examples(files ...*ast.File) []*Example {
|
|||||||
continue
|
continue
|
||||||
}
|
}
|
||||||
f, ok := decl.(*ast.FuncDecl)
|
f, ok := decl.(*ast.FuncDecl)
|
||||||
if !ok {
|
if !ok || f.Recv != nil {
|
||||||
continue
|
continue
|
||||||
}
|
}
|
||||||
numDecl++
|
numDecl++
|
||||||
|
@ -6,6 +6,7 @@ package doc_test
|
|||||||
|
|
||||||
import (
|
import (
|
||||||
"bytes"
|
"bytes"
|
||||||
|
"go/ast"
|
||||||
"go/doc"
|
"go/doc"
|
||||||
"go/format"
|
"go/format"
|
||||||
"go/parser"
|
"go/parser"
|
||||||
@ -280,16 +281,7 @@ func TestExamples(t *testing.T) {
|
|||||||
t.Errorf("got Name == %q, want %q", e.Name, c.Name)
|
t.Errorf("got Name == %q, want %q", e.Name, c.Name)
|
||||||
}
|
}
|
||||||
if w := c.Play; w != "" {
|
if w := c.Play; w != "" {
|
||||||
var g string // hah
|
g := formatFile(t, fset, e.Play)
|
||||||
if e.Play == nil {
|
|
||||||
g = "<nil>"
|
|
||||||
} else {
|
|
||||||
var buf bytes.Buffer
|
|
||||||
if err := format.Node(&buf, fset, e.Play); err != nil {
|
|
||||||
t.Fatal(err)
|
|
||||||
}
|
|
||||||
g = buf.String()
|
|
||||||
}
|
|
||||||
if g != w {
|
if g != w {
|
||||||
t.Errorf("%s: got Play == %q, want %q", c.Name, g, w)
|
t.Errorf("%s: got Play == %q, want %q", c.Name, g, w)
|
||||||
}
|
}
|
||||||
@ -299,3 +291,73 @@ func TestExamples(t *testing.T) {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
const exampleWholeFile = `package foo_test
|
||||||
|
|
||||||
|
type X int
|
||||||
|
|
||||||
|
func (X) Foo() {
|
||||||
|
}
|
||||||
|
|
||||||
|
func (X) TestBlah() {
|
||||||
|
}
|
||||||
|
|
||||||
|
func (X) BenchmarkFoo() {
|
||||||
|
}
|
||||||
|
|
||||||
|
func Example() {
|
||||||
|
fmt.Println("Hello, world!")
|
||||||
|
// Output: Hello, world!
|
||||||
|
}
|
||||||
|
`
|
||||||
|
|
||||||
|
const exampleWholeFileOutput = `package main
|
||||||
|
|
||||||
|
type X int
|
||||||
|
|
||||||
|
func (X) Foo() {
|
||||||
|
}
|
||||||
|
|
||||||
|
func (X) TestBlah() {
|
||||||
|
}
|
||||||
|
|
||||||
|
func (X) BenchmarkFoo() {
|
||||||
|
}
|
||||||
|
|
||||||
|
func main() {
|
||||||
|
fmt.Println("Hello, world!")
|
||||||
|
}
|
||||||
|
`
|
||||||
|
|
||||||
|
func TestExamplesWholeFile(t *testing.T) {
|
||||||
|
fset := token.NewFileSet()
|
||||||
|
file, err := parser.ParseFile(fset, "test.go", strings.NewReader(exampleWholeFile), parser.ParseComments)
|
||||||
|
if err != nil {
|
||||||
|
t.Fatal(err)
|
||||||
|
}
|
||||||
|
es := doc.Examples(file)
|
||||||
|
if len(es) != 1 {
|
||||||
|
t.Fatalf("wrong number of examples; got %d want 1", len(es))
|
||||||
|
}
|
||||||
|
e := es[0]
|
||||||
|
if e.Name != "" {
|
||||||
|
t.Errorf("got Name == %q, want %q", e.Name, "")
|
||||||
|
}
|
||||||
|
if g, w := formatFile(t, fset, e.Play), exampleWholeFileOutput; g != w {
|
||||||
|
t.Errorf("got Play == %q, want %q", g, w)
|
||||||
|
}
|
||||||
|
if g, w := e.Output, "Hello, world!\n"; g != w {
|
||||||
|
t.Errorf("got Output == %q, want %q", g, w)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
func formatFile(t *testing.T, fset *token.FileSet, n *ast.File) string {
|
||||||
|
if n == nil {
|
||||||
|
return "<nil>"
|
||||||
|
}
|
||||||
|
var buf bytes.Buffer
|
||||||
|
if err := format.Node(&buf, fset, n); err != nil {
|
||||||
|
t.Fatal(err)
|
||||||
|
}
|
||||||
|
return buf.String()
|
||||||
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user