From e71a1e616fd1c2e41c2fbb702207dad2aecc9b9d Mon Sep 17 00:00:00 2001 From: Hana Date: Wed, 25 Oct 2023 12:25:17 +0800 Subject: [PATCH] test: more test cases --- .../builtin-swc-loader/source-map/a.ts | 4 ++ .../builtin-swc-loader/source-map/index.js | 51 +++++++++++++++++++ .../source-map/webpack.config.js | 30 +++++++++++ .../source-map/source-map/index.js | 3 +- 4 files changed, 86 insertions(+), 2 deletions(-) create mode 100644 packages/rspack/tests/configCases/builtin-swc-loader/source-map/a.ts create mode 100644 packages/rspack/tests/configCases/builtin-swc-loader/source-map/index.js create mode 100644 packages/rspack/tests/configCases/builtin-swc-loader/source-map/webpack.config.js diff --git a/packages/rspack/tests/configCases/builtin-swc-loader/source-map/a.ts b/packages/rspack/tests/configCases/builtin-swc-loader/source-map/a.ts new file mode 100644 index 000000000000..ec127c18f7ae --- /dev/null +++ b/packages/rspack/tests/configCases/builtin-swc-loader/source-map/a.ts @@ -0,0 +1,4 @@ +let foo: string = "f1"; +let bar: string = "b1"; +let baz: string = "b2"; +const boo = "abc"; diff --git a/packages/rspack/tests/configCases/builtin-swc-loader/source-map/index.js b/packages/rspack/tests/configCases/builtin-swc-loader/source-map/index.js new file mode 100644 index 000000000000..4c158ae172d7 --- /dev/null +++ b/packages/rspack/tests/configCases/builtin-swc-loader/source-map/index.js @@ -0,0 +1,51 @@ +require("./a"); + +it("should generate correct sourceMap", async () => { + const path = require("path"); + const fs = require("fs"); + const source = fs.readFileSync(__filename + ".map", "utf-8"); + const map = JSON.parse(source); + const sourceContent = fs.readFileSync( + path.resolve(__dirname, "../a.ts"), + "utf-8" + ); + expect(map.sources).toContain("./a.ts"); + expect(map.sourcesContent[1]).toEqual(sourceContent); + + checkStub("fo" + "o", sourceContent); + checkStub("ba" + "r", sourceContent); + checkStub("ba" + "z", sourceContent); + checkStub(wrap("f" + 1), sourceContent); + checkStub(wrap("b" + 1), sourceContent); + checkStub(wrap("b" + 2), sourceContent); + checkStub(wrap("ab" + "c"), sourceContent); +}); + +const wrap = v => `"${v}"`; +const checkStub = async (stub, sourceContent) => { + const fs = require("fs"); + const { SourceMapConsumer } = require("source-map"); + + const source = fs.readFileSync(__filename + ".map", "utf-8"); + const map = JSON.parse(source); + const consumer = await new SourceMapConsumer(map); + const generated = fs.readFileSync(__filename, "utf-8"); + const { line, column } = consumer.originalPositionFor( + positionFor(generated, stub) + ); + const { line: originalLine, column: originalColumn } = positionFor( + sourceContent, + stub + ); + expect(line).toBe(originalLine); + expect(column).toBe(originalColumn); +}; + +const positionFor = (content, text) => { + let lines = content.split(/\r?\n/); + for (let i = 0; i < lines.length; i++) { + const column = lines[i].indexOf(text); + if (column >= 0) return { line: i + 1, column }; + } + return null; +}; diff --git a/packages/rspack/tests/configCases/builtin-swc-loader/source-map/webpack.config.js b/packages/rspack/tests/configCases/builtin-swc-loader/source-map/webpack.config.js new file mode 100644 index 000000000000..9a885b0413bd --- /dev/null +++ b/packages/rspack/tests/configCases/builtin-swc-loader/source-map/webpack.config.js @@ -0,0 +1,30 @@ +module.exports = { + devtool: "source-map", + externals: ["source-map"], + externalsType: "commonjs", + module: { + rules: [ + { + test: /\.ts$/, + use: [ + { + loader: "builtin:swc-loader", + options: { + jsc: { + parser: { + syntax: "typescript" + } + } + } + } + ], + type: "javascript/auto" + } + ] + }, + experiments: { + rspackFuture: { + disableTransformByDefault: true + } + } +}; diff --git a/packages/rspack/tests/configCases/source-map/source-map/index.js b/packages/rspack/tests/configCases/source-map/source-map/index.js index f18605afdac4..3e95531b8190 100644 --- a/packages/rspack/tests/configCases/source-map/source-map/index.js +++ b/packages/rspack/tests/configCases/source-map/source-map/index.js @@ -12,8 +12,7 @@ it("should map to the original content if `module` enabled", async () => { const consumer = await new sourceMap.SourceMapConsumer(map); expect(map.sources).toContain("./App.jsx"); expect(map.sourcesContent[1]).toEqual(app); - const STUB = - "\u0048\u0065\u006c\u006c\u006f\u0020\u0052\u0073\u0070\u0061\u0063\u006b\u0021"; + const STUB = "Hello" + " " + "Rspack!"; const { line, column } = consumer.originalPositionFor( positionFor(generated, STUB) );