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 <[email protected]>
Reviewed-By: Michael Dawson <[email protected]>
Reviewed-By: Rich Trott <[email protected]>
Reviewed-By: Refael Ackermann <[email protected]>
  • Loading branch information
evanlucas authored and addaleax committed Jul 18, 2017
1 parent 3fcc7e6 commit 1671fe4
Showing 1 changed file with 36 additions and 31 deletions.
67 changes: 36 additions & 31 deletions test/parallel/test-cli-syntax.js
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,7 @@

const common = require('../common');
const assert = require('assert');
const spawnSync = require('child_process').spawnSync;
const {exec, spawnSync} = require('child_process');
const path = require('path');

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,18 +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 include the filename
assert(c.stderr.startsWith(file), "stderr doesn't start with the filename");
// stderr should have a syntax error message
assert(syntaxErrorRE.test(stderr), 'stderr incorrect');

// stderr should have a syntax error message
assert(syntaxErrorRE.test(c.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 @@ -75,15 +78,16 @@ 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 stdout should be produced
assert.strictEqual(c.stdout, '', 'stdout produced');
const cmd = [node, ..._args].join(' ');
exec(cmd, common.mustCall((err, stdout, stderr) => {
// no stdout should be produced
assert.strictEqual(stdout, '', 'stdout produced');

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

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

Expand Down Expand Up @@ -122,14 +126,15 @@ syntaxArgs.forEach(function(args) {
['-c', '--check'].forEach(function(checkFlag) {
['-e', '--eval'].forEach(function(evalFlag) {
const args = [checkFlag, evalFlag, 'foo'];
const c = spawnSync(node, args, {encoding: 'utf8'});

assert(
c.stderr.startsWith(
`${node}: either --check or --eval can be used, not both`
)
);

assert.strictEqual(c.status, 9, `code === ${c.status}`);
const cmd = [node, ...args].join(' ');
exec(cmd, common.mustCall((err, stdout, stderr) => {
assert.strictEqual(err instanceof Error, true);
assert.strictEqual(err.code, 9, `code === ${err.code}`);
assert(
stderr.startsWith(
`${node}: either --check or --eval can be used, not both`
)
);
}));
});
});

0 comments on commit 1671fe4

Please sign in to comment.