Skip to content

Commit 9ab85f4

Browse files
test: cover symbolicate wasm package
1 parent 5523dda commit 9ab85f4

5 files changed

Lines changed: 120 additions & 3 deletions

File tree

.github/scripts/workflow-policy.test.mjs

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -76,3 +76,15 @@ describe("Rust feature coverage", () => {
7676
assert.match(job, /^ run: cargo test -p srcmap-generator --features parallel$/m);
7777
});
7878
});
79+
80+
describe("WASM package coverage", () => {
81+
it("builds symbolicate WASM targets before JavaScript tests", async () => {
82+
const workflow = await readFile(CI_WORKFLOW_URL, "utf8");
83+
const job = workflowJob(workflow, "js-runtime");
84+
const build = "corepack pnpm --filter @srcmap/symbolicate-wasm build:all";
85+
const test = "corepack pnpm run test:js";
86+
87+
assert.ok(job.includes(build), "missing symbolicate WASM build");
88+
assert.ok(job.indexOf(build) < job.indexOf(test), "symbolicate WASM must build before JS tests");
89+
});
90+
});

.github/workflows/ci.yml

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -216,6 +216,7 @@ jobs:
216216
corepack pnpm --filter @srcmap/sourcemap-wasm build:all
217217
corepack pnpm --filter @srcmap/generator-wasm build:all
218218
corepack pnpm --filter @srcmap/remapping-wasm build:all
219+
corepack pnpm --filter @srcmap/symbolicate-wasm build:all
219220
- name: Run JS tests
220221
run: corepack pnpm run test:js
221222

