From 17c8b703231de1fdded80b2e7ab3e7a5978f416c Mon Sep 17 00:00:00 2001 From: Julia Silge Date: Mon, 24 Feb 2025 21:07:22 -0700 Subject: [PATCH] Add an event for test discovery being done --- extensions/positron-r/src/commands.ts | 9 +++++---- extensions/positron-r/src/testing/testing.ts | 10 ++++++++++ 2 files changed, 15 insertions(+), 4 deletions(-) diff --git a/extensions/positron-r/src/commands.ts b/extensions/positron-r/src/commands.ts index b598f4691b7..36893851bae 100644 --- a/extensions/positron-r/src/commands.ts +++ b/extensions/positron-r/src/commands.ts @@ -15,6 +15,7 @@ import { quickPickRuntime } from './runtime-quickpick'; import { MINIMUM_RENV_VERSION, MINIMUM_R_VERSION } from './constants'; import { RRuntimeManager } from './runtime-manager'; import { RMetadataExtra } from './r-installation'; +import { onDidDiscoverTestFiles } from './testing/testing'; export async function registerCommands(context: vscode.ExtensionContext, runtimeManager: RRuntimeManager) { @@ -127,10 +128,10 @@ export async function registerCommands(context: vscode.ExtensionContext, runtime }), vscode.commands.registerCommand('r.packageTestExplorer', async () => { - vscode.commands.executeCommand('workbench.view.testing.focus'); - // Wait for the test explorer to set up before running tests - await delay(500); - vscode.commands.executeCommand('testing.runAll'); + await vscode.commands.executeCommand('workbench.view.testing.focus'); + onDidDiscoverTestFiles(event => { + vscode.commands.executeCommand('testing.runAll'); + }); }), vscode.commands.registerCommand('r.useTestthat', async () => { diff --git a/extensions/positron-r/src/testing/testing.ts b/extensions/positron-r/src/testing/testing.ts index 7b4f467e6f3..5940544b4ff 100644 --- a/extensions/positron-r/src/testing/testing.ts +++ b/extensions/positron-r/src/testing/testing.ts @@ -13,6 +13,14 @@ import { detectRPackage, getRPackageName } from '../contexts'; let controller: vscode.TestController | undefined; +const _onDidDiscoverTestFiles = new vscode.EventEmitter(); + +/** + * An event that fires after the test files are discovered. + */ +export const onDidDiscoverTestFiles = _onDidDiscoverTestFiles.event; + + export async function setupTestExplorer(context: vscode.ExtensionContext) { if (testExplorerEnabled()) { return discoverTests(context); @@ -64,6 +72,7 @@ export async function discoverTests(context: vscode.ExtensionContext) { 'R Package Test Explorer' ); context.subscriptions.push(controller); + context.subscriptions.push(_onDidDiscoverTestFiles); const testItemData = new WeakMap(); const testingTools: TestingTools = { @@ -86,6 +95,7 @@ export async function discoverTests(context: vscode.ExtensionContext) { for (const watcher of watchers) { context.subscriptions.push(watcher); } + _onDidDiscoverTestFiles.fire(); LOGGER.info('Testthat file watchers are in place.'); } };