github.com/v2fly/tools@v0.100.0/internal/lsp/tests/README.md (about)

     1  # Testing
     2  
     3  LSP has "marker tests" defined in `internal/lsp/testdata`, as well as
     4  traditional tests.
     5  
     6  ## Marker tests
     7  
     8  Marker tests have a standard input file, like
     9  `internal/lsp/testdata/foo/bar.go`, and some may have a corresponding golden
    10  file, like `internal/lsp/testdata/foo/bar.go.golden`. The former is the "input"
    11  and the latter is the expected output.
    12  
    13  Each input file contains annotations like
    14  `//@suggestedfix("}", "refactor.rewrite")`. These annotations are interpreted by
    15  test runners to perform certain actions. The expected output after those actions
    16  is encoded in the golden file.
    17  
    18  When tests are run, each annotation results in a new subtest, which is encoded
    19  in the golden file with a heading like,
    20  
    21  ```bash
    22  -- suggestedfix_bar_11_21 --
    23  // expected contents go here
    24  -- suggestedfix_bar_13_20 --
    25  // expected contents go here
    26  ```
    27  
    28  The format of these headings vary: they are defined by the
    29  [`Golden`](https://pkg.go.dev/golang.org/x/tools/internal/lsp/tests#Data.Golden)
    30  function for each annotation. In the case above, the format is: annotation
    31  name, file name, annotation line location, annotation character location.
    32  
    33  So, if `internal/lsp/testdata/foo/bar.go` has three `suggestedfix` annotations,
    34  the golden file should have three headers with `suggestedfix_bar_xx_yy`
    35  headings.
    36  
    37  To see a list of all available annotations, see the exported "expectations" in
    38  [tests.go](https://github.com/golang/tools/blob/299f270db45902e93469b1152fafed034bb3f033/internal/lsp/tests/tests.go#L418-L447).
    39  
    40  To run marker tests,
    41  
    42  ```bash
    43  cd /path/to/tools
    44  
    45  # The marker tests are located in "internal/lsp", "internal/lsp/cmd, and
    46  # "internal/lsp/source".
    47  go test ./internal/lsp/...
    48  ```
    49  
    50  There are quite a lot of marker tests, so to run one individually, pass the test
    51  path and heading into a -run argument:
    52  
    53  ```bash
    54  cd /path/to/tools
    55  go test ./internal/lsp/... -v -run TestLSP/Modules/SuggestedFix/bar_11_21
    56  ```
    57  
    58  ## Resetting marker tests
    59  
    60  Sometimes, a change is made to lsp that requires a change to multiple golden
    61  files. When this happens, you can run,
    62  
    63  ```bash
    64  cd /path/to/tools
    65  ./internal/lsp/reset_golden.sh
    66  ```