@@ -205,6 +205,135 @@ public function testShouldCallWhenStatusCodeDoesMatch()
205
205
$ this ->assertTrue ($ actual );
206
206
}
207
207
208
+ public function testOnSignal ()
209
+ {
210
+ $ var = null ;
211
+ $ output = new ConsoleOutput ();
212
+
213
+ $ output ->onSignal (
214
+ function () use (&$ var ) {
215
+ $ var = func_get_args ();
216
+ },
217
+ SIGINT
218
+ );
219
+ pcntl_signal_get_handler (SIGINT )(
220
+ 0 ,
221
+ [
222
+ "signo " => 2 ,
223
+ "errno " => 0 ,
224
+ "code " => 0 ,
225
+ ]
226
+ );
227
+
228
+ $ this ->assertEquals ($ var , [
229
+ 0 ,
230
+ [
231
+ "signo " => 2 ,
232
+ "errno " => 0 ,
233
+ "code " => 0 ,
234
+ ]
235
+ ]);
236
+ }
237
+
238
+ public function testOnSignalMultipleSignals ()
239
+ {
240
+ $ var = 0 ;
241
+ $ output = new ConsoleOutput ();
242
+ $ output ->onSignal (
243
+ function () use (&$ var ) {
244
+ $ var += 1 ;
245
+ },
246
+ SIGINT ,
247
+ SIGTERM
248
+ );
249
+ pcntl_signal_get_handler (SIGINT )();
250
+ pcntl_signal_get_handler (SIGTERM )();
251
+
252
+ $ this ->assertEquals (2 , $ var );
253
+ }
254
+
255
+ public function testOnSignalMultipleHandlers ()
256
+ {
257
+ $ var = 0 ;
258
+ $ output = new ConsoleOutput ();
259
+
260
+ $ this ->mockExit ($ output , function () use (&$ var ) {
261
+ $ var += 4 ;
262
+ });
263
+
264
+ $ output ->onSignal (
265
+ function () use (&$ var ) {
266
+ $ var += 1 ;
267
+ },
268
+ SIGINT
269
+ );
270
+
271
+ $ output ->onSignal (
272
+ function () use (&$ var ) {
273
+ $ var += 2 ;
274
+ },
275
+ SIGINT
276
+ );
277
+ pcntl_signal_get_handler (SIGINT )();
278
+
279
+ $ this ->assertEquals (3 , $ var );
280
+ }
281
+
282
+ public function testOnSignalMultipleHandlersExit ()
283
+ {
284
+ $ var = 0 ;
285
+ $ output = new ConsoleOutput ();
286
+ $ this ->mockExit ($ output , function () use (&$ var ) {
287
+ $ var += 4 ;
288
+ });
289
+
290
+ $ output ->onSignal (
291
+ function () use (&$ var ) {
292
+ $ var += 1 ;
293
+ return true ;
294
+ },
295
+ SIGINT
296
+ );
297
+
298
+ $ output ->onSignal (
299
+ function () use (&$ var ) {
300
+ $ var += 2 ;
301
+ },
302
+ SIGINT
303
+ );
304
+ pcntl_signal_get_handler (SIGINT )();
305
+
306
+ $ this ->assertEquals (7 , $ var );
307
+ }
308
+
309
+ public function testOnSignalMultipleHandlersExitWithOneReturningFalse ()
310
+ {
311
+ $ var = 0 ;
312
+ $ output = new ConsoleOutput ();
313
+ $ this ->mockExit ($ output , function () use (&$ var ) {
314
+ $ var += 4 ;
315
+ });
316
+
317
+ $ output ->onSignal (
318
+ function () use (&$ var ) {
319
+ $ var += 1 ;
320
+ return true ;
321
+ },
322
+ SIGINT
323
+ );
324
+
325
+ $ output ->onSignal (
326
+ function () use (&$ var ) {
327
+ $ var += 2 ;
328
+ return false ;
329
+ },
330
+ SIGINT
331
+ );
332
+ pcntl_signal_get_handler (SIGINT )();
333
+
334
+ $ this ->assertEquals (7 , $ var );
335
+ }
336
+
208
337
public function testShouldReturnComponentsFactory (): void
209
338
{
210
339
$ output = new ConsoleOutput ();
0 commit comments