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.
114 lines
4.8 KiB
114 lines
4.8 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 { delay, removeResult, runAll, runPar, runSeq } = require('./lib/util') |
|
|
|
// ------------------------------------------------------------------------------ |
|
// Helpers |
|
// ------------------------------------------------------------------------------ |
|
|
|
/** |
|
* Throws an assertion error if a given promise comes to be fulfilled. |
|
* |
|
* @param {Promise} p - A promise to check. |
|
* @returns {Promise} A promise which is checked. |
|
*/ |
|
function shouldFail (p) { |
|
return p.then( |
|
() => assert(false, 'should fail'), |
|
() => null // OK! |
|
) |
|
} |
|
|
|
// ------------------------------------------------------------------------------ |
|
// Test |
|
// ------------------------------------------------------------------------------ |
|
|
|
describe('[fail] it should fail', () => { |
|
before(() => process.chdir('test-workspace')) |
|
after(() => process.chdir('..')) |
|
|
|
beforeEach(removeResult) |
|
afterEach(() => delay(1000)) |
|
|
|
describe('if an invalid option exists.', () => { |
|
it('npm-run-all command', () => shouldFail(runAll(['--invalid']))) |
|
it('run-s command', () => shouldFail(runSeq(['--parallel']))) |
|
it('run-p command', () => shouldFail(runPar(['--sequential']))) |
|
|
|
it('npm-run-all command with --race without --parallel', () => shouldFail(runAll(['--race']))) |
|
it('npm-run-all command with --r without --parallel', () => shouldFail(runAll(['--r']))) |
|
it('run-s command with --race', () => shouldFail(runSeq(['--race']))) |
|
it('run-s command with --r', () => shouldFail(runSeq(['--r']))) |
|
}) |
|
|
|
describe('if invalid `options.taskList` is given.', () => { |
|
it('Node API', () => shouldFail(nodeApi('test-task:append a', { taskList: { invalid: 0 } }))) |
|
}) |
|
|
|
describe('if unknown tasks are given:', () => { |
|
it('Node API', () => shouldFail(nodeApi('unknown-task'))) |
|
it('npm-run-all command', () => shouldFail(runAll(['unknown-task']))) |
|
it('run-s command', () => shouldFail(runSeq(['unknown-task']))) |
|
it('run-p command', () => shouldFail(runPar(['unknown-task']))) |
|
}) |
|
|
|
describe('if unknown tasks are given (2):', () => { |
|
it('Node API', () => shouldFail(nodeApi(['test-task:append:a', 'unknown-task']))) |
|
it('npm-run-all command', () => shouldFail(runAll(['test-task:append:a', 'unknown-task']))) |
|
it('run-s command', () => shouldFail(runSeq(['test-task:append:a', 'unknown-task']))) |
|
it('run-p command', () => shouldFail(runPar(['test-task:append:a', 'unknown-task']))) |
|
}) |
|
|
|
describe('if package.json is not found:', () => { |
|
before(() => process.chdir('no-package-json')) |
|
after(() => process.chdir('..')) |
|
|
|
it('Node API', () => shouldFail(nodeApi(['test-task:append:a']))) |
|
it('npm-run-all command', () => shouldFail(runAll(['test-task:append:a']))) |
|
it('run-s command', () => shouldFail(runSeq(['test-task:append:a']))) |
|
it('run-p command', () => shouldFail(runPar(['test-task:append:a']))) |
|
}) |
|
|
|
describe('if package.json does not have scripts field:', () => { |
|
before(() => process.chdir('no-scripts')) |
|
after(() => process.chdir('..')) |
|
|
|
it('Node API', () => shouldFail(nodeApi(['test-task:append:a']))) |
|
it('npm-run-all command', () => shouldFail(runAll(['test-task:append:a']))) |
|
it('run-s command', () => shouldFail(runSeq(['test-task:append:a']))) |
|
it('run-p command', () => shouldFail(runPar(['test-task:append:a']))) |
|
}) |
|
|
|
describe('if tasks exited with non-zero code:', () => { |
|
it('Node API', () => shouldFail(nodeApi('test-task:error'))) |
|
it('npm-run-all command', () => shouldFail(runAll(['test-task:error']))) |
|
it('run-s command', () => shouldFail(runSeq(['test-task:error']))) |
|
it('run-p command', () => shouldFail(runPar(['test-task:error']))) |
|
}) |
|
|
|
describe('if tasks exited via a signal:', () => { |
|
it('Node API', () => shouldFail(nodeApi('test-task:abort'))) |
|
it('npm-run-all command', () => shouldFail(runAll(['test-task:abort']))) |
|
it('run-s command', () => shouldFail(runSeq(['test-task:abort']))) |
|
it('run-p command', () => shouldFail(runPar(['test-task:abort']))) |
|
it('with correct exit code', () => nodeApi('test-task:abort').then(() => |
|
assert(false, 'should fail')).catch(err => { |
|
// In NodeJS versions > 6, the child process correctly sends back |
|
// the signal + code of null. In NodeJS versions <= 6, the child |
|
// process does not set the signal, and sets the code to 1. |
|
const code = Number(process.version.match(/^v(\d+)/)[1]) > 6 ? 134 : 1 |
|
assert(err.code === code, 'should have correct exit code') |
|
})) |
|
}) |
|
})
|
|
|