diff --git a/news/2 Fixes/11122.md b/news/2 Fixes/11122.md new file mode 100644 index 000000000000..7304c9aac45a --- /dev/null +++ b/news/2 Fixes/11122.md @@ -0,0 +1 @@ +Check for hideFromUser before activating current terminal. diff --git a/src/client/providers/terminalProvider.ts b/src/client/providers/terminalProvider.ts index 628bad8fa022..15f1241d88ce 100644 --- a/src/client/providers/terminalProvider.ts +++ b/src/client/providers/terminalProvider.ts @@ -24,13 +24,15 @@ export class TerminalProvider implements Disposable { const configuration = this.serviceContainer.get(IConfigurationService); const pythonSettings = configuration.getSettings(this.activeResourceService.getActiveResource()); - if (pythonSettings.terminal.activateEnvInCurrentTerminal) { - if (currentTerminal) { + if (currentTerminal && pythonSettings.terminal.activateEnvInCurrentTerminal) { + const hideFromUser = + 'hideFromUser' in currentTerminal.creationOptions && currentTerminal.creationOptions.hideFromUser; + if (!hideFromUser) { const terminalActivator = this.serviceContainer.get(ITerminalActivator); await terminalActivator.activateEnvironmentInTerminal(currentTerminal, { preserveFocus: true }); } sendTelemetryEvent(EventName.ACTIVATE_ENV_IN_CURRENT_TERMINAL, undefined, { - isTerminalVisible: currentTerminal ? true : false + isTerminalVisible: !hideFromUser }); } } diff --git a/src/test/providers/terminal.unit.test.ts b/src/test/providers/terminal.unit.test.ts index 3e852b63dc2d..aa1fc837cfd1 100644 --- a/src/test/providers/terminal.unit.test.ts +++ b/src/test/providers/terminal.unit.test.ts @@ -122,6 +122,11 @@ suite('Terminal Provider', () => { .returns(() => activeResourceService.object); terminal = TypeMoq.Mock.ofType(); + terminal + .setup((c) => c.creationOptions) + .returns(() => { + return { hideFromUser: false }; + }); }); test('If terminal.activateCurrentTerminal setting is set, provided terminal should be activated', async () => { @@ -168,6 +173,34 @@ suite('Terminal Provider', () => { configService.verifyAll(); }); + test('If terminal.activateCurrentTerminal setting is set, but hideFromUser is true, provided terminal should not be activated', async () => { + terminalSettings.setup((t) => t.activateEnvInCurrentTerminal).returns(() => true); + configService + .setup((c) => c.getSettings(resource)) + .returns(() => pythonSettings.object) + .verifiable(TypeMoq.Times.once()); + activeResourceService + .setup((a) => a.getActiveResource()) + .returns(() => resource) + .verifiable(TypeMoq.Times.once()); + + terminal + .setup((c) => c.creationOptions) + .returns(() => { + return { hideFromUser: true }; + }); + + terminalProvider = new TerminalProvider(serviceContainer.object); + await terminalProvider.initialize(terminal.object); + + terminalActivator.verify( + (a) => a.activateEnvironmentInTerminal(TypeMoq.It.isAny(), TypeMoq.It.isAny()), + TypeMoq.Times.never() + ); + activeResourceService.verifyAll(); + configService.verifyAll(); + }); + test('terminal.activateCurrentTerminal setting is set but provided terminal is undefined', async () => { terminalSettings.setup((t) => t.activateEnvInCurrentTerminal).returns(() => true); configService