summaryrefslogtreecommitdiff
path: root/test/sequential
diff options
context:
space:
mode:
authorRich Trott <rtrott@gmail.com>2018-12-08 06:48:11 -0800
committerRich Trott <rtrott@gmail.com>2018-12-08 13:06:40 -0800
commit5011dfe4221a3c4f1f421e62a41259f5249b4479 (patch)
treea64335ab72e1e605a3b97d8bea8cb92b8d7081c2 /test/sequential
parent9df18ad7c36e7bef6334a28f4002cf6e64586a97 (diff)
downloadandroid-node-v8-5011dfe4221a3c4f1f421e62a41259f5249b4479.tar.gz
android-node-v8-5011dfe4221a3c4f1f421e62a41259f5249b4479.tar.bz2
android-node-v8-5011dfe4221a3c4f1f421e62a41259f5249b4479.zip
test: move test-cli-syntax to sequential
It is unreliable under load and the CI failures are getting a bit out of hand. Let's move it to sequential. Refs: https://github.com/nodejs/node/issues/24403 PR-URL: https://github.com/nodejs/node/pull/24907 Reviewed-By: Michaƫl Zasso <targos@protonmail.com> Reviewed-By: Joyee Cheung <joyeec9h3@gmail.com> Reviewed-By: Colin Ihrig <cjihrig@gmail.com>
Diffstat (limited to 'test/sequential')
-rw-r--r--test/sequential/test-cli-syntax.js171
1 files changed, 171 insertions, 0 deletions
diff --git a/test/sequential/test-cli-syntax.js b/test/sequential/test-cli-syntax.js
new file mode 100644
index 0000000000..35cc78258d
--- /dev/null
+++ b/test/sequential/test-cli-syntax.js
@@ -0,0 +1,171 @@
+'use strict';
+
+const common = require('../common');
+const assert = require('assert');
+const { exec, spawnSync } = require('child_process');
+const fixtures = require('../common/fixtures');
+
+const node = process.execPath;
+
+// test both sets of arguments that check syntax
+const syntaxArgs = [
+ ['-c'],
+ ['--check']
+];
+
+// Match on the name of the `Error` but not the message as it is different
+// depending on the JavaScript engine.
+const syntaxErrorRE = /^SyntaxError: \b/m;
+const notFoundRE = /^Error: Cannot find module/m;
+
+// test good syntax with and without shebang
+[
+ 'syntax/good_syntax.js',
+ 'syntax/good_syntax',
+ 'syntax/good_syntax_shebang.js',
+ 'syntax/good_syntax_shebang',
+ 'syntax/illegal_if_not_wrapped.js'
+].forEach(function(file) {
+ file = fixtures.path(file);
+
+ // loop each possible option, `-c` or `--check`
+ syntaxArgs.forEach(function(args) {
+ const _args = args.concat(file);
+
+ const cmd = [node, ..._args].join(' ');
+ exec(cmd, common.mustCall((err, stdout, stderr) => {
+ if (err) {
+ console.log('-- stdout --');
+ console.log(stdout);
+ console.log('-- stderr --');
+ console.log(stderr);
+ }
+ assert.ifError(err);
+ assert.strictEqual(stdout, '');
+ assert.strictEqual(stderr, '');
+ }));
+ });
+});
+
+// test bad syntax with and without shebang
+[
+ 'syntax/bad_syntax.js',
+ 'syntax/bad_syntax',
+ 'syntax/bad_syntax_shebang.js',
+ 'syntax/bad_syntax_shebang'
+].forEach(function(file) {
+ file = fixtures.path(file);
+
+ // loop each possible option, `-c` or `--check`
+ syntaxArgs.forEach(function(args) {
+ const _args = args.concat(file);
+ const cmd = [node, ..._args].join(' ');
+ exec(cmd, common.mustCall((err, stdout, stderr) => {
+ assert.strictEqual(err instanceof Error, true);
+ assert.strictEqual(err.code, 1);
+
+ // no stdout should be produced
+ assert.strictEqual(stdout, '');
+
+ // stderr should have a syntax error message
+ assert(syntaxErrorRE.test(stderr), `${syntaxErrorRE} === ${stderr}`);
+
+ // stderr should include the filename
+ assert(stderr.startsWith(file), `${stderr} starts with ${file}`);
+ }));
+ });
+});
+
+// test file not found
+[
+ 'syntax/file_not_found.js',
+ 'syntax/file_not_found'
+].forEach(function(file) {
+ file = fixtures.path(file);
+
+ // loop each possible option, `-c` or `--check`
+ syntaxArgs.forEach(function(args) {
+ const _args = args.concat(file);
+ const cmd = [node, ..._args].join(' ');
+ exec(cmd, common.mustCall((err, stdout, stderr) => {
+ // no stdout should be produced
+ assert.strictEqual(stdout, '');
+
+ // stderr should have a module not found error message
+ assert(notFoundRE.test(stderr), `${notFoundRE} === ${stderr}`);
+
+ assert.strictEqual(err.code, 1);
+ }));
+ });
+});
+
+// should not execute code piped from stdin with --check
+// loop each possible option, `-c` or `--check`
+syntaxArgs.forEach(function(args) {
+ const stdin = 'throw new Error("should not get run");';
+ const c = spawnSync(node, args, { encoding: 'utf8', input: stdin });
+
+ // no stdout or stderr should be produced
+ assert.strictEqual(c.stdout, '');
+ assert.strictEqual(c.stderr, '');
+
+ assert.strictEqual(c.status, 0);
+});
+
+// should throw if code piped from stdin with --check has bad syntax
+// loop each possible option, `-c` or `--check`
+syntaxArgs.forEach(function(args) {
+ const stdin = 'var foo bar;';
+ const c = spawnSync(node, args, { encoding: 'utf8', input: stdin });
+
+ // stderr should include '[stdin]' as the filename
+ assert(c.stderr.startsWith('[stdin]'), `${c.stderr} starts with ${stdin}`);
+
+ // no stdout or stderr should be produced
+ assert.strictEqual(c.stdout, '');
+
+ // stderr should have a syntax error message
+ assert(syntaxErrorRE.test(c.stderr), `${syntaxErrorRE} === ${c.stderr}`);
+
+ assert.strictEqual(c.status, 1);
+});
+
+// should throw if -c and -e flags are both passed
+['-c', '--check'].forEach(function(checkFlag) {
+ ['-e', '--eval'].forEach(function(evalFlag) {
+ const args = [checkFlag, evalFlag, 'foo'];
+ const cmd = [node, ...args].join(' ');
+ exec(cmd, common.mustCall((err, stdout, stderr) => {
+ assert.strictEqual(err instanceof Error, true);
+ assert.strictEqual(err.code, 9);
+ assert(
+ stderr.startsWith(
+ `${node}: either --check or --eval can be used, not both`
+ )
+ );
+ }));
+ });
+});
+
+// should work with -r flags
+['-c', '--check'].forEach(function(checkFlag) {
+ ['-r', '--require'].forEach(function(requireFlag) {
+ const preloadFile = fixtures.path('no-wrapper.js');
+ const file = fixtures.path('syntax', 'illegal_if_not_wrapped.js');
+ const args = [requireFlag, preloadFile, checkFlag, file];
+ const cmd = [node, ...args].join(' ');
+ exec(cmd, common.mustCall((err, stdout, stderr) => {
+ assert.strictEqual(err instanceof Error, true);
+ assert.strictEqual(err.code, 1);
+
+ // no stdout should be produced
+ assert.strictEqual(stdout, '');
+
+ // stderr should have a syntax error message
+ assert(syntaxErrorRE.test(stderr), `${syntaxErrorRE} === ${stderr}`);
+
+ // stderr should include the filename
+ assert(stderr.startsWith(file), `${stderr} starts with ${file}`);
+ }));
+ });
+});