114 lines
2.7 KiB
JavaScript
114 lines
2.7 KiB
JavaScript
'use strict';
|
|
|
|
const assert = require('assert');
|
|
|
|
const cases = [];
|
|
module.exports = cases;
|
|
|
|
function exitsOnExitCodeSet() {
|
|
process.exitCode = 42;
|
|
process.on('exit', (code) => {
|
|
assert.strictEqual(process.exitCode, 42);
|
|
assert.strictEqual(code, 42);
|
|
});
|
|
}
|
|
cases.push({ func: exitsOnExitCodeSet, result: 42 });
|
|
|
|
function changesCodeViaExit() {
|
|
process.exitCode = 99;
|
|
process.on('exit', (code) => {
|
|
assert.strictEqual(process.exitCode, 42);
|
|
assert.strictEqual(code, 42);
|
|
});
|
|
process.exit(42);
|
|
}
|
|
cases.push({ func: changesCodeViaExit, result: 42 });
|
|
|
|
function changesCodeZeroExit() {
|
|
process.exitCode = 99;
|
|
process.on('exit', (code) => {
|
|
assert.strictEqual(process.exitCode, 0);
|
|
assert.strictEqual(code, 0);
|
|
});
|
|
process.exit(0);
|
|
}
|
|
cases.push({ func: changesCodeZeroExit, result: 0 });
|
|
|
|
function exitWithOneOnUncaught() {
|
|
process.exitCode = 99;
|
|
process.on('exit', (code) => {
|
|
// cannot use assert because it will be uncaughtException -> 1 exit code
|
|
// that will render this test useless
|
|
if (code !== 1 || process.exitCode !== 1) {
|
|
console.log('wrong code! expected 1 for uncaughtException');
|
|
process.exit(99);
|
|
}
|
|
});
|
|
throw new Error('ok');
|
|
}
|
|
cases.push({
|
|
func: exitWithOneOnUncaught,
|
|
result: 1,
|
|
error: /^Error: ok$/,
|
|
});
|
|
|
|
function changeCodeInsideExit() {
|
|
process.exitCode = 95;
|
|
process.on('exit', (code) => {
|
|
assert.strictEqual(process.exitCode, 95);
|
|
assert.strictEqual(code, 95);
|
|
process.exitCode = 99;
|
|
});
|
|
}
|
|
cases.push({ func: changeCodeInsideExit, result: 99 });
|
|
|
|
function zeroExitWithUncaughtHandler() {
|
|
process.on('exit', (code) => {
|
|
assert.strictEqual(process.exitCode, 0);
|
|
assert.strictEqual(code, 0);
|
|
});
|
|
process.on('uncaughtException', () => {});
|
|
throw new Error('ok');
|
|
}
|
|
cases.push({ func: zeroExitWithUncaughtHandler, result: 0 });
|
|
|
|
function changeCodeInUncaughtHandler() {
|
|
process.on('exit', (code) => {
|
|
assert.strictEqual(process.exitCode, 97);
|
|
assert.strictEqual(code, 97);
|
|
});
|
|
process.on('uncaughtException', () => {
|
|
process.exitCode = 97;
|
|
});
|
|
throw new Error('ok');
|
|
}
|
|
cases.push({ func: changeCodeInUncaughtHandler, result: 97 });
|
|
|
|
function changeCodeInExitWithUncaught() {
|
|
process.on('exit', (code) => {
|
|
assert.strictEqual(process.exitCode, 1);
|
|
assert.strictEqual(code, 1);
|
|
process.exitCode = 98;
|
|
});
|
|
throw new Error('ok');
|
|
}
|
|
cases.push({
|
|
func: changeCodeInExitWithUncaught,
|
|
result: 98,
|
|
error: /^Error: ok$/,
|
|
});
|
|
|
|
function exitWithZeroInExitWithUncaught() {
|
|
process.on('exit', (code) => {
|
|
assert.strictEqual(process.exitCode, 1);
|
|
assert.strictEqual(code, 1);
|
|
process.exitCode = 0;
|
|
});
|
|
throw new Error('ok');
|
|
}
|
|
cases.push({
|
|
func: exitWithZeroInExitWithUncaught,
|
|
result: 0,
|
|
error: /^Error: ok$/,
|
|
});
|