test: fix test-sync-io-option
authorSantiago Gimeno <santiago.gimeno@gmail.com>
Tue, 19 May 2015 08:22:37 +0000 (10:22 +0200)
committerBrendan Ashworth <brendan.ashworth@me.com>
Wed, 20 May 2015 05:51:10 +0000 (22:51 -0700)
Wait for all the data to be available in stderr before checking its
contents. In FreeBSD this was failing because stderr data was being
emitted in multiple chunks. 4 WARNINGS are printed instead of 2 for
each sync call inside readFileSync. require('fs') does not print any
trace.

PR-URL: https://github.com/nodejs/io.js/pull/1734
Reviewed-By: Trevor Norris <trev.norris@gmail.com>
test/parallel/test-sync-io-option.js

index 390710d..2dc0bf4 100644 (file)
@@ -15,24 +15,26 @@ if (process.argv[2] === 'child') {
     var execArgv = [flags.pop()];
     var args = [__filename, 'child'];
     var child = spawn(process.execPath, execArgv.concat(args));
-    var cntr = 0;
+    var stderr = '';
 
     child.stdout.on('data', function(chunk) {
       throw new Error('UNREACHABLE');
     });
 
     child.stderr.on('data', function(chunk) {
-      // Prints twice for --trace-sync-io. First for the require() and second
-      // for the fs operation.
-      if (/^WARNING[\s\S]*fs\.readFileSync/.test(chunk.toString()))
-        cntr++;
+      stderr += chunk.toString();
     });
 
-    child.on('exit', function() {
-      if (execArgv[0] === '--trace-sync-io')
-        assert.equal(cntr, 2);
-      else if (execArgv[0] === ' ')
-        assert.equal(cntr, 0);
+    child.on('close', function() {
+      var cntr1 = (stderr.match(/WARNING/g) || []).length;
+      var cntr2 = (stderr.match(/fs\.readFileSync/g) || []).length;
+      assert.equal(cntr1, cntr2);
+      if (execArgv[0] === '--trace-sync-io') {
+        // Prints 4 WARNINGS for --trace-sync-io. 1 for each sync call
+        // inside readFileSync
+        assert.equal(cntr1, 4);
+      } else if (execArgv[0] === ' ')
+        assert.equal(cntr1, 0);
       else
         throw new Error('UNREACHABLE');