@@ -175,6 +175,45 @@ describe('cmd-bundler', () => {
175175 } )
176176
177177 describe ( 'exit handling' , ( ) => {
178+ it ( 'skips exit/kill when both code and signal are null' , async ( ) => {
179+ const mockChildProcess = new EventEmitter ( )
180+ const mockSpawnPromise = Promise . resolve ( {
181+ code : null ,
182+ signal : null ,
183+ stderr : Buffer . from ( '' ) ,
184+ stdout : Buffer . from ( '' ) ,
185+ } )
186+ ; ( mockSpawnPromise as any ) . process = mockChildProcess
187+
188+ mockSpawnSfwDlx . mockResolvedValue ( { spawnPromise : mockSpawnPromise } )
189+ mockFilterFlags . mockReturnValue ( [ ] )
190+
191+ const mockExit = vi
192+ . spyOn ( process , 'exit' )
193+ . mockImplementation ( ( ( ) => { } ) as any )
194+ mockExit . mockClear ( )
195+ const mockKill = vi
196+ . spyOn ( process , 'kill' )
197+ . mockImplementation ( ( ( ) => { } ) as any )
198+ mockKill . mockClear ( )
199+
200+ cmdBundler . run ( [ ] , importMeta , context )
201+
202+ await new Promise ( resolve => setImmediate ( resolve ) )
203+ const exitBefore = mockExit . mock . calls . length
204+ const killBefore = mockKill . mock . calls . length
205+
206+ mockChildProcess . emit ( 'exit' , null , null )
207+
208+ await new Promise ( resolve => setImmediate ( resolve ) )
209+
210+ expect ( mockExit . mock . calls . length ) . toBe ( exitBefore )
211+ expect ( mockKill . mock . calls . length ) . toBe ( killBefore )
212+
213+ mockExit . mockRestore ( )
214+ mockKill . mockRestore ( )
215+ } )
216+
178217 it ( 'should set default exit code to 1 before child process exits' , async ( ) => {
179218 const mockChildProcess = new EventEmitter ( )
180219 const mockSpawnPromise = Promise . resolve ( {
0 commit comments