Skip to content

Commit

Permalink
test_runner: throw on invalid source maps
Browse files Browse the repository at this point in the history
  • Loading branch information
RedYetiDev committed Sep 23, 2024
1 parent edf367f commit 51f959c
Show file tree
Hide file tree
Showing 7 changed files with 27 additions and 0 deletions.
6 changes: 6 additions & 0 deletions doc/api/errors.md
Original file line number Diff line number Diff line change
Expand Up @@ -2573,6 +2573,12 @@ disconnected socket.

A call was made and the UDP subsystem was not running.

<a id="ERR_SOURCE_MAP_CANNOT_PARSE"></a>

### `ERR_SOURCE_MAP_CANNOT_PARSE`

The source map could not be parsed because it is not valid JSON.

<a id="ERR_SOURCE_MAP_MISSING_SOURCE"></a>

### `ERR_SOURCE_MAP_MISSING_SOURCE`
Expand Down
1 change: 1 addition & 0 deletions lib/internal/errors.js
Original file line number Diff line number Diff line change
Expand Up @@ -1704,6 +1704,7 @@ E('ERR_SOCKET_CONNECTION_TIMEOUT',
E('ERR_SOCKET_DGRAM_IS_CONNECTED', 'Already connected', Error);
E('ERR_SOCKET_DGRAM_NOT_CONNECTED', 'Not connected', Error);
E('ERR_SOCKET_DGRAM_NOT_RUNNING', 'Not running', Error);
E('ERR_SOURCE_MAP_CANNOT_PARSE', `The source map for '%s' does not exist or is not valid JSON.`, Error);
E('ERR_SOURCE_MAP_MISSING_SOURCE', `Cannot find '%s' imported from the source map for '%s'`, Error);
E('ERR_SRI_PARSE',
'Subresource Integrity string %j had an unexpected %j at position %d',
Expand Down
2 changes: 2 additions & 0 deletions lib/internal/test_runner/coverage.js
Original file line number Diff line number Diff line change
Expand Up @@ -32,6 +32,7 @@ const { fileURLToPath } = require('internal/url');
const { kMappings, SourceMap } = require('internal/source_map/source_map');
const {
codes: {
ERR_SOURCE_MAP_CANNOT_PARSE,
ERR_SOURCE_MAP_MISSING_SOURCE,
},
} = require('internal/errors');
Expand Down Expand Up @@ -353,6 +354,7 @@ class TestCoverage {
continue;
}
const { data, lineLengths } = sourceMapCache[url];
if (!data) throw new ERR_SOURCE_MAP_CANNOT_PARSE(url);
let offset = 0;
const executedLines = ArrayPrototypeMap(lineLengths, (length, i) => {
const coverageLine = new CoverageLine(i + 1, offset, null, length + 1);
Expand Down
2 changes: 2 additions & 0 deletions test/fixtures/test-runner/source-maps/invalid-json/index.js

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

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

1 change: 1 addition & 0 deletions test/fixtures/test-runner/source-maps/missing-map.js

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

14 changes: 14 additions & 0 deletions test/parallel/test-runner-coverage-source-map.js
Original file line number Diff line number Diff line change
Expand Up @@ -80,4 +80,18 @@ describe('Coverage with source maps', async () => {
t.assert.ok(spawned.stdout.includes(error));
t.assert.strictEqual(spawned.code, 1);
});

for (const [file, message] of [
[fixtures.path('test-runner', 'source-maps', 'invalid-json', 'index.js'), 'is not valid JSON'],
[fixtures.path('test-runner', 'source-maps', 'missing-map.js'), 'does not exist'],
]) {
await it(`should throw when a source map ${message}`, async (t) => {
const spawned = await common.spawnPromisified(process.execPath, [...flags, file]);

const error = `The source map for '${pathToFileURL(file)}' does not exist or is not valid JSON`;
t.assert.strictEqual(spawned.stderr, '');
t.assert.ok(spawned.stdout.includes(error));
t.assert.strictEqual(spawned.code, 1);
});
}
}).then(common.mustCall());

0 comments on commit 51f959c

Please sign in to comment.