@@ -62,33 +62,40 @@ it(`should handle quoted scripts`, () => {
62
62
crossEnv ( [ 'GREETING=Hi' , 'NAME=Joe' , 'echo $GREETING && echo $NAME' ] , {
63
63
shell : true ,
64
64
} )
65
- expect (
66
- crossSpawnMock . spawn ,
67
- ) . toHaveBeenCalledWith ( 'echo $GREETING && echo $NAME' , [ ] , {
68
- stdio : 'inherit' ,
69
- shell : true ,
70
- env : Object . assign ( { } , process . env , {
71
- GREETING : 'Hi' ,
72
- NAME : 'Joe' ,
73
- } ) ,
74
- } )
65
+ expect ( crossSpawnMock . spawn ) . toHaveBeenCalledWith (
66
+ 'echo $GREETING && echo $NAME' ,
67
+ [ ] ,
68
+ {
69
+ stdio : 'inherit' ,
70
+ shell : true ,
71
+ env : Object . assign ( { } , process . env , {
72
+ GREETING : 'Hi' ,
73
+ NAME : 'Joe' ,
74
+ } ) ,
75
+ } ,
76
+ )
75
77
} )
76
78
77
79
it ( `should handle escaped characters` , ( ) => {
78
80
// this escapes \,",' and $
79
- crossEnv ( [ 'GREETING=Hi' , 'NAME=Joe' , 'echo \\"\\\'\\$GREETING\\\'\\" && echo $NAME' ] , {
80
- shell : true ,
81
- } )
82
- expect (
83
- crossSpawnMock . spawn ,
84
- ) . toHaveBeenCalledWith ( "echo \"'$GREETING'\" && echo $NAME" , [ ] , {
85
- stdio : 'inherit' ,
86
- shell : true ,
87
- env : Object . assign ( { } , process . env , {
88
- GREETING : 'Hi' ,
89
- NAME : 'Joe' ,
90
- } ) ,
91
- } )
81
+ crossEnv (
82
+ [ 'GREETING=Hi' , 'NAME=Joe' , 'echo \\"\\\'\\$GREETING\\\'\\" && echo $NAME' ] ,
83
+ {
84
+ shell : true ,
85
+ } ,
86
+ )
87
+ expect ( crossSpawnMock . spawn ) . toHaveBeenCalledWith (
88
+ 'echo "\'$GREETING\'" && echo $NAME' ,
89
+ [ ] ,
90
+ {
91
+ stdio : 'inherit' ,
92
+ shell : true ,
93
+ env : Object . assign ( { } , process . env , {
94
+ GREETING : 'Hi' ,
95
+ NAME : 'Joe' ,
96
+ } ) ,
97
+ } ,
98
+ )
92
99
} )
93
100
94
101
it ( `should do nothing given no command` , ( ) => {
@@ -133,6 +140,24 @@ it(`should propagate kill signals`, () => {
133
140
expect ( crossSpawnMock . __mock . spawned . kill ) . toHaveBeenCalledWith ( 'SIGBREAK' )
134
141
} )
135
142
143
+ it ( `should propagate unhandled exit signal` , ( ) => {
144
+ process . exit = jest . fn ( )
145
+ testEnvSetting ( { FOO_ENV : 'foo=bar' } , 'FOO_ENV="foo=bar"' )
146
+ const spawnExitCallback = crossSpawnMock . __mock . spawned . on . mock . calls [ 0 ] [ 1 ]
147
+ const spawnExitCode = null
148
+ spawnExitCallback ( spawnExitCode )
149
+ expect ( process . exit ) . toHaveBeenCalledWith ( 1 )
150
+ } )
151
+
152
+ it ( `should propagate regular exit code` , ( ) => {
153
+ process . exit = jest . fn ( )
154
+ testEnvSetting ( { FOO_ENV : 'foo=bar' } , 'FOO_ENV="foo=bar"' )
155
+ const spawnExitCallback = crossSpawnMock . __mock . spawned . on . mock . calls [ 0 ] [ 1 ]
156
+ const spawnExitCode = 0
157
+ spawnExitCallback ( spawnExitCode )
158
+ expect ( process . exit ) . toHaveBeenCalledWith ( 0 )
159
+ } )
160
+
136
161
it ( `should keep backslashes` , ( ) => {
137
162
isWindowsMock . __mock . returnValue = true
138
163
crossEnv ( [ 'echo' , '\\\\\\\\someshare\\\\somefolder' ] )
@@ -147,7 +172,6 @@ it(`should keep backslashes`, () => {
147
172
isWindowsMock . __mock . reset ( )
148
173
} )
149
174
150
-
151
175
function testEnvSetting ( expected , ...envSettings ) {
152
176
if ( expected . APPDATA === 2 ) {
153
177
// kill the APPDATA to test both is undefined
0 commit comments