diff --git a/internal/lsp/lsp_test.go b/internal/lsp/lsp_test.go index 9fcf9fdf..f51dcb00 100644 --- a/internal/lsp/lsp_test.go +++ b/internal/lsp/lsp_test.go @@ -9,6 +9,7 @@ import ( "context" "fmt" "go/token" + "io/ioutil" "os" "os/exec" "sort" @@ -340,10 +341,15 @@ func (r *runner) Definition(t *testing.T, data tests.Definitions) { Position: loc.Range.Start, } var locs []protocol.Location + var hover *protocol.Hover if d.IsType { locs, err = r.server.TypeDefinition(context.Background(), params) } else { locs, err = r.server.Definition(context.Background(), params) + if err != nil { + t.Fatalf("failed for %v: %v", d.Src, err) + } + hover, err = r.server.Hover(context.Background(), params) } if err != nil { t.Fatalf("failed for %v: %v", d.Src, err) @@ -358,6 +364,19 @@ func (r *runner) Definition(t *testing.T, data tests.Definitions) { } else if def != d.Def { t.Errorf("for %v got %v want %v", d.Src, def, d.Def) } + if hover != nil { + tag := fmt.Sprintf("hover-%d-%d", d.Def.Start().Line(), d.Def.Start().Column()) + filename, err := d.Def.URI().Filename() + if err != nil { + t.Fatalf("failed for %v: %v", d.Def, err) + } + expectHover := string(r.data.Golden(tag, filename, func(golden string) error { + return ioutil.WriteFile(golden, []byte(hover.Contents.Value), 0666) + })) + if hover.Contents.Value != expectHover { + t.Errorf("for %v got %q want %q", d.Src, hover.Contents.Value, expectHover) + } + } } } diff --git a/internal/lsp/testdata/godef/a/a.hover-14-6.golden.go b/internal/lsp/testdata/godef/a/a.hover-14-6.golden.go new file mode 100644 index 00000000..b2551e2c --- /dev/null +++ b/internal/lsp/testdata/godef/a/a.hover-14-6.golden.go @@ -0,0 +1 @@ +var err error \ No newline at end of file diff --git a/internal/lsp/testdata/godef/a/a.hover-7-6.golden.go b/internal/lsp/testdata/godef/a/a.hover-7-6.golden.go new file mode 100644 index 00000000..41c681ed --- /dev/null +++ b/internal/lsp/testdata/godef/a/a.hover-7-6.golden.go @@ -0,0 +1 @@ +type a.A string \ No newline at end of file diff --git a/internal/lsp/testdata/godef/a/a.hover-9-6.golden.go b/internal/lsp/testdata/godef/a/a.hover-9-6.golden.go new file mode 100644 index 00000000..16285acb --- /dev/null +++ b/internal/lsp/testdata/godef/a/a.hover-9-6.golden.go @@ -0,0 +1 @@ +func a.Stuff() \ No newline at end of file diff --git a/internal/lsp/testdata/godef/a/random.hover-13-2.golden.go b/internal/lsp/testdata/godef/a/random.hover-13-2.golden.go new file mode 100644 index 00000000..08a5f3c9 --- /dev/null +++ b/internal/lsp/testdata/godef/a/random.hover-13-2.golden.go @@ -0,0 +1 @@ +field x int \ No newline at end of file diff --git a/internal/lsp/testdata/godef/a/random.hover-16-15.golden.go b/internal/lsp/testdata/godef/a/random.hover-16-15.golden.go new file mode 100644 index 00000000..861a9a9b --- /dev/null +++ b/internal/lsp/testdata/godef/a/random.hover-16-15.golden.go @@ -0,0 +1 @@ +func (*Pos).Sum() int \ No newline at end of file diff --git a/internal/lsp/testdata/godef/a/random.hover-3-6.golden.go b/internal/lsp/testdata/godef/a/random.hover-3-6.golden.go new file mode 100644 index 00000000..8daadc78 --- /dev/null +++ b/internal/lsp/testdata/godef/a/random.hover-3-6.golden.go @@ -0,0 +1 @@ +func Random() int \ No newline at end of file diff --git a/internal/lsp/testdata/godef/a/random.hover-8-14.golden.go b/internal/lsp/testdata/godef/a/random.hover-8-14.golden.go new file mode 100644 index 00000000..a1dcda28 --- /dev/null +++ b/internal/lsp/testdata/godef/a/random.hover-8-14.golden.go @@ -0,0 +1 @@ +var y int \ No newline at end of file diff --git a/internal/lsp/testdata/godef/a/random.hover-8-6.golden.go b/internal/lsp/testdata/godef/a/random.hover-8-6.golden.go new file mode 100644 index 00000000..f97ad9d6 --- /dev/null +++ b/internal/lsp/testdata/godef/a/random.hover-8-6.golden.go @@ -0,0 +1 @@ +func Random2(y int) int \ No newline at end of file diff --git a/internal/lsp/testdata/godef/b/b.hover-11-6.golden.go b/internal/lsp/testdata/godef/b/b.hover-11-6.golden.go new file mode 100644 index 00000000..63622cd0 --- /dev/null +++ b/internal/lsp/testdata/godef/b/b.hover-11-6.golden.go @@ -0,0 +1 @@ +type S2 struct{F1 string; F2 int; *a.A} \ No newline at end of file diff --git a/internal/lsp/testdata/godef/b/b.hover-12-2.golden.go b/internal/lsp/testdata/godef/b/b.hover-12-2.golden.go new file mode 100644 index 00000000..718de00a --- /dev/null +++ b/internal/lsp/testdata/godef/b/b.hover-12-2.golden.go @@ -0,0 +1 @@ +field F1 string \ No newline at end of file diff --git a/internal/lsp/testdata/godef/b/b.hover-13-2.golden.go b/internal/lsp/testdata/godef/b/b.hover-13-2.golden.go new file mode 100644 index 00000000..e66621c4 --- /dev/null +++ b/internal/lsp/testdata/godef/b/b.hover-13-2.golden.go @@ -0,0 +1 @@ +field F2 int \ No newline at end of file diff --git a/internal/lsp/testdata/godef/b/b.hover-5-6.golden.go b/internal/lsp/testdata/godef/b/b.hover-5-6.golden.go new file mode 100644 index 00000000..12dd895f --- /dev/null +++ b/internal/lsp/testdata/godef/b/b.hover-5-6.golden.go @@ -0,0 +1 @@ +type S1 struct{F1 int; S2; a.A} \ No newline at end of file diff --git a/internal/lsp/testdata/godef/b/b.hover-6-2.golden.go b/internal/lsp/testdata/godef/b/b.hover-6-2.golden.go new file mode 100644 index 00000000..709c455d --- /dev/null +++ b/internal/lsp/testdata/godef/b/b.hover-6-2.golden.go @@ -0,0 +1 @@ +field F1 int \ No newline at end of file diff --git a/internal/lsp/testdata/godef/b/b.hover-7-2.golden.go b/internal/lsp/testdata/godef/b/b.hover-7-2.golden.go new file mode 100644 index 00000000..fa14bfa3 --- /dev/null +++ b/internal/lsp/testdata/godef/b/b.hover-7-2.golden.go @@ -0,0 +1 @@ +field S2 S2 \ No newline at end of file diff --git a/internal/lsp/testdata/godef/broken/unclosedIf.hover-7-7.golden.go b/internal/lsp/testdata/godef/broken/unclosedIf.hover-7-7.golden.go new file mode 100644 index 00000000..857d09d1 --- /dev/null +++ b/internal/lsp/testdata/godef/broken/unclosedIf.hover-7-7.golden.go @@ -0,0 +1 @@ +var myUnclosedIf string \ No newline at end of file