diff --git a/src/client/common/terminal/environmentActivationProviders/pipEnvActivationProvider.ts b/src/client/common/terminal/environmentActivationProviders/pipEnvActivationProvider.ts index be61c16ccbda..9d810ef71ccc 100644 --- a/src/client/common/terminal/environmentActivationProviders/pipEnvActivationProvider.ts +++ b/src/client/common/terminal/environmentActivationProviders/pipEnvActivationProvider.ts @@ -26,6 +26,6 @@ export class PipEnvActivationCommandProvider implements ITerminalActivationComma } const execName = this.pipenvService.executable; - return [`${execName} shell`]; + return [`${execName.toCommandArgument()} shell`]; } } diff --git a/src/test/common/terminals/environmentActivationProviders/pipEnvActivationProvider.unit.test.ts b/src/test/common/terminals/environmentActivationProviders/pipEnvActivationProvider.unit.test.ts index 4b42cfe9d1c1..04e292dc524c 100644 --- a/src/test/common/terminals/environmentActivationProviders/pipEnvActivationProvider.unit.test.ts +++ b/src/test/common/terminals/environmentActivationProviders/pipEnvActivationProvider.unit.test.ts @@ -18,6 +18,7 @@ import { InterpreterService } from '../../../../client/interpreter/interpreterSe suite('Terminals Activation - Pipenv', () => { [undefined, Uri.parse('x')].forEach(resource => { suite(resource ? 'With a resource' : 'Without a resource', () => { + let pipenvExecFile = 'pipenv'; let activationProvider: ITerminalActivationCommandProvider; let interpreterService: IInterpreterService; let pipenvService: TypeMoq.IMock; @@ -29,7 +30,7 @@ suite('Terminals Activation - Pipenv', () => { pipenvService.object ); - pipenvService.setup(p => p.executable).returns(() => 'pipenv'); + pipenvService.setup(p => p.executable).returns(() => pipenvExecFile); }); test('No commands for no interpreter', async () => { @@ -63,6 +64,16 @@ suite('Terminals Activation - Pipenv', () => { assert.deepEqual(cmd, ['pipenv shell']); } }); + test('pipenv is properly escaped', async () => { + pipenvExecFile = 'my pipenv'; + when(interpreterService.getActiveInterpreter(resource)).thenResolve({ type: InterpreterType.Pipenv } as any); + + for (const shell of getNamesAndValues(TerminalShellType)) { + const cmd = await activationProvider.getActivationCommands(resource, shell.value); + + assert.deepEqual(cmd, ['"my pipenv" shell']); + } + }); }); }); });