| '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$/, |
| }); |