You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
192 lines
5.9 KiB
192 lines
5.9 KiB
/** |
|
* @author Toru Nagashima |
|
* @copyright 2016 Toru Nagashima. All rights reserved. |
|
* See LICENSE file in root directory for full license. |
|
*/ |
|
'use strict' |
|
|
|
// ------------------------------------------------------------------------------ |
|
// Requirements |
|
// ------------------------------------------------------------------------------ |
|
|
|
const assert = require('assert').strict |
|
const nodeApi = require('../lib') |
|
const spawnWithKill = require('./lib/spawn-with-kill') |
|
const { delay, result, removeResult, runAll, runSeq } = require('./lib/util') |
|
|
|
// ------------------------------------------------------------------------------ |
|
// Test |
|
// ------------------------------------------------------------------------------ |
|
|
|
describe('[sequencial] npm-run-all', () => { |
|
before(() => process.chdir('test-workspace')) |
|
after(() => process.chdir('..')) |
|
|
|
beforeEach(() => delay(1000).then(removeResult)) |
|
|
|
describe('should run tasks sequentially:', () => { |
|
it('Node API', async () => { |
|
const results = await nodeApi(['test-task:append a', 'test-task:append b'], { parallel: false }) |
|
assert(results.length === 2) |
|
assert(results[0].name === 'test-task:append a') |
|
assert(results[0].code === 0) |
|
assert(results[1].name === 'test-task:append b') |
|
assert(results[1].code === 0) |
|
assert(result() === 'aabb') |
|
}) |
|
|
|
it('npm-run-all command', async () => { |
|
await runAll(['test-task:append a', 'test-task:append b']) |
|
assert(result() === 'aabb') |
|
}) |
|
|
|
it('run-s command', async () => { |
|
await runSeq(['test-task:append a', 'test-task:append b']) |
|
assert(result() === 'aabb') |
|
}) |
|
}) |
|
|
|
describe('should not run subsequent tasks if a task exited with a non-zero code:', () => { |
|
it('Node API', async () => { |
|
try { |
|
await nodeApi(['test-task:append2 a', 'test-task:error', 'test-task:append2 b']) |
|
} catch (err) { |
|
assert(err.results.length === 3) |
|
assert(err.results[0].name === 'test-task:append2 a') |
|
assert(err.results[0].code === 0) |
|
assert(err.results[1].name === 'test-task:error') |
|
assert(err.results[1].code === 1) |
|
assert(err.results[2].name === 'test-task:append2 b') |
|
assert(err.results[2].code === undefined) |
|
assert(result() === 'aa') |
|
return |
|
} |
|
assert(false, 'should fail') |
|
}) |
|
|
|
it('npm-run-all command', async () => { |
|
try { |
|
await runAll(['test-task:append2 a', 'test-task:error', 'test-task:append2 b']) |
|
} catch (_err) { |
|
assert(result() === 'aa') |
|
return |
|
} |
|
assert(false, 'should fail') |
|
}) |
|
|
|
it('run-s command', async () => { |
|
try { |
|
await runSeq(['test-task:append2 a', 'test-task:error', 'test-task:append2 b']) |
|
} catch (_err) { |
|
assert(result() === 'aa') |
|
return |
|
} |
|
assert(false, 'should fail') |
|
}) |
|
}) |
|
|
|
describe('should remove intersected tasks from two or more patterns:', () => { |
|
it('Node API', async () => { |
|
await nodeApi(['test-task:*:a', '*:append:a'], { parallel: false }) |
|
assert(result() === 'aa') |
|
}) |
|
|
|
it('npm-run-all command', async () => { |
|
await runAll(['test-task:*:a', '*:append:a']) |
|
assert(result() === 'aa') |
|
}) |
|
|
|
it('run-s command', async () => { |
|
await runSeq(['test-task:*:a', '*:append:a']) |
|
assert(result() === 'aa') |
|
}) |
|
}) |
|
|
|
describe('should not remove duplicate tasks from two or more the same pattern:', () => { |
|
it('Node API', async () => { |
|
await nodeApi(['test-task:*:a', 'test-task:*:a'], { parallel: false }) |
|
assert(result() === 'aaaa') |
|
}) |
|
|
|
it('npm-run-all command', async () => { |
|
await runAll(['test-task:*:a', 'test-task:*:a']) |
|
assert(result() === 'aaaa') |
|
}) |
|
|
|
it('run-s command', async () => { |
|
await runSeq(['test-task:*:a', 'test-task:*:a']) |
|
assert(result() === 'aaaa') |
|
}) |
|
}) |
|
|
|
describe("should kill child processes when it's killed", () => { |
|
it('npm-run-all command', async () => { |
|
await spawnWithKill( |
|
'node', |
|
['../bin/npm-run-all.js', 'test-task:append2 a'] |
|
) |
|
assert(result() == null || result() === 'a') |
|
}) |
|
|
|
it('run-s command', async () => { |
|
await spawnWithKill( |
|
'node', |
|
['../bin/run-s/index.js', 'test-task:append2 a'] |
|
) |
|
assert(result() == null || result() === 'a') |
|
}) |
|
}) |
|
|
|
describe('should continue on error when --continue-on-error option was specified:', () => { |
|
it('Node API', async () => { |
|
try { |
|
await nodeApi(['test-task:append a', 'test-task:error', 'test-task:append b'], { continueOnError: true }) |
|
} catch (_err) { |
|
console.log(result()) // TODO: Spurious failures windows |
|
assert(result() === 'aabb') |
|
return |
|
} |
|
assert(false, 'should fail') |
|
}) |
|
|
|
it('npm-run-all command (--continue-on-error)', async () => { |
|
try { |
|
await runAll(['--continue-on-error', 'test-task:append a', 'test-task:error', 'test-task:append b']) |
|
} catch (_err) { |
|
assert(result() === 'aabb') |
|
return |
|
} |
|
assert(false, 'should fail') |
|
}) |
|
|
|
it('run-s command (--continue-on-error)', async () => { |
|
try { |
|
await runSeq(['--continue-on-error', 'test-task:append a', 'test-task:error', 'test-task:append b']) |
|
} catch (_err) { |
|
assert(result() === 'aabb') |
|
return |
|
} |
|
assert(false, 'should fail') |
|
}) |
|
|
|
it('npm-run-all command (-c)', async () => { |
|
try { |
|
await runAll(['-c', 'test-task:append a', 'test-task:error', 'test-task:append b']) |
|
} catch (_err) { |
|
assert(result() === 'aabb') |
|
return |
|
} |
|
assert(false, 'should fail') |
|
}) |
|
|
|
it('run-s command (-c)', async () => { |
|
try { |
|
await runSeq(['-c', 'test-task:append a', 'test-task:error', 'test-task:append b']) |
|
} catch (_err) { |
|
assert(result() === 'aabb') |
|
return |
|
} |
|
assert(false, 'should fail') |
|
}) |
|
}) |
|
})
|
|
|