@@ -2,112 +2,126 @@
const assert = require ( 'assert' ) ;
const cases = [ ] ;
module . exports = cases ;
function getTestCases ( isWorker = false ) {
const 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 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 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 changesCodeZeroExit ( ) {
process . exitCode = 99 ;
process . on ( 'exit' , ( code ) => {
assert . strictEqual ( process . exitCode , 0 ) ;
assert . strictEqual ( code , 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$ / ,
} ) ;
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 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 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 changeCodeInUncaughtHandler ( ) {
process . on ( 'exit' , ( code ) => {
assert . strictEqual ( process . exitCode , 97 ) ;
assert . strictEqual ( code , 97 ) ;
} ) ;
process . on ( 'uncaughtException' , ( ) => {
process . exitCode = 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$ / ,
} ) ;
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 ;
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$ / ,
} ) ;
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 ;
function exitWithThrowInUncaughtHandler ( ) {
process . on ( 'uncaughtException' , ( ) => {
throw new Error ( 'ok' )
} ) ;
throw new Error ( 'bad' ) ;
}
cases . push ( {
func : exitWithThrowInUncaughtHandler ,
result : isWorker ? 1 : 7 ,
error : / ^ Error: ok$ / ,
} ) ;
throw new Error ( 'ok' ) ;
return cases ;
}
cases . push ( {
func : exitWithZeroInExitWithUncaught ,
result : 0 ,
error : / ^ Error: ok$ / ,
} ) ;
exports . getTestCases = getTestCases ;