@@ -18,11 +18,11 @@ import { createEnv, getEnvs, SimpleLocator } from '../base/common';
18
18
suite ( 'Environments Reducer' , ( ) => {
19
19
suite ( 'iterEnvs()' , ( ) => {
20
20
test ( 'Iterator only yields unique environments' , async ( ) => {
21
- const env1 = createEnv ( 'env1' , '3.5.12b1 ' , PythonEnvKind . Venv , path . join ( 'path' , 'to' , 'exec1' ) ) ;
22
- const env2 = createEnv ( 'env2' , '3.8.1 ' , PythonEnvKind . Conda , path . join ( 'path' , 'to' , 'exec2' ) ) ;
21
+ const env1 = createEnv ( 'env1' , '3.5' , PythonEnvKind . Venv , path . join ( 'path' , 'to' , 'exec1' ) ) ;
22
+ const env2 = createEnv ( 'env2' , '3.8' , PythonEnvKind . Conda , path . join ( 'path' , 'to' , 'exec2' ) ) ;
23
23
const env3 = createEnv ( 'env3' , '2.7' , PythonEnvKind . System , path . join ( 'path' , 'to' , 'exec3' ) ) ;
24
- const env4 = createEnv ( 'env4' , '3.9.0rc2 ' , PythonEnvKind . Unknown , path . join ( 'path' , 'to' , 'exec2' ) ) ; // Same as env2
25
- const env5 = createEnv ( 'env5' , '3.8 ' , PythonEnvKind . Venv , path . join ( 'path' , 'to' , 'exec1' ) ) ; // Same as env1
24
+ const env4 = createEnv ( 'env4' , '3.8.1 ' , PythonEnvKind . Unknown , path . join ( 'path' , 'to' , 'exec2' ) ) ; // Same as env2
25
+ const env5 = createEnv ( 'env5' , '3.5.12b1 ' , PythonEnvKind . Venv , path . join ( 'path' , 'to' , 'exec1' ) ) ; // Same as env1
26
26
const environmentsToBeIterated = [ env1 , env2 , env3 , env4 , env5 ] ; // Contains 3 unique environments
27
27
const pythonEnvManager = new SimpleLocator ( environmentsToBeIterated ) ;
28
28
const reducer = new PythonEnvsReducer ( pythonEnvManager ) ;
@@ -36,11 +36,11 @@ suite('Environments Reducer', () => {
36
36
37
37
test ( 'Single updates for multiple environments are sent correctly followed by the null event' , async ( ) => {
38
38
// Arrange
39
- const env1 = createEnv ( 'env1' , '3.5.12b1 ' , PythonEnvKind . Unknown , path . join ( 'path' , 'to' , 'exec1' ) ) ;
40
- const env2 = createEnv ( 'env2' , '3.8.1 ' , PythonEnvKind . Unknown , path . join ( 'path' , 'to' , 'exec2' ) ) ;
39
+ const env1 = createEnv ( 'env1' , '3.5' , PythonEnvKind . Unknown , path . join ( 'path' , 'to' , 'exec1' ) ) ;
40
+ const env2 = createEnv ( 'env2' , '3.8' , PythonEnvKind . Unknown , path . join ( 'path' , 'to' , 'exec2' ) ) ;
41
41
const env3 = createEnv ( 'env3' , '2.7' , PythonEnvKind . System , path . join ( 'path' , 'to' , 'exec3' ) ) ;
42
- const env4 = createEnv ( 'env4' , '3.9.0rc2 ' , PythonEnvKind . Conda , path . join ( 'path' , 'to' , 'exec2' ) ) ; // Same as env2;
43
- const env5 = createEnv ( 'env5' , '3.8 ' , PythonEnvKind . Venv , path . join ( 'path' , 'to' , 'exec1' ) ) ; // Same as env1;
42
+ const env4 = createEnv ( 'env4' , '3.8.1 ' , PythonEnvKind . Conda , path . join ( 'path' , 'to' , 'exec2' ) ) ; // Same as env2;
43
+ const env5 = createEnv ( 'env5' , '3.5.12b1 ' , PythonEnvKind . Venv , path . join ( 'path' , 'to' , 'exec1' ) ) ; // Same as env1;
44
44
const environmentsToBeIterated = [ env1 , env2 , env3 , env4 , env5 ] ; // Contains 3 unique environments
45
45
const pythonEnvManager = new SimpleLocator ( environmentsToBeIterated ) ;
46
46
const onUpdatedEvents : ( PythonEnvUpdatedEvent | null ) [ ] = [ ] ;
@@ -160,21 +160,59 @@ suite('Environments Reducer', () => {
160
160
assert . deepEqual ( events , expected ) ;
161
161
} ) ;
162
162
163
- test ( 'Calls locator manager to resolves environments' , async ( ) => {
164
- const env = createEnv ( 'env1' , '3.8' , PythonEnvKind . Unknown , path . join ( 'path' , 'to' , 'exec' ) ) ;
165
- const resolvedEnv = createEnv ( 'env1' , '3.8.1' , PythonEnvKind . Conda , 'resolved/path/to/exec' ) ;
166
- const pythonEnvManager = new SimpleLocator ( [ ] , {
167
- resolve : async ( e : PythonEnvInfo ) => {
168
- if ( e === env ) {
169
- return resolvedEnv ;
170
- }
171
- return undefined ;
172
- } ,
163
+ suite ( 'resolveEnv()' , ( ) => {
164
+ test ( 'Iterates environments from the reducer to get resolved environment, then calls into locator manager to resolve environment further and return it' , async ( ) => {
165
+ const env1 = createEnv ( 'env1' , '3.8' , PythonEnvKind . Unknown , path . join ( 'path' , 'to' , 'exec' ) ) ;
166
+ const env2 = createEnv ( 'env2' , '2.7' , PythonEnvKind . System , path . join ( 'path' , 'to' , 'exec3' ) ) ;
167
+ const env3 = createEnv ( 'env3' , '3.8.1' , PythonEnvKind . Conda , path . join ( 'path' , 'to' , 'exec' ) ) ;
168
+ const env4 = createEnv ( 'env4' , '3.8.1' , PythonEnvKind . Conda , path . join ( 'path' , 'to' , 'exec2' ) ) ;
169
+ const env5 = createEnv ( 'env5' , '3.5.12b1' , PythonEnvKind . Venv , path . join ( 'path' , 'to' , 'exec1' ) ) ;
170
+ const env6 = createEnv ( 'env6' , '3.8.1' , PythonEnvKind . System , path . join ( 'path' , 'to' , 'exec' ) ) ;
171
+ const environmentsToBeIterated = [ env1 , env2 , env3 , env4 , env5 , env6 ] ; // env1 env3 env6 are same
172
+
173
+ const env13 = mergeEnvironments ( env1 , env3 ) ;
174
+ const env136 = mergeEnvironments ( env13 , env6 ) ;
175
+ const expectedResolvedEnv = createEnv ( 'resolvedEnv' , '3.8.1' , PythonEnvKind . Conda , 'resolved/path/to/exec' ) ;
176
+ const pythonEnvManager = new SimpleLocator ( environmentsToBeIterated , {
177
+ resolve : async ( e : PythonEnvInfo ) => {
178
+ if ( isEqual ( e , env136 ) ) {
179
+ return expectedResolvedEnv ;
180
+ }
181
+ return undefined ;
182
+ } ,
183
+ } ) ;
184
+ const reducer = new PythonEnvsReducer ( pythonEnvManager ) ;
185
+
186
+ // Trying to resolve the environment corresponding to env1 env3 env6
187
+ const expected = await reducer . resolveEnv ( path . join ( 'path' , 'to' , 'exec' ) ) ;
188
+
189
+ assert . deepEqual ( expected , expectedResolvedEnv ) ;
173
190
} ) ;
174
- const reducer = new PythonEnvsReducer ( pythonEnvManager ) ;
175
191
176
- const expected = await reducer . resolveEnv ( env ) ;
192
+ test ( "If the reducer isn't able to resolve environment, return undefined" , async ( ) => {
193
+ const env1 = createEnv ( 'env1' , '3.8' , PythonEnvKind . Unknown , path . join ( 'path' , 'to' , 'exec' ) ) ;
194
+ const env2 = createEnv ( 'env2' , '2.7' , PythonEnvKind . System , path . join ( 'path' , 'to' , 'exec3' ) ) ;
195
+ const env3 = createEnv ( 'env3' , '3.8.1' , PythonEnvKind . Conda , path . join ( 'path' , 'to' , 'exec' ) ) ;
196
+ const env4 = createEnv ( 'env4' , '3.8.1' , PythonEnvKind . Conda , path . join ( 'path' , 'to' , 'exec2' ) ) ;
197
+ const env5 = createEnv ( 'env5' , '3.5.12b1' , PythonEnvKind . Venv , path . join ( 'path' , 'to' , 'exec1' ) ) ;
198
+ const env6 = createEnv ( 'env6' , '3.8.1' , PythonEnvKind . System , path . join ( 'path' , 'to' , 'exec' ) ) ;
199
+ const environmentsToBeIterated = [ env1 , env2 , env3 , env4 , env5 , env6 ] ; // env1 env3 env6 are same
200
+
201
+ const env13 = mergeEnvironments ( env1 , env3 ) ;
202
+ const env136 = mergeEnvironments ( env13 , env6 ) ;
203
+ const pythonEnvManager = new SimpleLocator ( environmentsToBeIterated , {
204
+ resolve : async ( e : PythonEnvInfo ) => {
205
+ if ( isEqual ( e , env136 ) ) {
206
+ return createEnv ( 'resolvedEnv' , '3.8.1' , PythonEnvKind . Conda , 'resolved/path/to/exec' ) ;
207
+ }
208
+ return undefined ;
209
+ } ,
210
+ } ) ;
211
+ const reducer = new PythonEnvsReducer ( pythonEnvManager ) ;
212
+
213
+ const expected = await reducer . resolveEnv ( path . join ( 'path' , 'to' , 'execNeverSeenBefore' ) ) ;
177
214
178
- assert . deepEqual ( expected , resolvedEnv ) ;
215
+ assert . deepEqual ( expected , undefined ) ;
216
+ } ) ;
179
217
} ) ;
180
218
} ) ;
0 commit comments