Skip to content

Commit 26b83f6

Browse files
test: refactor infra (#708)
* test: refactor infra * refactor: lint fix * chore: update lock file
1 parent 2588e54 commit 26b83f6

File tree

8 files changed

+4313
-4885
lines changed

8 files changed

+4313
-4885
lines changed

package-lock.json

Lines changed: 4292 additions & 586 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

package.json

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -46,10 +46,9 @@
4646
"fmt:check": "npm run fmt:base -- --check",
4747
"fmt:base": "prettier --cache --ignore-unknown .",
4848
"fix": "npm run fix:code && npm run fmt",
49-
"install-test-webpack-versions": "./bin/install-test-webpack-versions.sh",
50-
"test": "npm run install-test-webpack-versions && NODE_OPTIONS=--openssl-legacy-provider jest --runInBand",
49+
"test": "NODE_OPTIONS=--openssl-legacy-provider jest --runInBand",
5150
"test:coverage": "npm run test -- --coverage",
52-
"test-dev": "npm run install-test-webpack-versions && NODE_OPTIONS=--openssl-legacy-provider jest --watch --runInBand"
51+
"test-dev": "NODE_OPTIONS=--openssl-legacy-provider jest --watch --runInBand"
5352
},
5453
"dependencies": {
5554
"@discoveryjs/json-ext": "^0.6.3",
@@ -95,7 +94,8 @@
9594
"style-loader": "^4.0.0",
9695
"terser-webpack-plugin": "^5.1.2",
9796
"tinyglobby": "^0.2.15",
98-
"webpack": "^5.98.0",
97+
"webpack-4": "npm:webpack@^4",
98+
"webpack": "^5.105.2",
9999
"webpack-cli": "^6.0.1",
100100
"webpack-dev-server": "^5.2.0"
101101
},

test/helpers.js

Lines changed: 8 additions & 41 deletions
Original file line numberDiff line numberDiff line change
@@ -1,60 +1,27 @@
1-
const { readdirSync } = require("node:fs");
21
const path = require("node:path");
32
const webpack = require("webpack");
43

54
const BundleAnalyzerPlugin = require("../src/BundleAnalyzerPlugin");
65

76
/* global it */
87

9-
/**
10-
* @template T
11-
* @typedef {() => T} FunctionReturning
12-
*/
13-
14-
/**
15-
* @template T
16-
* @param {FunctionReturning<T>} fn memorized function
17-
* @returns {FunctionReturning<T>} new function
18-
*/
19-
const memoize = (fn) => {
20-
let cache = false;
21-
/** @type {T | undefined} */
22-
let result;
23-
return () => {
24-
if (cache) {
25-
return /** @type {T} */ (result);
26-
}
27-
28-
result = fn();
29-
cache = true;
30-
// Allow to clean up memory for fn
31-
// and all dependent resources
32-
/** @type {FunctionReturning<T> | undefined} */
33-
(fn) = undefined;
34-
return /** @type {T} */ (result);
35-
};
36-
};
37-
38-
const getAvailableWebpackVersions = memoize(() =>
39-
readdirSync(path.resolve(__dirname, "./webpack-versions"), {
40-
withFileTypes: true,
41-
})
42-
.filter((entry) => entry.isDirectory())
43-
.map((dir) => dir.name),
44-
);
45-
468
function wait(ms) {
479
return new Promise((resolve) => {
4810
setTimeout(resolve, ms);
4911
});
5012
}
5113

