internal/lsp: run all the tests as sub tests
This allows us to run a single failing test easily when we need.
It also improves the ability to determine which test fails.
Change-Id: I400212d8c4d8c1f97059260add635ce2015990a1
Reviewed-on: https://go-review.googlesource.com/c/tools/+/197737
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/tests/tests.go b/internal/lsp/tests/tests.go
index 30cfacc..dcdc661 100644
--- a/internal/lsp/tests/tests.go
+++ b/internal/lsp/tests/tests.go
@@ -328,7 +328,10 @@
t.Run("Completion", func(t *testing.T) {
t.Helper()
for src, test := range data.Completions {
- tests.Completion(t, src, test, data.CompletionItems)
+ t.Run(spanName(src), func(t *testing.T) {
+ t.Helper()
+ tests.Completion(t, src, test, data.CompletionItems)
+ })
}
})
@@ -336,7 +339,14 @@
t.Helper()
for _, placeholders := range []bool{true, false} {
for src, expected := range data.CompletionSnippets {
- tests.CompletionSnippet(t, src, expected, placeholders, data.CompletionItems)
+ name := spanName(src)
+ if placeholders {
+ name += "_placeholders"
+ }
+ t.Run(name, func(t *testing.T) {
+ t.Helper()
+ tests.CompletionSnippet(t, src, expected, placeholders, data.CompletionItems)
+ })
}
}
})
@@ -344,126 +354,180 @@
t.Run("UnimportedCompletion", func(t *testing.T) {
t.Helper()
for src, test := range data.UnimportedCompletions {
- tests.UnimportedCompletion(t, src, test, data.CompletionItems)
+ t.Run(spanName(src), func(t *testing.T) {
+ t.Helper()
+ tests.UnimportedCompletion(t, src, test, data.CompletionItems)
+ })
}
})
t.Run("DeepCompletion", func(t *testing.T) {
t.Helper()
for src, test := range data.DeepCompletions {
- tests.DeepCompletion(t, src, test, data.CompletionItems)
+ t.Run(spanName(src), func(t *testing.T) {
+ t.Helper()
+ tests.DeepCompletion(t, src, test, data.CompletionItems)
+ })
}
})
t.Run("FuzzyCompletion", func(t *testing.T) {
t.Helper()
for src, test := range data.FuzzyCompletions {
- tests.FuzzyCompletion(t, src, test, data.CompletionItems)
+ t.Run(spanName(src), func(t *testing.T) {
+ t.Helper()
+ tests.FuzzyCompletion(t, src, test, data.CompletionItems)
+ })
}
})
t.Run("CaseSensitiveCompletion", func(t *testing.T) {
t.Helper()
for src, test := range data.CaseSensitiveCompletions {
- tests.CaseSensitiveCompletion(t, src, test, data.CompletionItems)
+ t.Run(spanName(src), func(t *testing.T) {
+ t.Helper()
+ tests.CaseSensitiveCompletion(t, src, test, data.CompletionItems)
+ })
}
})
t.Run("RankCompletions", func(t *testing.T) {
t.Helper()
for src, test := range data.RankCompletions {
- tests.RankCompletion(t, src, test, data.CompletionItems)
+ t.Run(spanName(src), func(t *testing.T) {
+ t.Helper()
+ tests.RankCompletion(t, src, test, data.CompletionItems)
+ })
}
})
t.Run("Diagnostics", func(t *testing.T) {
t.Helper()
for uri, want := range data.Diagnostics {
- tests.Diagnostics(t, uri, want)
+ t.Run(uriName(uri), func(t *testing.T) {
+ t.Helper()
+ tests.Diagnostics(t, uri, want)
+ })
}
})
t.Run("FoldingRange", func(t *testing.T) {
t.Helper()
for _, spn := range data.FoldingRanges {
- tests.FoldingRange(t, spn)
+ t.Run(uriName(spn.URI()), func(t *testing.T) {
+ t.Helper()
+ tests.FoldingRange(t, spn)
+ })
}
})
t.Run("Format", func(t *testing.T) {
t.Helper()
for _, spn := range data.Formats {
- tests.Format(t, spn)
+ t.Run(uriName(spn.URI()), func(t *testing.T) {
+ t.Helper()
+ tests.Format(t, spn)
+ })
}
})
t.Run("Import", func(t *testing.T) {
t.Helper()
for _, spn := range data.Imports {
- tests.Import(t, spn)
+ t.Run(uriName(spn.URI()), func(t *testing.T) {
+ t.Helper()
+ tests.Import(t, spn)
+ })
}
})
t.Run("SuggestedFix", func(t *testing.T) {
t.Helper()
for _, spn := range data.SuggestedFixes {
- tests.SuggestedFix(t, spn)
+ t.Run(spanName(spn), func(t *testing.T) {
+ t.Helper()
+ tests.SuggestedFix(t, spn)
+ })
}
})
t.Run("Definition", func(t *testing.T) {
t.Helper()
for spn, d := range data.Definitions {
- tests.Definition(t, spn, d)
+ t.Run(spanName(spn), func(t *testing.T) {
+ t.Helper()
+ tests.Definition(t, spn, d)
+ })
}
})
t.Run("Highlight", func(t *testing.T) {
t.Helper()
for name, locations := range data.Highlights {
- tests.Highlight(t, name, locations)
+ t.Run(name, func(t *testing.T) {
+ t.Helper()
+ tests.Highlight(t, name, locations)
+ })
}
})
t.Run("References", func(t *testing.T) {
t.Helper()
for src, itemList := range data.References {
- tests.Reference(t, src, itemList)
+ t.Run(spanName(src), func(t *testing.T) {
+ t.Helper()
+ tests.Reference(t, src, itemList)
+ })
}
})
t.Run("Renames", func(t *testing.T) {
t.Helper()
for spn, newText := range data.Renames {
- tests.Rename(t, spn, newText)
+ t.Run(uriName(spn.URI())+"_"+newText, func(t *testing.T) {
+ t.Helper()
+ tests.Rename(t, spn, newText)
+ })
}
})
t.Run("PrepareRenames", func(t *testing.T) {
t.Helper()
for src, want := range data.PrepareRenames {
- tests.PrepareRename(t, src, want)
+ t.Run(spanName(src), func(t *testing.T) {
+ t.Helper()
+ tests.PrepareRename(t, src, want)
+ })
}
})
t.Run("Symbols", func(t *testing.T) {
t.Helper()
for uri, expectedSymbols := range data.Symbols {
- tests.Symbol(t, uri, expectedSymbols)
+ t.Run(uriName(uri), func(t *testing.T) {
+ t.Helper()
+ tests.Symbol(t, uri, expectedSymbols)
+ })
}
})
t.Run("SignatureHelp", func(t *testing.T) {
t.Helper()
for spn, expectedSignature := range data.Signatures {
- tests.SignatureHelp(t, spn, expectedSignature)
+ t.Run(spanName(spn), func(t *testing.T) {
+ t.Helper()
+ tests.SignatureHelp(t, spn, expectedSignature)
+ })
}
})
t.Run("Link", func(t *testing.T) {
t.Helper()
for uri, wantLinks := range data.Links {
- tests.Link(t, uri, wantLinks)
+ t.Run(uriName(uri), func(t *testing.T) {
+ t.Helper()
+ tests.Link(t, uri, wantLinks)
+ })
}
})
@@ -812,3 +876,11 @@
NotePosition: position,
})
}
+
+func uriName(uri span.URI) string {
+ return filepath.Base(strings.TrimSuffix(uri.Filename(), ".go"))
+}
+
+func spanName(spn span.Span) string {
+ return fmt.Sprintf("%v_%v_%v", uriName(spn.URI()), spn.Start().Line(), spn.Start().Column())
+}