package.json

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -29,10 +29,10 @@
2929
"typos": "typos",
3030
"deny": "cargo deny check",
3131
"test": "pnpm run test:rust && pnpm run test:js",
32-
"test:js": "node --test .github/scripts/check-napi-declarations.test.mjs .github/scripts/publish-crate-if-needed.test.mjs .github/scripts/workflow-policy.test.mjs benchmarks/workload.test.mjs packages/codec/__tests__/codec.test.mjs packages/sourcemap/__tests__/sourcemap.test.mjs packages/sourcemap-wasm/__tests__/sourcemap-wasm.test.mjs packages/sourcemap-wasm/__tests__/coverage-utils.test.mjs packages/sourcemap-wasm/__tests__/browser.test.mjs packages/generator-wasm/__tests__/generator-wasm.test.mjs packages/remapping-wasm/__tests__/remapping-wasm.test.mjs packages/trace-mapping/__tests__/trace-mapping.test.mjs packages/trace-mapping/__tests__/compat.test.mjs packages/source-map/__tests__/source-map.test.mjs packages/gen-mapping/__tests__/gen-mapping.test.mjs packages/gen-mapping/__tests__/gen-mapping.cjs.test.cjs packages/remapping/__tests__/remapping.test.mjs packages/remapping/__tests__/remapping.cjs.test.cjs packages/remapping/__tests__/compat.test.mjs",
32+
"test:js": "node --test .github/scripts/check-napi-declarations.test.mjs .github/scripts/publish-crate-if-needed.test.mjs .github/scripts/workflow-policy.test.mjs benchmarks/workload.test.mjs packages/codec/__tests__/codec.test.mjs packages/sourcemap/__tests__/sourcemap.test.mjs packages/sourcemap-wasm/__tests__/sourcemap-wasm.test.mjs packages/sourcemap-wasm/__tests__/coverage-utils.test.mjs packages/sourcemap-wasm/__tests__/browser.test.mjs packages/generator-wasm/__tests__/generator-wasm.test.mjs packages/remapping-wasm/__tests__/remapping-wasm.test.mjs packages/symbolicate-wasm/__tests__/symbolicate-wasm.test.mjs packages/trace-mapping/__tests__/trace-mapping.test.mjs packages/trace-mapping/__tests__/compat.test.mjs packages/source-map/__tests__/source-map.test.mjs packages/gen-mapping/__tests__/gen-mapping.test.mjs packages/gen-mapping/__tests__/gen-mapping.cjs.test.cjs packages/remapping/__tests__/remapping.test.mjs packages/remapping/__tests__/remapping.cjs.test.cjs packages/remapping/__tests__/compat.test.mjs",
3333
"test:rust": "cargo test",
3434
"coverage": "pnpm run coverage:rust && pnpm run coverage:js",
35-
"coverage:js": "mkdir -p coverage && node --test --experimental-test-coverage --test-reporter=lcov --test-reporter-destination=coverage/js-lcov.info --test-reporter=spec --test-reporter-destination=stdout packages/codec/__tests__/codec.test.mjs packages/sourcemap/__tests__/sourcemap.test.mjs packages/sourcemap-wasm/__tests__/sourcemap-wasm.test.mjs packages/sourcemap-wasm/__tests__/coverage-utils.test.mjs packages/generator-wasm/__tests__/generator-wasm.test.mjs packages/remapping-wasm/__tests__/remapping-wasm.test.mjs packages/trace-mapping/__tests__/trace-mapping.test.mjs packages/trace-mapping/__tests__/compat.test.mjs packages/source-map/__tests__/source-map.test.mjs packages/gen-mapping/__tests__/gen-mapping.test.mjs packages/gen-mapping/__tests__/gen-mapping.cjs.test.cjs packages/remapping/__tests__/remapping.test.mjs packages/remapping/__tests__/remapping.cjs.test.cjs packages/remapping/__tests__/compat.test.mjs",
35+
"coverage:js": "mkdir -p coverage && node --test --experimental-test-coverage --test-reporter=lcov --test-reporter-destination=coverage/js-lcov.info --test-reporter=spec --test-reporter-destination=stdout packages/codec/__tests__/codec.test.mjs packages/sourcemap/__tests__/sourcemap.test.mjs packages/sourcemap-wasm/__tests__/sourcemap-wasm.test.mjs packages/sourcemap-wasm/__tests__/coverage-utils.test.mjs packages/generator-wasm/__tests__/generator-wasm.test.mjs packages/remapping-wasm/__tests__/remapping-wasm.test.mjs packages/symbolicate-wasm/__tests__/symbolicate-wasm.test.mjs packages/trace-mapping/__tests__/trace-mapping.test.mjs packages/trace-mapping/__tests__/compat.test.mjs packages/source-map/__tests__/source-map.test.mjs packages/gen-mapping/__tests__/gen-mapping.test.mjs packages/gen-mapping/__tests__/gen-mapping.cjs.test.cjs packages/remapping/__tests__/remapping.test.mjs packages/remapping/__tests__/remapping.cjs.test.cjs packages/remapping/__tests__/compat.test.mjs",
3636
"coverage:rust": "cargo llvm-cov --lcov --output-path coverage/rust-lcov.info",
3737
"coverage:html": "pnpm run coverage:rust:html && pnpm run coverage:js",
3838
"coverage:rust:html": "cargo llvm-cov --html"
Lines changed: 102 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,102 @@
1+
import assert from "node:assert/strict";
2+
import { describe, it } from "node:test";
3+
import { parseStackTrace, symbolicate } from "../pkg/srcmap_symbolicate_wasm.js";
4+
5+
const SOURCE_MAP = JSON.stringify({
6+
version: 3,
7+
sources: ["src/app.ts"],
8+
names: ["originalName"],
9+
mappings: "AAAAA",
10+
});
11+
12+
const parseResult = (stack, loader) => JSON.parse(symbolicate(stack, loader));
13+
14+
describe("parseStackTrace", () => {
15+
it("loads the generated Node wrapper and returns frame objects", () => {
16+
const frames = parseStackTrace(
17+
"Error: test\n at handleClick (bundle.js:10:4)\n at bundle.js:20:8",
18+
);
19+
20+
assert.deepEqual(frames, [
21+
{
22+
functionName: "handleClick",
23+
file: "bundle.js",
24+
line: 10,
25+
column: 4,
26+
},
27+
{
28+
functionName: null,
29+
file: "bundle.js",
30+
line: 20,
31+
column: 8,
32+
},
33+
]);
34+
});
35+
});
36+
37+
describe("symbolicate", () => {
38+
it("resolves a frame and returns the documented output shape", () => {
39+
const result = parseResult("Error: test\n at compiled (bundle.js:1:1)", (file) => {
40+
assert.equal(file, "bundle.js");
41+
return SOURCE_MAP;
42+
});
43+
44+
assert.deepEqual(result, {
45+
message: "Error: test",
46+
frames: [
47+
{
48+
functionName: "originalName",
49+
file: "src/app.ts",
50+
line: 1,
51+
column: 1,
52+
symbolicated: true,
53+
},
54+
],
55+
});
56+
});
57+
58+
it("preserves frames when a map is missing", () => {
59+
const result = parseResult("Error: test\n at compiled (missing.js:2:3)", () => null);
60+
61+
assert.deepEqual(result.frames, [
62+
{
63+
functionName: "compiled",
64+
file: "missing.js",
65+
line: 2,
66+
column: 3,
67+
symbolicated: false,
68+
},
69+
]);
70+
});
71+
72+
it("treats malformed loader values as missing maps", () => {
73+
const stack = "Error: test\n at compiled (bundle.js:1:1)";
74+
75+
for (const value of [42, { version: 3 }, "not json"]) {
76+
const result = parseResult(stack, () => value);
77+
assert.equal(result.frames[0].symbolicated, false);
78+
}
79+
});
80+
81+
it("loads each repeated source file once", () => {
82+
let calls = 0;
83+
const stack = "Error: test\n at first (bundle.js:1:1)\n at second (bundle.js:1:1)";
84+
85+
const result = parseResult(stack, () => {
86+
calls += 1;
87+
return SOURCE_MAP;
88+
});
89+
90+
assert.equal(calls, 1);
91+
assert.equal(result.frames.length, 2);
92+
assert.ok(result.frames.every((frame) => frame.symbolicated));
93+
});
94+
});
95+
96+
it("exposes the generated web module without browser globals", async () => {
97+
const module = await import("../web/srcmap_symbolicate_wasm.js");
98+
99+
assert.equal(typeof module.default, "function");
100+
assert.equal(typeof module.parseStackTrace, "function");
101+
assert.equal(typeof module.symbolicate, "function");
102+
});

packages/symbolicate-wasm/package.json

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -38,6 +38,8 @@
3838
"build": "wasm-pack build --target nodejs --out-dir pkg",
3939
"build:web": "wasm-pack build --target web --out-dir web",
4040
"build:bundler": "wasm-pack build --target bundler --out-dir bundler",
41-
"build:all": "pnpm run build && pnpm run build:web"
41+
"build:all": "pnpm run build && pnpm run build:web",
42+
"test": "node --test __tests__/symbolicate-wasm.test.mjs",
43+
"test:coverage": "mkdir -p coverage && node --test --experimental-test-coverage --test-reporter=lcov --test-reporter-destination=coverage/lcov.info --test-reporter=spec --test-reporter-destination=stdout __tests__/symbolicate-wasm.test.mjs"
4244
}
4345
}

0 commit comments

Comments
 (0)