@@ -18,6 +18,7 @@ import {
1818 TextDocument ,
1919 FileCoverageDetail ,
2020 TestRun ,
21+ MarkdownString ,
2122} from 'vscode' ;
2223import { IExtensionSingleActivationService } from '../../activation/types' ;
2324import { ICommandManager , IWorkspaceService } from '../../common/application/types' ;
@@ -32,8 +33,8 @@ import { IEventNamePropertyMapping, sendTelemetryEvent } from '../../telemetry';
3233import { EventName } from '../../telemetry/constants' ;
3334import { PYTEST_PROVIDER , UNITTEST_PROVIDER } from '../common/constants' ;
3435import { 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' ;
3738import {
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}
0 commit comments