Skip to content

Commit

Permalink
test: move coverage source map tests to new file
Browse files Browse the repository at this point in the history
PR-URL: #55123
Reviewed-By: Moshe Atlow <[email protected]>
Reviewed-By: Chemi Atlow <[email protected]>
  • Loading branch information
RedYetiDev authored and targos committed Oct 4, 2024
1 parent f89664d commit 1b30f7f
Show file tree
Hide file tree
Showing 7 changed files with 83 additions and 74 deletions.
83 changes: 83 additions & 0 deletions test/parallel/test-runner-coverage-source-map.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,83 @@
'use strict';
const common = require('../common');
const { pathToFileURL } = require('url');
const fixtures = require('../common/fixtures');
common.skipIfInspectorDisabled();

const { describe, it } = require('node:test');

function generateReport(report) {
report = ([
'# start of coverage report',
...report,
'# end of coverage report',
]).join('\n');
if (common.isWindows) {
report = report.replaceAll('/', '\\');
}
return report;
}

const flags = [
'--test', '--experimental-test-coverage', '--test-reporter', 'tap',
];

describe('Coverage with source maps', async () => {
await it('should work with source maps', async (t) => {
const report = generateReport([
'# --------------------------------------------------------------',
'# file | line % | branch % | funcs % | uncovered lines',
'# --------------------------------------------------------------',
'# a.test.ts | 53.85 | 100.00 | 100.00 | 8-13', // part of a bundle
'# b.test.ts | 55.56 | 100.00 | 100.00 | 1 7-9', // part of a bundle
'# index.test.js | 71.43 | 66.67 | 100.00 | 6-7', // no source map
'# stdin.test.ts | 57.14 | 100.00 | 100.00 | 4-6', // Source map without original file
'# --------------------------------------------------------------',
'# all files | 58.33 | 87.50 | 100.00 | ',
'# --------------------------------------------------------------',
]);

const spawned = await common.spawnPromisified(process.execPath, flags, {
cwd: fixtures.path('test-runner', 'coverage')
});
t.assert.strictEqual(spawned.stderr, '');
t.assert.ok(spawned.stdout.includes(report));
t.assert.strictEqual(spawned.code, 1);
});

await it('properly accounts for line endings in source maps', async (t) => {
const report = generateReport([
'# ------------------------------------------------------------------',
'# file | line % | branch % | funcs % | uncovered lines',
'# ------------------------------------------------------------------',
'# test | | | | ',
'# fixtures | | | | ',
'# test-runner | | | | ',
'# source-maps | | | | ',
'# line-lengths | | | | ',
'# index.ts | 100.00 | 100.00 | 100.00 | ',
'# ------------------------------------------------------------------',
'# all files | 100.00 | 100.00 | 100.00 | ',
'# ------------------------------------------------------------------',
]);

const spawned = await common.spawnPromisified(process.execPath, [
...flags,
fixtures.path('test-runner', 'source-maps', 'line-lengths', 'index.js'),
]);
t.assert.strictEqual(spawned.stderr, '');
t.assert.ok(spawned.stdout.includes(report));
t.assert.strictEqual(spawned.code, 0);
});

await it('should throw when a source map is missing a source file', async (t) => {
const file = fixtures.path('test-runner', 'source-maps', 'missing-sources', 'index.js');
const missing = fixtures.path('test-runner', 'source-maps', 'missing-sources', 'nonexistent.js');
const spawned = await common.spawnPromisified(process.execPath, [...flags, file]);

const error = `Cannot find '${pathToFileURL(missing)}' imported from the source map for '${pathToFileURL(file)}'`;
t.assert.strictEqual(spawned.stderr, '');
t.assert.ok(spawned.stdout.includes(error));
t.assert.strictEqual(spawned.code, 1);
});
}).then(common.mustCall());
74 changes: 0 additions & 74 deletions test/parallel/test-runner-coverage.js
Original file line number Diff line number Diff line change
Expand Up @@ -6,7 +6,6 @@ const { readdirSync } = require('node:fs');
const { test } = require('node:test');
const fixtures = require('../common/fixtures');
const tmpdir = require('../common/tmpdir');
const { pathToFileURL } = require('node:url');
const skipIfNoInspector = {
skip: !process.features.inspector ? 'inspector disabled' : false
};
Expand Down Expand Up @@ -290,51 +289,6 @@ test('coverage reports on lines, functions, and branches', skipIfNoInspector, as
});
});

