@@ -37,6 +37,14 @@ const MB = KB * KB;
3737 cat . stdout . _handle . readStart = common . mustNotCall ( ) ;
3838 grep . stdout . _handle . readStart = common . mustNotCall ( ) ;
3939
40+ // Keep an array of error codes and assert on them during process exit. This
41+ // is because stdio can still be open when a child process exits, and we don't
42+ // want to lose information about what caused the error.
43+ const errors = [ ] ;
44+ process . on ( 'exit' , ( ) => {
45+ assert . deepStrictEqual ( errors , [ ] ) ;
46+ } ) ;
47+
4048 [ cat , grep , wc ] . forEach ( ( child , index ) => {
4149 const errorHandler = ( thing , type ) => {
4250 // Don't want to assert here, as we might miss error code info.
@@ -46,7 +54,9 @@ const MB = KB * KB;
4654 child . stderr . on ( 'data' , ( d ) => { errorHandler ( d , 'data' ) ; } ) ;
4755 child . on ( 'error' , ( err ) => { errorHandler ( err , 'error' ) ; } ) ;
4856 child . on ( 'exit' , common . mustCall ( ( code ) => {
49- assert . strictEqual ( code , 0 , `child ${ index } exited with code ${ code } ` ) ;
57+ if ( code !== 0 ) {
58+ errors . push ( `child ${ index } exited with code ${ code } ` ) ;
59+ }
5060 } ) ) ;
5161 } ) ;
5262
0 commit comments