Skip to content

Commit

Permalink
test: decrease duration of test-cli-syntax
Browse files Browse the repository at this point in the history
Previously, test/parallel/test-cli-syntax.js was spawning a lot of child
processes, but using spawnSync, which made the test run each child
process serially. This switches most of the test cases to use exec so
that they are asynchronous. Locally, the test went from > 5 seconds to
under 2 seconds.

PR-URL: #14187
Reviewed-By: Colin Ihrig <cjihrig@gmail.com>
Reviewed-By: Michael Dawson <michael_dawson@ca.ibm.com>
Reviewed-By: Rich Trott <rtrott@gmail.com>
Reviewed-By: Refael Ackermann <refack@gmail.com>
  • Loading branch information
evanlucas authored and MylesBorins committed Feb 13, 2018
1 parent 691cd5a commit a4e2ced
Showing 1 changed file with 27 additions and 20 deletions.
47 changes: 27 additions & 20 deletions test/parallel/test-cli-syntax.js
Original file line number Diff line number Diff line change
@@ -1,9 +1,9 @@
'use strict';

require('../common');
const common = require('../common');
const assert = require('assert');
const spawnSync = require('child_process').spawnSync;
const fixtures = require('../common/fixtures');
const exec = require('child_process').exec;

const node = process.execPath;

Expand All @@ -29,12 +29,13 @@ const notFoundRE = /^Error: Cannot find module/m;
// loop each possible option, `-c` or `--check`
syntaxArgs.forEach(function(args) {
const _args = args.concat(file);
const c = spawnSync(node, _args, {encoding: 'utf8'});

// no output should be produced
assert.strictEqual(c.stdout, '', 'stdout produced');
assert.strictEqual(c.stderr, '', 'stderr produced');
assert.strictEqual(c.status, 0, `code == ${c.status}`);
const cmd = [node, ..._args].join(' ');
exec(cmd, common.mustCall((err, stdout, stderr) => {
assert.ifError(err);
assert.strictEqual(stdout, '', 'stdout produced');
assert.strictEqual(stderr, '', 'stderr produced');
}));
});
});

Expand All @@ -50,15 +51,20 @@ const notFoundRE = /^Error: Cannot find module/m;
// loop each possible option, `-c` or `--check`
syntaxArgs.forEach(function(args) {
const _args = args.concat(file);
const c = spawnSync(node, _args, {encoding: 'utf8'});
const cmd = [node, ..._args].join(' ');
exec(cmd, common.mustCall((err, stdout, stderr) => {
assert.strictEqual(err instanceof Error, true);
assert.strictEqual(err.code, 1, `code === ${err.code}`);

// no stdout should be produced
assert.strictEqual(c.stdout, '', 'stdout produced');
// no stdout should be produced
assert.strictEqual(stdout, '', 'stdout produced');

// stderr should have a syntax error message
assert(syntaxErrorRE.test(c.stderr), 'stderr incorrect');
// stderr should have a syntax error message
assert(syntaxErrorRE.test(stderr), 'stderr incorrect');

assert.strictEqual(c.status, 1, `code == ${c.status}`);
// stderr should include the filename
assert(stderr.startsWith(file), "stderr doesn't start with the filename");
}));
});
});

Expand All @@ -72,14 +78,15 @@ const notFoundRE = /^Error: Cannot find module/m;
// loop each possible option, `-c` or `--check`
syntaxArgs.forEach(function(args) {
const _args = args.concat(file);
const c = spawnSync(node, _args, {encoding: 'utf8'});
const cmd = [node, ..._args].join(' ');
exec(cmd, common.mustCall((err, stdout, stderr) => {
// no stdout should be produced
assert.strictEqual(stdout, '', 'stdout produced');

// no stdout should be produced
assert.strictEqual(c.stdout, '', 'stdout produced');
// stderr should have a module not found error message
assert(notFoundRE.test(stderr), 'stderr incorrect');

// stderr should have a module not found error message
assert(notFoundRE.test(c.stderr), 'stderr incorrect');

assert.strictEqual(c.status, 1, `code == ${c.status}`);
assert.strictEqual(err.code, 1, `code === ${err.code}`);
}));
});
});

0 comments on commit a4e2ced

Please sign in to comment.