test('coverage with source maps', skipIfNoInspector, () => {
let report = [
'# start of coverage report',
'# --------------------------------------------------------------',
'# file | line % | branch % | funcs % | uncovered lines',
'# --------------------------------------------------------------',
'# a.test.ts | 53.85 | 100.00 | 100.00 | 8-13', // part of a bundle
'# b.test.ts | 55.56 | 100.00 | 100.00 | 1 7-9', // part of a bundle
'# index.test.js | 71.43 | 66.67 | 100.00 | 6-7', // no source map
'# stdin.test.ts | 57.14 | 100.00 | 100.00 | 4-6', // Source map without original file
'# --------------------------------------------------------------',
'# all files | 58.33 | 87.50 | 100.00 | ',
'# --------------------------------------------------------------',
'# end of coverage report',
].join('\n');

if (common.isWindows) {
report = report.replaceAll('/', '\\');
}

const fixture = fixtures.path('test-runner', 'coverage');
const args = [
'--test', '--experimental-test-coverage', '--test-reporter', 'tap',
];
const result = spawnSync(process.execPath, args, { cwd: fixture });

assert.strictEqual(result.stderr.toString(), '');
assert(result.stdout.toString().includes(report));
assert.strictEqual(result.status, 1);
});

test('coverage with source maps missing sources', skipIfNoInspector, () => {
const file = fixtures.path('test-runner', 'source-map-missing-sources', 'index.js');
const missing = fixtures.path('test-runner', 'source-map-missing-sources', 'nonexistent.js');
const result = spawnSync(process.execPath, [
'--test',
'--experimental-test-coverage',
file,
]);

const error = `Cannot find '${pathToFileURL(missing)}' imported from the source map for '${pathToFileURL(file)}'`;
assert(result.stdout.toString().includes(error));
assert.strictEqual(result.status, 1);
});

test('coverage with ESM hook - source irrelevant', skipIfNoInspector, () => {
let report = [
'# start of coverage report',
Expand Down Expand Up @@ -501,34 +455,6 @@ test('coverage with included and excluded files', skipIfNoInspector, () => {
assert(!findCoverageFileForPid(result.pid));
});

test('properly accounts for line endings in source maps', skipIfNoInspector, () => {
const fixture = fixtures.path('test-runner', 'source-map-line-lengths', 'index.js');
const args = [
'--test', '--experimental-test-coverage', '--test-reporter', 'tap',
fixture,
];
const report = [
'# start of coverage report',
'# ----------------------------------------------------------------------------',
'# file | line % | branch % | funcs % | uncovered lines',
'# ----------------------------------------------------------------------------',
'# test | | | | ',
'# fixtures | | | | ',
'# test-runner | | | | ',
'# source-map-line-lengths | | | | ',
'# index.ts | 100.00 | 100.00 | 100.00 | ',
'# ----------------------------------------------------------------------------',
'# all files | 100.00 | 100.00 | 100.00 | ',
'# ----------------------------------------------------------------------------',
'# end of coverage report',
].join('\n');

const result = spawnSync(process.execPath, args);
assert.strictEqual(result.stderr.toString(), '');
assert(result.stdout.toString().includes(report));
assert.strictEqual(result.status, 0);
});

test('correctly prints the coverage report of files contained in parent directories', skipIfNoInspector, () => {
let report = [
'# start of coverage report',
Expand Down

0 comments on commit 1b30f7f

Please sign in to comment.