From 078d994bb3dd389593c7d2407e123b2341093167 Mon Sep 17 00:00:00 2001 From: Dirk Baeumer Date: Mon, 30 Jan 2017 12:36:12 +0100 Subject: [PATCH] Fixes #19548: insiders: tasks not found on osx --- .../tasks/node/processRunnerConfiguration.ts | 29 +- .../tasks/test/node/configuration.test.ts | 440 ++++++++++-------- 2 files changed, 274 insertions(+), 195 deletions(-) diff --git a/src/vs/workbench/parts/tasks/node/processRunnerConfiguration.ts b/src/vs/workbench/parts/tasks/node/processRunnerConfiguration.ts index 861e9405535..aa8dc79c620 100644 --- a/src/vs/workbench/parts/tasks/node/processRunnerConfiguration.ts +++ b/src/vs/workbench/parts/tasks/node/processRunnerConfiguration.ts @@ -631,11 +631,15 @@ namespace TaskDescription { testTask?: string; } + export function isEmpty(value: TaskConfiguration): boolean { + return !value || !value.tasks || Object.keys(value.tasks).length === 0; + } + export function from(this: void, tasks: TaskDescription[], globals: Globals, context: ParseContext): TaskConfiguration { - let result: IStringDictionary = Object.create(null); if (!tasks) { - return { tasks: result }; + return undefined; } + let parsedTasks: IStringDictionary = Object.create(null); let defaultBuildTask: { id: string; exact: number; } = { id: null, exact: -1 }; let defaultTestTask: { id: string; exact: number; } = { id: null, exact: -1 }; tasks.forEach((externalTask) => { @@ -682,7 +686,7 @@ namespace TaskDescription { } mergeGlobals(task, globals); fillDefaults(task); - result[task.id] = task; + parsedTasks[task.id] = task; if (context.isTermnial && task.command && task.command.isShellCommand && task.command.args && task.command.args.length > 0) { context.validationStatus.state = ValidationState.Warning; context.logger.log(nls.localize('ConfigurationParser.shellArgs', 'The task {0} is a shell command and specifies arguments. To ensure correct command line quoting please merge args into the command.', task.name)); @@ -710,10 +714,18 @@ namespace TaskDescription { if (defaultTestTask.exact > 0) { testTask = defaultTestTask.id; } - return { tasks: result, buildTask, testTask }; + let result = { tasks: parsedTasks, buildTask, testTask }; + return isEmpty(result) ? undefined : result; } export function merge(target: TaskConfiguration, source: TaskConfiguration): TaskConfiguration { + if (isEmpty(source)) { + return target; + } + if (isEmpty(target)) { + return source; + } + if (source.tasks) { // Tasks are keyed by ID but we need to merge by name let targetNames: IStringDictionary = Object.create(null); @@ -921,10 +933,10 @@ class ConfigurationParser { let taskConfig: TaskDescription.TaskConfiguration; if (fileConfig.tasks) { taskConfig = TaskDescription.from(fileConfig.tasks, globals, context); - if (globalTasks) { - taskConfig = TaskDescription.merge(taskConfig, globalTasks); - } - } else { + } + taskConfig = TaskDescription.merge(taskConfig, globalTasks); + + if (TaskDescription.isEmpty(taskConfig)) { let tasks: IStringDictionary = Object.create(null); let buildTask: string; if (globals.command && globals.command.name) { @@ -944,6 +956,7 @@ class ConfigurationParser { tasks[task.id] = task; buildTask = task.id; } + taskConfig = { tasks: tasks, buildTask diff --git a/src/vs/workbench/parts/tasks/test/node/configuration.test.ts b/src/vs/workbench/parts/tasks/test/node/configuration.test.ts index 6b383946304..e2f0120af0c 100644 --- a/src/vs/workbench/parts/tasks/test/node/configuration.test.ts +++ b/src/vs/workbench/parts/tasks/test/node/configuration.test.ts @@ -269,13 +269,163 @@ class PatternBuilder { } } +function testDefaultProblemMatcher(external: ExternalTaskRunnerConfiguration, resolved: number) { + let logger = new Logger(); + let result = parse(external, logger); + assert.ok(!logger.receivedMessage); + let config = result.configuration; + let keys = Object.keys(config.tasks); + assert.strictEqual(keys.length, 1); + let task = config.tasks[keys[0]]; + assert.ok(task); + assert.strictEqual(task.problemMatchers.length, resolved); + +} + +function testConfiguration(external: ExternalTaskRunnerConfiguration, builder: ConfiguationBuilder): void { + let logger = new Logger(); + let result = parse(external, logger); + if (logger.receivedMessage) { + assert.ok(false, logger.lastMessage); + } + assertConfiguration(result, builder.result); +} + +function assertConfiguration(result: ParseResult, expected: TaskSystem.TaskRunnerConfiguration) { + assert.ok(result.validationStatus.isOK()); + let actual = result.configuration; + assert.strictEqual(typeof actual.tasks, typeof expected.tasks); + let actualBuildTasks: string[] = []; + let actualTestTasks: string[] = []; + if (actual.tasks && expected.tasks) { + // We can't compare Ids since the parser uses UUID which are random + // So create a new map using the name. + let actualTasks: { [key: string]: TaskSystem.TaskDescription; } = Object.create(null); + Object.keys(actual.tasks).forEach((key) => { + let task = actual.tasks[key]; + assert.ok(!actualTasks[task.name]); + actualTasks[task.name] = task; + }); + let actualKeys = Object.keys(actualTasks); + let expectedKeys = Object.keys(expected.tasks); + assert.strictEqual(actualKeys.length, expectedKeys.length); + actualKeys.forEach((key) => { + let actualTask = actualTasks[key]; + let expectedTask = expected.tasks[key]; + assert.ok(expectedTask); + assertTask(actualTask, expectedTask); + }); + actual.buildTasks.forEach((id) => { + actualBuildTasks.push(actual.tasks[id].name); + }); + actual.testTasks.forEach((id) => { + actualTestTasks.push(actual.tasks[id].name); + }); + } + assertTaskConfig(actualBuildTasks, expected.buildTasks); + assertTaskConfig(actualTestTasks, expected.testTasks); +} + +function assertTaskConfig(actual: string[], expected: string[]): void { + assert.strictEqual(typeof actual, typeof expected); + if (actual && expected) { + assert.strictEqual(actual.length, expected.length); + assert.deepEqual(actual, expected); + } +} + +function assertTask(actual: TaskSystem.TaskDescription, expected: TaskSystem.TaskDescription) { + assert.ok(actual.id); + assert.strictEqual(actual.name, expected.name, 'name'); + assertCommandConfiguration(actual.command, expected.command); + assert.strictEqual(actual.showOutput, expected.showOutput, 'showOutput'); + assert.strictEqual(actual.suppressTaskName, expected.suppressTaskName, 'suppressTaskName'); + assert.strictEqual(actual.isBackground, expected.isBackground, 'isBackground'); + assert.strictEqual(actual.promptOnClose, expected.promptOnClose, 'promptOnClose'); + assert.strictEqual(typeof actual.problemMatchers, typeof expected.problemMatchers); + if (actual.problemMatchers && expected.problemMatchers) { + assert.strictEqual(actual.problemMatchers.length, expected.problemMatchers.length); + for (let i = 0; i < actual.problemMatchers.length; i++) { + assertProblemMatcher(actual.problemMatchers[i], expected.problemMatchers[i]); + } + } +} + +function assertCommandConfiguration(actual: TaskSystem.CommandConfiguration, expected: TaskSystem.CommandConfiguration) { + assert.strictEqual(typeof actual, typeof expected); + if (actual && expected) { + assert.strictEqual(actual.name, expected.name, 'name'); + assert.strictEqual(actual.isShellCommand, expected.isShellCommand, 'isShellCommand'); + assert.deepEqual(actual.args, expected.args, 'args'); + assert.strictEqual(typeof actual.options, typeof expected.options); + if (actual.options && expected.options) { + assert.strictEqual(actual.options.cwd, expected.options.cwd, 'cwd'); + assert.strictEqual(typeof actual.options.env, typeof expected.options.env, 'env'); + if (actual.options.env && expected.options.env) { + assert.deepEqual(actual.options.env, expected.options.env, 'env'); + } + } + assert.strictEqual(actual.echo, expected.echo, 'echo'); + assert.strictEqual(actual.taskSelector, expected.taskSelector, 'taskSelector'); + } +} + +function assertProblemMatcher(actual: ProblemMatcher, expected: ProblemMatcher) { + if (expected.owner === ProblemMatcherBuilder.DEFAULT_UUID) { + try { + UUID.parse(actual.owner); + } catch (err) { + assert.fail(actual.owner, 'Owner must be a UUID'); + } + } else { + assert.strictEqual(actual.owner, expected.owner); + } + assert.strictEqual(actual.applyTo, expected.applyTo); + assert.strictEqual(actual.severity, expected.severity); + assert.strictEqual(actual.fileLocation, expected.fileLocation); + assert.strictEqual(actual.filePrefix, expected.filePrefix); + if (actual.pattern && expected.pattern) { + assertProblemPatterns(actual.pattern, expected.pattern); + } +} + +function assertProblemPatterns(actual: ProblemPattern | ProblemPattern[], expected: ProblemPattern | ProblemPattern[]) { + assert.strictEqual(typeof actual, typeof expected); + if (Array.isArray(actual)) { + let actuals = actual; + let expecteds = expected; + assert.strictEqual(actuals.length, expecteds.length); + for (let i = 0; i < actuals.length; i++) { + assertProblemPattern(actuals[i], expecteds[i]); + } + } else { + assertProblemPattern(actual, expected); + } +} + +function assertProblemPattern(actual: ProblemPattern, expected: ProblemPattern) { + assert.equal(actual.regexp.toString(), expected.regexp.toString()); + assert.strictEqual(actual.file, expected.file); + assert.strictEqual(actual.message, expected.message); + if (typeof expected.location !== 'undefined') { + assert.strictEqual(actual.location, expected.location); + } else { + assert.strictEqual(actual.line, expected.line); + assert.strictEqual(actual.column, expected.column); + assert.strictEqual(actual.endLine, expected.endLine); + assert.strictEqual(actual.endColumn, expected.endColumn); + } + assert.strictEqual(actual.code, expected.code); + assert.strictEqual(actual.severity, expected.severity); + assert.strictEqual(actual.loop, expected.loop); +} suite('Tasks Configuration parsing tests', () => { test('tasks: all default', () => { - let builder = new ConfiguationBuilder(); + let builder = new ConfiguationBuilder().buildTask('tsc'); builder.task('tsc', 'tsc'). suppressTaskName(true); - testGobalCommand( + testConfiguration( { version: '0.1.0', command: 'tsc' @@ -283,12 +433,12 @@ suite('Tasks Configuration parsing tests', () => { }); test('tasks: global isShellCommand', () => { - let builder = new ConfiguationBuilder(); + let builder = new ConfiguationBuilder().buildTask('tsc'); builder.task('tsc', 'tsc'). suppressTaskName(true). command(). shell(true); - testGobalCommand( + testConfiguration( { version: '0.1.0', command: 'tsc', @@ -298,12 +448,12 @@ suite('Tasks Configuration parsing tests', () => { }); test('tasks: global show output silent', () => { - let builder = new ConfiguationBuilder(); + let builder = new ConfiguationBuilder().buildTask('tsc'); builder. task('tsc', 'tsc'). suppressTaskName(true). showOutput(TaskSystem.ShowOutput.Silent); - testGobalCommand( + testConfiguration( { version: '0.1.0', command: 'tsc', @@ -314,10 +464,10 @@ suite('Tasks Configuration parsing tests', () => { }); test('tasks: global promptOnClose default', () => { - let builder = new ConfiguationBuilder(); + let builder = new ConfiguationBuilder().buildTask('tsc'); builder.task('tsc', 'tsc'). suppressTaskName(true); - testGobalCommand( + testConfiguration( { version: '0.1.0', command: 'tsc', @@ -328,11 +478,11 @@ suite('Tasks Configuration parsing tests', () => { }); test('tasks: global promptOnClose', () => { - let builder = new ConfiguationBuilder(); + let builder = new ConfiguationBuilder().buildTask('tsc'); builder.task('tsc', 'tsc'). suppressTaskName(true). promptOnClose(false); - testGobalCommand( + testConfiguration( { version: '0.1.0', command: 'tsc', @@ -343,12 +493,12 @@ suite('Tasks Configuration parsing tests', () => { }); test('tasks: global promptOnClose default watching', () => { - let builder = new ConfiguationBuilder(); + let builder = new ConfiguationBuilder().buildTask('tsc'); builder.task('tsc', 'tsc'). suppressTaskName(true). isBackground(true). promptOnClose(false); - testGobalCommand( + testConfiguration( { version: '0.1.0', command: 'tsc', @@ -359,12 +509,12 @@ suite('Tasks Configuration parsing tests', () => { }); test('tasks: global show output never', () => { - let builder = new ConfiguationBuilder(); + let builder = new ConfiguationBuilder().buildTask('tsc'); builder. task('tsc', 'tsc'). suppressTaskName(true). showOutput(TaskSystem.ShowOutput.Never); - testGobalCommand( + testConfiguration( { version: '0.1.0', command: 'tsc', @@ -375,13 +525,13 @@ suite('Tasks Configuration parsing tests', () => { }); test('tasks: global echo Command', () => { - let builder = new ConfiguationBuilder(); + let builder = new ConfiguationBuilder().buildTask('tsc'); builder. task('tsc', 'tsc'). suppressTaskName(true). command(). echo(true); - testGobalCommand( + testConfiguration( { version: '0.1.0', command: 'tsc', @@ -392,13 +542,13 @@ suite('Tasks Configuration parsing tests', () => { }); test('tasks: global args', () => { - let builder = new ConfiguationBuilder(); + let builder = new ConfiguationBuilder().buildTask('tsc'); builder. task('tsc', 'tsc'). suppressTaskName(true). command(). args(['--p']); - testGobalCommand( + testConfiguration( { version: '0.1.0', command: 'tsc', @@ -411,7 +561,7 @@ suite('Tasks Configuration parsing tests', () => { }); test('tasks: options - cwd', () => { - let builder = new ConfiguationBuilder(); + let builder = new ConfiguationBuilder().buildTask('tsc'); builder. task('tsc', 'tsc'). suppressTaskName(true). @@ -419,7 +569,7 @@ suite('Tasks Configuration parsing tests', () => { options({ cwd: 'myPath' }); - testGobalCommand( + testConfiguration( { version: '0.1.0', command: 'tsc', @@ -432,13 +582,13 @@ suite('Tasks Configuration parsing tests', () => { }); test('tasks: options - env', () => { - let builder = new ConfiguationBuilder(); + let builder = new ConfiguationBuilder().buildTask('tsc'); builder. task('tsc', 'tsc'). suppressTaskName(true). command(). options({ cwd: '${workspaceRoot}', env: { key: 'value' } }); - testGobalCommand( + testConfiguration( { version: '0.1.0', command: 'tsc', @@ -454,7 +604,7 @@ suite('Tasks Configuration parsing tests', () => { test('tasks: os windows', () => { let name: string = Platform.isWindows ? 'tsc.win' : 'tsc'; - let builder = new ConfiguationBuilder(); + let builder = new ConfiguationBuilder().buildTask(name); builder. task(name, name). suppressTaskName(true); @@ -465,12 +615,12 @@ suite('Tasks Configuration parsing tests', () => { command: 'tsc.win' } }; - testGobalCommand(external, builder); + testConfiguration(external, builder); }); test('tasks: os windows & global isShellCommand', () => { let name: string = Platform.isWindows ? 'tsc.win' : 'tsc'; - let builder = new ConfiguationBuilder(); + let builder = new ConfiguationBuilder().buildTask(name); builder. task(name, name). suppressTaskName(true). @@ -484,12 +634,12 @@ suite('Tasks Configuration parsing tests', () => { command: 'tsc.win' } }; - testGobalCommand(external, builder); + testConfiguration(external, builder); }); test('tasks: os mac', () => { let name: string = Platform.isMacintosh ? 'tsc.osx' : 'tsc'; - let builder = new ConfiguationBuilder(); + let builder = new ConfiguationBuilder().buildTask(name); builder. task(name, name). suppressTaskName(true); @@ -500,12 +650,12 @@ suite('Tasks Configuration parsing tests', () => { command: 'tsc.osx' } }; - testGobalCommand(external, builder); + testConfiguration(external, builder); }); test('tasks: os linux', () => { let name: string = Platform.isLinux ? 'tsc.linux' : 'tsc'; - let builder = new ConfiguationBuilder(); + let builder = new ConfiguationBuilder().buildTask(name); builder. task(name, name). suppressTaskName(true); @@ -516,11 +666,11 @@ suite('Tasks Configuration parsing tests', () => { command: 'tsc.linux' } }; - testGobalCommand(external, builder); + testConfiguration(external, builder); }); test('tasks: overwrite showOutput', () => { - let builder = new ConfiguationBuilder(); + let builder = new ConfiguationBuilder().buildTask('tsc'); builder. task('tsc', 'tsc'). showOutput(Platform.isWindows ? TaskSystem.ShowOutput.Always : TaskSystem.ShowOutput.Never). @@ -533,11 +683,11 @@ suite('Tasks Configuration parsing tests', () => { showOutput: 'always' } }; - testGobalCommand(external, builder); + testConfiguration(external, builder); }); test('tasks: overwrite echo Command', () => { - let builder = new ConfiguationBuilder(); + let builder = new ConfiguationBuilder().buildTask('tsc'); builder. task('tsc', 'tsc'). suppressTaskName(true). @@ -551,7 +701,7 @@ suite('Tasks Configuration parsing tests', () => { echoCommand: false } }; - testGobalCommand(external, builder); + testConfiguration(external, builder); }); test('tasks: global problemMatcher one', () => { @@ -598,10 +748,9 @@ suite('Tasks Configuration parsing tests', () => { } ] }; - let builder = new ConfiguationBuilder(); + let builder = new ConfiguationBuilder().buildTask('taskName'); builder.task('taskName', 'tsc'); - let result = testConfiguration(external, builder); - assert.ok(result.configuration.buildTasks.length === 1); + testConfiguration(external, builder); }); test('tasks: default build task', () => { @@ -614,10 +763,9 @@ suite('Tasks Configuration parsing tests', () => { } ] }; - let builder = new ConfiguationBuilder(); + let builder = new ConfiguationBuilder().buildTask('build'); builder.task('build', 'tsc'); - let result = testConfiguration(external, builder); - assert.ok(result.configuration.buildTasks.length === 1); + testConfiguration(external, builder); }); test('tasks: test task', () => { @@ -631,10 +779,9 @@ suite('Tasks Configuration parsing tests', () => { } ] }; - let builder = new ConfiguationBuilder(); + let builder = new ConfiguationBuilder().testTask('taskName'); builder.task('taskName', 'tsc'); - let result = testConfiguration(external, builder); - assert.ok(result.configuration.testTasks.length === 1); + testConfiguration(external, builder); }); test('tasks: default test task', () => { @@ -647,10 +794,9 @@ suite('Tasks Configuration parsing tests', () => { } ] }; - let builder = new ConfiguationBuilder(); + let builder = new ConfiguationBuilder().testTask('test'); builder.task('test', 'tsc'); - let result = testConfiguration(external, builder); - assert.ok(result.configuration.testTasks.length === 1); + testConfiguration(external, builder); }); test('tasks: task with values', () => { @@ -667,7 +813,7 @@ suite('Tasks Configuration parsing tests', () => { } ] }; - let builder = new ConfiguationBuilder(); + let builder = new ConfiguationBuilder().testTask('test'); builder.task('test', 'tsc'). showOutput(TaskSystem.ShowOutput.Never). args(['--p']). @@ -676,8 +822,7 @@ suite('Tasks Configuration parsing tests', () => { command(). echo(true); - let result = testConfiguration(external, builder); - assert.ok(result.configuration.testTasks.length === 1); + testConfiguration(external, builder); }); test('tasks: task inherits global values', () => { @@ -692,14 +837,13 @@ suite('Tasks Configuration parsing tests', () => { } ] }; - let builder = new ConfiguationBuilder(); + let builder = new ConfiguationBuilder().testTask('test'); builder.task('test', 'tsc'). showOutput(TaskSystem.ShowOutput.Never). command(). echo(true); - let result = testConfiguration(external, builder); - assert.ok(result.configuration.testTasks.length === 1); + testConfiguration(external, builder); }); test('tasks: problem matcher default', () => { @@ -1105,144 +1249,66 @@ suite('Tasks Configuration parsing tests', () => { builder.task('taskNameOne', 'tsc').command().shell(false); testConfiguration(external, builder); }); +}); - function testDefaultProblemMatcher(external: ExternalTaskRunnerConfiguration, resolved: number) { - let logger = new Logger(); - let result = parse(external, logger); - assert.ok(!logger.receivedMessage); - let config = result.configuration; - let keys = Object.keys(config.tasks); - assert.strictEqual(keys.length, 1); - let task = config.tasks[keys[0]]; - assert.ok(task); - assert.strictEqual(task.problemMatchers.length, resolved); - - } - - function testGobalCommand(external: ExternalTaskRunnerConfiguration, builder: ConfiguationBuilder) { - let result = testConfiguration(external, builder); - assert.ok(result.configuration.buildTasks.length === 1); - assert.ok(result.configuration.testTasks.length === 0); - } - - function testConfiguration(external: ExternalTaskRunnerConfiguration, builder: ConfiguationBuilder): ParseResult { - let logger = new Logger(); - let result = parse(external, logger); - if (logger.receivedMessage) { - assert.ok(false, logger.lastMessage); +suite('Bugs / regression tests', () => { + test('Bug 19548', () => { + if (Platform.isLinux) { + return; } - assertConfiguration(result, builder.result); - return result; - } - - function assertConfiguration(result: ParseResult, expected: TaskSystem.TaskRunnerConfiguration) { - assert.ok(result.validationStatus.isOK()); - let actual = result.configuration; - assert.strictEqual(typeof actual.tasks, typeof expected.tasks); - if (actual.tasks && expected.tasks) { - // We can't compare Ids since the parser uses UUID which are random - // So create a new map using the name. - let actualTasks: { [key: string]: TaskSystem.TaskDescription; } = Object.create(null); - Object.keys(actual.tasks).forEach((key) => { - let task = actual.tasks[key]; - assert.ok(!actualTasks[task.name]); - actualTasks[task.name] = task; - }); - let actualKeys = Object.keys(actualTasks); - let expectedKeys = Object.keys(expected.tasks); - assert.strictEqual(actualKeys.length, expectedKeys.length); - actualKeys.forEach((key) => { - let actualTask = actualTasks[key]; - let expectedTask = expected.tasks[key]; - assert.ok(expectedTask); - assertTask(actualTask, expectedTask); - }); - } - } - - function assertTask(actual: TaskSystem.TaskDescription, expected: TaskSystem.TaskDescription) { - assert.ok(actual.id); - assert.strictEqual(actual.name, expected.name, 'name'); - assertCommandConfiguration(actual.command, expected.command); - assert.strictEqual(actual.showOutput, expected.showOutput, 'showOutput'); - assert.strictEqual(actual.suppressTaskName, expected.suppressTaskName, 'suppressTaskName'); - assert.strictEqual(actual.isBackground, expected.isBackground, 'isBackground'); - assert.strictEqual(actual.promptOnClose, expected.promptOnClose, 'promptOnClose'); - assert.strictEqual(typeof actual.problemMatchers, typeof expected.problemMatchers); - if (actual.problemMatchers && expected.problemMatchers) { - assert.strictEqual(actual.problemMatchers.length, expected.problemMatchers.length); - for (let i = 0; i < actual.problemMatchers.length; i++) { - assertProblemMatcher(actual.problemMatchers[i], expected.problemMatchers[i]); - } - } - } - - function assertCommandConfiguration(actual: TaskSystem.CommandConfiguration, expected: TaskSystem.CommandConfiguration) { - assert.strictEqual(typeof actual, typeof expected); - if (actual && expected) { - assert.strictEqual(actual.name, expected.name, 'name'); - assert.strictEqual(actual.isShellCommand, expected.isShellCommand, 'isShellCommand'); - assert.deepEqual(actual.args, expected.args, 'args'); - assert.strictEqual(typeof actual.options, typeof expected.options); - if (actual.options && expected.options) { - assert.strictEqual(actual.options.cwd, expected.options.cwd, 'cwd'); - assert.strictEqual(typeof actual.options.env, typeof expected.options.env, 'env'); - if (actual.options.env && expected.options.env) { - assert.deepEqual(actual.options.env, expected.options.env, 'env'); - } - } - assert.strictEqual(actual.echo, expected.echo, 'echo'); - assert.strictEqual(actual.taskSelector, expected.taskSelector, 'taskSelector'); - } - } - - function assertProblemMatcher(actual: ProblemMatcher, expected: ProblemMatcher) { - if (expected.owner === ProblemMatcherBuilder.DEFAULT_UUID) { - try { - UUID.parse(actual.owner); - } catch (err) { - assert.fail(actual.owner, 'Owner must be a UUID'); - } - } else { - assert.strictEqual(actual.owner, expected.owner); - } - assert.strictEqual(actual.applyTo, expected.applyTo); - assert.strictEqual(actual.severity, expected.severity); - assert.strictEqual(actual.fileLocation, expected.fileLocation); - assert.strictEqual(actual.filePrefix, expected.filePrefix); - if (actual.pattern && expected.pattern) { - assertProblemPatterns(actual.pattern, expected.pattern); - } - } - - function assertProblemPatterns(actual: ProblemPattern | ProblemPattern[], expected: ProblemPattern | ProblemPattern[]) { - assert.strictEqual(typeof actual, typeof expected); - if (Array.isArray(actual)) { - let actuals = actual; - let expecteds = expected; - assert.strictEqual(actuals.length, expecteds.length); - for (let i = 0; i < actuals.length; i++) { - assertProblemPattern(actuals[i], expecteds[i]); + let external: ExternalTaskRunnerConfiguration = { + version: '0.1.0', + windows: { + command: 'powershell', + options: { + cwd: '${workspaceRoot}' + }, + tasks: [ + { + taskName: 'composeForDebug', + suppressTaskName: true, + args: [ + '-ExecutionPolicy', + 'RemoteSigned', + '.\\dockerTask.ps1', + '-ComposeForDebug', + '-Environment', + 'debug' + ], + isBuildCommand: false, + showOutput: 'always', + echoCommand: true + } + ] + }, + osx: { + command: '/bin/bash', + options: { + cwd: '${workspaceRoot}' + }, + tasks: [ + { + taskName: 'composeForDebug', + suppressTaskName: true, + args: [ + '-c', + './dockerTask.sh composeForDebug debug' + ], + isBuildCommand: false, + showOutput: 'always' + } + ] } - } else { - assertProblemPattern(actual, expected); - } - } + }; + let builder = new ConfiguationBuilder(); + if (Platform.isWindows) { + builder.task('composeForDebug', 'powershell'). + suppressTaskName(true).showOutput(TaskSystem.ShowOutput.Always). + args(['-ExecutionPolicy', 'RemoteSigned', '.\\dockerTask.ps1', '-ComposeForDebug', '-Environment', 'debug']). + command().echo(true).options({ cwd: '${workspaceRoot}' }); + } else if (Platform.isMacintosh) { - function assertProblemPattern(actual: ProblemPattern, expected: ProblemPattern) { - assert.equal(actual.regexp.toString(), expected.regexp.toString()); - assert.strictEqual(actual.file, expected.file); - assert.strictEqual(actual.message, expected.message); - if (typeof expected.location !== 'undefined') { - assert.strictEqual(actual.location, expected.location); - } else { - assert.strictEqual(actual.line, expected.line); - assert.strictEqual(actual.column, expected.column); - assert.strictEqual(actual.endLine, expected.endLine); - assert.strictEqual(actual.endColumn, expected.endColumn); } - assert.strictEqual(actual.code, expected.code); - assert.strictEqual(actual.severity, expected.severity); - assert.strictEqual(actual.loop, expected.loop); - } + testConfiguration(external, builder); + }); }); \ No newline at end of file -- GitLab