From 2d28432af7a5a441de115cf3ccf9a2af1cdc332c Mon Sep 17 00:00:00 2001 From: Ian Cottrell Date: Mon, 29 Apr 2019 20:58:12 -0400 Subject: [PATCH] internal/lsp: first pass at some hover tests This uses golden files to hold the hover text as they are no more fragile than hard coding the text in the tests, and much easier to update. We need a lot more tests, and ones with actual comments, but this is a start and at least adds the machienery it would take. Change-Id: Ia2f79257642759e4c2f972d4037f258134e0fb33 Reviewed-on: https://go-review.googlesource.com/c/tools/+/174380 Run-TryBot: Ian Cottrell TryBot-Result: Gobot Gobot Reviewed-by: Rebecca Stambler --- internal/lsp/lsp_test.go | 19 +++++++++++++++++++ .../testdata/godef/a/a.hover-14-6.golden.go | 1 + .../testdata/godef/a/a.hover-7-6.golden.go | 1 + .../testdata/godef/a/a.hover-9-6.golden.go | 1 + .../godef/a/random.hover-13-2.golden.go | 1 + .../godef/a/random.hover-16-15.golden.go | 1 + .../godef/a/random.hover-3-6.golden.go | 1 + .../godef/a/random.hover-8-14.golden.go | 1 + .../godef/a/random.hover-8-6.golden.go | 1 + .../testdata/godef/b/b.hover-11-6.golden.go | 1 + .../testdata/godef/b/b.hover-12-2.golden.go | 1 + .../testdata/godef/b/b.hover-13-2.golden.go | 1 + .../testdata/godef/b/b.hover-5-6.golden.go | 1 + .../testdata/godef/b/b.hover-6-2.golden.go | 1 + .../testdata/godef/b/b.hover-7-2.golden.go | 1 + .../broken/unclosedIf.hover-7-7.golden.go | 1 + 16 files changed, 34 insertions(+) create mode 100644 internal/lsp/testdata/godef/a/a.hover-14-6.golden.go create mode 100644 internal/lsp/testdata/godef/a/a.hover-7-6.golden.go create mode 100644 internal/lsp/testdata/godef/a/a.hover-9-6.golden.go create mode 100644 internal/lsp/testdata/godef/a/random.hover-13-2.golden.go create mode 100644 internal/lsp/testdata/godef/a/random.hover-16-15.golden.go create mode 100644 internal/lsp/testdata/godef/a/random.hover-3-6.golden.go create mode 100644 internal/lsp/testdata/godef/a/random.hover-8-14.golden.go create mode 100644 internal/lsp/testdata/godef/a/random.hover-8-6.golden.go create mode 100644 internal/lsp/testdata/godef/b/b.hover-11-6.golden.go create mode 100644 internal/lsp/testdata/godef/b/b.hover-12-2.golden.go create mode 100644 internal/lsp/testdata/godef/b/b.hover-13-2.golden.go create mode 100644 internal/lsp/testdata/godef/b/b.hover-5-6.golden.go create mode 100644 internal/lsp/testdata/godef/b/b.hover-6-2.golden.go create mode 100644 internal/lsp/testdata/godef/b/b.hover-7-2.golden.go create mode 100644 internal/lsp/testdata/godef/broken/unclosedIf.hover-7-7.golden.go 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