mirror of
https://github.com/microsoft/vscode.git
synced 2026-04-20 08:38:56 +01:00
refactor: update to new testing API
Previously in the testing API, you called `registerTestProvider` with your own instance of a TestController, and VS Code would request workspace or document tests. This has been changed: now, you call `createTestController`, which returns an object, and call `createTestItem` to insert test nodes under the `controller.root`. Extensions should generally decide themselves when to publish tests. For example, when a file is opened in an editor, test extensions will want to make sure tests for that file are available so that inline decorations can be shown. This is pretty similar to what the editor API does in diagnostics. There is still a `resolveChildrenHandler` on the controller (rather than the TestItem directly), which you should _set_ if the test extension supports lazy discovery. Additionally, if you support running tests, you'll also want a `runHandler` (migrating from the old `runTests` method). Some of the existing test providers have been updated, you can check them out here: - https://github.com/microsoft/vscode-extension-samples/tree/main/test-provider-sample - https://github.com/microsoft/vscode-selfhost-test-provider In summary, to update to the new API: - Call `vscode.test.createTestController` instead of `registerTestController` - Move the contents of your `runTests` method to `controller.runHandler` - Move your `TestItem.resolveHandler` to `controller.resolveChildrenHandler`, which may involve adding some `instanceof` checks. - If you lazily discovered tests in `createDocumentTestRoot`, you'll want to trigger that logic based on `vscode.workspace.onDidOpenTextDocument`. - If your test runner can deal with showing locations of unsaved changes, listen for `vscode.workspace.onDidChangeTextDocument` to trigger those changes in the tree.
This commit is contained in:
@@ -55,7 +55,7 @@ import { values } from 'vs/base/common/collections';
|
||||
import { ExtHostEditorInsets } from 'vs/workbench/api/common/extHostCodeInsets';
|
||||
import { ExtHostLabelService } from 'vs/workbench/api/common/extHostLabelService';
|
||||
import { getRemoteName } from 'vs/platform/remote/common/remoteHosts';
|
||||
import { IInstantiationService, ServicesAccessor } from 'vs/platform/instantiation/common/instantiation';
|
||||
import { ServicesAccessor } from 'vs/platform/instantiation/common/instantiation';
|
||||
import { IExtHostDecorations } from 'vs/workbench/api/common/extHostDecorations';
|
||||
import { IExtHostTask } from 'vs/workbench/api/common/extHostTask';
|
||||
import { IExtHostDebugService } from 'vs/workbench/api/common/extHostDebugService';
|
||||
@@ -171,7 +171,7 @@ export function createApiFactoryAndRegisterActors(accessor: ServicesAccessor): I
|
||||
const extHostWebviewPanels = rpcProtocol.set(ExtHostContext.ExtHostWebviewPanels, new ExtHostWebviewPanels(rpcProtocol, extHostWebviews, extHostWorkspace));
|
||||
const extHostCustomEditors = rpcProtocol.set(ExtHostContext.ExtHostCustomEditors, new ExtHostCustomEditors(rpcProtocol, extHostDocuments, extensionStoragePaths, extHostWebviews, extHostWebviewPanels));
|
||||
const extHostWebviewViews = rpcProtocol.set(ExtHostContext.ExtHostWebviewViews, new ExtHostWebviewViews(rpcProtocol, extHostWebviews));
|
||||
const extHostTesting = rpcProtocol.set(ExtHostContext.ExtHostTesting, new ExtHostTesting(rpcProtocol, accessor.get(IInstantiationService), extHostDocumentsAndEditors));
|
||||
const extHostTesting = rpcProtocol.set(ExtHostContext.ExtHostTesting, new ExtHostTesting(rpcProtocol));
|
||||
const extHostUriOpeners = rpcProtocol.set(ExtHostContext.ExtHostUriOpeners, new ExtHostUriOpeners(rpcProtocol));
|
||||
|
||||
// Check that no named customers are missing
|
||||
@@ -358,29 +358,18 @@ export function createApiFactoryAndRegisterActors(accessor: ServicesAccessor): I
|
||||
: extHostTypes.ExtensionKind.UI;
|
||||
|
||||
const test: typeof vscode.test = {
|
||||
registerTestController(provider) {
|
||||
createTestController(provider) {
|
||||
checkProposedApiEnabled(extension);
|
||||
return extHostTesting.registerTestController(extension.identifier.value, provider);
|
||||
return extHostTesting.createTestController(provider);
|
||||
},
|
||||
createDocumentTestObserver(document) {
|
||||
createTestObserver() {
|
||||
checkProposedApiEnabled(extension);
|
||||
return extHostTesting.createTextDocumentTestObserver(document);
|
||||
},
|
||||
createWorkspaceTestObserver(workspaceFolder) {
|
||||
checkProposedApiEnabled(extension);
|
||||
return extHostTesting.createWorkspaceTestObserver(workspaceFolder);
|
||||
return extHostTesting.createTestObserver();
|
||||
},
|
||||
runTests(provider) {
|
||||
checkProposedApiEnabled(extension);
|
||||
return extHostTesting.runTests(provider);
|
||||
},
|
||||
createTestItem<T>(options: vscode.TestItemOptions, data?: T) {
|
||||
return new extHostTypes.TestItemImpl(options.id, options.label, options.uri, data);
|
||||
},
|
||||
createTestRun(request, name, persist) {
|
||||
checkProposedApiEnabled(extension);
|
||||
return extHostTesting.createTestRun(request, name, persist);
|
||||
},
|
||||
get onDidChangeTestResults() {
|
||||
checkProposedApiEnabled(extension);
|
||||
return extHostTesting.onResultsChanged;
|
||||
@@ -391,9 +380,6 @@ export function createApiFactoryAndRegisterActors(accessor: ServicesAccessor): I
|
||||
},
|
||||
};
|
||||
|
||||
// todo@connor4312: backwards compatibility for a short period
|
||||
(test as any).createTestRunTask = test.createTestRun;
|
||||
|
||||
// namespace: extensions
|
||||
const extensions: typeof vscode.extensions = {
|
||||
getExtension(extensionId: string): vscode.Extension<any> | undefined {
|
||||
@@ -1289,6 +1275,7 @@ export function createApiFactoryAndRegisterActors(accessor: ServicesAccessor): I
|
||||
LinkedEditingRanges: extHostTypes.LinkedEditingRanges,
|
||||
TestItemStatus: extHostTypes.TestItemStatus,
|
||||
TestResultState: extHostTypes.TestResultState,
|
||||
TestRunRequest: extHostTypes.TestRunRequest,
|
||||
TestMessage: extHostTypes.TestMessage,
|
||||
TextSearchCompleteMessageType: TextSearchCompleteMessageType,
|
||||
TestMessageSeverity: extHostTypes.TestMessageSeverity,
|
||||
|
||||
Reference in New Issue
Block a user