diff --git a/test-provider-sample/.gitignore b/test-provider-sample/.gitignore index a4c10718..a6fcc128 100644 --- a/test-provider-sample/.gitignore +++ b/test-provider-sample/.gitignore @@ -4,4 +4,4 @@ node_modules *.vsix /vscode.d.ts -/vscode.proposed.testCoverage.d.ts +/vscode.proposed.*.d.ts diff --git a/test-provider-sample/package-lock.json b/test-provider-sample/package-lock.json index 6d007d0e..a31ce300 100644 --- a/test-provider-sample/package-lock.json +++ b/test-provider-sample/package-lock.json @@ -1277,9 +1277,9 @@ "dev": true }, "vscode-dts": { - "version": "0.3.2", - "resolved": "https://registry.npmjs.org/vscode-dts/-/vscode-dts-0.3.2.tgz", - "integrity": "sha512-vL6p3MYuRgyvztEyK/X+7KH8JqMrqzxSvZZi8e0eMubCj2v0POmypitJ93EcHSkZbULA2mCK6mdp5bZ5Re/bZw==", + "version": "0.3.3", + "resolved": "https://registry.npmjs.org/vscode-dts/-/vscode-dts-0.3.3.tgz", + "integrity": "sha512-JfOsWL0NvfVw0UF9bcTjlv1Onz3Ted7cgpPWKWMnHGB+72t/tn8WFDeKLZO42l2k9KJq/NGS9rFC5gZbyI4FTg==", "dev": true, "requires": { "minimist": "^1.2.0", diff --git a/test-provider-sample/package.json b/test-provider-sample/package.json index 614694df..0dc25f53 100644 --- a/test-provider-sample/package.json +++ b/test-provider-sample/package.json @@ -5,9 +5,9 @@ "version": "0.0.1", "publisher": "vscode-samples", "repository": "https://github.com/Microsoft/vscode-extension-samples", - "enableProposedApi": true, "enabledApiProposals": [ - "testCoverage" + "testCoverage", + "testRefresh" ], "engines": { "vscode": "^1.51.0" @@ -39,6 +39,6 @@ "@typescript-eslint/parser": "^4.16.0", "eslint": "^7.21.0", "typescript": "^4.2.2", - "vscode-dts": "^0.3.2" + "vscode-dts": "^0.3.3" } } diff --git a/test-provider-sample/src/extension.ts b/test-provider-sample/src/extension.ts index ea89f4d9..08222225 100644 --- a/test-provider-sample/src/extension.ts +++ b/test-provider-sample/src/extension.ts @@ -85,7 +85,11 @@ export async function activate(context: vscode.ExtensionContext) { discoverTests(request.include ?? gatherTestItems(ctrl.items)).then(runTestQueue); }; - + + ctrl.refreshHandler = async () => { + await Promise.all(getWorkspaceTestPatterns().map(({ pattern }) => findInitialFiles(ctrl, pattern))); + }; + ctrl.createRunProfile('Run Tests', vscode.TestRunProfileKind.Run, runHandler, true); ctrl.resolveHandler = async item => { @@ -145,13 +149,25 @@ function gatherTestItems(collection: vscode.TestItemCollection) { return items; } -function startWatchingWorkspace(controller: vscode.TestController) { +function getWorkspaceTestPatterns() { if (!vscode.workspace.workspaceFolders) { return []; } - return vscode.workspace.workspaceFolders.map(workspaceFolder => { - const pattern = new vscode.RelativePattern(workspaceFolder, '**/*.md'); + return vscode.workspace.workspaceFolders.map(workspaceFolder => ({ + workspaceFolder, + pattern: new vscode.RelativePattern(workspaceFolder, '**/*.md'), + })); +} + +async function findInitialFiles(controller: vscode.TestController, pattern: vscode.GlobPattern) { + for (const file of await vscode.workspace.findFiles(pattern)) { + getOrCreateFile(controller, file); + } +} + +function startWatchingWorkspace(controller: vscode.TestController) { + return getWorkspaceTestPatterns().map(({ workspaceFolder, pattern }) => { const watcher = vscode.workspace.createFileSystemWatcher(pattern); watcher.onDidCreate(uri => getOrCreateFile(controller, uri)); @@ -163,11 +179,7 @@ function startWatchingWorkspace(controller: vscode.TestController) { }); watcher.onDidDelete(uri => controller.items.delete(uri.toString())); - vscode.workspace.findFiles(pattern).then(files => { - for (const file of files) { - getOrCreateFile(controller, file); - } - }); + findInitialFiles(controller, pattern); return watcher; }); diff --git a/test-provider-sample/src/testTree.ts b/test-provider-sample/src/testTree.ts index 24140232..0c816d8e 100644 --- a/test-provider-sample/src/testTree.ts +++ b/test-provider-sample/src/testTree.ts @@ -29,7 +29,7 @@ export class TestFile { item.error = undefined; this.updateFromContents(controller, content, item); } catch (e) { - item.error = e.stack; + item.error = (e as Error).stack; } }