diff --git a/packages/rspack-test-tools/src/processor/cache.ts b/packages/rspack-test-tools/src/processor/cache.ts index eaca8677feef..3838f2dbbfac 100644 --- a/packages/rspack-test-tools/src/processor/cache.ts +++ b/packages/rspack-test-tools/src/processor/cache.ts @@ -51,7 +51,7 @@ export class CacheProcessor extends BasicProcessor { directory = experiments.cache.storage?.directory || directory; } removeSync( - path.join(context.getSource(), directory || "node_modules/.cache") + path.resolve(context.getSource(), directory || "node_modules/.cache") ); await super.build(context); diff --git a/packages/rspack-test-tools/src/runner/cache.ts b/packages/rspack-test-tools/src/runner/cache.ts index ce38af5e14db..88db0b324133 100644 --- a/packages/rspack-test-tools/src/runner/cache.ts +++ b/packages/rspack-test-tools/src/runner/cache.ts @@ -102,14 +102,16 @@ export class CacheRunnerFactory< await compiler.close(); compiler.createCompiler(); + const oldChangedFiles = hotUpdateContext.changedFiles; await Promise.all( - hotUpdateContext.changedFiles.map(async file => { + oldChangedFiles.map(async file => { await refreshModifyTime(file); }) ); hotUpdateContext.changedFiles = []; hotUpdateContext.updateIndex++; const stats = await compiler.build(); + hotUpdateContext.changedFiles = oldChangedFiles; if (!stats) { throw new Error("Should generate stats during build"); } diff --git a/packages/rspack-test-tools/tests/cacheCases/snapshot/basic/file.js b/packages/rspack-test-tools/tests/cacheCases/common/basic/file.js similarity index 100% rename from packages/rspack-test-tools/tests/cacheCases/snapshot/basic/file.js rename to packages/rspack-test-tools/tests/cacheCases/common/basic/file.js diff --git a/packages/rspack-test-tools/tests/cacheCases/snapshot/basic/index.js b/packages/rspack-test-tools/tests/cacheCases/common/basic/index.js similarity index 76% rename from packages/rspack-test-tools/tests/cacheCases/snapshot/basic/index.js rename to packages/rspack-test-tools/tests/cacheCases/common/basic/index.js index c2772f648858..790d04131843 100644 --- a/packages/rspack-test-tools/tests/cacheCases/snapshot/basic/index.js +++ b/packages/rspack-test-tools/tests/cacheCases/common/basic/index.js @@ -1,6 +1,6 @@ import value from "./file"; -it("should store and resume asset parser and generator states", async () => { +it("should basic test work", async () => { if (COMPILER_INDEX == 0) { expect(value).toBe(1); await NEXT_HMR(); diff --git a/packages/rspack-test-tools/tests/cacheCases/snapshot/basic/rspack.config.js b/packages/rspack-test-tools/tests/cacheCases/common/basic/rspack.config.js similarity index 100% rename from packages/rspack-test-tools/tests/cacheCases/snapshot/basic/rspack.config.js rename to packages/rspack-test-tools/tests/cacheCases/common/basic/rspack.config.js diff --git a/packages/rspack-test-tools/tests/cacheCases/common/build-dependencies/file.js b/packages/rspack-test-tools/tests/cacheCases/common/build-dependencies/file.js new file mode 100644 index 000000000000..1e5de9836a06 --- /dev/null +++ b/packages/rspack-test-tools/tests/cacheCases/common/build-dependencies/file.js @@ -0,0 +1,7 @@ +export default 1; +--- +export default 2; +--- +export default 3; +--- +export default 4; diff --git a/packages/rspack-test-tools/tests/cacheCases/common/build-dependencies/index.js b/packages/rspack-test-tools/tests/cacheCases/common/build-dependencies/index.js new file mode 100644 index 000000000000..3976f8bd467a --- /dev/null +++ b/packages/rspack-test-tools/tests/cacheCases/common/build-dependencies/index.js @@ -0,0 +1,15 @@ +import value from "./file"; + +it("should build dependencies work", async () => { + if (COMPILER_INDEX == 0) { + expect(value).toBe(1); + await NEXT_HMR(); + expect(value).toBe(2); + await NEXT_START(); + } + if (COMPILER_INDEX == 1) { + expect(value).toBe(3); + await NEXT_HMR(); + expect(value).toBe(4); + } +}); diff --git a/packages/rspack-test-tools/tests/cacheCases/common/build-dependencies/rspack.config.js b/packages/rspack-test-tools/tests/cacheCases/common/build-dependencies/rspack.config.js new file mode 100644 index 000000000000..be82e141fc48 --- /dev/null +++ b/packages/rspack-test-tools/tests/cacheCases/common/build-dependencies/rspack.config.js @@ -0,0 +1,33 @@ +const path = require("path"); +const fs = require("fs/promises"); + +let content = 1; + +const buildDependency = path.join(__dirname, "test.log"); + +/** @type {import("@rspack/core").Configuration} */ +module.exports = { + context: __dirname, + experiments: { + cache: { + type: "persistent", + buildDependencies: [buildDependency], + snapshot: { + immutablePaths: [path.join(__dirname, "./file.js")] + } + } + }, + plugins: [ + { + apply(compiler) { + compiler.hooks.beforeCompile.tapPromise( + "Test Plugin", + async function () { + await fs.writeFile(buildDependency, String(content)); + content++; + } + ); + } + } + ] +}; diff --git a/packages/rspack-test-tools/tests/cacheCases/common/version/file.js b/packages/rspack-test-tools/tests/cacheCases/common/version/file.js new file mode 100644 index 000000000000..1e5de9836a06 --- /dev/null +++ b/packages/rspack-test-tools/tests/cacheCases/common/version/file.js @@ -0,0 +1,7 @@ +export default 1; +--- +export default 2; +--- +export default 3; +--- +export default 4; diff --git a/packages/rspack-test-tools/tests/cacheCases/common/version/index.js b/packages/rspack-test-tools/tests/cacheCases/common/version/index.js new file mode 100644 index 000000000000..eabc060f0dc4 --- /dev/null +++ b/packages/rspack-test-tools/tests/cacheCases/common/version/index.js @@ -0,0 +1,15 @@ +import value from "./file"; + +it("should version work", async () => { + if (COMPILER_INDEX == 0) { + expect(value).toBe(1); + await NEXT_HMR(); + expect(value).toBe(2); + await NEXT_START(); + } + if (COMPILER_INDEX == 1) { + expect(value).toBe(3); + await NEXT_HMR(); + expect(value).toBe(4); + } +}); diff --git a/packages/rspack-test-tools/tests/cacheCases/common/version/rspack.config.js b/packages/rspack-test-tools/tests/cacheCases/common/version/rspack.config.js new file mode 100644 index 000000000000..460369c3884f --- /dev/null +++ b/packages/rspack-test-tools/tests/cacheCases/common/version/rspack.config.js @@ -0,0 +1,26 @@ +const path = require("path"); + +let version = 1; + +/** @type {import("@rspack/core").Configuration} */ +module.exports = { + context: __dirname, + experiments: { + cache: { + type: "persistent", + snapshot: { + immutablePaths: [path.join(__dirname, "./file.js")] + } + } + }, + plugins: [ + { + apply(compiler) { + compiler.hooks.beforeCompile.tap("Test Plugin", function () { + compiler.options.experiments.cache.version = String(version); + version++; + }); + } + } + ] +}; diff --git a/packages/rspack-test-tools/tests/cacheCases/snapshot/immutable-paths/file.js b/packages/rspack-test-tools/tests/cacheCases/snapshot/immutable-paths/file.js new file mode 100644 index 000000000000..1e5de9836a06 --- /dev/null +++ b/packages/rspack-test-tools/tests/cacheCases/snapshot/immutable-paths/file.js @@ -0,0 +1,7 @@ +export default 1; +--- +export default 2; +--- +export default 3; +--- +export default 4; diff --git a/packages/rspack-test-tools/tests/cacheCases/snapshot/immutable-paths/index.js b/packages/rspack-test-tools/tests/cacheCases/snapshot/immutable-paths/index.js new file mode 100644 index 000000000000..e6b60a76ad64 --- /dev/null +++ b/packages/rspack-test-tools/tests/cacheCases/snapshot/immutable-paths/index.js @@ -0,0 +1,15 @@ +import value from "./file"; + +it("should snapshot immutable-paths work", async () => { + if (COMPILER_INDEX == 0) { + expect(value).toBe(1); + await NEXT_HMR(); + expect(value).toBe(2); + await NEXT_START(); + } + if (COMPILER_INDEX == 1) { + expect(value).toBe(2); + await NEXT_HMR(); + expect(value).toBe(4); + } +}); diff --git a/packages/rspack-test-tools/tests/cacheCases/snapshot/immutable-paths/rspack.config.js b/packages/rspack-test-tools/tests/cacheCases/snapshot/immutable-paths/rspack.config.js new file mode 100644 index 000000000000..e67696902c04 --- /dev/null +++ b/packages/rspack-test-tools/tests/cacheCases/snapshot/immutable-paths/rspack.config.js @@ -0,0 +1,14 @@ +const path = require("path"); + +/** @type {import("@rspack/core").Configuration} */ +module.exports = { + context: __dirname, + experiments: { + cache: { + type: "persistent", + snapshot: { + immutablePaths: [path.join(__dirname, "./file.js")] + } + } + } +}; diff --git a/packages/rspack-test-tools/tests/cacheCases/snapshot/managed-paths/index.js b/packages/rspack-test-tools/tests/cacheCases/snapshot/managed-paths/index.js new file mode 100644 index 000000000000..2e274694ccb1 --- /dev/null +++ b/packages/rspack-test-tools/tests/cacheCases/snapshot/managed-paths/index.js @@ -0,0 +1,15 @@ +import value from "./test_lib"; + +it("should snapshot managed-paths work", async () => { + if (COMPILER_INDEX == 0) { + expect(value).toBe(1); + await NEXT_HMR(); + expect(value).toBe(2); + await NEXT_START(); + } + if (COMPILER_INDEX == 1) { + expect(value).toBe(2); + await NEXT_HMR(); + expect(value).toBe(4); + } +}); diff --git a/packages/rspack-test-tools/tests/cacheCases/snapshot/managed-paths/rspack.config.js b/packages/rspack-test-tools/tests/cacheCases/snapshot/managed-paths/rspack.config.js new file mode 100644 index 000000000000..2e5fdabb0d99 --- /dev/null +++ b/packages/rspack-test-tools/tests/cacheCases/snapshot/managed-paths/rspack.config.js @@ -0,0 +1,14 @@ +const path = require("path"); + +/** @type {import("@rspack/core").Configuration} */ +module.exports = { + context: __dirname, + experiments: { + cache: { + type: "persistent", + snapshot: { + managedPaths: [path.join(__dirname, "./test_lib")] + } + } + } +}; diff --git a/packages/rspack-test-tools/tests/cacheCases/snapshot/managed-paths/test_lib/file.js b/packages/rspack-test-tools/tests/cacheCases/snapshot/managed-paths/test_lib/file.js new file mode 100644 index 000000000000..1e5de9836a06 --- /dev/null +++ b/packages/rspack-test-tools/tests/cacheCases/snapshot/managed-paths/test_lib/file.js @@ -0,0 +1,7 @@ +export default 1; +--- +export default 2; +--- +export default 3; +--- +export default 4; diff --git a/packages/rspack-test-tools/tests/cacheCases/snapshot/managed-paths/test_lib/package.json b/packages/rspack-test-tools/tests/cacheCases/snapshot/managed-paths/test_lib/package.json new file mode 100644 index 000000000000..00faa7c07e7c --- /dev/null +++ b/packages/rspack-test-tools/tests/cacheCases/snapshot/managed-paths/test_lib/package.json @@ -0,0 +1,5 @@ +{ + "name": "test_lib", + "version": "0.0.1", + "main": "./file.js" +} diff --git a/packages/rspack-test-tools/tests/cacheCases/snapshot/unmanaged-paths/index.js b/packages/rspack-test-tools/tests/cacheCases/snapshot/unmanaged-paths/index.js new file mode 100644 index 000000000000..9fafca14ba52 --- /dev/null +++ b/packages/rspack-test-tools/tests/cacheCases/snapshot/unmanaged-paths/index.js @@ -0,0 +1,19 @@ +import value, { changed } from "./test_lib"; + +it("should snapshot unmanaged-paths work", async () => { + if (COMPILER_INDEX == 0) { + expect(value).toBe(1); + expect(changed).toBe(1); + await NEXT_HMR(); + expect(value).toBe(2); + expect(changed).toBe(2); + await NEXT_START(); + } + if (COMPILER_INDEX == 1) { + expect(value).toBe(2); + expect(changed).toBe(3); + await NEXT_HMR(); + expect(value).toBe(4); + expect(changed).toBe(4); + } +}); diff --git a/packages/rspack-test-tools/tests/cacheCases/snapshot/unmanaged-paths/rspack.config.js b/packages/rspack-test-tools/tests/cacheCases/snapshot/unmanaged-paths/rspack.config.js new file mode 100644 index 000000000000..4191e7503145 --- /dev/null +++ b/packages/rspack-test-tools/tests/cacheCases/snapshot/unmanaged-paths/rspack.config.js @@ -0,0 +1,15 @@ +const path = require("path"); + +/** @type {import("@rspack/core").Configuration} */ +module.exports = { + context: __dirname, + experiments: { + cache: { + type: "persistent", + snapshot: { + managedPaths: [path.join(__dirname, "./test_lib")], + unmanagedPaths: [path.join(__dirname, "./test_lib/changed.js")] + } + } + } +}; diff --git a/packages/rspack-test-tools/tests/cacheCases/snapshot/unmanaged-paths/test_lib/changed.js b/packages/rspack-test-tools/tests/cacheCases/snapshot/unmanaged-paths/test_lib/changed.js new file mode 100644 index 000000000000..1e5de9836a06 --- /dev/null +++ b/packages/rspack-test-tools/tests/cacheCases/snapshot/unmanaged-paths/test_lib/changed.js @@ -0,0 +1,7 @@ +export default 1; +--- +export default 2; +--- +export default 3; +--- +export default 4; diff --git a/packages/rspack-test-tools/tests/cacheCases/snapshot/unmanaged-paths/test_lib/file.js b/packages/rspack-test-tools/tests/cacheCases/snapshot/unmanaged-paths/test_lib/file.js new file mode 100644 index 000000000000..327043611ee4 --- /dev/null +++ b/packages/rspack-test-tools/tests/cacheCases/snapshot/unmanaged-paths/test_lib/file.js @@ -0,0 +1,15 @@ +import changed from "./changed"; +export { changed }; +export default 1; +--- +import changed from "./changed"; +export { changed }; +export default 2; +--- +import changed from "./changed"; +export { changed }; +export default 3; +--- +import changed from "./changed"; +export { changed }; +export default 4; diff --git a/packages/rspack-test-tools/tests/cacheCases/snapshot/unmanaged-paths/test_lib/package.json b/packages/rspack-test-tools/tests/cacheCases/snapshot/unmanaged-paths/test_lib/package.json new file mode 100644 index 000000000000..00faa7c07e7c --- /dev/null +++ b/packages/rspack-test-tools/tests/cacheCases/snapshot/unmanaged-paths/test_lib/package.json @@ -0,0 +1,5 @@ +{ + "name": "test_lib", + "version": "0.0.1", + "main": "./file.js" +} diff --git a/packages/rspack-test-tools/tests/cacheCases/storage/directory/file.js b/packages/rspack-test-tools/tests/cacheCases/storage/directory/file.js new file mode 100644 index 000000000000..1e5de9836a06 --- /dev/null +++ b/packages/rspack-test-tools/tests/cacheCases/storage/directory/file.js @@ -0,0 +1,7 @@ +export default 1; +--- +export default 2; +--- +export default 3; +--- +export default 4; diff --git a/packages/rspack-test-tools/tests/cacheCases/storage/directory/index.js b/packages/rspack-test-tools/tests/cacheCases/storage/directory/index.js new file mode 100644 index 000000000000..9af9482ecb6b --- /dev/null +++ b/packages/rspack-test-tools/tests/cacheCases/storage/directory/index.js @@ -0,0 +1,15 @@ +import value from "./file"; + +it("should storage directory work", async () => { + if (COMPILER_INDEX == 0) { + expect(value).toBe(1); + await NEXT_HMR(); + expect(value).toBe(2); + await NEXT_START(); + } + if (COMPILER_INDEX == 1) { + expect(value).toBe(3); + await NEXT_HMR(); + expect(value).toBe(4); + } +}); diff --git a/packages/rspack-test-tools/tests/cacheCases/storage/directory/rspack.config.js b/packages/rspack-test-tools/tests/cacheCases/storage/directory/rspack.config.js new file mode 100644 index 000000000000..ee0db3d517b9 --- /dev/null +++ b/packages/rspack-test-tools/tests/cacheCases/storage/directory/rspack.config.js @@ -0,0 +1,28 @@ +const path = require("path"); +const fs = require("fs/promises"); + +const cacheDir = path.join(__dirname, "node_modules/.cache/test/"); + +/** @type {import("@rspack/core").Configuration} */ +module.exports = { + context: __dirname, + experiments: { + cache: { + type: "persistent", + storage: { + type: "filesystem", + directory: cacheDir + } + } + }, + plugins: [ + { + apply(compiler) { + compiler.hooks.done.tapPromise("Test Plugin", async function () { + const stat = await fs.stat(cacheDir); + expect(stat.isDirectory()).toBeTruthy(); + }); + } + } + ] +};