diff options
author | bors[bot] <26634292+bors[bot]@users.noreply.github.com> | 2019-06-26 12:41:30 +0100 |
---|---|---|
committer | bors[bot] <26634292+bors[bot]@users.noreply.github.com> | 2019-06-26 12:41:30 +0100 |
commit | 0cff7f84c64eb9e6524b0ecb27304b854d783ec1 (patch) | |
tree | 9139681d87c2c5f09532d47337f7cbd5c0742249 /docs/dev | |
parent | afd18dbcb8147cb83de408b7da310ee187faf3df (diff) | |
parent | 98ac62c9d78ff5ec323c7d9aeae8845e1df20b19 (diff) |
Merge #1446
1446: Initial Visual Studio Code unit tests r=matklad a=etaoins
As promised in #1439 this is an initial attempt at unit testing the VSCode extension. There are two separate parts to this: getting the test framework working and unit testing the code in #1439.
The test framework nearly intact from the VSCode extension generator. The main thing missing was `test/index.ts` which acts as an entry point for Mocha. This was simply copied back in. I also needed to open the test VSCode instance inside a workspace as our file URI generation depends on a workspace being open.
There are two ways to run the test framework:
1. Opening the extension's source in VSCode, pressing F5 and selecting the "Extensions Test" debug target.
2. Closing all copies of VSCode and running `npm test`. This is started from the command line but actually opens a temporary VSCode window to host the tests.
This doesn't attempt to wire this up to CI. That requires running a headless X11 server which is a bit daunting. I'll assess the difficulty of that in a follow-up branch. This PR is at least helpful for local development without having to induce errors on a Rust project.
For the actual tests this uses snapshots of `rustc` output from [a real Rust project](https://github.com/etaoins/arret) captured from the command line. Except for extracting the
`message` object and reformatting they're copied verbatim into fixture JSON files.
Only four different types of diagnostics are tested but they represent the main combinations of code actions and related information possible. They can be considered the happy path tests; as we encounter corner-cases we can introduce new tests fixtures.
Co-authored-by: Ryan Cumming <[email protected]>
Diffstat (limited to 'docs/dev')
-rw-r--r-- | docs/dev/README.md | 19 |
1 files changed, 19 insertions, 0 deletions
diff --git a/docs/dev/README.md b/docs/dev/README.md index 3dc37e86e..0a148ed32 100644 --- a/docs/dev/README.md +++ b/docs/dev/README.md | |||
@@ -97,6 +97,25 @@ To work on the VS Code extension, launch code inside `editors/code` and use `F5` | |||
97 | to launch/debug. To automatically apply formatter and linter suggestions, use | 97 | to launch/debug. To automatically apply formatter and linter suggestions, use |
98 | `npm run fix`. | 98 | `npm run fix`. |
99 | 99 | ||
100 | Tests are located inside `src/test` and are named `*.test.ts`. They use the | ||
101 | [Mocha](https://mochajs.org) test framework and the builtin Node | ||
102 | [assert](https://nodejs.org/api/assert.html) module. Unlike normal Node tests | ||
103 | they must be hosted inside a VS Code instance. This can be done in one of two | ||
104 | ways: | ||
105 | |||
106 | 1. When `F5` debugging in VS Code select the `Extension Tests` configuration | ||
107 | from the drop-down at the top of the Debug View. This will launch a temporary | ||
108 | instance of VS Code. The test results will appear in the "Debug Console" tab | ||
109 | of the primary VS Code instance. | ||
110 | |||
111 | 2. Run `npm test` from the command line. Although this is initiated from the | ||
112 | command line it is not headless; it will also launch a temporary instance of | ||
113 | VS Code. | ||
114 | |||
115 | Due to the requirements of running the tests inside VS Code they are **not run | ||
116 | on CI**. When making changes to the extension please ensure the tests are not | ||
117 | broken locally before opening a Pull Request. | ||
118 | |||
100 | # Logging | 119 | # Logging |
101 | 120 | ||
102 | Logging is done by both rust-analyzer and VS Code, so it might be tricky to | 121 | Logging is done by both rust-analyzer and VS Code, so it might be tricky to |