@rspack/test-tools 1.5.8 → 1.6.0-beta.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (134) hide show
  1. package/dist/case/builtin.js +0 -22
  2. package/dist/case/cache.d.ts +1 -1
  3. package/dist/case/cache.js +5 -5
  4. package/dist/case/common.d.ts +1 -0
  5. package/dist/case/common.js +17 -10
  6. package/dist/case/config.js +5 -3
  7. package/dist/case/diagnostic.d.ts +2 -2
  8. package/dist/case/diagnostic.js +2 -3
  9. package/dist/case/error.d.ts +1 -0
  10. package/dist/case/error.js +25 -6
  11. package/dist/case/esm-output.js +28 -2
  12. package/dist/case/example.d.ts +1 -0
  13. package/dist/case/example.js +57 -0
  14. package/dist/case/hash.js +1 -2
  15. package/dist/case/hook.js +3 -4
  16. package/dist/case/hot-step.d.ts +1 -1
  17. package/dist/case/hot-step.js +12 -13
  18. package/dist/case/hot.d.ts +5 -4
  19. package/dist/case/hot.js +61 -83
  20. package/dist/case/incremental.d.ts +2 -2
  21. package/dist/case/incremental.js +8 -27
  22. package/dist/case/index.d.ts +12 -1
  23. package/dist/case/index.js +7 -1
  24. package/dist/case/multi-compiler.d.ts +18 -0
  25. package/dist/case/multi-compiler.js +98 -0
  26. package/dist/case/normal.d.ts +2 -0
  27. package/dist/case/normal.js +22 -12
  28. package/dist/case/runner.d.ts +1 -1
  29. package/dist/case/runner.js +4 -3
  30. package/dist/case/stats-api.d.ts +9 -0
  31. package/dist/case/stats-output.js +5 -4
  32. package/dist/case/watch.d.ts +5 -5
  33. package/dist/case/watch.js +11 -16
  34. package/dist/compare/compare.js +6 -3
  35. package/dist/helper/directory.js +1 -1
  36. package/dist/helper/expect/error.js +1 -1
  37. package/dist/helper/expect/placeholder.js +7 -7
  38. package/dist/helper/expect/to-match-file-snapshot.d.ts +0 -1
  39. package/dist/helper/hot-update/loader.d.ts +2 -1
  40. package/dist/helper/hot-update/loader.js +5 -30
  41. package/dist/helper/hot-update/plugin.d.ts +1 -1
  42. package/dist/helper/hot-update/plugin.js +14 -13
  43. package/dist/helper/legacy/LogTestPlugin.d.ts +6 -0
  44. package/dist/helper/legacy/LogTestPlugin.js +35 -0
  45. package/dist/helper/legacy/asModule.js +0 -2
  46. package/dist/helper/legacy/createLazyTestEnv.d.ts +1 -0
  47. package/dist/helper/legacy/createLazyTestEnv.js +4 -3
  48. package/dist/helper/legacy/supportsTextDecoder.js +9 -0
  49. package/dist/helper/read-config-file.d.ts +2 -2
  50. package/dist/helper/read-config-file.js +5 -2
  51. package/dist/helper/setup-env.js +18 -2
  52. package/dist/helper/util/checkStats.d.ts +0 -1
  53. package/dist/helper/util/checkStats.js +0 -18
  54. package/dist/helper/util/expectWarningFactory.js +2 -4
  55. package/dist/index.d.ts +0 -1
  56. package/dist/index.js +0 -1
  57. package/dist/jest/ignore-snapshot-default-reporter.d.ts +2 -0
  58. package/dist/jest/ignore-snapshot-default-reporter.js +57 -0
  59. package/dist/jest/ignore-snapshot-summary-reporter.d.ts +2 -0
  60. package/dist/jest/ignore-snapshot-summary-reporter.js +24 -0
  61. package/dist/jest/patch-node-env.d.ts +5 -0
  62. package/dist/jest/patch-node-env.js +18 -0
  63. package/dist/jest/slash.d.ts +2 -0
  64. package/dist/jest/slash.js +16 -0
  65. package/dist/runner/node/index.js +12 -3
  66. package/dist/runner/web/index.d.ts +20 -7
  67. package/dist/runner/web/index.js +293 -18
  68. package/dist/test/creator.js +15 -10
  69. package/dist/test/tester.d.ts +1 -0
  70. package/dist/test/tester.js +21 -4
  71. package/dist/type.d.ts +14 -5
  72. package/dist/type.js +1 -6
  73. package/jest.d.ts +2 -0
  74. package/package.json +10 -41
  75. package/dist/helper/legacy/FakeDocument.d.ts +0 -54
  76. package/dist/helper/legacy/FakeDocument.js +0 -280
  77. package/dist/helper/legacy/createLogger.d.ts +0 -23
  78. package/dist/helper/legacy/createLogger.js +0 -20
  79. package/dist/helper/legacy/supportsBlob.js +0 -10
  80. package/dist/helper/legacy/supportsClassFields.d.ts +0 -2
  81. package/dist/helper/legacy/supportsClassFields.js +0 -11
  82. package/dist/helper/legacy/supportsES6.d.ts +0 -2
  83. package/dist/helper/legacy/supportsES6.js +0 -11
  84. package/dist/helper/legacy/supportsForOf.d.ts +0 -2
  85. package/dist/helper/legacy/supportsForOf.js +0 -11
  86. package/dist/helper/legacy/supportsIteratorDestructuring.d.ts +0 -2
  87. package/dist/helper/legacy/supportsIteratorDestructuring.js +0 -11
  88. package/dist/helper/legacy/supportsLogicalAssignment.d.ts +0 -2
  89. package/dist/helper/legacy/supportsLogicalAssignment.js +0 -11
  90. package/dist/helper/legacy/supportsObjectDestructuring.d.ts +0 -2
  91. package/dist/helper/legacy/supportsObjectDestructuring.js +0 -11
  92. package/dist/helper/legacy/supportsOptionalCatchBinding.d.ts +0 -2
  93. package/dist/helper/legacy/supportsOptionalCatchBinding.js +0 -11
  94. package/dist/helper/legacy/supportsOptionalChaining.d.ts +0 -2
  95. package/dist/helper/legacy/supportsOptionalChaining.js +0 -11
  96. package/dist/helper/legacy/supportsRequireInModule.d.ts +0 -2
  97. package/dist/helper/legacy/supportsRequireInModule.js +0 -5
  98. package/dist/helper/legacy/supportsResponse.d.ts +0 -2
  99. package/dist/helper/legacy/supportsResponse.js +0 -10
  100. package/dist/helper/legacy/supportsSpread.d.ts +0 -2
  101. package/dist/helper/legacy/supportsSpread.js +0 -12
  102. package/dist/helper/legacy/supportsTemplateStrings.d.ts +0 -2
  103. package/dist/helper/legacy/supportsTemplateStrings.js +0 -11
  104. package/dist/helper/legacy/supportsWebAssembly.d.ts +0 -2
  105. package/dist/helper/legacy/supportsWebAssembly.js +0 -10
  106. package/dist/helper/legacy/supportsWorker.d.ts +0 -2
  107. package/dist/helper/legacy/supportsWorker.js +0 -17
  108. package/dist/helper/legacy/walkCssTokens.d.ts +0 -40
  109. package/dist/helper/legacy/walkCssTokens.js +0 -761
  110. package/dist/helper/legacy/warmup-webpack.d.ts +0 -1
  111. package/dist/helper/legacy/warmup-webpack.js +0 -26
  112. package/dist/helper/loaders/hot-update.d.ts +0 -1
  113. package/dist/helper/loaders/hot-update.js +0 -40
  114. package/dist/helper/plugins/hot-update.d.ts +0 -7
  115. package/dist/helper/plugins/hot-update.js +0 -40
  116. package/dist/helper/plugins/index.d.ts +0 -1
  117. package/dist/helper/plugins/index.js +0 -17
  118. package/dist/helper/util/currentWatchStep.d.ts +0 -1
  119. package/dist/helper/util/currentWatchStep.js +0 -2
  120. package/dist/helper/util/identifier.d.ts +0 -76
  121. package/dist/helper/util/identifier.js +0 -339
  122. package/dist/helper/util/replaceMitteDiagnostic.d.ts +0 -2
  123. package/dist/helper/util/replaceMitteDiagnostic.js +0 -17
  124. package/dist/reporter/diff-html.d.ts +0 -15
  125. package/dist/reporter/diff-html.js +0 -69
  126. package/dist/reporter/diff-stats.d.ts +0 -24
  127. package/dist/reporter/diff-stats.js +0 -131
  128. package/dist/reporter/index.d.ts +0 -2
  129. package/dist/reporter/index.js +0 -18
  130. package/dist/runner/web/fake.d.ts +0 -15
  131. package/dist/runner/web/fake.js +0 -213
  132. package/dist/runner/web/jsdom.d.ts +0 -24
  133. package/dist/runner/web/jsdom.js +0 -228
  134. /package/dist/helper/legacy/{supportsBlob.d.ts → supportsTextDecoder.d.ts} +0 -0
