Skip to content

Commit 29076de

Browse files
committed
error msg for adapter unalignment issue
1 parent 379229a commit 29076de

File tree

2 files changed

+44
-2
lines changed

2 files changed

+44
-2
lines changed

src/client/testing/testController/controller.ts

Lines changed: 35 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -18,6 +18,7 @@ import {
1818
TextDocument,
1919
FileCoverageDetail,
2020
TestRun,
21+
MarkdownString,
2122
} from 'vscode';
2223
import { IExtensionSingleActivationService } from '../../activation/types';
2324
import { ICommandManager, IWorkspaceService } from '../../common/application/types';
@@ -32,8 +33,8 @@ import { IEventNamePropertyMapping, sendTelemetryEvent } from '../../telemetry';
3233
import { EventName } from '../../telemetry/constants';
3334
import { PYTEST_PROVIDER, UNITTEST_PROVIDER } from '../common/constants';
3435
import { TestProvider } from '../types';
35-
import { DebugTestTag, getNodeByUri, RunTestTag } from './common/testItemUtilities';
36-
import { pythonTestAdapterRewriteEnabled } from './common/utils';
36+
import { createErrorTestItem, DebugTestTag, getNodeByUri, RunTestTag } from './common/testItemUtilities';
37+
import { buildErrorNodeOptions, pythonTestAdapterRewriteEnabled } from './common/utils';
3738
import {
3839
ITestController,
3940
ITestDiscoveryAdapter,
@@ -275,6 +276,16 @@ export class PythonTestController implements ITestController, IExtensionSingleAc
275276
if (workspace && workspace.uri) {
276277
const testAdapter = this.testAdapters.get(workspace.uri);
277278
if (testAdapter) {
279+
const testProviderInAdapter = testAdapter.getTestProvider();
280+
if (testProviderInAdapter !== 'pytest') {
281+
traceError('Test provider in adapter is not pytest. Please reload window.');
282+
this.surfaceErrorNode(
283+
workspace.uri,
284+
'Test provider types are not aligned, please reload your VS Code window.',
285+
'pytest',
286+
);
287+
return Promise.resolve();
288+
}
278289
await testAdapter.discoverTests(
279290
this.testController,
280291
this.refreshCancellation.token,
@@ -297,6 +308,16 @@ export class PythonTestController implements ITestController, IExtensionSingleAc
297308
if (workspace && workspace.uri) {
298309
const testAdapter = this.testAdapters.get(workspace.uri);
299310
if (testAdapter) {
311+
const testProviderInAdapter = testAdapter.getTestProvider();
312+
if (testProviderInAdapter !== 'unittest') {
313+
traceError('Test provider in adapter is not unittest. Please reload window.');
314+
this.surfaceErrorNode(
315+
workspace.uri,
316+
'Test provider types are not aligned, please reload your VS Code window.',
317+
'unittest',
318+
);
319+
return Promise.resolve();
320+
}
300321
await testAdapter.discoverTests(
301322
this.testController,
302323
this.refreshCancellation.token,
@@ -598,4 +619,16 @@ export class PythonTestController implements ITestController, IExtensionSingleAc
598619
this.triggerTypes.push(trigger);
599620
}
600621
}
622+
623+
private surfaceErrorNode(workspaceUri: Uri, message: string, testProvider: TestProvider): void {
624+
let errorNode = this.testController.items.get(`DiscoveryError:${workspaceUri.fsPath}`);
625+
if (errorNode === undefined) {
626+
const options = buildErrorNodeOptions(workspaceUri, message, testProvider);
627+
errorNode = createErrorTestItem(this.testController, options);
628+
this.testController.items.add(errorNode);
629+
}
630+
const errorNodeLabel: MarkdownString = new MarkdownString(message);
631+
errorNodeLabel.isTrusted = true;
632+
errorNode.error = errorNodeLabel;
633+
}
601634
}

src/client/testing/testController/workspaceTestAdapter.ts

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -167,4 +167,13 @@ export class WorkspaceTestAdapter {
167167
sendTelemetryEvent(EventName.UNITTEST_DISCOVERY_DONE, undefined, { tool: this.testProvider, failed: false });
168168
return Promise.resolve();
169169
}
170+
171+
/**
172+
* Retrieves the current test provider instance.
173+
*
174+
* @returns {TestProvider} The instance of the test provider.
175+
*/
176+
public getTestProvider(): TestProvider {
177+
return this.testProvider;
178+
}
170179
}

0 commit comments

Comments
 (0)