From 2cc8c1001ea58700fc7aa17471e8a96428c06d92 Mon Sep 17 00:00:00 2001 From: RedYetiDev <38299977+RedYetiDev@users.noreply.github.com> Date: Fri, 11 Oct 2024 14:43:10 -0400 Subject: [PATCH] test_runner: require `--enable-source-maps` for sourcemap coverage --- lib/internal/test_runner/coverage.js | 48 +++++++++---------- .../test-runner-coverage-source-map.js | 23 +++++++++ 2 files changed, 45 insertions(+), 26 deletions(-) diff --git a/lib/internal/test_runner/coverage.js b/lib/internal/test_runner/coverage.js index 5da1d7e04b3146..f6164b7d6be14a 100644 --- a/lib/internal/test_runner/coverage.js +++ b/lib/internal/test_runner/coverage.js @@ -57,13 +57,10 @@ class CoverageLine { } class TestCoverage { - constructor(coverageDirectory, originalCoverageDirectory, workingDirectory, excludeGlobs, includeGlobs, thresholds) { + constructor(coverageDirectory, originalCoverageDirectory, globalOptions) { this.coverageDirectory = coverageDirectory; this.originalCoverageDirectory = originalCoverageDirectory; - this.workingDirectory = workingDirectory; - this.excludeGlobs = excludeGlobs; - this.includeGlobs = includeGlobs; - this.thresholds = thresholds; + this.globalOptions = globalOptions; } #sourceLines = new SafeMap(); @@ -136,7 +133,7 @@ class TestCoverage { const coverage = this.getCoverageFromDirectory(); const coverageSummary = { __proto__: null, - workingDirectory: this.workingDirectory, + workingDirectory: this.globalOptions.cwd, files: [], totals: { __proto__: null, @@ -150,7 +147,12 @@ class TestCoverage { coveredBranchPercent: 0, coveredFunctionPercent: 0, }, - thresholds: this.thresholds, + thresholds: { + __proto__: null, + line: this.globalOptions.lineCoverage, + branch: this.globalOptions.branchCoverage, + function: this.globalOptions.functionCoverage, + }, }; if (!coverage) { @@ -341,7 +343,7 @@ class TestCoverage { mapCoverageWithSourceMap(coverage) { const { result } = coverage; const sourceMapCache = coverage['source-map-cache']; - if (!sourceMapCache) { + if (!this.globalOptions.sourceMaps || !sourceMapCache) { return result; } const newResult = new SafeMap(); @@ -455,21 +457,23 @@ class TestCoverage { if (!StringPrototypeStartsWith(url, 'file:')) return true; const absolutePath = fileURLToPath(url); - const relativePath = relative(this.workingDirectory, absolutePath); + const relativePath = relative(this.globalOptions.cwd, absolutePath); // This check filters out files that match the exclude globs. - if (this.excludeGlobs?.length > 0) { - for (let i = 0; i < this.excludeGlobs.length; ++i) { - if (matchesGlob(relativePath, this.excludeGlobs[i]) || - matchesGlob(absolutePath, this.excludeGlobs[i])) return true; + const excludeGlobs = this.globalOptions.coverageExcludeGlobs; + if (excludeGlobs?.length > 0) { + for (let i = 0; i < excludeGlobs.length; ++i) { + if (matchesGlob(relativePath, excludeGlobs[i]) || + matchesGlob(absolutePath, excludeGlobs[i])) return true; } } // This check filters out files that do not match the include globs. - if (this.includeGlobs?.length > 0) { - for (let i = 0; i < this.includeGlobs.length; ++i) { - if (matchesGlob(relativePath, this.includeGlobs[i]) || - matchesGlob(absolutePath, this.includeGlobs[i])) return false; + const includeGlobs = this.globalOptions.coverageIncludeGlobs; + if (includeGlobs?.length > 0) { + for (let i = 0; i < includeGlobs.length; ++i) { + if (matchesGlob(relativePath, includeGlobs[i]) || + matchesGlob(absolutePath, includeGlobs[i])) return false; } return true; } @@ -511,15 +515,7 @@ function setupCoverage(options) { return new TestCoverage( coverageDirectory, originalCoverageDirectory, - options.cwd, - options.coverageExcludeGlobs, - options.coverageIncludeGlobs, - { - __proto__: null, - line: options.lineCoverage, - branch: options.branchCoverage, - function: options.functionCoverage, - }, + options, ); } diff --git a/test/parallel/test-runner-coverage-source-map.js b/test/parallel/test-runner-coverage-source-map.js index 0ded33713c784a..48807fb2d193b4 100644 --- a/test/parallel/test-runner-coverage-source-map.js +++ b/test/parallel/test-runner-coverage-source-map.js @@ -19,6 +19,7 @@ function generateReport(report) { } const flags = [ + '--enable-source-maps', '--test', '--experimental-test-coverage', '--test-reporter', 'tap', ]; @@ -40,6 +41,28 @@ describe('Coverage with source maps', async () => { 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('should only work with --enable-source-maps', async (t) => { + const report = generateReport([ + '# --------------------------------------------------------------', + '# file | line % | branch % | funcs % | uncovered lines', + '# --------------------------------------------------------------', + '# a.test.mjs | 100.00 | 100.00 | 100.00 | ', + '# index.test.js | 71.43 | 66.67 | 100.00 | 6-7', + '# stdin.test.js | 100.00 | 100.00 | 100.00 | ', + '# --------------------------------------------------------------', + '# all files | 85.71 | 87.50 | 100.00 | ', + '# --------------------------------------------------------------', + ]); + + const spawned = await common.spawnPromisified(process.execPath, flags.slice(1), { + cwd: fixtures.path('test-runner', 'coverage') + }); t.assert.strictEqual(spawned.stderr, ''); t.assert.ok(spawned.stdout.includes(report)); t.assert.strictEqual(spawned.code, 1);