mirror of https://github.com/golang/go.git
67 lines
2.1 KiB
Markdown
67 lines
2.1 KiB
Markdown
# Testing
|
|
|
|
LSP has "marker tests" defined in `internal/lsp/testdata`, as well as
|
|
traditional tests.
|
|
|
|
## Marker tests
|
|
|
|
Marker tests have a standard input file, like
|
|
`internal/lsp/testdata/foo/bar.go`, and some may have a corresponding golden
|
|
file, like `internal/lsp/testdata/foo/bar.go.golden`. The former is the "input"
|
|
and the latter is the expected output.
|
|
|
|
Each input file contains annotations like
|
|
`//@suggestedfix("}", "refactor.rewrite", "Fill anonymous struct")`. These annotations are interpreted by
|
|
test runners to perform certain actions. The expected output after those actions
|
|
is encoded in the golden file.
|
|
|
|
When tests are run, each annotation results in a new subtest, which is encoded
|
|
in the golden file with a heading like,
|
|
|
|
```bash
|
|
-- suggestedfix_bar_11_21 --
|
|
// expected contents go here
|
|
-- suggestedfix_bar_13_20 --
|
|
// expected contents go here
|
|
```
|
|
|
|
The format of these headings vary: they are defined by the
|
|
[`Golden`](https://pkg.go.dev/golang.org/x/tools/internal/lsp/tests#Data.Golden)
|
|
function for each annotation. In the case above, the format is: annotation
|
|
name, file name, annotation line location, annotation character location.
|
|
|
|
So, if `internal/lsp/testdata/foo/bar.go` has three `suggestedfix` annotations,
|
|
the golden file should have three headers with `suggestedfix_bar_xx_yy`
|
|
headings.
|
|
|
|
To see a list of all available annotations, see the exported "expectations" in
|
|
[tests.go](https://github.com/golang/tools/blob/299f270db45902e93469b1152fafed034bb3f033/internal/lsp/tests/tests.go#L418-L447).
|
|
|
|
To run marker tests,
|
|
|
|
```bash
|
|
cd /path/to/tools
|
|
|
|
# The marker tests are located in "internal/lsp", "internal/lsp/cmd, and
|
|
# "internal/lsp/source".
|
|
go test ./internal/lsp/...
|
|
```
|
|
|
|
There are quite a lot of marker tests, so to run one individually, pass the test
|
|
path and heading into a -run argument:
|
|
|
|
```bash
|
|
cd /path/to/tools
|
|
go test ./internal/lsp/... -v -run TestLSP/Modules/SuggestedFix/bar_11_21
|
|
```
|
|
|
|
## Resetting marker tests
|
|
|
|
Sometimes, a change is made to lsp that requires a change to multiple golden
|
|
files. When this happens, you can run,
|
|
|
|
```bash
|
|
cd /path/to/tools
|
|
./internal/lsp/reset_golden.sh
|
|
```
|