1'use strict'; 2 3const common = require('../common'); 4const assert = require('assert'); 5 6// Assert legit flags are allowed, and bogus flags are disallowed 7{ 8 const goodFlags = [ 9 '--perf_basic_prof', 10 '--perf-basic-prof', 11 'perf-basic-prof', 12 '--perf_basic-prof', 13 'perf_basic-prof', 14 'perf_basic_prof', 15 '-r', 16 'r', 17 '--stack-trace-limit=100', 18 '--stack-trace-limit=-=xX_nodejs_Xx=-', 19 ].concat(process.features.inspector ? [ 20 '--inspect-brk', 21 'inspect-brk', 22 '--inspect_brk', 23 ] : []); 24 25 const badFlags = [ 26 'INSPECT-BRK', 27 '--INSPECT-BRK', 28 '--r', 29 '-R', 30 '---inspect-brk', 31 '--cheeseburgers', 32 ]; 33 34 goodFlags.forEach((flag) => { 35 assert.strictEqual( 36 process.allowedNodeEnvironmentFlags.has(flag), 37 true, 38 `flag should be in set: ${flag}` 39 ); 40 }); 41 42 badFlags.forEach((flag) => { 43 assert.strictEqual( 44 process.allowedNodeEnvironmentFlags.has(flag), 45 false, 46 `flag should not be in set: ${flag}` 47 ); 48 }); 49} 50 51// Assert all "canonical" flags begin with dash(es) 52{ 53 process.allowedNodeEnvironmentFlags.forEach((flag) => { 54 assert.match(flag, /^--?[a-zA-Z0-9._-]+$/); 55 }); 56} 57 58// Assert immutability of process.allowedNodeEnvironmentFlags 59{ 60 assert.strictEqual(Object.isFrozen(process.allowedNodeEnvironmentFlags), 61 true); 62 63 process.allowedNodeEnvironmentFlags.add('foo'); 64 assert.strictEqual(process.allowedNodeEnvironmentFlags.has('foo'), false); 65 Set.prototype.add.call(process.allowedNodeEnvironmentFlags, 'foo'); 66 assert.strictEqual(process.allowedNodeEnvironmentFlags.has('foo'), false); 67 68 const thisArg = {}; 69 process.allowedNodeEnvironmentFlags.forEach( 70 common.mustCallAtLeast(function(flag, _, set) { 71 assert.notStrictEqual(flag, 'foo'); 72 assert.strictEqual(this, thisArg); 73 assert.strictEqual(set, process.allowedNodeEnvironmentFlags); 74 }), 75 thisArg 76 ); 77 78 for (const flag of process.allowedNodeEnvironmentFlags.keys()) { 79 assert.notStrictEqual(flag, 'foo'); 80 } 81 for (const flag of process.allowedNodeEnvironmentFlags.values()) { 82 assert.notStrictEqual(flag, 'foo'); 83 } 84 for (const flag of process.allowedNodeEnvironmentFlags) { 85 assert.notStrictEqual(flag, 'foo'); 86 } 87 for (const [flag] of process.allowedNodeEnvironmentFlags.entries()) { 88 assert.notStrictEqual(flag, 'foo'); 89 } 90 91 const size = process.allowedNodeEnvironmentFlags.size; 92 93 process.allowedNodeEnvironmentFlags.clear(); 94 assert.strictEqual(process.allowedNodeEnvironmentFlags.size, size); 95 Set.prototype.clear.call(process.allowedNodeEnvironmentFlags); 96 assert.strictEqual(process.allowedNodeEnvironmentFlags.size, size); 97 98 process.allowedNodeEnvironmentFlags.delete('-r'); 99 assert.strictEqual(process.allowedNodeEnvironmentFlags.size, size); 100 Set.prototype.delete.call(process.allowedNodeEnvironmentFlags, '-r'); 101 assert.strictEqual(process.allowedNodeEnvironmentFlags.size, size); 102} 103