diff --git a/packages/rspack-test-tools/etc/api.md b/packages/rspack-test-tools/etc/api.md index 1f51e670b37..aecae54935a 100644 --- a/packages/rspack-test-tools/etc/api.md +++ b/packages/rspack-test-tools/etc/api.md @@ -1496,8 +1496,12 @@ export class WatchProcessor extends MultiTaskProcessor< // (undocumented) compiler(context: ITestContext): Promise; // (undocumented) + config(context: ITestContext): Promise; + // (undocumented) protected currentTriggerFilename: string | null; // (undocumented) + static findBundle(index: number, context: ITestContext, options: TCompilerOptions): string | string[]; + // (undocumented) protected lastHash: string | null; // (undocumented) static overrideOptions({ tempDir, name, experiments, optimization }: IWatchProcessorOptions): (index: number, context: ITestContext, options: TCompilerOptions) => void; diff --git a/packages/rspack-test-tools/src/processor/watch.ts b/packages/rspack-test-tools/src/processor/watch.ts index a081efd9183..f0e65c6b594 100644 --- a/packages/rspack-test-tools/src/processor/watch.ts +++ b/packages/rspack-test-tools/src/processor/watch.ts @@ -1,7 +1,9 @@ import fs from "node:fs"; import path from "node:path"; +import { merge } from "webpack-merge"; import { ECompilerEvent } from "../compiler"; +import { readConfigFile } from "../helper"; import copyDiff from "../helper/legacy/copyDiff"; import type { ECompilerType, @@ -9,7 +11,6 @@ import type { ITestEnv, TCompilerOptions } from "../type"; -import { ConfigProcessor } from "./config"; import { type IMultiTaskProcessorOptions, MultiTaskProcessor } from "./multi"; // This file is used to port step number to rspack.config.js/webpack.config.js @@ -38,7 +39,7 @@ export class WatchProcessor< constructor(protected _watchOptions: IWatchProcessorOptions) { super({ overrideOptions: WatchProcessor.overrideOptions(_watchOptions), - findBundle: ConfigProcessor.findBundle, + findBundle: WatchProcessor.findBundle, ..._watchOptions }); } @@ -93,6 +94,39 @@ export class WatchProcessor< ); } + async config(context: ITestContext) { + this.multiCompilerOptions = []; + const caseOptions: TCompilerOptions[] = Array.isArray( + this._multiOptions.configFiles + ) + ? readConfigFile( + this._multiOptions.configFiles!.map(i => context.getSource(i)) + ) + : [{}]; + + for (const [index, options] of caseOptions.entries()) { + const compilerOptions = merge( + typeof this._multiOptions.defaultOptions === "function" + ? this._multiOptions.defaultOptions!(index, context) + : {}, + options + ); + + if (typeof this._multiOptions.overrideOptions === "function") { + this._multiOptions.overrideOptions!(index, context, compilerOptions); + } + + this.multiCompilerOptions.push(compilerOptions); + } + + const compilerOptions = + this.multiCompilerOptions.length === 1 + ? this.multiCompilerOptions[0] + : this.multiCompilerOptions; + const compiler = this.getCompiler(context); + compiler.setOptions(compilerOptions as any); + } + static overrideOptions({ tempDir, name, @@ -108,6 +142,7 @@ export class WatchProcessor< if (!options.context) options.context = tempDir; if (!options.entry) options.entry = "./index.js"; if (!options.target) options.target = "async-node"; + if (!options.devtool) options.devtool = false; if (!options.output) options.output = {}; if (!options.output.path) options.output.path = context.getDist(); if (typeof options.output.pathinfo === "undefined") @@ -151,6 +186,19 @@ export class WatchProcessor< ).experiments!.rspackFuture!.bundlerInfo!.force ??= false; }; } + + static findBundle( + index: number, + context: ITestContext, + options: TCompilerOptions + ) { + const testConfig = context.getTestConfig(); + + if (typeof testConfig.findBundle === "function") { + return testConfig.findBundle!(index, options); + } + return "./bundle.js"; + } } export interface IWatchStepProcessorOptions diff --git a/packages/rspack-test-tools/src/runner/runner/watch.ts b/packages/rspack-test-tools/src/runner/runner/watch.ts index e1771299ce7..c301252d30f 100644 --- a/packages/rspack-test-tools/src/runner/runner/watch.ts +++ b/packages/rspack-test-tools/src/runner/runner/watch.ts @@ -33,6 +33,7 @@ export class WatchRunner< moduleScope.document = this.globalContext!.document; moduleScope.STATE = this.state; moduleScope.WATCH_STEP = this._watchOptions.stepName; + moduleScope.STATS_JSON = this._options.stats; return moduleScope; } diff --git a/packages/rspack-test-tools/tests/NewIncremental.test.js b/packages/rspack-test-tools/tests/NewIncremental.test.js index b99ef38778a..6d9656c9183 100644 --- a/packages/rspack-test-tools/tests/NewIncremental.test.js +++ b/packages/rspack-test-tools/tests/NewIncremental.test.js @@ -110,5 +110,6 @@ describeByWalk(v("watch (webpack-test)"), (name, src, dist) => { /caching-inner-source/, /production/, /warnings-contribute-to-hash/, + /issue-8766/, ] }); diff --git a/packages/rspack-test-tools/tests/hotCases/newTreeshaking/re-export-optimization-for-inaffected-module/__snapshots__/web/0.snap.txt b/packages/rspack-test-tools/tests/hotCases/newTreeshaking/re-export-optimization-for-inaffected-module/__snapshots__/web/0.snap.txt deleted file mode 100644 index 6c0391979e0..00000000000 --- a/packages/rspack-test-tools/tests/hotCases/newTreeshaking/re-export-optimization-for-inaffected-module/__snapshots__/web/0.snap.txt +++ /dev/null @@ -1,12 +0,0 @@ -# Case re-export-optimization-for-inaffected-module: Step 0 - -## Changed Files - - -## Asset Files -- Bundle: bundle.js - -## Manifest - - -## Update \ No newline at end of file diff --git a/packages/rspack-test-tools/tests/hotCases/newTreeshaking/re-export-optimization-for-inaffected-module/__snapshots__/web/1.snap.txt b/packages/rspack-test-tools/tests/hotCases/newTreeshaking/re-export-optimization-for-inaffected-module/__snapshots__/web/1.snap.txt deleted file mode 100644 index 9306de4e18c..00000000000 --- a/packages/rspack-test-tools/tests/hotCases/newTreeshaking/re-export-optimization-for-inaffected-module/__snapshots__/web/1.snap.txt +++ /dev/null @@ -1,58 +0,0 @@ -# Case re-export-optimization-for-inaffected-module: Step 1 - -## Changed Files -- module.js - -## Asset Files -- Bundle: bundle.js -- Manifest: main.LAST_HASH.hot-update.json, size: 28 -- Update: main.LAST_HASH.hot-update.js, size: 616 - -## Manifest - -### main.LAST_HASH.hot-update.json - -```json -{"c":["main"],"r":[],"m":[]} -``` - - -## Update - - -### main.LAST_HASH.hot-update.js - -#### Changed Modules -- ./module.js - -#### Changed Runtime Modules -- webpack/runtime/get_full_hash - -#### Changed Content -```js -"use strict"; -self["webpackHotUpdate"]('main', { -"./module.js": (function (__unused_webpack_module, __webpack_exports__, __webpack_require__) { -__webpack_require__.r(__webpack_exports__); -__webpack_require__.d(__webpack_exports__, { - value: function() { return value; } -}); -/* harmony import */var _reexports__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./reexports */ "./foo.js"); - -const value = '' + _reexports__WEBPACK_IMPORTED_MODULE_0__.v; - - -}), - -},function(__webpack_require__) { -// webpack/runtime/get_full_hash -(() => { -__webpack_require__.h = function () { - return "CURRENT_HASH"; -}; - -})(); - -} -); -``` \ No newline at end of file diff --git a/packages/rspack-test-tools/tests/hotCases/newTreeshaking/re-export-optimization-for-inaffected-module/index.js b/packages/rspack-test-tools/tests/hotCases/newTreeshaking/re-export-optimization-for-inaffected-module/index.js deleted file mode 100644 index 34ce108bd13..00000000000 --- a/packages/rspack-test-tools/tests/hotCases/newTreeshaking/re-export-optimization-for-inaffected-module/index.js +++ /dev/null @@ -1,16 +0,0 @@ -import {value} from "./module"; - -let v = value; -module.hot.accept('./module', () => { - v = value -}); - -it("should auto-reexport an ES6 imported value on accept with newTreeshaking", async function (done) { - expect(v).toBe("foo"); - NEXT( - require("../../update")(done, true, () => { - expect(v).toBe("foo"); - done(); - }) - ); -}); diff --git a/packages/rspack-test-tools/tests/hotCases/newTreeshaking/re-export-optimization-for-inaffected-module/module.js b/packages/rspack-test-tools/tests/hotCases/newTreeshaking/re-export-optimization-for-inaffected-module/module.js deleted file mode 100644 index de10e4d3031..00000000000 --- a/packages/rspack-test-tools/tests/hotCases/newTreeshaking/re-export-optimization-for-inaffected-module/module.js +++ /dev/null @@ -1,6 +0,0 @@ -import {v} from './reexports' -// -export const value = '' + v; ---- -import {v} from './reexports' -export const value = '' + v; diff --git a/packages/rspack-test-tools/tests/watchCases/compiler/multiply-compiler/0/entry1.js b/packages/rspack-test-tools/tests/watchCases/compiler/multiply-compiler/0/entry1.js index 0efb3f143e1..621a59b6809 100644 --- a/packages/rspack-test-tools/tests/watchCases/compiler/multiply-compiler/0/entry1.js +++ b/packages/rspack-test-tools/tests/watchCases/compiler/multiply-compiler/0/entry1.js @@ -1,5 +1,5 @@ import module from "./file"; -it("should watch for multiply compiler", function () { +it("should watch for multiply compiler (entry1)", function () { expect(module).toBe(WATCH_STEP); }); diff --git a/packages/rspack-test-tools/tests/watchCases/compiler/multiply-compiler/0/entry2.js b/packages/rspack-test-tools/tests/watchCases/compiler/multiply-compiler/0/entry2.js index 0efb3f143e1..42a9347391e 100644 --- a/packages/rspack-test-tools/tests/watchCases/compiler/multiply-compiler/0/entry2.js +++ b/packages/rspack-test-tools/tests/watchCases/compiler/multiply-compiler/0/entry2.js @@ -1,5 +1,5 @@ import module from "./file"; -it("should watch for multiply compiler", function () { +it("should watch for multiply compiler (entry2)", function () { expect(module).toBe(WATCH_STEP); }); diff --git a/packages/rspack-test-tools/tests/watchCases/compiler/multiply-compiler/rspack.config.js b/packages/rspack-test-tools/tests/watchCases/compiler/multiply-compiler/rspack.config.js index 0f58f4a4c16..00963fdccc8 100644 --- a/packages/rspack-test-tools/tests/watchCases/compiler/multiply-compiler/rspack.config.js +++ b/packages/rspack-test-tools/tests/watchCases/compiler/multiply-compiler/rspack.config.js @@ -3,11 +3,17 @@ module.exports = [ { entry: { entry1: "./entry1.js" + }, + output: { + filename: "./bundle1.js", } }, { entry: { entry2: "./entry2.js" + }, + output: { + filename: "./bundle2.js", } } ]; diff --git a/packages/rspack-test-tools/tests/watchCases/compiler/multiply-compiler/test.config.js b/packages/rspack-test-tools/tests/watchCases/compiler/multiply-compiler/test.config.js new file mode 100644 index 00000000000..5b8eb45c9b9 --- /dev/null +++ b/packages/rspack-test-tools/tests/watchCases/compiler/multiply-compiler/test.config.js @@ -0,0 +1,10 @@ +module.exports = { + findBundle(i) { + switch (i) { + case 0: + return `bundle1.js` + case 1: + return `bundle2.js` + } + } +} diff --git a/packages/rspack-test-tools/tests/watchCases/context/out-of-context/test.config.js b/packages/rspack-test-tools/tests/watchCases/context/out-of-context/test.config.js index 933fb49f389..80fd7de43b6 100644 --- a/packages/rspack-test-tools/tests/watchCases/context/out-of-context/test.config.js +++ b/packages/rspack-test-tools/tests/watchCases/context/out-of-context/test.config.js @@ -1,6 +1,6 @@ module.exports = { documentType: 'fake', - findBundle() { - return ['bundle.css', 'bundle.js'] + findBundle(i) { + return ["bundle.css", "bundle.js"] } } diff --git a/packages/rspack-test-tools/tests/hotCases/newTreeshaking/re-export-optimization-for-inaffected-module/foo.js b/packages/rspack-test-tools/tests/watchCases/side-effects/basic/0/foo.js similarity index 100% rename from packages/rspack-test-tools/tests/hotCases/newTreeshaking/re-export-optimization-for-inaffected-module/foo.js rename to packages/rspack-test-tools/tests/watchCases/side-effects/basic/0/foo.js diff --git a/packages/rspack-test-tools/tests/watchCases/side-effects/basic/0/index.js b/packages/rspack-test-tools/tests/watchCases/side-effects/basic/0/index.js new file mode 100644 index 00000000000..978b35bc46f --- /dev/null +++ b/packages/rspack-test-tools/tests/watchCases/side-effects/basic/0/index.js @@ -0,0 +1,5 @@ +import {value} from "./module"; + +it("should have correct export from re-exports", function () { + expect(value).toBe("foo"); +}); diff --git a/packages/rspack-test-tools/tests/watchCases/side-effects/basic/0/module.js b/packages/rspack-test-tools/tests/watchCases/side-effects/basic/0/module.js new file mode 100644 index 00000000000..c53b4827bb0 --- /dev/null +++ b/packages/rspack-test-tools/tests/watchCases/side-effects/basic/0/module.js @@ -0,0 +1,3 @@ +import {v} from './reexports' +// ... +export const value = '' + v; diff --git a/packages/rspack-test-tools/tests/hotCases/newTreeshaking/re-export-optimization-for-inaffected-module/package.json b/packages/rspack-test-tools/tests/watchCases/side-effects/basic/0/package.json similarity index 100% rename from packages/rspack-test-tools/tests/hotCases/newTreeshaking/re-export-optimization-for-inaffected-module/package.json rename to packages/rspack-test-tools/tests/watchCases/side-effects/basic/0/package.json diff --git a/packages/rspack-test-tools/tests/hotCases/newTreeshaking/re-export-optimization-for-inaffected-module/reexports-deep.js b/packages/rspack-test-tools/tests/watchCases/side-effects/basic/0/reexports-deep.js similarity index 100% rename from packages/rspack-test-tools/tests/hotCases/newTreeshaking/re-export-optimization-for-inaffected-module/reexports-deep.js rename to packages/rspack-test-tools/tests/watchCases/side-effects/basic/0/reexports-deep.js diff --git a/packages/rspack-test-tools/tests/hotCases/newTreeshaking/re-export-optimization-for-inaffected-module/reexports.js b/packages/rspack-test-tools/tests/watchCases/side-effects/basic/0/reexports.js similarity index 100% rename from packages/rspack-test-tools/tests/hotCases/newTreeshaking/re-export-optimization-for-inaffected-module/reexports.js rename to packages/rspack-test-tools/tests/watchCases/side-effects/basic/0/reexports.js diff --git a/packages/rspack-test-tools/tests/watchCases/side-effects/basic/1/module.js b/packages/rspack-test-tools/tests/watchCases/side-effects/basic/1/module.js new file mode 100644 index 00000000000..a5970107246 --- /dev/null +++ b/packages/rspack-test-tools/tests/watchCases/side-effects/basic/1/module.js @@ -0,0 +1,2 @@ +import {v} from './reexports' +export const value = '' + v; diff --git a/packages/rspack-test-tools/tests/hotCases/newTreeshaking/re-export-optimization-for-inaffected-module/rspack.config.js b/packages/rspack-test-tools/tests/watchCases/side-effects/basic/rspack.config.js similarity index 67% rename from packages/rspack-test-tools/tests/hotCases/newTreeshaking/re-export-optimization-for-inaffected-module/rspack.config.js rename to packages/rspack-test-tools/tests/watchCases/side-effects/basic/rspack.config.js index 93f66ea6acc..f75570bd83a 100644 --- a/packages/rspack-test-tools/tests/hotCases/newTreeshaking/re-export-optimization-for-inaffected-module/rspack.config.js +++ b/packages/rspack-test-tools/tests/watchCases/side-effects/basic/rspack.config.js @@ -3,10 +3,5 @@ module.exports = { optimization: { sideEffects: true, providedExports: true, - }, - experiments: { - rspackFuture: { - newIncremental: true - } } };