11var common = require ( "./common" ) ;
22var sys = require ( "sys" ) ;
33var assert = require ( 'assert' ) ;
4-
4+
55var Worker = require ( "../lib/worker" ) . Worker ;
6-
6+
77process . ENV [ "NODE_PATH" ] = common . libDir ;
8-
8+
99function makeWorker ( filename ) {
1010 return new Worker ( __dirname + "/fixtures/" + filename ) ;
1111}
1212
1313// basic test
1414var worker = makeWorker ( "worker.js" ) ;
15-
15+
1616worker . onmessage = function ( msg ) {
1717 if ( msg . input ) {
1818 assert . ok ( msg . output == msg . input * 3 , "We can multiply asyncly" ) ;
@@ -21,7 +21,7 @@ worker.onmessage = function (msg) {
2121 }
2222 }
2323} ;
24-
24+
2525worker . postMessage ( {
2626 input : 1
2727} ) ;
@@ -38,7 +38,7 @@ worker.postMessage({
3838// error handling
3939setTimeout ( function ( ) {
4040 setTimeout ( function ( ) {
41-
41+
4242 var w2 = makeWorker ( "worker.js" ) ;
4343 w2 . postMessage ( {
4444 error : true
@@ -51,7 +51,7 @@ setTimeout(function () {
5151 assert . ok ( false , "Wanted an error, but got a message" ) ;
5252 w2 . terminate ( ) ;
5353 } ) ;
54-
54+
5555 var w3 = makeWorker ( "worker.js" ) ;
5656 w3 . postMessage ( {
5757 error : true
@@ -64,7 +64,7 @@ setTimeout(function () {
6464 assert . ok ( false , "Wanted an error, but got a message" ) ;
6565 w3 . terminate ( ) ;
6666 } ) ;
67-
67+
6868 } , 10 ) ;
6969} , 10 ) ;
7070
@@ -112,4 +112,27 @@ waitWorker.postMessage({
112112waitWorker . addListener ( "message" , function ( ) {
113113 assert . ok ( true , "Worker response can be async." )
114114 waitWorker . terminate ( ) ;
115+ } ) ;
116+
117+ // Test workers raise "close" event when they exit
118+ var workersClosed = 0 ;
119+ var exitWorker = makeWorker ( 'worker.js' ) ;
120+ exitWorker . postMessage ( {
121+ exitCode : 1 ,
122+ } ) ;
123+ exitWorker . addListener ( 'close' , function ( code ) {
124+ assert . ok ( code === 1 , 'Exited worker returns exit code' ) ;
125+ ++ workersClosed ;
126+ } ) ;
127+
128+ // Test that when a worker raises a syntax error, it raises a close event
129+ var exitWorker = makeWorker ( 'syntax-error-worker.js' ) ;
130+ exitWorker . onerror = function ( ) { } ;
131+ exitWorker . addListener ( 'close' , function ( code ) {
132+ assert . ok ( true , 'Worker with syntax error raises close event' ) ;
133+ ++ workersClosed ;
134+ } ) ;
135+
136+ process . addListener ( 'exit' , function ( ) {
137+ assert . ok ( workersClosed == 2 , "Exited workers raise 'close' event" ) ;
115138} ) ;
0 commit comments