From 24279293e97a52251cade6c5080c9dac99fcc202 Mon Sep 17 00:00:00 2001 From: Karthik Nadig Date: Mon, 13 Jul 2020 16:20:56 -0700 Subject: [PATCH 1/3] Check for hideFromUser before activating current terminal --- news/2 Fixes/11122.md | 1 + src/client/providers/terminalProvider.ts | 7 ++++++- 2 files changed, 7 insertions(+), 1 deletion(-) create mode 100644 news/2 Fixes/11122.md 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..0f6e641d5be6 100644 --- a/src/client/providers/terminalProvider.ts +++ b/src/client/providers/terminalProvider.ts @@ -24,7 +24,12 @@ export class TerminalProvider implements Disposable { const configuration = this.serviceContainer.get(IConfigurationService); const pythonSettings = configuration.getSettings(this.activeResourceService.getActiveResource()); - if (pythonSettings.terminal.activateEnvInCurrentTerminal) { + const shouldActivate = + currentTerminal && + 'hideFromUser' in currentTerminal.creationOptions && + !currentTerminal.creationOptions.hideFromUser; + + if (pythonSettings.terminal.activateEnvInCurrentTerminal && shouldActivate) { if (currentTerminal) { const terminalActivator = this.serviceContainer.get(ITerminalActivator); await terminalActivator.activateEnvironmentInTerminal(currentTerminal, { preserveFocus: true }); From 2b5835f10266f03f965a6d6d882161822fac7977 Mon Sep 17 00:00:00 2001 From: Karthik Nadig Date: Mon, 13 Jul 2020 16:42:06 -0700 Subject: [PATCH 2/3] Add tests --- src/test/providers/terminal.unit.test.ts | 33 ++++++++++++++++++++++++ 1 file changed, 33 insertions(+) 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 From b11bd030048dbdd6260c0d8a393093557d9cf795 Mon Sep 17 00:00:00 2001 From: Karthik Nadig Date: Mon, 13 Jul 2020 21:32:09 -0700 Subject: [PATCH 3/3] Tweak logic --- src/client/providers/terminalProvider.ts | 13 +++++-------- 1 file changed, 5 insertions(+), 8 deletions(-) diff --git a/src/client/providers/terminalProvider.ts b/src/client/providers/terminalProvider.ts index 0f6e641d5be6..15f1241d88ce 100644 --- a/src/client/providers/terminalProvider.ts +++ b/src/client/providers/terminalProvider.ts @@ -24,18 +24,15 @@ export class TerminalProvider implements Disposable { const configuration = this.serviceContainer.get(IConfigurationService); const pythonSettings = configuration.getSettings(this.activeResourceService.getActiveResource()); - const shouldActivate = - currentTerminal && - 'hideFromUser' in currentTerminal.creationOptions && - !currentTerminal.creationOptions.hideFromUser; - - if (pythonSettings.terminal.activateEnvInCurrentTerminal && shouldActivate) { - 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 }); } }