-
-
Notifications
You must be signed in to change notification settings - Fork 35.4k
Expand file tree
/
Copy pathtest-cli-eval-unary-minus.js
More file actions
89 lines (77 loc) Β· 2.88 KB
/
test-cli-eval-unary-minus.js
File metadata and controls
89 lines (77 loc) Β· 2.88 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
'use strict';
// Regression test for https://github.com/nodejs/node/issues/43397
//
// `node -pe '-0'` (and other expressions whose first character is `-`) used to
// fail with "--eval requires an argument" because the option parser treated
// the value as another flag. The supported way to pass such values is to
// terminate the option list with `--`, e.g. `node -pe -- -0`.
require('../common');
const assert = require('assert');
const { spawnSync } = require('child_process');
function run(...args) {
const result = spawnSync(process.execPath, args, { encoding: 'utf8' });
return { stdout: result.stdout, stderr: result.stderr, status: result.status };
}
// `--` should let the next argv entry be consumed verbatim as the value of
// `--eval`, even when it starts with `-`.
{
const { stdout, stderr, status } = run('-pe', '--', '-0');
assert.strictEqual(status, 0, `stderr: ${stderr}`);
assert.strictEqual(stderr, '');
assert.strictEqual(stdout, '0\n');
}
{
const { stdout, stderr, status } = run('-pe', '--', '-1.5');
assert.strictEqual(status, 0, `stderr: ${stderr}`);
assert.strictEqual(stderr, '');
assert.strictEqual(stdout, '-1.5\n');
}
{
const { stdout, stderr, status } = run('-pe', '--', '-1+0');
assert.strictEqual(status, 0, `stderr: ${stderr}`);
assert.strictEqual(stderr, '');
assert.strictEqual(stdout, '-1\n');
}
// `-e` (no print) should also accept a leading-dash value via `--`.
{
const { stdout, stderr, status } =
run('-e', '--', '-42; console.log("ok")');
assert.strictEqual(status, 0, `stderr: ${stderr}`);
assert.strictEqual(stderr, '');
assert.strictEqual(stdout, 'ok\n');
}
// The long-form `--eval` should behave the same way.
{
const { stdout, stderr, status } = run('--print', '--eval', '--', '-7');
assert.strictEqual(status, 0, `stderr: ${stderr}`);
assert.strictEqual(stderr, '');
assert.strictEqual(stdout, '-7\n');
}
// `--eval=-42` already worked and must keep working.
{
const { stdout, stderr, status } = run('--print', '--eval=-42');
assert.strictEqual(status, 0, `stderr: ${stderr}`);
assert.strictEqual(stderr, '');
assert.strictEqual(stdout, '-42\n');
}
// The pre-existing `\-` escape must keep working.
{
const { stdout, stderr, status } = run('-pe', '\\-0');
assert.strictEqual(status, 0, `stderr: ${stderr}`);
assert.strictEqual(stderr, '');
assert.strictEqual(stdout, '0\n');
}
// Without `--`, a leading-dash value still produces the existing diagnostic;
// that behavior is intentional so unrelated stacked flags keep being detected.
{
const { stderr, status } = run('-pe', '-0');
assert.notStrictEqual(status, 0);
assert.match(stderr, /requires an argument/);
}
// Sanity: a positional value with no leading dash works without `--`.
{
const { stdout, stderr, status } = run('-pe', '42');
assert.strictEqual(status, 0, `stderr: ${stderr}`);
assert.strictEqual(stderr, '');
assert.strictEqual(stdout, '42\n');
}