|
1 | 1 | 'use strict';
|
2 |
| -const common = require('../common'); |
| 2 | +require('../common'); |
3 | 3 | const assert = require('assert');
|
4 | 4 | const cp = require('child_process');
|
5 | 5 |
|
| 6 | +function getPrintedStackTrace(stderr) { |
| 7 | + const lines = stderr.split('\n'); |
| 8 | + |
| 9 | + let state = 'initial'; |
| 10 | + const result = { |
| 11 | + message: [], |
| 12 | + nativeStack: [], |
| 13 | + jsStack: [], |
| 14 | + }; |
| 15 | + for (let i = 0; i < lines.length; ++i) { |
| 16 | + const line = lines[i].trim(); |
| 17 | + if (line.length === 0) { |
| 18 | + continue; // Skip empty lines. |
| 19 | + } |
| 20 | + |
| 21 | + switch (state) { |
| 22 | + case 'initial': |
| 23 | + result.message.push(line); |
| 24 | + if (line.includes('Native stack trace')) { |
| 25 | + state = 'native-stack'; |
| 26 | + } else { |
| 27 | + result.message.push(line); |
| 28 | + } |
| 29 | + break; |
| 30 | + case 'native-stack': |
| 31 | + if (line.includes('JavaScript stack trace')) { |
| 32 | + state = 'js-stack'; |
| 33 | + } else { |
| 34 | + result.nativeStack.push(line); |
| 35 | + } |
| 36 | + break; |
| 37 | + case 'js-stack': |
| 38 | + result.jsStack.push(line); |
| 39 | + break; |
| 40 | + } |
| 41 | + } |
| 42 | + return result; |
| 43 | +} |
| 44 | + |
6 | 45 | if (process.argv[2] === 'child') {
|
7 | 46 | process.abort();
|
8 | 47 | } else {
|
9 | 48 | const child = cp.spawnSync(`${process.execPath}`, [`${__filename}`, 'child']);
|
10 | 49 | const stderr = child.stderr.toString();
|
11 | 50 |
|
12 | 51 | assert.strictEqual(child.stdout.toString(), '');
|
13 |
| - const { nativeStack, jsStack } = common.getPrintedStackTrace(stderr); |
| 52 | + const { nativeStack, jsStack } = getPrintedStackTrace(stderr); |
14 | 53 |
|
15 | 54 | if (!nativeStack.every((frame, index) => frame.startsWith(`${index + 1}:`))) {
|
16 | 55 | assert.fail(`Each frame should start with a frame number:\n${stderr}`);
|
17 | 56 | }
|
18 | 57 |
|
19 | 58 | // For systems that don't support backtraces, the native stack is
|
20 | 59 | // going to be empty.
|
21 |
| - if (!common.isWindows && nativeStack.length > 0) { |
| 60 | + if (process.platform !== 'win32' && nativeStack.length > 0) { |
22 | 61 | const { getBinaryPath } = require('../common/shared-lib-util');
|
23 | 62 | if (!nativeStack.some((frame) => frame.includes(`[${getBinaryPath()}]`))) {
|
24 | 63 | assert.fail(`Some native stack frame include the binary name:\n${stderr}`);
|
|
0 commit comments