@@ -5,15 +5,20 @@ const vm = require('vm');
55
66const spawn = require ( 'child_process' ) . spawn ;
77
8+ const methods = [
9+ 'runInThisContext' ,
10+ 'runInContext'
11+ ] ;
12+
813if ( common . isWindows ) {
914 // No way to send CTRL_C_EVENT to processes from JS right now.
1015 common . skip ( 'platform not supported' ) ;
1116 return ;
1217}
1318
1419if ( process . argv [ 2 ] === 'child' ) {
15- const parent = + process . env . REPL_TEST_PPID ;
16- assert . ok ( parent ) ;
20+ const method = process . argv [ 3 ] ;
21+ assert . ok ( method ) ;
1722
1823 let firstHandlerCalled = 0 ;
1924 process . on ( 'SIGINT' , common . mustCall ( ( ) => {
@@ -27,12 +32,14 @@ if (process.argv[2] === 'child') {
2732 // Handler attached _before_ execution.
2833 } ) ) ;
2934
30- assert . throws ( ( ) => {
31- vm . runInThisContext ( `process.kill( ${ parent } , 'SIGUSR2'); while(true) {}` , {
32- breakOnSigint : true
33- } ) ;
34- } , / S c r i p t e x e c u t i o n i n t e r r u p t e d / ) ;
35+ const script = `process.send(' ${ method } '); while(true) {}` ;
36+ const args = method === 'runInContext' ?
37+ [ vm . createContext ( { process } ) ] :
38+ [ ] ;
39+ const options = { breakOnSigint : true } ;
3540
41+ assert . throws ( ( ) => { vm [ method ] ( script , ...args , options ) ; } ,
42+ / ^ E r r o r : S c r i p t e x e c u t i o n i n t e r r u p t e d \. $ / ) ;
3643 assert . strictEqual ( firstHandlerCalled , 0 ) ;
3744 assert . strictEqual ( onceHandlerCalled , 0 ) ;
3845
@@ -46,7 +53,9 @@ if (process.argv[2] === 'child') {
4653 if ( afterHandlerCalled ++ === 0 ) {
4754 // The first time it just bounces back to check that the `once()`
4855 // handler is not called the second time.
49- process . kill ( parent , 'SIGUSR2' ) ;
56+ assert . strictEqual ( firstHandlerCalled , 1 ) ;
57+ assert . strictEqual ( onceHandlerCalled , 1 ) ;
58+ process . send ( method ) ;
5059 return ;
5160 }
5261
@@ -55,26 +64,24 @@ if (process.argv[2] === 'child') {
5564 timeout . unref ( ) ;
5665 } , 2 ) ) ;
5766
58- process . kill ( parent , 'SIGUSR2' ) ;
67+ process . send ( method ) ;
5968
6069 return ;
6170}
6271
63- process . env . REPL_TEST_PPID = process . pid ;
64-
65- // Set the `SIGUSR2` handler before spawning the child process to make sure
66- // the signal is always handled.
67- process . on ( 'SIGUSR2' , common . mustCall ( ( ) => {
68- // First kill() breaks the while(true) loop, second one invokes the real
69- // signal handlers.
70- process . kill ( child . pid , 'SIGINT' ) ;
71- } , 3 ) ) ;
72+ for ( const method of methods ) {
73+ const child = spawn ( process . execPath , [ __filename , 'child' , method ] , {
74+ stdio : [ null , 'inherit' , 'inherit' , 'ipc' ]
75+ } ) ;
7276
73- const child = spawn ( process . execPath , [ __filename , 'child' ] , {
74- stdio : [ null , 'inherit' , 'inherit' ]
75- } ) ;
77+ child . on ( 'message' , common . mustCall ( ( ) => {
78+ // First kill() breaks the while(true) loop, second one invokes the real
79+ // signal handlers.
80+ process . kill ( child . pid , 'SIGINT' ) ;
81+ } , 3 ) ) ;
7682
77- child . on ( 'close' , function ( code , signal ) {
78- assert . strictEqual ( signal , null ) ;
79- assert . strictEqual ( code , 0 ) ;
80- } ) ;
83+ child . on ( 'close' , common . mustCall ( ( code , signal ) => {
84+ assert . strictEqual ( signal , null ) ;
85+ assert . strictEqual ( code , 0 ) ;
86+ } ) ) ;
87+ }
0 commit comments