| // This tests debugger probe JSON output for stable special-cased values. |
| 'use strict'; |
| |
| const common = require('../common'); |
| common.skipIfInspectorDisabled(); |
| |
| const fixtures = require('../common/fixtures'); |
| const { spawnSyncAndAssert } = require('../common/child_process'); |
| const { assertProbeJson } = require('../common/debugger-probe'); |
| |
| const cwd = fixtures.path('debugger'); |
| const probeArg = 'probe-types.js:17'; |
| const target = { suffix: 'probe-types.js', line: 17 }; |
| const location = { url: fixtures.fileURL('debugger', 'probe-types.js').href, line: 17, column: 1 }; |
| |
| spawnSyncAndAssert(process.execPath, [ |
| 'inspect', |
| '--json', |
| '--probe', probeArg, |
| '--expr', 'stringValue', |
| '--probe', probeArg, |
| '--expr', 'booleanValue', |
| '--probe', probeArg, |
| '--expr', 'undefinedValue', |
| '--probe', probeArg, |
| '--expr', 'nullValue', |
| '--probe', probeArg, |
| '--expr', 'nanValue', |
| '--probe', probeArg, |
| '--expr', 'bigintValue', |
| '--probe', probeArg, |
| '--expr', 'symbolValue', |
| '--probe', probeArg, |
| '--expr', 'functionValue', |
| '--probe', probeArg, |
| '--expr', 'objectValue', |
| '--probe', probeArg, |
| '--expr', 'arrayValue', |
| '--probe', probeArg, |
| '--expr', 'errorValue', |
| 'probe-types.js', |
| ], { cwd, env: { ...process.env, NODE_DEBUG: 'inspect_probe' } }, { |
| stdout(output) { |
| assertProbeJson(output, { |
| v: 2, |
| probes: [ |
| { expr: 'stringValue', target }, |
| { expr: 'booleanValue', target }, |
| { expr: 'undefinedValue', target }, |
| { expr: 'nullValue', target }, |
| { expr: 'nanValue', target }, |
| { expr: 'bigintValue', target }, |
| { expr: 'symbolValue', target }, |
| { expr: 'functionValue', target }, |
| { expr: 'objectValue', target }, |
| { expr: 'arrayValue', target }, |
| { expr: 'errorValue', target }, |
| ], |
| results: [ |
| { |
| probe: 0, |
| event: 'hit', |
| hit: 1, |
| location, |
| result: { type: 'string', value: 'hello' }, |
| }, |
| { |
| probe: 1, |
| event: 'hit', |
| hit: 1, |
| location, |
| result: { type: 'boolean', value: true }, |
| }, |
| { |
| probe: 2, |
| event: 'hit', |
| hit: 1, |
| location, |
| result: { type: 'undefined' }, |
| }, |
| { |
| probe: 3, |
| event: 'hit', |
| hit: 1, |
| location, |
| result: { type: 'object', subtype: 'null', value: null }, |
| }, |
| { |
| probe: 4, |
| event: 'hit', |
| hit: 1, |
| location, |
| result: { type: 'number', unserializableValue: 'NaN', description: 'NaN' }, |
| }, |
| { |
| probe: 5, |
| event: 'hit', |
| hit: 1, |
| location, |
| result: { type: 'bigint', unserializableValue: '1n', description: '1n' }, |
| }, |
| { |
| probe: 6, |
| event: 'hit', |
| hit: 1, |
| location, |
| result: { type: 'symbol', description: 'Symbol(tag)' }, |
| }, |
| { |
| probe: 7, |
| event: 'hit', |
| hit: 1, |
| location, |
| result: { |
| type: 'function', |
| description: '() => 1', |
| }, |
| }, |
| { |
| probe: 8, |
| event: 'hit', |
| hit: 1, |
| location, |
| result: { |
| type: 'object', |
| description: 'Object', |
| }, |
| }, |
| { |
| probe: 9, |
| event: 'hit', |
| hit: 1, |
| location, |
| result: { |
| type: 'object', |
| subtype: 'array', |
| description: 'Array(3)', |
| }, |
| }, |
| { |
| probe: 10, |
| event: 'hit', |
| hit: 1, |
| location, |
| result: { |
| type: 'object', |
| subtype: 'error', |
| description: 'Error: boom', |
| }, |
| }, |
| { event: 'completed' }, |
| ], |
| }); |
| }, |
| trim: true, |
| }); |