| FazBrowse GitHub Viewer | Trending | | Home |
| Tools: [Download Repo ZIP] [Original HTTPS Page] |
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
@@ -2,7 +2,6 @@ | |||
| 2 | 2 | ||
| 3 | 3 | const { | |
| 4 | 4 | ArrayPrototypeForEach, | |
| 5 | - ArrayPrototypeIncludes, | ||
| 6 | 5 | ArrayPrototypeMap, | |
| 7 | 6 | ArrayPrototypePush, | |
| 8 | 7 | ArrayPrototypePushApply, | |
@@ -54,20 +53,16 @@ const { | |||
| 54 | 53 | kEmptyObject, | |
| 55 | 54 | } = require('internal/util'); | |
| 56 | 55 | ||
| 56 | + const { getOptionValue } = require('internal/options'); | ||
| 57 | 57 | ||
| 58 | 58 | function getMainArgs() { | |
| 59 | - // Work out where to slice process.argv for user supplied arguments. | ||
| 60 | - | ||
| 61 | - // Check node options for scenarios where user CLI args follow executable. | ||
| 62 | - const execArgv = process.execArgv; | ||
| 63 | - if (ArrayPrototypeIncludes(execArgv, '-e') || | ||
| 64 | - ArrayPrototypeIncludes(execArgv, '--eval') || | ||
| 65 | - ArrayPrototypeIncludes(execArgv, '-p') || | ||
| 66 | - ArrayPrototypeIncludes(execArgv, '--print')) { | ||
| 59 | + // -p / --print internally sets --eval, so this works for all cases | ||
| 60 | + const evalValue = getOptionValue('--eval'); | ||
| 61 | + | ||
| 62 | + if (evalValue.length !== 0) { | ||
| 67 | 63 | return ArrayPrototypeSlice(process.argv, 1); | |
| 68 | 64 | } | |
| 69 | 65 | ||
| 70 | - // Normally first two arguments are executable and script, then CLI arguments | ||
| 71 | 66 | return ArrayPrototypeSlice(process.argv, 2); | |
| 72 | 67 | } | |
| 73 | 68 | ||
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
@@ -1,6 +1,6 @@ | |||
| 1 | - import '../common/index.mjs'; | ||
| 1 | + import { spawnPromisified } from '../common/index.mjs'; | ||
| 2 | 2 | import assert from 'node:assert'; | |
| 3 | - import { test } from 'node:test'; | ||
| 3 | + import { suite, test } from 'node:test'; | ||
| 4 | 4 | import { parseArgs } from 'node:util'; | |
| 5 | 5 | ||
| 6 | 6 | test('when short option used as flag then stored as flag', () => { | |
@@ -211,73 +211,48 @@ test('order of option and positional does not matter (per README)', () => { | |||
| 211 | 211 | ); | |
| 212 | 212 | }); | |
| 213 | 213 | ||
| 214 | - test('correct default args when use node -p', () => { | ||
| 215 | - const holdArgv = process.argv; | ||
| 216 | - process.argv = [process.argv0, '--foo']; | ||
| 217 | - const holdExecArgv = process.execArgv; | ||
| 218 | - process.execArgv = ['-p', '0']; | ||
| 219 | - const result = parseArgs({ strict: false }); | ||
| 220 | - | ||
| 221 | - const expected = { values: { __proto__: null, foo: true }, | ||
| 222 | - positionals: [] }; | ||
| 223 | - assert.deepStrictEqual(result, expected); | ||
| 224 | - process.argv = holdArgv; | ||
| 225 | - process.execArgv = holdExecArgv; | ||
| 226 | - }); | ||
| 227 | - | ||
| 228 | - test('correct default args when use node --print', () => { | ||
| 229 | - const holdArgv = process.argv; | ||
| 230 | - process.argv = [process.argv0, '--foo']; | ||
| 231 | - const holdExecArgv = process.execArgv; | ||
| 232 | - process.execArgv = ['--print', '0']; | ||
| 233 | - const result = parseArgs({ strict: false }); | ||
| 234 | - | ||
| 235 | - const expected = { values: { __proto__: null, foo: true }, | ||
| 236 | - positionals: [] }; | ||
| 237 | - assert.deepStrictEqual(result, expected); | ||
| 238 | - process.argv = holdArgv; | ||
| 239 | - process.execArgv = holdExecArgv; | ||
| 240 | - }); | ||
| 241 | - | ||
| 242 | - test('correct default args when use node -e', () => { | ||
| 243 | - const holdArgv = process.argv; | ||
| 244 | - process.argv = [process.argv0, '--foo']; | ||
| 245 | - const holdExecArgv = process.execArgv; | ||
| 246 | - process.execArgv = ['-e', '0']; | ||
| 247 | - const result = parseArgs({ strict: false }); | ||
| 248 | - | ||
| 249 | - const expected = { values: { __proto__: null, foo: true }, | ||
| 250 | - positionals: [] }; | ||
| 251 | - assert.deepStrictEqual(result, expected); | ||
| 252 | - process.argv = holdArgv; | ||
| 253 | - process.execArgv = holdExecArgv; | ||
| 254 | - }); | ||
| 255 | - | ||
| 256 | - test('correct default args when use node --eval', () => { | ||
| 257 | - const holdArgv = process.argv; | ||
| 258 | - process.argv = [process.argv0, '--foo']; | ||
| 259 | - const holdExecArgv = process.execArgv; | ||
| 260 | - process.execArgv = ['--eval', '0']; | ||
| 261 | - const result = parseArgs({ strict: false }); | ||
| 262 | - const expected = { values: { __proto__: null, foo: true }, | ||
| 263 | - positionals: [] }; | ||
| 264 | - assert.deepStrictEqual(result, expected); | ||
| 265 | - process.argv = holdArgv; | ||
| 266 | - process.execArgv = holdExecArgv; | ||
| 267 | - }); | ||
| 268 | - | ||
| 269 | - test('correct default args when normal arguments', () => { | ||
| 270 | - const holdArgv = process.argv; | ||
| 271 | - process.argv = [process.argv0, 'script.js', '--foo']; | ||
| 272 | - const holdExecArgv = process.execArgv; | ||
| 273 | - process.execArgv = []; | ||
| 274 | - const result = parseArgs({ strict: false }); | ||
| 214 | + suite('correct default args', () => { | ||
| 215 | + suite('with CLI flags', () => { | ||
| 216 | + const evalCode = "JSON.stringify(require('util').parseArgs({ strict: false }).values)"; | ||
| 217 | + const evalCodePrinted = `process.stdout.write(${evalCode})`; | ||
| 218 | + const execArgsTests = { | ||
| 219 | + '-e <script>': ['-e', evalCodePrinted], | ||
| 220 | + '-p <script>': ['-p', evalCode], | ||
| 221 | + '-pe <script>': ['-pe', evalCode], | ||
| 222 | + '--eval <script>': ['--eval', evalCodePrinted], | ||
| 223 | + '--eval=<script>': [`--eval=${evalCodePrinted}`], | ||
| 224 | + '--print <script>': ['--print', evalCode], | ||
| 225 | + '--print --eval <script>': ['--print', '--eval', evalCode], | ||
| 226 | + '--print --eval=<script>': ['--print', `--eval=${evalCode}`], | ||
| 227 | + }; | ||
| 228 | + for (const description in execArgsTests) { | ||
| 229 | + const execArgs = execArgsTests[description]; | ||
| 230 | + test(description, async () => { | ||
| 231 | + const { code, signal, stderr, stdout } = await spawnPromisified( | ||
| 232 | + process.execPath, | ||
| 233 | + [...execArgs, '--', '--foo', '--bar']); | ||
| 234 | + assert.deepStrictEqual({ | ||
| 235 | + code, | ||
| 236 | + signal, | ||
| 237 | + stderr, | ||
| 238 | + stdout: JSON.parse(stdout), | ||
| 239 | + }, { | ||
| 240 | + code: 0, | ||
| 241 | + signal: null, | ||
| 242 | + stderr: '', | ||
| 243 | + stdout: { foo: true, bar: true }, | ||
| 244 | + }); | ||
| 245 | + }); | ||
| 246 | + } | ||
| 247 | + }); | ||
| 275 | 248 | ||
| 276 | - const expected = { values: { __proto__: null, foo: true }, | ||
| 277 | - positionals: [] }; | ||
| 278 | - assert.deepStrictEqual(result, expected); | ||
| 279 | - process.argv = holdArgv; | ||
| 280 | - process.execArgv = holdExecArgv; | ||
| 249 | + test('without CLI flags', () => { | ||
| 250 | + const holdArgv = process.argv; | ||
| 251 | + process.argv = [process.argv0, 'script.js', '--foo', '--bar']; | ||
| 252 | + const { values } = parseArgs({ strict: false }); | ||
| 253 | + assert.deepStrictEqual(values, { __proto__: null, foo: true, bar: true }); | ||
| 254 | + process.argv = holdArgv; | ||
| 255 | + }); | ||
| 281 | 256 | }); | |
| 282 | 257 | ||
| 283 | 258 | test('excess leading dashes on options are retained', () => { | |
@@ -1052,13 +1027,10 @@ test('allow negative options and passed multiple arguments', () => { | |||
| 1052 | 1027 | test('auto-detect --no-foo as negated when strict:false and allowNegative', () => { | |
| 1053 | 1028 | const holdArgv = process.argv; | |
| 1054 | 1029 | process.argv = [process.argv0, 'script.js', '--no-foo']; | |
| 1055 | - const holdExecArgv = process.execArgv; | ||
| 1056 | - process.execArgv = []; | ||
| 1057 | 1030 | const result = parseArgs({ strict: false, allowNegative: true }); | |
| 1058 | 1031 | ||
| 1059 | 1032 | const expected = { values: { __proto__: null, foo: false }, | |
| 1060 | 1033 | positionals: [] }; | |
| 1061 | 1034 | assert.deepStrictEqual(result, expected); | |
| 1062 | 1035 | process.argv = holdArgv; | |
| 1063 | - process.execArgv = holdExecArgv; | ||
| 1064 | 1036 | }); | |
| Back | FazBrowse Home | New Git URL |
0 commit comments