Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 2 additions & 0 deletions test/fixtures/source-map/get-call-sites-mapped.js

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

6 changes: 6 additions & 0 deletions test/fixtures/source-map/get-call-sites-mapped.map
Original file line number Diff line number Diff line change
@@ -0,0 +1,6 @@
{
"version": 3,
"sources": ["get-call-sites-original.js"],
"names": [],
"mappings": "AAUA"
}
57 changes: 57 additions & 0 deletions test/parallel/test-util-exception-with-host-port.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,57 @@
'use strict';

require('../common');
const assert = require('node:assert');
const os = require('node:os');
const util = require('node:util');

const ENOENT = -os.constants.errno.ENOENT;
const EACCES = -os.constants.errno.EACCES;

// Address and port are included in the message
{
const e = util._exceptionWithHostPort(ENOENT, 'connect', '127.0.0.1', 8080);
assert.ok(e instanceof Error);
assert.strictEqual(e.errno, ENOENT);
assert.strictEqual(e.code, util.getSystemErrorName(ENOENT));
assert.strictEqual(e.syscall, 'connect');
assert.strictEqual(e.address, '127.0.0.1');
assert.strictEqual(e.port, 8080);
assert.ok(e.message.includes('127.0.0.1:8080'), `expected 127.0.0.1:8080 in "${e.message}"`);
}

// Port=0 omits host:port detail; port property is not set
{
const e = util._exceptionWithHostPort(ENOENT, 'connect', '127.0.0.1', 0);
assert.strictEqual(e.address, '127.0.0.1');
assert.strictEqual(e.port, undefined);
assert.ok(e.message.includes('127.0.0.1'), `expected address in "${e.message}"`);
assert.ok(!e.message.includes(':0'), `unexpected :0 in "${e.message}"`);
}

// Additional is appended as "- Local (...)"
{
const e = util._exceptionWithHostPort(ENOENT, 'connect', '127.0.0.1', 80, '0.0.0.0:12345');
assert.ok(e.message.includes('- Local (0.0.0.0:12345)'), `expected local info in "${e.message}"`);
}

// No address or port
{
const e = util._exceptionWithHostPort(ENOENT, 'connect', null, 0);
assert.strictEqual(e.address, null);
assert.strictEqual(e.port, undefined);
assert.ok(!e.message.includes('null'), `unexpected null in "${e.message}"`);
}

// Different syscall and error code
{
const e = util._exceptionWithHostPort(EACCES, 'bind', '0.0.0.0', 443);
assert.strictEqual(e.code, util.getSystemErrorName(EACCES));
assert.strictEqual(e.syscall, 'bind');
}

// Stack trace should not include _exceptionWithHostPort itself
{
const e = util._exceptionWithHostPort(ENOENT, 'connect', '127.0.0.1', 80);
assert.ok(!e.stack.includes('_exceptionWithHostPort'), 'stack must not mention the wrapper');
}
52 changes: 52 additions & 0 deletions test/parallel/test-util-getcallsites-sourcemap.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,52 @@
'use strict';

require('../common');
const assert = require('node:assert');
const { spawnSync } = require('node:child_process');
const { getCallSites } = require('node:util');
const fixtures = require('../common/fixtures');

// mapCallSite falls back to the original call site when no source map is
// registered for the current file.
{
const withoutMap = getCallSites(1);
const withMap = getCallSites(1, { sourceMap: true });
// scriptName must be identical — no source map registered for this test file
assert.strictEqual(withMap[0].scriptName, withoutMap[0].scriptName);
// Both calls report the actual line in this file (they differ by one because
// they are on consecutive source lines, which is expected).
assert.ok(typeof withMap[0].lineNumber === 'number');
assert.ok(typeof withMap[0].columnNumber === 'number');
}

// reconstructCallSite remaps call sites to the original source when
// --enable-source-maps is active and a source map is found.
{
const file = fixtures.path('source-map', 'get-call-sites-mapped.js');
const { status, stderr, stdout } = spawnSync(
process.execPath,
['--enable-source-maps', file],
);
assert.strictEqual(status, 0, stderr.toString());
const callSite = JSON.parse(stdout.toString());
// scriptName should point to the original (unmapped) source file
assert.ok(
callSite.scriptName.endsWith('get-call-sites-original.js'),
`expected original source in scriptName, got "${callSite.scriptName}"`,
);
// lineNumber and columnNumber should reflect the original source position
assert.strictEqual(callSite.lineNumber, 11);
assert.strictEqual(callSite.columnNumber, 1);
}

// Without --enable-source-maps the generated file path is preserved.
{
const file = fixtures.path('source-map', 'get-call-sites-mapped.js');
const { status, stderr, stdout } = spawnSync(process.execPath, [file]);
assert.strictEqual(status, 0, stderr.toString());
const callSite = JSON.parse(stdout.toString());
assert.ok(
callSite.scriptName.endsWith('get-call-sites-mapped.js'),
`expected generated file in scriptName, got "${callSite.scriptName}"`,
);
}
Loading