nodejs / node

Node.js JavaScript runtime ✨🐢🚀✨
https://nodejs.org
Other
106.72k stars 29.11k forks source link

`sourcesContent` not correctly handled in coverage reporter with `--enable-source-maps` #55106

Open RedYetiDev opened 3 hours ago

RedYetiDev commented 3 hours ago

Version

node-v23.0.0-nightly202409243c5ceff85f

Platform

N/A

Subsystem

test_runner

What steps will reproduce the bug?

The Node.js coverage reporter does not correctly handle source maps with a custom sourcesContent and --with-source-maps.

This example was taken from the test-runner/coverage fixture:

  1. Generate a sourcemap via:
echo "import { test } from 'node:test';
test('ok', () => {});

function uncovered() {
  return 'uncovered';
}
" | npx esbuild --sourcemap --sourcefile=stdin.test.ts --sources-content=true --bundle --platform=node --outfile="stdin.test.js"
Output ```cjs // stdin.test.ts var import_node_test = require("node:test"); (0, import_node_test.test)("ok", () => { }); //# sourceMappingURL=stdin.test.js.map ``` ```json { "version": 3, "sources": ["stdin.test.ts"], "sourcesContent": ["import { test } from 'node:test';\ntest('ok', () => {});\n\nfunction uncovered() {\n return 'uncovered';\n}\n\n"], "mappings": ";AAAA,uBAAqB;AAAA,IACrB,uBAAK,MAAM,MAAM;AAAC,CAAC;", "names": [] } ```
  1. Compare the output of node --test --experimental-test-coverage --enable-source-maps with node --test --experimental-test-coverage

How often does it reproduce? Is there a required condition?

Everytime

What is the expected behavior? Why is that the expected behavior?

Without --enable-source-maps:

ℹ start of coverage report
ℹ --------------------------------------------------------------
ℹ file          | line % | branch % | funcs % | uncovered lines
ℹ --------------------------------------------------------------
ℹ stdin.test.ts |  57.14 |   100.00 |  100.00 | 4-6
ℹ --------------------------------------------------------------
ℹ all files     |  57.14 |   100.00 |  100.00 |
ℹ --------------------------------------------------------------
ℹ end of coverage report

Which is the same as not suppy

What do you see instead?

ℹ start of coverage report
ℹ ----------------------------------------------------------------
ℹ file            | line % | branch % | funcs % | uncovered lines
ℹ ----------------------------------------------------------------
ℹ stdin.test.ts   |  42.86 |   100.00 |    0.00 | 2 4-6
ℹ ----------------------------------------------------------------
ℹ all files       |  42.86 |   100.00 |    0.00 |
ℹ ----------------------------------------------------------------
ℹ end of coverage report

Additional information

No response

RedYetiDev commented 3 hours ago

In v22.9.0, there is no difference in the output with/without --enable-source-maps:

ℹ start of coverage report
ℹ --------------------------------------------------------------
ℹ file          | line % | branch % | funcs % | uncovered lines
ℹ --------------------------------------------------------------
ℹ stdin.test.ts |  57.14 |   100.00 |  100.00 | 4-6
ℹ --------------------------------------------------------------
ℹ all files     |  57.14 |   100.00 |  100.00 |
ℹ --------------------------------------------------------------
ℹ end of coverage report