Giant blob of minor changes
[dotfiles/.git] / .config / coc / extensions / coc-go-data / tools / pkg / mod / honnef.co / go / tools@v0.0.1-2020.1.5 / lint / lint_test.go
diff --git a/.config/coc/extensions/coc-go-data/tools/pkg/mod/honnef.co/go/tools@v0.0.1-2020.1.5/lint/lint_test.go b/.config/coc/extensions/coc-go-data/tools/pkg/mod/honnef.co/go/tools@v0.0.1-2020.1.5/lint/lint_test.go
new file mode 100644 (file)
index 0000000..07e7623
--- /dev/null
@@ -0,0 +1,110 @@
+package lint
+
+import (
+       "go/token"
+       "log"
+       "os"
+       "path/filepath"
+       "runtime"
+       "strings"
+       "testing"
+
+       "golang.org/x/tools/go/packages"
+)
+
+func testdata() string {
+       testdata, err := filepath.Abs("testdata")
+       if err != nil {
+               log.Fatal(err)
+       }
+       return testdata
+}
+
+func lintPackage(t *testing.T, name string) []Problem {
+       l := Linter{}
+       cfg := &packages.Config{
+               Env: append(os.Environ(), "GOPATH="+testdata(), "GO111MODULE=off"),
+       }
+       ps, err := l.Lint(cfg, []string{name})
+       if err != nil {
+               t.Fatal(err)
+       }
+       return ps
+}
+
+func trimPosition(pos *token.Position) {
+       idx := strings.Index(pos.Filename, "/testdata/src/")
+       if idx >= 0 {
+               pos.Filename = pos.Filename[idx+len("/testdata/src/"):]
+       }
+}
+
+func TestErrors(t *testing.T) {
+       t.Run("invalid package declaration", func(t *testing.T) {
+               ps := lintPackage(t, "broken_pkgerror")
+               if len(ps) != 1 {
+                       t.Fatalf("got %d problems, want 1", len(ps))
+               }
+               if want := "expected 'package', found pckage"; ps[0].Message != want {
+                       t.Errorf("got message %q, want %q", ps[0].Message, want)
+               }
+               if ps[0].Pos.Filename == "" {
+                       t.Errorf("didn't get useful position")
+               }
+       })
+
+       t.Run("type error", func(t *testing.T) {
+               if runtime.GOOS == "windows" {
+                       t.Skip("don't deal with Windows line endings or absolute file names")
+               }
+               ps := lintPackage(t, "broken_typeerror")
+               if len(ps) != 1 {
+                       t.Fatalf("got %d problems, want 1", len(ps))
+               }
+               trimPosition(&ps[0].Pos)
+               want := Problem{
+                       Pos: token.Position{
+                               Filename: "broken_typeerror/pkg.go",
+                               Offset:   42,
+                               Line:     5,
+                               Column:   10,
+                       },
+                       Message:  "cannot convert \"\" (untyped string constant) to int",
+                       Check:    "compile",
+                       Severity: 0,
+               }
+               if !ps[0].Equal(want) {
+                       t.Errorf("got %#v, want %#v", ps[0], want)
+               }
+       })
+
+       t.Run("missing dep", func(t *testing.T) {
+               t.Skip("Go 1.12 behaves incorrectly for missing packages")
+       })
+
+       t.Run("parse error", func(t *testing.T) {
+               if runtime.GOOS == "windows" {
+                       t.Skip("don't deal with Windows line endings or absolute file names")
+               }
+               ps := lintPackage(t, "broken_parse")
+               if len(ps) != 1 {
+                       t.Fatalf("got %d problems, want 1", len(ps))
+               }
+
+               trimPosition(&ps[0].Pos)
+               want := Problem{
+                       Pos: token.Position{
+                               Filename: "broken_parse/pkg.go",
+                               Offset:   13,
+                               Line:     3,
+                               Column:   1,
+                       },
+                       Message:  "expected declaration, found asd",
+                       Check:    "compile",
+                       Severity: 0,
+               }
+               if !ps[0].Equal(want) {
+                       t.Errorf("got %#v, want %#v", ps[0], want)
+               }
+       })
+}