.gitignore added
[dotfiles/.git] / .config / coc / extensions / coc-go-data / tools / pkg / mod / honnef.co / go / tools@v0.1.1 / go / types / typeutil / ui_test.go
diff --git a/.config/coc/extensions/coc-go-data/tools/pkg/mod/honnef.co/go/tools@v0.1.1/go/types/typeutil/ui_test.go b/.config/coc/extensions/coc-go-data/tools/pkg/mod/honnef.co/go/tools@v0.1.1/go/types/typeutil/ui_test.go
new file mode 100644 (file)
index 0000000..eba4c7f
--- /dev/null
@@ -0,0 +1,61 @@
+package typeutil_test
+
+import (
+       "fmt"
+       "go/ast"
+       "go/parser"
+       "go/token"
+       "go/types"
+       "strings"
+       "testing"
+
+       "honnef.co/go/tools/go/types/typeutil"
+)
+
+func TestIntuitiveMethodSet(t *testing.T) {
+       const source = `
+package P
+type A int
+func (A) f()
+func (*A) g()
+`
+
+       fset := token.NewFileSet()
+       f, err := parser.ParseFile(fset, "hello.go", source, 0)
+       if err != nil {
+               t.Fatal(err)
+       }
+
+       var conf types.Config
+       pkg, err := conf.Check("P", fset, []*ast.File{f}, nil)
+       if err != nil {
+               t.Fatal(err)
+       }
+       qual := types.RelativeTo(pkg)
+
+       for _, test := range []struct {
+               expr string // type expression
+               want string // intuitive method set
+       }{
+               {"A", "(A).f (*A).g"},
+               {"*A", "(*A).f (*A).g"},
+               {"error", "(error).Error"},
+               {"*error", ""},
+               {"struct{A}", "(struct{A}).f (*struct{A}).g"},
+               {"*struct{A}", "(*struct{A}).f (*struct{A}).g"},
+       } {
+               tv, err := types.Eval(fset, pkg, 0, test.expr)
+               if err != nil {
+                       t.Errorf("Eval(%s) failed: %v", test.expr, err)
+               }
+               var names []string
+               for _, m := range typeutil.IntuitiveMethodSet(tv.Type, nil) {
+                       name := fmt.Sprintf("(%s).%s", types.TypeString(m.Recv(), qual), m.Obj().Name())
+                       names = append(names, name)
+               }
+               got := strings.Join(names, " ")
+               if got != test.want {
+                       t.Errorf("IntuitiveMethodSet(%s) = %q, want %q", test.expr, got, test.want)
+               }
+       }
+}