Files
vscode/test/unit
Connor Peet a0b548807a eng: add assertHeap method for memory assertions (#198334)
This adds an `assertHeap` function that can be used in tests. It
takes a heap snapshot, and asserts the state of classes in memory. This
works in Node and the Electron sandbox, but is a no-op in the browser.
Snapshots are process asynchronously and will report failures at the end
of the suite.

This method should be used sparingly (e.g. once at the end of a suite to
ensure nothing leaked before), as gathering a heap snapshot is fairly
slow, at least until V8 11.5.130 (https://v8.dev/blog/speeding-up-v8-heap-snapshots).

When used, the function will ensure the test has a minimum timeout
duration of 20s to avoid immediate failures.

It takes options containing a mapping of class names, and assertion functions
to run on the number of retained instances of that class. For example:

```ts
assertSnapshot({
	classes: {
		ShouldNeverLeak: count => assert.strictEqual(count, 0),
		SomeSingleton: count => assert(count <= 1),
	}
});
```

Closes https://github.com/microsoft/vscode/issues/191920
2023-11-15 10:41:22 -08:00
..
2023-11-02 06:34:09 -07:00

Unit Tests

Run (inside Electron)

./scripts/test.[sh|bat]

All unit tests are run inside a Electron renderer environment which access to DOM and Nodejs api. This is the closest to the environment in which VS Code itself ships. Notes:

  • use the --debug to see an electron window with dev tools which allows for debugging
  • to run only a subset of tests use the --run or --glob options
  • use yarn watch to automatically compile changes

For instance, ./scripts/test.sh --debug --glob **/extHost*.test.js runs all tests from extHost-files and enables you to debug them.

Run (inside browser)

yarn test-browser --browser webkit --browser chromium

Unit tests from layers common and browser are run inside chromium, webkit, and (soon'ish) firefox (using playwright). This complements our electron-based unit test runner and adds more coverage of supported platforms. Notes:

  • these tests are part of the continuous build, that means you might have test failures that only happen with webkit on windows or chromium on linux
  • you can run these tests locally via yarn test-browser --browser chromium --browser webkit
  • to debug, open <vscode>/test/unit/browser/renderer.html inside a browser and use the ?m=<amd_module>-query to specify what AMD module to load, e.g file:///Users/jrieken/Code/vscode/test/unit/browser/renderer.html?m=vs/base/test/common/strings.test runs all tests from strings.test.ts
  • to run only a subset of tests use the --run or --glob options

Note: you can enable verbose logging of playwright library by setting a DEBUG environment variable before running the tests (https://playwright.dev/docs/debug#verbose-api-logs)

Run (with node)

yarn test-node --run src/vs/editor/test/browser/controller/cursor.test.ts

Coverage

The following command will create a coverage folder in the .build folder at the root of the workspace:

OS X and Linux

./scripts/test.sh --coverage

Windows

scripts\test --coverage