use a golden file for the expected test counts
This makes it much easier to keep them up to date.
It is also less fragile against accidental changes.
Change-Id: If119f8527c0896d210650859960e77f3e0fa5a99
Reviewed-on: https://go-review.googlesource.com/c/tools/+/197505
Run-TryBot: Ian Cottrell <iancottrell@google.com>
TryBot-Result: Gobot Gobot <gobot@golang.org>
Reviewed-by: Rebecca Stambler <rstambler@golang.org>
diff --git a/internal/lsp/testdata/summary.txt.golden b/internal/lsp/testdata/summary.txt.golden
new file mode 100644
index 0000000..2e92b1c
--- /dev/null
+++ b/internal/lsp/testdata/summary.txt.golden
@@ -0,0 +1,23 @@
+-- summary --
+CompletionsCount = 169
+CompletionSnippetCount = 36
+UnimportedCompletionsCount = 1
+DeepCompletionsCount = 5
+FuzzyCompletionsCount = 6
+RankedCompletionsCount = 1
+CaseSensitiveCompletionsCount = 4
+DiagnosticsCount = 21
+FoldingRangesCount = 2
+FormatCount = 6
+ImportCount = 2
+SuggestedFixCount = 1
+DefinitionsCount = 37
+TypeDefinitionsCount = 2
+HighlightsCount = 2
+ReferencesCount = 6
+RenamesCount = 20
+PrepareRenamesCount = 8
+SymbolsCount = 1
+SignaturesCount = 21
+LinksCount = 4
+
diff --git a/internal/lsp/tests/tests.go b/internal/lsp/tests/tests.go
index aa08245..c98ed6f 100644
--- a/internal/lsp/tests/tests.go
+++ b/internal/lsp/tests/tests.go
@@ -6,8 +6,10 @@
package tests
import (
+ "bytes"
"context"
"flag"
+ "fmt"
"go/ast"
"go/token"
"io/ioutil"
@@ -26,32 +28,6 @@
"golang.org/x/tools/internal/txtar"
)
-// We hardcode the expected number of test cases to ensure that all tests
-// are being executed. If a test is added, this number must be changed.
-const (
- ExpectedCompletionsCount = 169
- ExpectedCompletionSnippetCount = 36
- ExpectedUnimportedCompletionsCount = 1
- ExpectedDeepCompletionsCount = 5
- ExpectedFuzzyCompletionsCount = 6
- ExpectedCaseSensitiveCompletionsCount = 4
- ExpectedRankedCompletionsCount = 1
- ExpectedDiagnosticsCount = 21
- ExpectedFormatCount = 6
- ExpectedImportCount = 2
- ExpectedSuggestedFixCount = 1
- ExpectedDefinitionsCount = 39
- ExpectedTypeDefinitionsCount = 2
- ExpectedFoldingRangesCount = 2
- ExpectedHighlightsCount = 2
- ExpectedReferencesCount = 6
- ExpectedRenamesCount = 20
- ExpectedPrepareRenamesCount = 8
- ExpectedSymbolsCount = 1
- ExpectedSignaturesCount = 21
- ExpectedLinksCount = 4
-)
-
const (
overlayFileSuffix = ".overlay"
goldenFileSuffix = ".golden"
@@ -347,176 +323,105 @@
func Run(t *testing.T, tests Tests, data *Data) {
t.Helper()
+ checkData(t, data)
t.Run("Completion", func(t *testing.T) {
t.Helper()
- if len(data.Completions) != ExpectedCompletionsCount {
- t.Errorf("got %v completions expected %v", len(data.Completions), ExpectedCompletionsCount)
- }
tests.Completion(t, data.Completions, data.CompletionItems)
})
t.Run("CompletionSnippets", func(t *testing.T) {
t.Helper()
- if len(data.CompletionSnippets) != ExpectedCompletionSnippetCount {
- t.Errorf("got %v snippets expected %v", len(data.CompletionSnippets), ExpectedCompletionSnippetCount)
- }
- if len(data.CompletionSnippets) != ExpectedCompletionSnippetCount {
- t.Errorf("got %v snippets expected %v", len(data.CompletionSnippets), ExpectedCompletionSnippetCount)
- }
tests.CompletionSnippets(t, data.CompletionSnippets, data.CompletionItems)
})
t.Run("UnimportedCompletion", func(t *testing.T) {
t.Helper()
- if len(data.UnimportedCompletions) != ExpectedUnimportedCompletionsCount {
- t.Errorf("got %v unimported completions expected %v", len(data.UnimportedCompletions), ExpectedUnimportedCompletionsCount)
- }
tests.UnimportedCompletions(t, data.UnimportedCompletions, data.CompletionItems)
})
t.Run("DeepCompletion", func(t *testing.T) {
t.Helper()
- if len(data.DeepCompletions) != ExpectedDeepCompletionsCount {
- t.Errorf("got %v deep completions expected %v", len(data.DeepCompletions), ExpectedDeepCompletionsCount)
- }
tests.DeepCompletions(t, data.DeepCompletions, data.CompletionItems)
})
t.Run("FuzzyCompletion", func(t *testing.T) {
t.Helper()
- if len(data.FuzzyCompletions) != ExpectedFuzzyCompletionsCount {
- t.Errorf("got %v fuzzy completions expected %v", len(data.FuzzyCompletions), ExpectedFuzzyCompletionsCount)
- }
tests.FuzzyCompletions(t, data.FuzzyCompletions, data.CompletionItems)
})
t.Run("CaseSensitiveCompletion", func(t *testing.T) {
t.Helper()
- if len(data.CaseSensitiveCompletions) != ExpectedCaseSensitiveCompletionsCount {
- t.Errorf("got %v case sensitive completions expected %v", len(data.CaseSensitiveCompletions), ExpectedCaseSensitiveCompletionsCount)
- }
tests.CaseSensitiveCompletions(t, data.CaseSensitiveCompletions, data.CompletionItems)
})
t.Run("RankCompletions", func(t *testing.T) {
t.Helper()
- if len(data.RankCompletions) != ExpectedRankedCompletionsCount {
- t.Errorf("got %v fuzzy completions expected %v", len(data.RankCompletions), ExpectedRankedCompletionsCount)
- }
tests.RankCompletions(t, data.RankCompletions, data.CompletionItems)
})
t.Run("Diagnostics", func(t *testing.T) {
t.Helper()
- diagnosticsCount := 0
- for _, want := range data.Diagnostics {
- diagnosticsCount += len(want)
- }
- if diagnosticsCount != ExpectedDiagnosticsCount {
- t.Errorf("got %v diagnostics expected %v", diagnosticsCount, ExpectedDiagnosticsCount)
- }
tests.Diagnostics(t, data.Diagnostics)
})
t.Run("FoldingRange", func(t *testing.T) {
t.Helper()
- if len(data.FoldingRanges) != ExpectedFoldingRangesCount {
- t.Errorf("got %v folding ranges expected %v", len(data.FoldingRanges), ExpectedFoldingRangesCount)
- }
tests.FoldingRange(t, data.FoldingRanges)
})
t.Run("Format", func(t *testing.T) {
t.Helper()
- if len(data.Formats) != ExpectedFormatCount {
- t.Errorf("got %v formats expected %v", len(data.Formats), ExpectedFormatCount)
- }
tests.Format(t, data.Formats)
})
t.Run("Import", func(t *testing.T) {
t.Helper()
- if len(data.Imports) != ExpectedImportCount {
- t.Errorf("got %v imports expected %v", len(data.Imports), ExpectedImportCount)
- }
tests.Import(t, data.Imports)
})
t.Run("SuggestedFix", func(t *testing.T) {
t.Helper()
- if len(data.SuggestedFixes) != ExpectedSuggestedFixCount {
- t.Errorf("got %v suggested fixes expected %v", len(data.SuggestedFixes), ExpectedSuggestedFixCount)
- }
tests.SuggestedFix(t, data.SuggestedFixes)
})
t.Run("Definition", func(t *testing.T) {
t.Helper()
- if len(data.Definitions) != ExpectedDefinitionsCount {
- t.Errorf("got %v definitions expected %v", len(data.Definitions), ExpectedDefinitionsCount)
- }
tests.Definition(t, data.Definitions)
})
t.Run("Highlight", func(t *testing.T) {
t.Helper()
- if len(data.Highlights) != ExpectedHighlightsCount {
- t.Errorf("got %v highlights expected %v", len(data.Highlights), ExpectedHighlightsCount)
- }
tests.Highlight(t, data.Highlights)
})
t.Run("References", func(t *testing.T) {
t.Helper()
- if len(data.References) != ExpectedReferencesCount {
- t.Errorf("got %v references expected %v", len(data.References), ExpectedReferencesCount)
- }
tests.Reference(t, data.References)
})
t.Run("Renames", func(t *testing.T) {
t.Helper()
- if len(data.Renames) != ExpectedRenamesCount {
- t.Errorf("got %v renames expected %v", len(data.Renames), ExpectedRenamesCount)
- }
tests.Rename(t, data.Renames)
})
t.Run("PrepareRenames", func(t *testing.T) {
t.Helper()
- if len(data.PrepareRenames) != ExpectedPrepareRenamesCount {
- t.Errorf("got %v prepare renames expected %v", len(data.PrepareRenames), ExpectedPrepareRenamesCount)
- }
-
tests.PrepareRename(t, data.PrepareRenames)
})
t.Run("Symbols", func(t *testing.T) {
t.Helper()
- if len(data.Symbols) != ExpectedSymbolsCount {
- t.Errorf("got %v symbols expected %v", len(data.Symbols), ExpectedSymbolsCount)
- }
tests.Symbol(t, data.Symbols)
})
t.Run("SignatureHelp", func(t *testing.T) {
t.Helper()
- if len(data.Signatures) != ExpectedSignaturesCount {
- t.Errorf("got %v signatures expected %v", len(data.Signatures), ExpectedSignaturesCount)
- }
tests.SignatureHelp(t, data.Signatures)
})
t.Run("Link", func(t *testing.T) {
t.Helper()
- linksCount := 0
- for _, want := range data.Links {
- linksCount += len(want)
- }
- if linksCount != ExpectedLinksCount {
- t.Errorf("got %v links expected %v", linksCount, ExpectedLinksCount)
- }
tests.Link(t, data.Links)
})
@@ -535,6 +440,57 @@
}
}
+func checkData(t *testing.T, data *Data) {
+ buf := &bytes.Buffer{}
+ diagnosticsCount := 0
+ for _, want := range data.Diagnostics {
+ diagnosticsCount += len(want)
+ }
+ linksCount := 0
+ for _, want := range data.Links {
+ linksCount += len(want)
+ }
+ definitionCount := 0
+ typeDefinitionCount := 0
+ for _, d := range data.Definitions {
+ if d.IsType {
+ typeDefinitionCount++
+ } else {
+ definitionCount++
+ }
+ }
+
+ fmt.Fprintf(buf, "CompletionsCount = %v\n", len(data.Completions))
+ fmt.Fprintf(buf, "CompletionSnippetCount = %v\n", len(data.CompletionSnippets))
+ fmt.Fprintf(buf, "UnimportedCompletionsCount = %v\n", len(data.UnimportedCompletions))
+ fmt.Fprintf(buf, "DeepCompletionsCount = %v\n", len(data.DeepCompletions))
+ fmt.Fprintf(buf, "FuzzyCompletionsCount = %v\n", len(data.FuzzyCompletions))
+ fmt.Fprintf(buf, "RankedCompletionsCount = %v\n", len(data.RankCompletions))
+ fmt.Fprintf(buf, "CaseSensitiveCompletionsCount = %v\n", len(data.CaseSensitiveCompletions))
+ fmt.Fprintf(buf, "DiagnosticsCount = %v\n", diagnosticsCount)
+ fmt.Fprintf(buf, "FoldingRangesCount = %v\n", len(data.FoldingRanges))
+ fmt.Fprintf(buf, "FormatCount = %v\n", len(data.Formats))
+ fmt.Fprintf(buf, "ImportCount = %v\n", len(data.Imports))
+ fmt.Fprintf(buf, "SuggestedFixCount = %v\n", len(data.SuggestedFixes))
+ fmt.Fprintf(buf, "DefinitionsCount = %v\n", definitionCount)
+ fmt.Fprintf(buf, "TypeDefinitionsCount = %v\n", typeDefinitionCount)
+ fmt.Fprintf(buf, "HighlightsCount = %v\n", len(data.Highlights))
+ fmt.Fprintf(buf, "ReferencesCount = %v\n", len(data.References))
+ fmt.Fprintf(buf, "RenamesCount = %v\n", len(data.Renames))
+ fmt.Fprintf(buf, "PrepareRenamesCount = %v\n", len(data.PrepareRenames))
+ fmt.Fprintf(buf, "SymbolsCount = %v\n", len(data.Symbols))
+ fmt.Fprintf(buf, "SignaturesCount = %v\n", len(data.Signatures))
+ fmt.Fprintf(buf, "LinksCount = %v\n", linksCount)
+
+ want := string(data.Golden("summary", "summary.txt", func() ([]byte, error) {
+ return buf.Bytes(), nil
+ }))
+ got := buf.String()
+ if want != got {
+ t.Errorf("test summary does not match, want\n%s\ngot:\n%s", want, got)
+ }
+}
+
func (data *Data) Mapper(uri span.URI) (*protocol.ColumnMapper, error) {
data.mappersMu.Lock()
defer data.mappersMu.Unlock()