@@ -20,6 +20,8 @@ import {
2020 ITerminalSettings ,
2121} from '../../../../client/common/types' ;
2222import * as extapi from '../../../../client/envExt/api.internal' ;
23+ import * as workspaceApis from '../../../../client/common/vscodeApis/workspaceApis' ;
24+ import * as extensionsApi from '../../../../client/common/vscodeApis/extensionsApi' ;
2325
2426suite ( 'Terminal Activator' , ( ) => {
2527 let activator : TerminalActivator ;
@@ -29,9 +31,12 @@ suite('Terminal Activator', () => {
2931 let terminalSettings : TypeMoq . IMock < ITerminalSettings > ;
3032 let experimentService : TypeMoq . IMock < IExperimentService > ;
3133 let useEnvExtensionStub : sinon . SinonStub ;
34+ let shouldEnvExtHandleActivationStub : sinon . SinonStub ;
3235 setup ( ( ) => {
3336 useEnvExtensionStub = sinon . stub ( extapi , 'useEnvExtension' ) ;
3437 useEnvExtensionStub . returns ( false ) ;
38+ shouldEnvExtHandleActivationStub = sinon . stub ( extapi , 'shouldEnvExtHandleActivation' ) ;
39+ shouldEnvExtHandleActivationStub . returns ( false ) ;
3540
3641 baseActivator = TypeMoq . Mock . ofType < ITerminalActivator > ( ) ;
3742 terminalSettings = TypeMoq . Mock . ofType < ITerminalSettings > ( ) ;
@@ -113,4 +118,72 @@ suite('Terminal Activator', () => {
113118 test ( 'Terminal is not activated if auto-activate setting is set to true but terminal is hidden' , ( ) =>
114119 testActivationAndHandlers ( false , true , true ) ) ;
115120 test ( 'Terminal is not activated and handlers are invoked' , ( ) => testActivationAndHandlers ( false , false ) ) ;
121+
122+ test ( 'Terminal is not activated from Python extension when Env extension should handle activation' , async ( ) => {
123+ shouldEnvExtHandleActivationStub . returns ( true ) ;
124+ terminalSettings . setup ( ( b ) => b . activateEnvironment ) . returns ( ( ) => true ) ;
125+ baseActivator
126+ . setup ( ( b ) => b . activateEnvironmentInTerminal ( TypeMoq . It . isAny ( ) , TypeMoq . It . isAny ( ) ) )
127+ . returns ( ( ) => Promise . resolve ( true ) )
128+ . verifiable ( TypeMoq . Times . never ( ) ) ;
129+
130+ const terminal = TypeMoq . Mock . ofType < Terminal > ( ) ;
131+ const activated = await activator . activateEnvironmentInTerminal ( terminal . object , {
132+ preserveFocus : true ,
133+ } ) ;
134+
135+ assert . strictEqual ( activated , false ) ;
136+ baseActivator . verifyAll ( ) ;
137+ } ) ;
138+ } ) ;
139+
140+ suite ( 'shouldEnvExtHandleActivation' , ( ) => {
141+ let getExtensionStub : sinon . SinonStub ;
142+ let getConfigurationStub : sinon . SinonStub ;
143+
144+ setup ( ( ) => {
145+ getExtensionStub = sinon . stub ( extensionsApi , 'getExtension' ) ;
146+ getConfigurationStub = sinon . stub ( workspaceApis , 'getConfiguration' ) ;
147+ } ) ;
148+
149+ teardown ( ( ) => {
150+ sinon . restore ( ) ;
151+ } ) ;
152+
153+ test ( 'Returns false when envs extension is not installed' , ( ) => {
154+ getExtensionStub . returns ( undefined ) ;
155+ assert . strictEqual ( extapi . shouldEnvExtHandleActivation ( ) , false ) ;
156+ } ) ;
157+
158+ test ( 'Returns true when envs extension is installed and setting is not explicitly set' , ( ) => {
159+ getExtensionStub . returns ( { id : extapi . ENVS_EXTENSION_ID } ) ;
160+ getConfigurationStub . returns ( {
161+ inspect : ( ) => ( { globalValue : undefined , workspaceValue : undefined } ) ,
162+ } ) ;
163+ assert . strictEqual ( extapi . shouldEnvExtHandleActivation ( ) , true ) ;
164+ } ) ;
165+
166+ test ( 'Returns false when envs extension is installed but globalValue is false' , ( ) => {
167+ getExtensionStub . returns ( { id : extapi . ENVS_EXTENSION_ID } ) ;
168+ getConfigurationStub . returns ( {
169+ inspect : ( ) => ( { globalValue : false , workspaceValue : undefined } ) ,
170+ } ) ;
171+ assert . strictEqual ( extapi . shouldEnvExtHandleActivation ( ) , false ) ;
172+ } ) ;
173+
174+ test ( 'Returns false when envs extension is installed but workspaceValue is false' , ( ) => {
175+ getExtensionStub . returns ( { id : extapi . ENVS_EXTENSION_ID } ) ;
176+ getConfigurationStub . returns ( {
177+ inspect : ( ) => ( { globalValue : undefined , workspaceValue : false } ) ,
178+ } ) ;
179+ assert . strictEqual ( extapi . shouldEnvExtHandleActivation ( ) , false ) ;
180+ } ) ;
181+
182+ test ( 'Returns true when envs extension is installed and setting is explicitly true' , ( ) => {
183+ getExtensionStub . returns ( { id : extapi . ENVS_EXTENSION_ID } ) ;
184+ getConfigurationStub . returns ( {
185+ inspect : ( ) => ( { globalValue : true , workspaceValue : undefined } ) ,
186+ } ) ;
187+ assert . strictEqual ( extapi . shouldEnvExtHandleActivation ( ) , true ) ;
188+ } ) ;
116189} ) ;
0 commit comments