@@ -14,6 +14,7 @@ import { PythonEnvInfo, PythonEnvKind } from '../../../../../client/pythonEnviro
1414import { parseVersion } from '../../../../../client/pythonEnvironments/base/info/pythonVersion' ;
1515import { PythonEnvUpdatedEvent } from '../../../../../client/pythonEnvironments/base/locator' ;
1616import { PythonEnvsResolver } from '../../../../../client/pythonEnvironments/base/locators/composite/environmentsResolver' ;
17+ import { getEnvs as getEnvsWithUpdates } from '../../../../../client/pythonEnvironments/base/locatorUtils' ;
1718import { PythonEnvsChangedEvent } from '../../../../../client/pythonEnvironments/base/watcher' ;
1819import * as ExternalDep from '../../../../../client/pythonEnvironments/common/externalDependencies' ;
1920import { EnvironmentInfoService } from '../../../../../client/pythonEnvironments/info/environmentInfoService' ;
@@ -113,6 +114,30 @@ suite('Python envs locator - Environments Resolver', () => {
113114 assert . deepEqual ( onUpdatedEvents , expectedUpdates ) ;
114115 } ) ;
115116
117+ test ( 'If fetching interpreter info fails, it is not reported in the final list of envs' , async ( ) => {
118+ // Arrange
119+ stubShellExec . returns (
120+ new Promise < ExecutionResult < string > > ( ( resolve ) => {
121+ resolve ( {
122+ stderr : 'Kaboom' ,
123+ stdout : '' ,
124+ } ) ;
125+ } ) ,
126+ ) ;
127+ const env1 = createNamedEnv ( 'env1' , '3.5.12b1' , PythonEnvKind . Unknown , path . join ( 'path' , 'to' , 'exec1' ) ) ;
128+ const env2 = createNamedEnv ( 'env2' , '3.8.1' , PythonEnvKind . Unknown , path . join ( 'path' , 'to' , 'exec2' ) ) ;
129+ const environmentsToBeIterated = [ env1 , env2 ] ;
130+ const parentLocator = new SimpleLocator ( environmentsToBeIterated ) ;
131+ const resolver = new PythonEnvsResolver ( parentLocator , envInfoService , ( ) => true ) ;
132+
133+ // Act
134+ const iterator = resolver . iterEnvs ( ) ;
135+ const envs = await getEnvsWithUpdates ( iterator ) ;
136+
137+ // Assert
138+ assert . deepEqual ( envs , [ ] ) ;
139+ } ) ;
140+
116141 test ( 'Updates to environments from the incoming iterator are sent correctly followed by the null event' , async ( ) => {
117142 // Arrange
118143 const env = createNamedEnv ( 'env1' , '3.8' , PythonEnvKind . Unknown , path . join ( 'path' , 'to' , 'exec' ) ) ;
@@ -254,7 +279,7 @@ suite('Python envs locator - Environments Resolver', () => {
254279 assert . deepEqual ( expected , createExpectedEnvInfo ( resolvedEnvReturnedByReducer ) ) ;
255280 } ) ;
256281
257- test ( 'If the parent locator resolves environment, but fetching interpreter info returns undefined , return undefined' , async ( ) => {
282+ test ( 'If the parent locator resolves environment, but running interpreter info throws error , return undefined' , async ( ) => {
258283 stubShellExec . returns (
259284 new Promise < ExecutionResult < string > > ( ( _resolve , reject ) => {
260285 reject ( ) ;
@@ -282,6 +307,37 @@ suite('Python envs locator - Environments Resolver', () => {
282307 assert . deepEqual ( expected , undefined ) ;
283308 } ) ;
284309
310+ test ( 'If fetching interpreter info fails with stderr, return undefined' , async ( ) => {
311+ stubShellExec . returns (
312+ new Promise < ExecutionResult < string > > ( ( resolve ) => {
313+ resolve ( {
314+ stderr : 'Kaboom' ,
315+ stdout : '' ,
316+ } ) ;
317+ } ) ,
318+ ) ;
319+ const env = createNamedEnv ( 'env1' , '3.8' , PythonEnvKind . Unknown , path . join ( 'path' , 'to' , 'exec' ) ) ;
320+ const resolvedEnvReturnedByReducer = createNamedEnv (
321+ 'env1' ,
322+ '3.8.1' ,
323+ PythonEnvKind . Conda ,
324+ 'resolved/path/to/exec' ,
325+ ) ;
326+ const parentLocator = new SimpleLocator ( [ ] , {
327+ resolve : async ( e : PythonEnvInfo ) => {
328+ if ( e === env ) {
329+ return resolvedEnvReturnedByReducer ;
330+ }
331+ throw new Error ( 'Incorrect environment sent to the resolver' ) ;
332+ } ,
333+ } ) ;
334+ const resolver = new PythonEnvsResolver ( parentLocator , envInfoService , ( ) => true ) ;
335+
336+ const expected = await resolver . resolveEnv ( env ) ;
337+
338+ assert . deepEqual ( expected , undefined ) ;
339+ } ) ;
340+
285341 test ( "If the parent locator isn't able to resolve environment, return undefined" , async ( ) => {
286342 const env = createNamedEnv ( 'env' , '3.8' , PythonEnvKind . Unknown , path . join ( 'path' , 'to' , 'exec' ) ) ;
287343 const parentLocator = new SimpleLocator ( [ ] , {
0 commit comments