Path: blob/main/src/vs/platform/externalTerminal/test/electron-main/externalTerminalService.test.ts
3296 views
/*---------------------------------------------------------------------------------------------1* Copyright (c) Microsoft Corporation. All rights reserved.2* Licensed under the MIT License. See License.txt in the project root for license information.3*--------------------------------------------------------------------------------------------*/45import { deepStrictEqual, strictEqual } from 'assert';6import { ensureNoDisposablesAreLeakedInTestSuite } from '../../../../base/test/common/utils.js';7import { DEFAULT_TERMINAL_OSX, IExternalTerminalConfiguration } from '../../common/externalTerminal.js';8import { LinuxExternalTerminalService, MacExternalTerminalService, WindowsExternalTerminalService } from '../../node/externalTerminalService.js';910const mockConfig = Object.freeze<IExternalTerminalConfiguration>({11terminal: {12explorerKind: 'external',13external: {14windowsExec: 'testWindowsShell',15osxExec: 'testOSXShell',16linuxExec: 'testLinuxShell'17}18}19});2021suite('ExternalTerminalService', () => {22ensureNoDisposablesAreLeakedInTestSuite();2324test(`WinTerminalService - uses terminal from configuration`, done => {25const testShell = 'cmd';26const testCwd = 'path/to/workspace';27const mockSpawner: any = {28spawn: (command: any, args: any, opts: any) => {29strictEqual(command, testShell, 'shell should equal expected');30strictEqual(args[args.length - 1], mockConfig.terminal.external.windowsExec);31strictEqual(opts.cwd, testCwd);32done();33return {34on: (evt: any) => evt35};36}37};38const testService = new WindowsExternalTerminalService();39testService.spawnTerminal(40mockSpawner,41mockConfig.terminal.external,42testShell,43testCwd44);45});4647test(`WinTerminalService - uses default terminal when configuration.terminal.external.windowsExec is undefined`, done => {48const testShell = 'cmd';49const testCwd = 'path/to/workspace';50const mockSpawner: any = {51spawn: (command: any, args: any, opts: any) => {52strictEqual(args[args.length - 1], WindowsExternalTerminalService.getDefaultTerminalWindows());53done();54return {55on: (evt: any) => evt56};57}58};59mockConfig.terminal.external.windowsExec = undefined;60const testService = new WindowsExternalTerminalService();61testService.spawnTerminal(62mockSpawner,63mockConfig.terminal.external,64testShell,65testCwd66);67});6869test(`WinTerminalService - cwd is correct regardless of case`, done => {70const testShell = 'cmd';71const testCwd = 'c:/foo';72const mockSpawner: any = {73spawn: (command: any, args: any, opts: any) => {74strictEqual(opts.cwd, 'C:/foo', 'cwd should be uppercase regardless of the case that\'s passed in');75done();76return {77on: (evt: any) => evt78};79}80};81const testService = new WindowsExternalTerminalService();82testService.spawnTerminal(83mockSpawner,84mockConfig.terminal.external,85testShell,86testCwd87);88});8990test(`WinTerminalService - cmder should be spawned differently`, done => {91const testShell = 'cmd';92const testCwd = 'c:/foo';93const mockSpawner: any = {94spawn: (command: any, args: any, opts: any) => {95deepStrictEqual(args, ['C:/foo']);96strictEqual(opts, undefined);97done();98return { on: (evt: any) => evt };99}100};101const testService = new WindowsExternalTerminalService();102testService.spawnTerminal(103mockSpawner,104{ windowsExec: 'cmder' },105testShell,106testCwd107);108});109110test(`WinTerminalService - windows terminal should open workspace directory`, done => {111const testShell = 'wt';112const testCwd = 'c:/foo';113const mockSpawner: any = {114spawn: (command: any, args: any, opts: any) => {115strictEqual(opts.cwd, 'C:/foo');116done();117return { on: (evt: any) => evt };118}119};120const testService = new WindowsExternalTerminalService();121testService.spawnTerminal(122mockSpawner,123mockConfig.terminal.external,124testShell,125testCwd126);127});128129test(`MacTerminalService - uses terminal from configuration`, done => {130const testCwd = 'path/to/workspace';131const mockSpawner: any = {132spawn: (command: any, args: any, opts: any) => {133strictEqual(args[1], mockConfig.terminal.external.osxExec);134done();135return {136on: (evt: any) => evt137};138}139};140const testService = new MacExternalTerminalService();141testService.spawnTerminal(142mockSpawner,143mockConfig.terminal.external,144testCwd145);146});147148test(`MacTerminalService - uses default terminal when configuration.terminal.external.osxExec is undefined`, done => {149const testCwd = 'path/to/workspace';150const mockSpawner: any = {151spawn: (command: any, args: any, opts: any) => {152strictEqual(args[1], DEFAULT_TERMINAL_OSX);153done();154return {155on: (evt: any) => evt156};157}158};159const testService = new MacExternalTerminalService();160testService.spawnTerminal(161mockSpawner,162{ osxExec: undefined },163testCwd164);165});166167test(`LinuxTerminalService - uses terminal from configuration`, done => {168const testCwd = 'path/to/workspace';169const mockSpawner: any = {170spawn: (command: any, args: any, opts: any) => {171strictEqual(command, mockConfig.terminal.external.linuxExec);172strictEqual(opts.cwd, testCwd);173done();174return {175on: (evt: any) => evt176};177}178};179const testService = new LinuxExternalTerminalService();180testService.spawnTerminal(181mockSpawner,182mockConfig.terminal.external,183testCwd184);185});186187test(`LinuxTerminalService - uses default terminal when configuration.terminal.external.linuxExec is undefined`, done => {188LinuxExternalTerminalService.getDefaultTerminalLinuxReady().then(defaultTerminalLinux => {189const testCwd = 'path/to/workspace';190const mockSpawner: any = {191spawn: (command: any, args: any, opts: any) => {192strictEqual(command, defaultTerminalLinux);193done();194return {195on: (evt: any) => evt196};197}198};199mockConfig.terminal.external.linuxExec = undefined;200const testService = new LinuxExternalTerminalService();201testService.spawnTerminal(202mockSpawner,203mockConfig.terminal.external,204testCwd205);206});207});208});209210211