diff --git a/src/client/terminals/pythonStartup.ts b/src/client/terminals/pythonStartup.ts index 542a2e6a6355..28878713a8db 100644 --- a/src/client/terminals/pythonStartup.ts +++ b/src/client/terminals/pythonStartup.ts @@ -3,10 +3,10 @@ import { ExtensionContext, Uri } from 'vscode'; import * as path from 'path'; -import { copy, createDirectory, getConfiguration } from '../common/vscodeApis/workspaceApis'; +import { copy, createDirectory, getConfiguration, onDidChangeConfiguration } from '../common/vscodeApis/workspaceApis'; import { EXTENSION_ROOT_DIR } from '../constants'; -export async function registerPythonStartup(context: ExtensionContext): Promise { +async function applyPythonStartupSetting(context: ExtensionContext): Promise { const config = getConfiguration('python'); const pythonrcSetting = config.get('terminal.shellIntegration.enabled'); @@ -25,3 +25,14 @@ export async function registerPythonStartup(context: ExtensionContext): Promise< context.environmentVariableCollection.delete('PYTHONSTARTUP'); } } + +export async function registerPythonStartup(context: ExtensionContext): Promise { + await applyPythonStartupSetting(context); + context.subscriptions.push( + onDidChangeConfiguration(async (e) => { + if (e.affectsConfiguration('python.terminal.shellIntegration.enabled')) { + await applyPythonStartupSetting(context); + } + }), + ); +} diff --git a/src/test/terminals/shellIntegration/pythonStartup.test.ts b/src/test/terminals/shellIntegration/pythonStartup.test.ts index 06364c9445aa..45535d0ceecc 100644 --- a/src/test/terminals/shellIntegration/pythonStartup.test.ts +++ b/src/test/terminals/shellIntegration/pythonStartup.test.ts @@ -12,6 +12,7 @@ import { TerminalLinkContext, Terminal, EventEmitter, + workspace, } from 'vscode'; import { assert } from 'chai'; import * as workspaceApis from '../../../client/common/vscodeApis/workspaceApis'; @@ -35,6 +36,7 @@ suite('Terminal - Shell Integration with PYTHONSTARTUP', () => { globalEnvironmentVariableCollection = TypeMoq.Mock.ofType(); context.setup((c) => c.environmentVariableCollection).returns(() => globalEnvironmentVariableCollection.object); context.setup((c) => c.storageUri).returns(() => Uri.parse('a')); + context.setup((c) => c.subscriptions).returns(() => []); globalEnvironmentVariableCollection .setup((c) => c.replace(TypeMoq.It.isAny(), TypeMoq.It.isAny(), TypeMoq.It.isAny())) @@ -146,6 +148,17 @@ suite('Terminal - Shell Integration with PYTHONSTARTUP', () => { registerTerminalLinkProviderStub.restore(); }); + + test('Verify onDidChangeConfiguration is called when configuration changes', async () => { + const onDidChangeConfigurationSpy = sinon.spy(workspace, 'onDidChangeConfiguration'); + pythonConfig.setup((p) => p.get('terminal.shellIntegration.enabled')).returns(() => true); + + await registerPythonStartup(context.object); + + assert.isTrue(onDidChangeConfigurationSpy.calledOnce); + onDidChangeConfigurationSpy.restore(); + }); + if (process.platform === 'darwin') { test('Mac - Verify provideTerminalLinks returns links when context.line contains expectedNativeLink', () => { const provider = new CustomTerminalLinkProvider();