/
githubmirror
/
webpack
Обзор
Документация
Войти
/
githubmirror
/
webpack
Код
Запросы
0
Пакеты
0
Релизы
0
Аналитика
Безопасность
v5.101.0
test/checkArrayExpectation.js
155 строк
4 KB
Alexander Akait
style: set `arrowParens` to `true` (#19706)
16 июл 2025, 19:13
Не верифицирован
16 июл 2025, 19:13
703d9ac
Код
Авторство
О чём код?
"use strict"; const path = require("path"); const fs = require("graceful-fs"); const check = (expected, actual) => { if (expected instanceof RegExp) { expected = { message: expected }; } if (Array.isArray(expected)) { return expected.every((e) => check(e, actual)); } return Object.keys(expected).every((key) => { let value = actual[key]; if (typeof value === "object") { value = JSON.stringify(value); } return expected[key].test(value); }); }; const explain = (object) => { if (object instanceof RegExp) { object = { message: object }; } return Object.keys(object) .map((key) => { let value = object[key]; if (typeof value === "object" && !(value instanceof RegExp)) { value = JSON.stringify(value); } let msg = `${key} = ${value}`; if (key !== "stack" && key !== "details" && msg.length > 100) { msg = `${msg.slice(0, 97)}...`; } return msg; }) .join("; "); }; const diffItems = (actual, expected, kind) => { const tooMuch = [...actual]; const missing = [...expected]; for (let i = 0; i < missing.length; i++) { const current = missing[i]; for (let j = 0; j < tooMuch.length; j++) { if (check(current, tooMuch[j])) { tooMuch.splice(j, 1); missing.splice(i, 1); i--; break; } } } const diff = []; if (missing.length > 0) { diff.push(`The following expected ${kind}s are missing: ${missing.map((item) => `${explain(item)}`).join("\n\n")}`); } if (tooMuch.length > 0) { diff.push(`The following ${kind}s are unexpected: ${tooMuch.map((item) => `${explain(item)}`).join("\n\n")}`); } return diff.join("\n\n"); }; module.exports = function checkArrayExpectation( testDirectory, object, kind, filename, upperCaseKind, options, done ) { if (!done) { done = options; options = upperCaseKind; upperCaseKind = filename; filename = `${kind}s`; } let array = object[`${kind}s`]; if (Array.isArray(array) && kind === "warning") { array = array.filter((item) => !/from Terser/.test(item)); } if (fs.existsSync(path.join(testDirectory, `${filename}.js`))) { const expectedFilename = path.join(testDirectory, `${filename}.js`); let expected = require(expectedFilename); if (typeof expected === "function") { expected = expected(options); } const diff = diffItems(array, expected, kind); if (expected.length < array.length) { return ( done( new Error( `More ${kind}s (${array.length} instead of ${expected.length}) while compiling than expected:\n\n${diff}\n\nCheck expected ${kind}s: ${expectedFilename}` ) ), true ); } else if (expected.length > array.length) { return ( done( new Error( `Less ${kind}s (${array.length} instead of ${expected.length}) while compiling than expected:\n\n${diff}\n\nCheck expected ${kind}s: ${expectedFilename}` ) ), true ); } for (let i = 0; i < array.length; i++) { if (Array.isArray(expected[i])) { for (const expectedItem of expected[i]) { if (!check(expectedItem, array[i])) { return ( done( new Error( `${upperCaseKind} ${i}: ${explain( array[i] )} doesn't match ${explain(expectedItem)}` ) ), true ); } } } else if (!check(expected[i], array[i])) { return ( done( new Error( `${upperCaseKind} ${i}: ${explain( array[i] )} doesn't match ${explain(expected[i])}` ) ), true ); } } } else if (array.length > 0) { return ( done( new Error( `${upperCaseKind}s while compiling:\n\n${array .map(explain) .join("\n\n")}` ) ), true ); } };