@@ -18,6 +18,7 @@ import {
18
18
TextDocument ,
19
19
FileCoverageDetail ,
20
20
TestRun ,
21
+ MarkdownString ,
21
22
} from 'vscode' ;
22
23
import { IExtensionSingleActivationService } from '../../activation/types' ;
23
24
import { ICommandManager , IWorkspaceService } from '../../common/application/types' ;
@@ -32,8 +33,8 @@ import { IEventNamePropertyMapping, sendTelemetryEvent } from '../../telemetry';
32
33
import { EventName } from '../../telemetry/constants' ;
33
34
import { PYTEST_PROVIDER , UNITTEST_PROVIDER } from '../common/constants' ;
34
35
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' ;
37
38
import {
38
39
ITestController ,
39
40
ITestDiscoveryAdapter ,
@@ -275,6 +276,16 @@ export class PythonTestController implements ITestController, IExtensionSingleAc
275
276
if ( workspace && workspace . uri ) {
276
277
const testAdapter = this . testAdapters . get ( workspace . uri ) ;
277
278
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
+ }
278
289
await testAdapter . discoverTests (
279
290
this . testController ,
280
291
this . refreshCancellation . token ,
@@ -297,6 +308,16 @@ export class PythonTestController implements ITestController, IExtensionSingleAc
297
308
if ( workspace && workspace . uri ) {
298
309
const testAdapter = this . testAdapters . get ( workspace . uri ) ;
299
310
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
+ }
300
321
await testAdapter . discoverTests (
301
322
this . testController ,
302
323
this . refreshCancellation . token ,
@@ -598,4 +619,16 @@ export class PythonTestController implements ITestController, IExtensionSingleAc
598
619
this . triggerTypes . push ( trigger ) ;
599
620
}
600
621
}
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
+ }
601
634
}
0 commit comments