package/dist/case/hot.js CHANGED
@@ -9,27 +9,26 @@ exports.createHotRunner = createHotRunner;
9
9
  const node_path_1 = __importDefault(require("node:path"));
10
10
  const core_1 = __importDefault(require("@rspack/core"));
11
11
  const helper_1 = require("../helper");
12
+ const plugin_1 = require("../helper/hot-update/plugin");
12
13
  const checkArrayExpectation_1 = __importDefault(require("../helper/legacy/checkArrayExpectation"));
13
- const plugins_1 = require("../helper/plugins");
14
- const plugin_1 = require("../plugin");
14
+ const plugin_2 = require("../plugin");
15
15
  const runner_1 = require("../runner");
16
16
  const creator_1 = require("../test/creator");
17
- const type_1 = require("../type");
18
17
  const common_1 = require("./common");
19
18
  const runner_2 = require("./runner");
20
19
  const creators = new Map();
21
- function createHotProcessor(name, target, incremental = false) {
22
- const hotUpdateContext = {
23
- updateIndex: 0,
24
- totalUpdates: 1,
25
- changedFiles: []
26
- };
20
+ function createHotProcessor(name, src, temp, target, incremental = false) {
21
+ const updatePlugin = new plugin_1.HotUpdatePlugin(src, temp);
27
22
  const processor = {
23
+ before: async (context) => {
24
+ await updatePlugin.initialize();
25
+ context.setValue(name, "hotUpdatePlugin", updatePlugin);
26
+ },
28
27
  config: async (context) => {
29
28
  const compiler = (0, common_1.getCompiler)(context, name);
30
- let options = defaultOptions(context, target, hotUpdateContext);
29
+ let options = defaultOptions(context, target);
31
30
  options = await (0, common_1.config)(context, name, ["rspack.config.js", "webpack.config.js"], options);
32
- overrideOptions(context, options, target, hotUpdateContext);
31
+ overrideOptions(context, options, target, updatePlugin);
33
32
  if (incremental) {
34
33
  options.experiments ??= {};
35
34
  options.experiments.incremental ??= "advance-silent";
@@ -43,22 +42,26 @@ function createHotProcessor(name, target, incremental = false) {
43
42
  await (0, common_1.build)(context, name);
44
43
  },
45
44
  run: async (env, context) => {
46
- context.setValue(name, "hotUpdateContext", hotUpdateContext);
47
- await (0, common_1.run)(env, context, name, context => findBundle(context, name, target, hotUpdateContext));
45
+ await (0, common_1.run)(env, context, name, context => findBundle(context, name, target, updatePlugin));
48
46
  },
49
47
  check: async (env, context) => {
50
48
  await (0, common_1.check)(env, context, name);
51
49
  },
50
+ after: async (context) => {
51
+ await (0, common_1.afterExecute)(context, name);
52
+ },
52
53
  afterAll: async (context) => {
53
54
  if (context.getTestConfig().checkSteps === false) {
54
55
  return;
55
56
  }
56
- if (hotUpdateContext.updateIndex + 1 !== hotUpdateContext.totalUpdates) {
57
- throw new Error(`Should run all hot steps (${hotUpdateContext.updateIndex + 1} / ${hotUpdateContext.totalUpdates}): ${name}`);
57
+ const updateIndex = updatePlugin.getUpdateIndex();
58
+ const totalUpdates = updatePlugin.getTotalUpdates();
59
+ if (updateIndex + 1 !== totalUpdates) {
60
+ throw new Error(`Should run all hot steps (${updateIndex + 1} / ${totalUpdates}): ${name}`);
58
61
  }
59
62
  }
60
63
  };
61
- processor.hotUpdateContext = hotUpdateContext;
64
+ processor.updatePlugin = updatePlugin;
62
65
  return processor;
63
66
  }
64
67
  function getCreator(target) {
@@ -67,8 +70,8 @@ function getCreator(target) {
67
70
  clean: true,
68
71
  describe: true,
69
72
  target,
70
- steps: ({ name, target }) => [
71
- createHotProcessor(name, target)
73
+ steps: ({ name, target, src, dist, temp }) => [
74
+ createHotProcessor(name, src, temp || node_path_1.default.resolve(dist, "temp"), target)
72
75
  ],
73
76
  runner: {
74
77
  key: (context, name, file) => name,
@@ -79,11 +82,11 @@ function getCreator(target) {
79
82
  }
80
83
  return creators.get(target);
81
84
  }
82
- function createHotCase(name, src, dist, target) {
85
+ function createHotCase(name, src, dist, temp, target) {
83
86
  const creator = getCreator(target);
84
- creator.create(name, src, dist);
87
+ creator.create(name, src, dist, temp);
85
88
  }
86
- function defaultOptions(context, target, updateOptions) {
89
+ function defaultOptions(context, target) {
87
90
  const options = {
88
91
  context: context.getSource(),
89
92
  mode: "development",
@@ -108,15 +111,14 @@ function defaultOptions(context, target, updateOptions) {
108
111
  force: false
109
112
  }
110
113
  },
111
- inlineConst: true,
112
- lazyBarrel: true
114
+ inlineConst: true
113
115
  }
114
116
  };
115
117
  options.plugins ??= [];
116
- options.plugins.push(new core_1.default.HotModuleReplacementPlugin(), new plugins_1.TestHotUpdatePlugin(updateOptions));
118
+ options.plugins.push(new core_1.default.HotModuleReplacementPlugin());
117
119
  return options;
118
120
  }
119
- function overrideOptions(context, options, target, updateOptions) {
121
+ function overrideOptions(context, options, target, updatePlugin) {
120
122
  if (!options.entry) {
121
123
  options.entry = "./index.js";
122
124
  }
@@ -127,34 +129,24 @@ function overrideOptions(context, options, target, updateOptions) {
127
129
  options.module.generator[cssModuleType].exportsOnly ??=
128
130
  target === "async-node";
129
131
  }
130
- options.module.rules ??= [];
131
- options.module.rules.push({
132
- use: [
133
- {
134
- loader: node_path_1.default.resolve(__dirname, "../helper/loaders/hot-update.js"),
135
- options: updateOptions
136
- }
137
- ],
138
- enforce: "pre"
139
- });
140
132
  options.plugins ??= [];
141
- options.plugins.push(new core_1.default.LoaderOptionsPlugin(updateOptions));
133
+ options.plugins.push(updatePlugin);
142
134
  if (!global.printLogger) {
143
135
  options.infrastructureLogging = {
144
136
  level: "error"
145
137
  };
146
138
  }
147
139
  if (options.lazyCompilation) {
148
- options.plugins.push(new plugin_1.LazyCompilationTestPlugin());
140
+ options.plugins.push(new plugin_2.LazyCompilationTestPlugin());
149
141
  }
150
142
  }
151
- function findBundle(context, name, target, updateOptions) {
143
+ function findBundle(context, name, target, updatePlugin) {
152
144
  const compiler = context.getCompiler(name);
153
145
  if (!compiler)
154
146
  throw new Error("Compiler should exists when find bundle");
155
147
  const testConfig = context.getTestConfig();
156
148
  if (typeof testConfig.findBundle === "function") {
157
- return testConfig.findBundle(updateOptions.updateIndex, compiler.getOptions());
149
+ return testConfig.findBundle(updatePlugin.getUpdateIndex(), compiler.getOptions());
158
150
  }
159
151
  const files = [];
160
152
  const prefiles = [];
@@ -184,68 +176,43 @@ function createHotRunner(context, name, file, env) {
184
176
  const testConfig = context.getTestConfig();
185
177
  const source = context.getSource();
186
178
  const dist = context.getDist();
187
- const hotUpdateContext = context.getValue(name, "hotUpdateContext");
188
- const next = async (callback) => {
189
- const usePromise = typeof callback === "function";
190
- try {
191
- hotUpdateContext.updateIndex++;
192
- const stats = await compiler.build();
193
- if (!stats) {
194
- throw new Error("Should generate stats during build");
195
- }
196
- const jsonStats = stats.toJson({
197
- // errorDetails: true
198
- });
199
- const compilerOptions = compiler.getOptions();
200
- const checker = context.getValue(name, jsonStats.errors?.length
201
- ? "hotUpdateStepErrorChecker"
202
- : "hotUpdateStepChecker");
203
- if (checker) {
204
- checker(hotUpdateContext, stats, runner.getGlobal("__HMR_UPDATED_RUNTIME__"));
205
- }
206
- await (0, checkArrayExpectation_1.default)(source, jsonStats, "error", `errors${hotUpdateContext.updateIndex}`, "Error", compilerOptions);
207
- await (0, checkArrayExpectation_1.default)(source, jsonStats, "warning", `warnings${hotUpdateContext.updateIndex}`, "Warning", compilerOptions);
208
- if (usePromise) {
209
- // old callback style hmr cases
210
- callback(null, jsonStats);
211
- }
212
- else {
213
- // new promise style hmr cases
214
- return jsonStats;
215
- }
179
+ const updatePlugin = context.getValue(name, "hotUpdatePlugin");
180
+ const nextHMR = async (m, options) => {
181
+ await updatePlugin.goNext();
182
+ const stats = await compiler.build();
183
+ if (!stats) {
184
+ throw new Error("Should generate stats during build");
216
185
  }
217
- catch (e) {
218
- if (usePromise) {
219
- callback(e);
220
- }
221
- else {
222
- throw e;
223
- }
186
+ const jsonStats = stats.toJson({
187
+ // errorDetails: true
188
+ });
189
+ const compilerOptions = compiler.getOptions();
190
+ const checker = context.getValue(name, jsonStats.errors?.length
191
+ ? "hotUpdateStepErrorChecker"
192
+ : "hotUpdateStepChecker");
193
+ if (checker) {
194
+ checker(updatePlugin.getUpdateIndex(), stats, runner.getGlobal("__HMR_UPDATED_RUNTIME__"));
224
195
  }
225
- };
226
- const nextHMR = async (m, options) => {
227
- const jsonStats = await next();
196
+ await (0, checkArrayExpectation_1.default)(source, jsonStats, "error", `errors${updatePlugin.getUpdateIndex()}`, "Error", compilerOptions);
197
+ await (0, checkArrayExpectation_1.default)(source, jsonStats, "warning", `warnings${updatePlugin.getUpdateIndex()}`, "Warning", compilerOptions);
228
198
  const updatedModules = await m.hot.check(options || true);
229
199
  if (!updatedModules) {
230
200
  throw new Error("No update available");
231
201
  }
232
202
  return jsonStats;
233
203
  };
234
- const runner = new runner_1.WebRunner({
235
- dom: context.getValue(name, "documentType") || type_1.EDocumentType.JSDOM,
204
+ const commonOptions = {
236
205
  env,
237
206
  stats: (0, runner_2.cachedStats)(context, name),
238
207
  name: name,
239
208
  runInNewContext: false,
240
209
  testConfig: {
241
- documentType: testConfig.documentType || type_1.EDocumentType.Fake,
242
210
  ...testConfig,
243
211
  moduleScope(ms, stats, options) {
244
212
  const moduleScope = ms;
245
213
  if (typeof testConfig.moduleScope === "function") {
246
214
  testConfig.moduleScope(moduleScope, stats, compilerOptions);
247
215
  }
248
- moduleScope.NEXT = next;
249
216
  moduleScope.NEXT_HMR = nextHMR;
250
217
  return moduleScope;
251
218
  }
@@ -254,6 +221,17 @@ function createHotRunner(context, name, file, env) {
254
221
  source,
255
222
  dist,
256
223
  compilerOptions
257
- });
224
+ };
225
+ let runner;
226
+ if (compilerOptions.target === "web" ||
227
+ compilerOptions.target === "webworker") {
228
+ runner = new runner_1.WebRunner({
229
+ location: testConfig.location || "https://test.cases/path/index.html",
230
+ ...commonOptions
231
+ });
232
+ }
233
+ else {
234
+ runner = new runner_1.NodeRunner(commonOptions);
235
+ }
258
236
  return runner;
259
237
  }
@@ -1,5 +1,5 @@
1
- import { type ECompilerType, type TCompilerOptions } from "../type";
2
- export declare function createHotIncrementalCase(name: string, src: string, dist: string, target: TCompilerOptions<ECompilerType.Rspack>["target"], webpackCases: boolean): void;
1
+ import type { ECompilerType, TCompilerOptions } from "../type";
2
+ export declare function createHotIncrementalCase(name: string, src: string, dist: string, temp: string, target: TCompilerOptions<ECompilerType.Rspack>["target"], webpackCases: boolean): void;
3
3
  export type WatchIncrementalOptions = {
4
4
  ignoreNotFriendlyForIncrementalWarnings?: boolean;
5
5
  };
@@ -8,28 +8,11 @@ exports.createWatchIncrementalCase = createWatchIncrementalCase;
8
8
  const node_fs_1 = __importDefault(require("node:fs"));
9
9
  const node_path_1 = __importDefault(require("node:path"));
10
10
  const creator_1 = require("../test/creator");
11
- const type_1 = require("../type");
12
11
  const hot_1 = require("./hot");
13
12
  const watch_1 = require("./watch");
14
13
  const hotCreators = new Map();
15
- function createHotIncrementalProcessor(name, target, webpackCases) {
16
- const processor = (0, hot_1.createHotProcessor)(name, target, true);
17
- processor.before = async (context) => {
18
- context.setValue(name, "documentType", webpackCases ? type_1.EDocumentType.Fake : type_1.EDocumentType.JSDOM);
19
- };
20
- const originalAfterAll = processor.afterAll;
21
- processor.afterAll = async function (context) {
22
- try {
23
- await originalAfterAll?.(context);
24
- }
25
- catch (e) {
26
- const isFake = context.getValue(name, "documentType") === type_1.EDocumentType.Fake;
27
- if (isFake && /Should run all hot steps/.test(e.message))
28
- return;
29
- throw e;
30
- }
31
- };
32
- return processor;
14
+ function createHotIncrementalProcessor(name, src, temp, target, webpackCases) {
15
+ return (0, hot_1.createHotProcessor)(name, src, temp, target, true);
33
16
  }
34
17
  function getHotCreator(target, webpackCases) {
35
18
  const key = JSON.stringify({ target, webpackCases });
@@ -38,8 +21,8 @@ function getHotCreator(target, webpackCases) {
38
21
  clean: true,
39
22
  describe: true,
40
23
  target,
41
- steps: ({ name, target }) => [
42
- createHotIncrementalProcessor(name, target, webpackCases)
24
+ steps: ({ name, target, src, temp, dist }) => [
25
+ createHotIncrementalProcessor(name, src, temp || node_path_1.default.resolve(dist, "temp"), target, webpackCases)
43
26
  ],
44
27
  runner: {
45
28
  key: (context, name, file) => name,
@@ -50,9 +33,9 @@ function getHotCreator(target, webpackCases) {
50
33
  }
51
34
  return hotCreators.get(key);
52
35
  }
53
- function createHotIncrementalCase(name, src, dist, target, webpackCases) {
36
+ function createHotIncrementalCase(name, src, dist, temp, target, webpackCases) {
54
37
  const creator = getHotCreator(target, webpackCases);
55
- creator.create(name, src, dist);
38
+ creator.create(name, src, dist, temp);
56
39
  }
57
40
  const watchCreators = new Map();
58
41
  function getWatchCreator(options) {
@@ -79,12 +62,10 @@ function getWatchCreator(options) {
79
62
  .map(name => ({ name }));
80
63
  return runs.map((run, index) => index === 0
81
64
  ? (0, watch_1.createWatchInitialProcessor)(name, temp, run.name, watchState, {
82
- incremental: true,
83
- ignoreNotFriendlyForIncrementalWarnings: options.ignoreNotFriendlyForIncrementalWarnings
65
+ incremental: true
84
66
  })
85
67
  : (0, watch_1.createWatchStepProcessor)(name, temp, run.name, watchState, {
86
- incremental: true,
87
- ignoreNotFriendlyForIncrementalWarnings: options.ignoreNotFriendlyForIncrementalWarnings
68
+ incremental: true
88
69
  }));
89
70
  },
90
71
  concurrent: true
@@ -1,20 +1,31 @@
1
1
  export { createBuiltinCase } from "./builtin";
2
2
  export { createCacheCase } from "./cache";
3
+ export type { TCompilerCaseConfig } from "./compiler";
3
4
  export { createCompilerCase } from "./compiler";
5
+ export type { TConfigCaseConfig } from "./config";
4
6
  export { createConfigCase } from "./config";
7
+ export type { TDefaultsCaseConfig } from "./defaults";
5
8
  export { createDefaultsCase, getRspackDefaultConfig } from "./defaults";
9
+ export type { TDiagnosticOptions } from "./diagnostic";
6
10
  export { createDiagnosticCase } from "./diagnostic";
7
11
  export { createDiffCase } from "./diff";
12
+ export type { TErrorCaseConfig } from "./error";
8
13
  export { createErrorCase } from "./error";
9
14
  export { createEsmOutputCase } from "./esm-output";
15
+ export { createExampleCase } from "./example";
16
+ export type { THashCaseConfig } from "./hash";
10
17
  export { createHashCase } from "./hash";
18
+ export type { THookCaseConfig } from "./hook";
11
19
  export { createHookCase } from "./hook";
12
20
  export { createHotCase } from "./hot";
13
21
  export { createHotStepCase } from "./hot-step";
14
22
  export { createHotIncrementalCase, createWatchIncrementalCase } from "./incremental";
23
+ export type { TMultiCompilerCaseConfig } from "./multi-compiler";
24
+ export { createMultiCompilerCase } from "./multi-compiler";
15
25
  export { createNativeWatcher } from "./native-watcher";
16
- export { createHotNormalCase, createNormalCase } from "./normal";
26
+ export { createDevNormalCase, createHotNormalCase, createNormalCase, createProdNormalCase } from "./normal";
17
27
  export { createSerialCase } from "./serial";
28
+ export type { TStatsAPICaseConfig } from "./stats-api";
18
29
  export { createStatsAPICase } from "./stats-api";
19
30
  export { createStatsOutputCase } from "./stats-output";
20
31
  export { createTreeShakingCase } from "./treeshaking";
@@ -1,6 +1,6 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.createWatchCase = exports.createTreeShakingCase = exports.createStatsOutputCase = exports.createStatsAPICase = exports.createSerialCase = exports.createNormalCase = exports.createHotNormalCase = exports.createNativeWatcher = exports.createWatchIncrementalCase = exports.createHotIncrementalCase = exports.createHotStepCase = exports.createHotCase = exports.createHookCase = exports.createHashCase = exports.createEsmOutputCase = exports.createErrorCase = exports.createDiffCase = exports.createDiagnosticCase = exports.getRspackDefaultConfig = exports.createDefaultsCase = exports.createConfigCase = exports.createCompilerCase = exports.createCacheCase = exports.createBuiltinCase = void 0;
3
+ exports.createWatchCase = exports.createTreeShakingCase = exports.createStatsOutputCase = exports.createStatsAPICase = exports.createSerialCase = exports.createProdNormalCase = exports.createNormalCase = exports.createHotNormalCase = exports.createDevNormalCase = exports.createNativeWatcher = exports.createMultiCompilerCase = exports.createWatchIncrementalCase = exports.createHotIncrementalCase = exports.createHotStepCase = exports.createHotCase = exports.createHookCase = exports.createHashCase = exports.createExampleCase = exports.createEsmOutputCase = exports.createErrorCase = exports.createDiffCase = exports.createDiagnosticCase = exports.getRspackDefaultConfig = exports.createDefaultsCase = exports.createConfigCase = exports.createCompilerCase = exports.createCacheCase = exports.createBuiltinCase = void 0;
4
4
  var builtin_1 = require("./builtin");
5
5
  Object.defineProperty(exports, "createBuiltinCase", { enumerable: true, get: function () { return builtin_1.createBuiltinCase; } });
6
6
  var cache_1 = require("./cache");
@@ -20,6 +20,8 @@ var error_1 = require("./error");
20
20
  Object.defineProperty(exports, "createErrorCase", { enumerable: true, get: function () { return error_1.createErrorCase; } });
21
21
  var esm_output_1 = require("./esm-output");
22
22
  Object.defineProperty(exports, "createEsmOutputCase", { enumerable: true, get: function () { return esm_output_1.createEsmOutputCase; } });
23
+ var example_1 = require("./example");
24
+ Object.defineProperty(exports, "createExampleCase", { enumerable: true, get: function () { return example_1.createExampleCase; } });
23
25
  var hash_1 = require("./hash");
24
26
  Object.defineProperty(exports, "createHashCase", { enumerable: true, get: function () { return hash_1.createHashCase; } });
25
27
  var hook_1 = require("./hook");
@@ -31,11 +33,15 @@ Object.defineProperty(exports, "createHotStepCase", { enumerable: true, get: fun
31
33
  var incremental_1 = require("./incremental");
32
34
  Object.defineProperty(exports, "createHotIncrementalCase", { enumerable: true, get: function () { return incremental_1.createHotIncrementalCase; } });
33
35
  Object.defineProperty(exports, "createWatchIncrementalCase", { enumerable: true, get: function () { return incremental_1.createWatchIncrementalCase; } });
36
+ var multi_compiler_1 = require("./multi-compiler");
37
+ Object.defineProperty(exports, "createMultiCompilerCase", { enumerable: true, get: function () { return multi_compiler_1.createMultiCompilerCase; } });
34
38
  var native_watcher_1 = require("./native-watcher");
35
39
  Object.defineProperty(exports, "createNativeWatcher", { enumerable: true, get: function () { return native_watcher_1.createNativeWatcher; } });
36
40
  var normal_1 = require("./normal");
41
+ Object.defineProperty(exports, "createDevNormalCase", { enumerable: true, get: function () { return normal_1.createDevNormalCase; } });
37
42
  Object.defineProperty(exports, "createHotNormalCase", { enumerable: true, get: function () { return normal_1.createHotNormalCase; } });
38
43
  Object.defineProperty(exports, "createNormalCase", { enumerable: true, get: function () { return normal_1.createNormalCase; } });
44
+ Object.defineProperty(exports, "createProdNormalCase", { enumerable: true, get: function () { return normal_1.createProdNormalCase; } });
39
45
  var serial_1 = require("./serial");
40
46
  Object.defineProperty(exports, "createSerialCase", { enumerable: true, get: function () { return serial_1.createSerialCase; } });
41
47
  var stats_api_1 = require("./stats-api");
@@ -0,0 +1,18 @@
1
+ import type { ECompilerType, ITestContext, TCompilation, TCompiler, TCompilerOptions, TCompilerStats, TCompilerStatsCompilation } from "../type";
2
+ export declare function createMultiCompilerCase(name: string, src: string, dist: string, testConfig: string): void;
3
+ export type TMultiCompilerCaseConfig = {
4
+ description: string;
5
+ error?: boolean;
6
+ skip?: boolean;
7
+ options?: (context: ITestContext) => TCompilerOptions<ECompilerType.Rspack>;
8
+ compiler?: (context: ITestContext, compiler: TCompiler<ECompilerType.Rspack>) => Promise<void>;
9
+ build?: (context: ITestContext, compiler: TCompiler<ECompilerType.Rspack>) => Promise<void>;
10
+ check?: ({ context, stats, files, compiler, compilation }: {
11
+ context: ITestContext;
12
+ stats?: TCompilerStatsCompilation<ECompilerType.Rspack>;
13
+ files?: Record<string, string>;
14
+ compiler: TCompiler<ECompilerType.Rspack>;
15
+ compilation?: TCompilation<ECompilerType.Rspack>;
16
+ }) => Promise<void>;
17
+ compilerCallback?: (error: Error | null, stats: TCompilerStats<ECompilerType.Rspack> | null) => void;
18
+ };
@@ -0,0 +1,98 @@
1
+ "use strict";
2
+ var __importDefault = (this && this.__importDefault) || function (mod) {
3
+ return (mod && mod.__esModule) ? mod : { "default": mod };
4
+ };
5
+ Object.defineProperty(exports, "__esModule", { value: true });
6
+ exports.createMultiCompilerCase = createMultiCompilerCase;
7
+ const node_path_1 = __importDefault(require("node:path"));
8
+ const memfs_1 = require("memfs");
9
+ const creator_1 = require("../test/creator");
10
+ const common_1 = require("./common");
11
+ function createMultiCompilerProcessor(name, caseConfig) {
12
+ return {
13
+ config: async (context) => {
14
+ const compiler = (0, common_1.getCompiler)(context, name);
15
+ const options = Object.assign([
16
+ {
17
+ name: "a",
18
+ context: node_path_1.default.join(__dirname, "fixtures"),
19
+ entry: "./a.js"
20
+ },
21
+ {
22
+ name: "b",
23
+ context: node_path_1.default.join(__dirname, "fixtures"),
24
+ entry: "./b.js"
25
+ }
26
+ ], caseConfig.options?.(context) || {});
27
+ compiler.setOptions(options);
28
+ },
29
+ compiler: async (context) => {
30
+ const compiler = (0, common_1.getCompiler)(context, name);
31
+ if (caseConfig.compilerCallback) {
32
+ compiler.createCompilerWithCallback(caseConfig.compilerCallback);
33
+ }
34
+ else {
35
+ compiler.createCompiler();
36
+ }
37
+ const c = compiler.getCompiler();
38
+ c.outputFileSystem = (0, memfs_1.createFsFromVolume)(new memfs_1.Volume());
39
+ c.watchFileSystem = {
40
+ watch() {
41
+ // watch should return a watcher instance
42
+ // watcher instance should have close, pause and getInfo methods
43
+ return {
44
+ close: () => { },
45
+ pause: () => { },
46
+ getInfo: () => {
47
+ return {
48
+ changes: new Set(),
49
+ removals: new Set(),
50
+ fileTimeInfoEntries: new Map(),
51
+ directoryTimeInfoEntries: new Map()
52
+ };
53
+ }
54
+ };
55
+ }
56
+ };
57
+ await caseConfig.compiler?.(context, c);
58
+ },
59
+ build: async (context) => {
60
+ const compiler = (0, common_1.getCompiler)(context, name);
61
+ if (typeof caseConfig.build === "function") {
62
+ await caseConfig.build?.(context, compiler.getCompiler());
63
+ }
64
+ else {
65
+ await compiler.build();
66
+ }
67
+ },
68
+ run: async (env, context) => { },
69
+ check: async (env, context) => { }
70
+ };
71
+ }
72
+ const creator = new creator_1.BasicCaseCreator({
73
+ clean: true,
74
+ describe: false,
75
+ steps: ({ name, caseConfig }) => {
76
+ return [
77
+ createMultiCompilerProcessor(name, caseConfig)
78
+ ];
79
+ },
80
+ concurrent: false
81
+ });
82
+ function createMultiCompilerCase(name, src, dist, testConfig) {
83
+ let caseConfigList = require(testConfig);
84
+ if (!Array.isArray(caseConfigList)) {
85
+ caseConfigList = [caseConfigList];
86
+ }
87
+ for (let i = 0; i < caseConfigList.length; i++) {
88
+ const caseConfig = caseConfigList[i];
89
+ if (caseConfig.skip) {
90
+ it.skip(`${name}[${i}]`, () => { });
91
+ continue;
92
+ }
93
+ creator.create(`${name}[${i}]`, src, dist, undefined, {
94
+ caseConfig,
95
+ description: () => caseConfig.description
96
+ });
97
+ }
98
+ }
@@ -1,2 +1,4 @@
1
1
  export declare function createNormalCase(name: string, src: string, dist: string): void;
2
2
  export declare function createHotNormalCase(name: string, src: string, dist: string): void;
3
+ export declare function createDevNormalCase(name: string, src: string, dist: string): void;
4
+ export declare function createProdNormalCase(name: string, src: string, dist: string): void;
@@ -5,14 +5,16 @@ var __importDefault = (this && this.__importDefault) || function (mod) {
5
5
  Object.defineProperty(exports, "__esModule", { value: true });
6
6
  exports.createNormalCase = createNormalCase;
7
7
  exports.createHotNormalCase = createHotNormalCase;
8
+ exports.createDevNormalCase = createDevNormalCase;
9
+ exports.createProdNormalCase = createProdNormalCase;
8
10
  const node_fs_1 = __importDefault(require("node:fs"));
9
11
  const node_path_1 = __importDefault(require("node:path"));
10
12
  const core_1 = require("@rspack/core");
11
13
  const creator_1 = require("../test/creator");
12
14
  const common_1 = require("./common");
13
15
  const runner_1 = require("./runner");
14
- const NORMAL_CASES_ROOT = node_path_1.default.resolve(__dirname, "../../../../tests/rspack-test/normalCases");
15
- const createCaseOptions = (hot) => {
16
+ const NORMAL_CASES_ROOT = node_path_1.default.resolve(__TEST_PATH__, "normalCases");
17
+ const createCaseOptions = (hot, mode) => {
16
18
  return {
17
19
  clean: true,
18
20
  describe: false,
@@ -22,7 +24,7 @@ const createCaseOptions = (hot) => {
22
24
  const compiler = (0, common_1.getCompiler)(context, name);
23
25
  let options = defaultOptions(context, {
24
26
  plugins: hot ? [new core_1.HotModuleReplacementPlugin()] : []
25
- });
27
+ }, mode);
26
28
  options = await (0, common_1.config)(context, name, ["rspack.config.js", "webpack.config.js"], options);
27
29
  overrideOptions(context, options);
28
30
  compiler.setOptions(options);
@@ -38,6 +40,9 @@ const createCaseOptions = (hot) => {
38
40
  },
39
41
  check: async (env, context) => {
40
42
  await (0, common_1.check)(env, context, name);
43
+ },
44
+ after: async (context) => {
45
+ await (0, common_1.afterExecute)(context, name);
41
46
  }
42
47
  }
43
48
  ],
@@ -56,6 +61,14 @@ const hotCreator = new creator_1.BasicCaseCreator(createCaseOptions(true));
56
61
  function createHotNormalCase(name, src, dist) {
57
62
  hotCreator.create(name, src, dist);
58
63
  }
64
+ const devCreator = new creator_1.BasicCaseCreator(createCaseOptions(false, "development"));
65
+ function createDevNormalCase(name, src, dist) {
66
+ devCreator.create(name, src, dist);
67
+ }
68
+ const prodCreator = new creator_1.BasicCaseCreator(createCaseOptions(false, "production"));
69
+ function createProdNormalCase(name, src, dist) {
70
+ prodCreator.create(name, src, dist);
71
+ }
59
72
  function findBundle(context, options) {
60
73
  const testConfig = context.getTestConfig();
61
74
  if (typeof testConfig.findBundle === "function") {
@@ -64,7 +77,7 @@ function findBundle(context, options) {
64
77
  const filename = options.output?.filename;
65
78
  return typeof filename === "string" ? filename : undefined;
66
79
  }
67
- function defaultOptions(context, compilerOptions) {
80
+ function defaultOptions(context, compilerOptions, mode) {
68
81
  let testConfig = {};
69
82
  const testConfigPath = node_path_1.default.join(context.getSource(), "test.config.js");
70
83
  if (node_fs_1.default.existsSync(testConfigPath)) {
@@ -80,11 +93,12 @@ function defaultOptions(context, compilerOptions) {
80
93
  entry: `./${node_path_1.default.relative(NORMAL_CASES_ROOT, context.getSource())}/`,
81
94
  target: compilerOptions?.target || "async-node",
82
95
  devtool: compilerOptions?.devtool,
83
- mode: compilerOptions?.mode || "none",
96
+ mode: compilerOptions?.mode || mode || "none",
84
97
  optimization: compilerOptions?.mode
85
98
  ? {
86
- // emitOnErrors: true,
99
+ emitOnErrors: true,
87
100
  minimizer: [terserForTesting],
101
+ minimize: false,
88
102
  ...testConfig.optimization
89
103
  }
90
104
  : {
@@ -98,7 +112,7 @@ function defaultOptions(context, compilerOptions) {
98
112
  usedExports: true,
99
113
  mangleExports: true,
100
114
  // CHANGE: rspack does not support `emitOnErrors` yet.
101
- // emitOnErrors: true,
115
+ emitOnErrors: true,
102
116
  concatenateModules: !!testConfig?.optimization?.concatenateModules,
103
117
  innerGraph: true,
104
118
  // CHANGE: size is not supported yet
@@ -106,6 +120,7 @@ function defaultOptions(context, compilerOptions) {
106
120
  // chunkIds: "size",
107
121
  moduleIds: "named",
108
122
  chunkIds: "named",
123
+ minimize: false,
109
124
  minimizer: [terserForTesting],
110
125
  ...compilerOptions?.optimization
111
126
  },
@@ -181,17 +196,12 @@ function defaultOptions(context, compilerOptions) {
181
196
  asyncWebAssembly: true,
182
197
  topLevelAwait: true,
183
198
  inlineConst: true,
184
- lazyBarrel: true,
185
199
  // CHANGE: rspack does not support `backCompat` yet.
186
200
  // backCompat: false,
187
201
  // CHANGE: Rspack enables `css` by default.
188
202
  // Turning off here to fallback to webpack's default css processing logic.
189
203
  ...(compilerOptions?.module ? { outputModule: true } : {})
190
204
  }
191
- // infrastructureLogging: compilerOptions?.cache && {
192
- // debug: true,
193
- // console: createLogger(infraStructureLog)
194
- // }
195
205
  };
196
206
  }
197
207
  function overrideOptions(context, options) {
@@ -1,4 +1,4 @@
1
- import { type ECompilerType, type ITestContext, type ITestEnv, type ITestRunner, type TCompilerStatsCompilation } from "../type";
1
+ import type { ECompilerType, ITestContext, ITestEnv, ITestRunner, TCompilerStatsCompilation } from "../type";
2
2
  export type THotStepRuntimeLangData = {
3
3
  outdatedModules: string[];
4
4
  outdatedDependencies: Record<string, string[]>;