blob: 2e6a2a34ceaa23b1d87f66114f16af4c78b873f2 [file] [log] [blame]
// Copyright 2020 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.
package render
import (
"go/parser"
"go/token"
"testing"
)
func TestShortOneLineNode(t *testing.T) {
src := `
package insane
func (p *private) Method1() string { return "" }
func Foo(ctx Context, s struct {
Fizz struct {
Field int
}
Buzz interface {
Method() int
}
}) (_ private) {
return
}
func (s *Struct2) Method() {}
func NewStruct2() *Struct2 {
return nil
}
func NArgs(a, b string) (a, b string) { return }
type t struct{}`
want := []struct {
result string
err bool
}{
{result: `(p) Method1()`},
{result: `Foo(ctx, s)`},
{result: `(s) Method()`},
{result: `NewStruct2()`},
{result: `NArgs(a, b)`},
{err: true},
}
// Parse src but stop after processing the imports.
fset := token.NewFileSet() // positions are relative to fset
f, err := parser.ParseFile(fset, "", src, parser.ParseComments)
if err != nil {
t.Fatal(err)
}
renderer := &Renderer{fset: fset}
for i, d := range f.Decls {
got, err := renderer.ShortSynopsis(d)
if err != nil && !want[i].err {
t.Errorf("test %d, ShortSynopsis(): got unexpected error: %v", i, err)
}
if err == nil && want[i].err {
t.Errorf("test %d, ShortSynopsis(): got nil error, want non-nil error", i)
}
if got != want[i].result {
t.Errorf("test %d, ShortSynopsis():\ngot %s\nwant %s", i, got, want[i].result)
}
}
}