14+
const webpackVersions = {
15+
4: path.resolve(__dirname, "../node_modules/webpack-4"),
16+
5: path.resolve(__dirname, "../node_modules/webpack"),
17+
};
18+
5219
async function webpackCompile(config, version) {
5320
if (version === undefined || version === null) {
5421
throw new Error("Webpack version is not specified");
5522
}
5623

57-
if (!getAvailableWebpackVersions().includes(version)) {
24+
if (!webpackVersions[version]) {
5825
throw new Error(
5926
`Webpack version "${version}" is not available for testing`,
6027
);
@@ -63,7 +30,7 @@ async function webpackCompile(config, version) {
6330
let webpack;
6431

6532
try {
66-
webpack = require(`./webpack-versions/${version}/node_modules/webpack`);
33+
webpack = require(webpackVersions[version]);
6734
} catch (err) {
6835
throw new Error(
6936
`Error requiring Webpack ${version}:\n${err}\n\n` +
@@ -140,7 +107,7 @@ function makeWebpackConfig(opts = {}) {
140107
}
141108

142109
function forEachWebpackVersion(versions, cb) {
143-
const availableVersions = getAvailableWebpackVersions();
110+
const availableVersions = Object.keys(webpackVersions);
144111

145112
if (typeof versions === "function") {
146113
cb = versions;

test/plugin.js

Lines changed: 9 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -96,7 +96,7 @@ describe("Plugin", () => {
9696
});
9797
});
9898

99-
forEachWebpackVersion(["4.44.2"], ({ it, webpackCompile }) => {
99+
forEachWebpackVersion(["4"], ({ it, webpackCompile }) => {
100100
// Webpack 5 doesn't support `jsonpFunction` option
101101
it("should support webpack config with custom `jsonpFunction` name", async () => {
102102
const config = makeWebpackConfig({
@@ -184,7 +184,7 @@ describe("Plugin", () => {
184184
describe("reportTitle", () => {
185185
it("should have a sensible default", async () => {
186186
const config = makeWebpackConfig();
187-
await webpackCompile(config, "4.44.2");
187+
await webpackCompile(config, "4");
188188
const generatedReportTitle = await getTitleFromReport();
189189
expect(generatedReportTitle).toMatch(
190190
/^webpack-bundle-analyzer \[.* at \d{2}:\d{2}\]/u,
@@ -198,7 +198,7 @@ describe("Plugin", () => {
198198
reportTitle,
199199
},
200200
});
201-
await webpackCompile(config, "4.44.2");
201+
await webpackCompile(config, "4");
202202
const generatedReportTitle = await getTitleFromReport();
203203
expect(generatedReportTitle).toBe(reportTitle);
204204
});
@@ -210,7 +210,7 @@ describe("Plugin", () => {
210210
reportTitle: () => reportTitleResult,
211211
},
212212
});
213-
await webpackCompile(config, "4.44.2");
213+
await webpackCompile(config, "4");
214214
const generatedReportTitle = await getTitleFromReport();
215215
expect(generatedReportTitle).toBe(reportTitleResult);
216216
});
@@ -227,7 +227,7 @@ describe("Plugin", () => {
227227

228228
let error = null;
229229
try {
230-
await webpackCompile(config, "4.44.2");
230+
await webpackCompile(config, "4");
231231
} catch (err) {
232232
error = err;
233233
}
@@ -239,23 +239,23 @@ describe("Plugin", () => {
239239
describe("compressionAlgorithm", () => {
240240
it("should default to gzip", async () => {
241241
const config = makeWebpackConfig({ analyzerOpts: {} });
242-
await webpackCompile(config, "4.44.2");
242+
await webpackCompile(config, "4");
243243
await expectValidReport({ parsedSize: 1317, gzipSize: 341 });
244244
});
245245

246246
it("should support gzip", async () => {
247247
const config = makeWebpackConfig({
248248
analyzerOpts: { compressionAlgorithm: "gzip" },
249249
});
250-
await webpackCompile(config, "4.44.2");
250+
await webpackCompile(config, "4");
251251
await expectValidReport({ parsedSize: 1317, gzipSize: 341 });
252252
});
253253

254254
it("should support brotli", async () => {
255255
const config = makeWebpackConfig({
256256
analyzerOpts: { compressionAlgorithm: "brotli" },
257257
});
258-
await webpackCompile(config, "4.44.2");
258+
await webpackCompile(config, "4");
259259
await expectValidReport({
260260
gzipSize: undefined,
261261
parsedSize: 1317,
@@ -268,7 +268,7 @@ describe("Plugin", () => {
268268
const config = makeWebpackConfig({
269269
analyzerOpts: { compressionAlgorithm: "zstd" },
270270
});
271-
await webpackCompile(config, "4.44.2");
271+
await webpackCompile(config, "4");
272272
await expectValidReport({
273273
parsedSize: 1317,
274274
gzipSize: undefined,

0 commit comments

Comments
 (0)