01e66ab3e6
* log when an editor action doesn't run because of enablement
* notebooks create/dispose editors. this means controllers must be created eagerly (😢) and that notebooks need a custom way of plugging comparision keys for session. works unless creating another session for the same cell of a duplicated editor
* Set offSide to sql lang configuration to true (#183461)
* Fixes #181764 (#183550)
* fix typo
* Always scroll down and focus the input (#183557)
* Fixes #180386 (#183561)
* cli: ensure ordering of rpc server messages (#183558)
* cli: ensure ordering of rpc server messages
Sending lots of messages to a stream would block them around the async
tokio mutex, which is "fair" so doesn't preserve ordering. Instead, use
the write_loop approach I introduced to the server_multiplexer for the
same reason some time ago.
* fix clippy
* update for May endgame
* testing: allow invalidateTestResults to take an array (#183569)
* Document `ShareProvider` API proposal (#183568)
* Document `ShareProvider` API proposal
* Remove mention of VS Code from JSDoc
* Add support for rendering svg and md in welcome message (#183580)
* Remove toggle setting more eagerly (#183584)
* rm message abt macOS
* Change text (#183589)
* Change text
* Accidentally changed the wrong file
* cli: improve output for code tunnel status (#183571)
* testing: allow invalidateTestResults to take an array
* cli: improve output for code tunnel status
Fixes #183570
* [json/css/html] update services (#183595)
* Add experimental setting to enable this dialog
* Fix exporting chat model to JSON before it is initialized (#183597)
* minimum scrolling to reveal the next cell on shift+enter (#183600)
do minimum scrolling to reveal the next cell on Execute cell and select next
* Fixing Jupyter notebook issue 13263 (#183527)
fix for the issue, still need to understand why there is strange focusing
* Tweak proposed API JSDoc (#183590)
* Tweak proposed API JSDoc
* workbench -> workspace
* fix ? operator
* Use active editor and show progress when sharing (#183603)
Use active editor and show progress
* use scroll setting variable correctly
* Schedule welcome widget to show once between typing. (#183606)
* Schedule dialog to show once between typing
* Don't re-render if already displayed once
* Add F10 keybinding for debugger step, even on Web. (#183510)
Fixes #181792.
Previously, for Web the keyboard shortcut was Alt-F10, because it was
believed that F10 could not be bound on browsers. This turned out to be
incorrect, so we make the shortcut consistent (F10) with desktop VSCode
which is also what many other debuggers use.
We keep Alt-F10 on web as a secondary keybinding to keep the experience
some web users may have gotten used to by now.
* Also pass process.env
* Restore missing chat clear commands (#183651)
* chore: update electron@22.5.4 (#183716)
* Show remote indicator in web when remoteAuthority is set (#183728)
* feat: .vuerc as json file (#153017)
Co-authored-by: Martin Aeschlimann <martinae@microsoft.com>
* Delete --compatibility=1.63 code from the server (#183738)
* Copy vscode.dev link to tunnel generates an invalid link when an untitled workspace is open (#183739)
* Recent devcontainer display string corrupted on Get Started page (#183740)
* Improve "next codeblock" navigation (#183744)
* Improve "next codeblock" navigation
Operate on the current focused response, or the last one, and scroll to the selected item
* Normalize command title
* Git - run git status if similarityThreshold changes (#183762)
* fix aria-label issue in kb editor
fixes A11y_GradeB_VSCode_Keyboard shortcut reads words together - Blind: Arrow key navigation to row Find the binding keys and "when" cell data are read together resulting in a word " CTRL + FeditorFocus instead of CTRL + F editorFocus" #182490
* Status - fix compact padding (#183768)
* Remove angle brackets from VB brackets (#183782)
Fixes #183359
* Update language config schema with more details about brackets. (#183779)
* fix comment (#183812)
* Support for `Notebook` CodeAction Kind (#183457)
* nb kind support -- wip
* allow notebook codeactions around single cell edit check
* move notebook code action type out of editor
---------
Co-authored-by: rebornix <penn.lv@gmail.com>
* cli: fix connection default being applied (#183827)
* cli: bump to openssl 1.1.1u (#183828)
* Implement "delete" action for chat history (#183609)
* Use desired file name when generating new md pasted file paths (#183861)
Fixes #183851
* Default to filename for markdown new file if empty (#183864)
Fixes #183848
* Fix small typo (#183865)
Fixes #183819
* Noop when moving a symbol into the file it is already in (#183866)
Fixes #183793
* Adjust codeAction validation to account for notebook kind (#183859)
* Make JS/TS `go to configuration` commands work on non-`file:` file systems (#183688)
Make `go to project` commands work on non-`file:` file systems
Fixes #183685
* Can't do regex search after opening notebook (#183884)
Fixes #183858
* Default to current dir for `move to file` select (#183875)
Fixes #183870
`showOpenDialog` seems to ignore `defaultUri` if the file doesn't exist
* Use `<...>` style markdown links when needed (#183876)
Fixes #183849
* Remove check for context keys
* Update xterm package
* Enable updating a chat model without triggering incremental typing (#183894)
* Enable chat "move" commands on empty sessions (#183895)
* Enable chat "move" commands on empty sessions
and also imported sessions
* Fix command name
* Fix some chat keybindings on windows (#183896)
* "Revert File" on inactive editors are ignored (fix #177557) (#183903)
* Empty reason while switching profile (fix #183775) (#183904)
* fix https://github.com/microsoft/vscode-internalbacklog/issues/4278 (#183910)
* fix https://github.com/microsoft/vscode/issues/183770 (#183914)
* code --status displays a lot of errors before actual status output (fix #183787) (#183915)
* joh/icy manatee (#183917)
* Use idle value for widget of interactive editor controller
https://github.com/microsoft/vscode/issues/183820
* also make preview editors idle values
https://github.com/microsoft/vscode/issues/183820
* Fix #183777 (#183929)
* Fix #182309 (#183925)
* Tree checkbox item -> items (#183931)
Fixes #183826
* Fixes #183909 (#183940)
* Fix #183837 (#183943)
fix #183837
* Git - fix #183941 (#183944)
* Update xterm.css
Fixes #181242
* chore: add @ulugbekna and @aiday-mar to my-endgame notebook (#183946)
* Revert "When snippet mode is active, make `Tab` not accept suggestion but advance placeholder"
This reverts commit
|
||
---|---|---|
.. | ||
automation | ||
integration | ||
leaks | ||
monaco | ||
smoke | ||
unit | ||
.mocharc.json | ||
README.md | ||
cgmanifest.json | ||
combineCoverage.js | ||
mocha.opts |
README.md
Azure Data Studio Tests
Contents
This folder contains the various test runners for Azure Data Studio. Please refer to the documentation within for how to run them:
unit
: our suite of unit tests (README)integration
: our suite of API tests (README)smoke
: our suite of automated UI tests (README)ui
: our suite of manual UI tests
Extension Tests
In addition to the above core tests many extensions in this repo also have tests themselves. These are split into two categories.
Unit tests
These are smaller tests that don't need connections to outside resources such as SQL instances. They are still ran within the context of Azure Data Studio and so have access to all the normal APIs as they would during runtime.
Run these with the script ./scripts/test-extensions-unit.[bat|sh]
Code coverage is enabled by default. Reports can be found in the coverage folder at the root of the folder for each extension that ran.
To run just the tests from a specific extension run
node ./scripts/test-extensions-unit.js [extensionName]
e.g.
node ./scripts/test-extensions-unit.js notebook
will run all tests from the notebook extension.
In addition the extensions also support the grep Mocha option. Set the ADS_TEST_GREP
environment variable to a string that will be used to match the full test title.
e.g.
$ENV:ADS_TEST_GREP="my test name"
and then running one of the above test commands will run only the tests which contain the phrase my test name
in the title.
Integration tests
These are the group of tests that have dependencies on outside resources such as SQL instances. See the README for more information.
Code coverage for this is also enabled by default (confined to the extensions), follow the instructions for running the tests in the above readme.
Stubbing vscode/azdata/library APIs
Sometimes it may be necessary to stub out certain vscode/azdata APIs or functionality from external libraries to modify the normal behavior. A few examples of when this may be necessary :
- Mocking out dialogs such as the
Open File
dialog in tests that don't have UI interaction (such as Unit tests) - Mocking out network calls such as from the
request
library
Note that you should try to avoid using this unless absolutely necessary. For example - instead of stubbing out a call to vscode.window.showTextDocument
it's better to call the actual VS Code API and have it open the document instead. Just make sure that everything is cleaned up after each test run so that following tests aren't affected by stale state!
We utilize the Sinon
framework to accomplish handling these kinds of scenarios. See https://sinonjs.org/releases/latest/stubs/ for a general overview of the use of stubs in this manner.
https://mherman.org/blog/stubbing-http-requests-with-sinon/ has an excellent tutorial on stubbing out API calls for the request framework.
The same principle can be applied to the vscode/azdata APIs. The object in this case is the imported vscode/azdata module, here is an example of stubbing out the vscode.window.showOpenDialog
function.
sinon.stub(vscode.window, 'showOpenDialog').returns(Promise.resolve([vscode.Uri.file('C:\test\path.txt')]));
IMPORTANT When using Sinon make sure to call sinon.restore()
after every test run (using afterEach
typically) to ensure that the stub doesn't affect other tests.
Mocking Events through TypeMoq
Mocking Events can be done by setting up the mocked property to return the the event. In order to have the event callback be registered, the promise that registers the mock element must be setup prior to the event firing. Therefore, once the event is fired it will be triggered as expected.
Example of an event mock using TypeMoq:
// create test event emitter
const onDidChangeSelectionEventEmitter = new vscode.EventEmitter<IConnectionCredentialsQuickPickItem[]>();
// setup the mock property to return the test event
quickPickMock.setup(q => q.onDidChangeSelection).returns(() => onDidChangeSelectionEventEmitter.event);
// register the function that is being tested
const promptPromise = connectionUI.promptForConnection();
// Trigger onDidChangeSelection event to simulate user selecting item
onDidChangeSelectionEventEmitter.fire([item]);
// await the registered promise
await promptPromise;
azdata-test package
The @microsoft/azdata-test package contains a number of things that may be helpful to extension tests. These include stubs, mocks and general helper functions that many extensions may need to use - such as common patterns for mocking out parts of the extension API.
Code Coverage
To generate a report combining the code coverage for extensions + core run node ./test/combineCoverage
. Currently this will combine coverage from the Core Unit Tests, Extension Unit Tests and Extension Integration tests - see above docs for instructions on how to run those to generate coverage.
Once ran the combined coverage report will be located in ./test/coverage
.
Troubleshooting
When debugging extension unit tests my breakpoints aren't being hit
There's a known issue when code coverage is enabled that breakpoints won't be hit. See https://github.com/microsoft/azuredatastudio/issues/17985 for more details and a workaround.