vitest-e2e
Version:
vitest e2e utils
196 lines (190 loc) • 6.61 kB
JavaScript
;
var chunk2WTKSSR2_cjs = require('./chunk-2WTKSSR2.cjs');
var chunkPJYHJVIT_cjs = require('./chunk-PJYHJVIT.cjs');
var fs = require('fs-extra');
var path = require('path');
var vite = require('vite');
var vitest = require('vitest');
function _interopDefault (e) { return e && e.__esModule ? e : { default: e }; }
var fs__default = /*#__PURE__*/_interopDefault(fs);
var path__default = /*#__PURE__*/_interopDefault(path);
var timeout = (n) => new Promise((r) => setTimeout(r, n));
function readFile(filename) {
return fs__default.default.readFileSync(path__default.default.resolve(chunk2WTKSSR2_cjs.testDir, filename), "utf-8");
}
function editFile(filename, replacer, runInBuild = false) {
if (chunkPJYHJVIT_cjs.isBuild && !runInBuild)
return;
filename = path__default.default.resolve(chunk2WTKSSR2_cjs.testDir, filename);
const content = fs__default.default.readFileSync(filename, "utf-8");
const modified = replacer(content);
fs__default.default.writeFileSync(filename, modified);
}
function addFile(filename, content) {
fs__default.default.writeFileSync(path__default.default.resolve(chunk2WTKSSR2_cjs.testDir, filename), content);
}
function renameDir(dirname, to) {
fs__default.default.renameSync(path__default.default.resolve(chunk2WTKSSR2_cjs.testDir, dirname), path__default.default.resolve(chunk2WTKSSR2_cjs.testDir, to));
}
function removeFile(filename) {
fs__default.default.unlinkSync(path__default.default.resolve(chunk2WTKSSR2_cjs.testDir, filename));
}
function removeDir(dirname) {
fs__default.default.rmSync(path__default.default.resolve(chunk2WTKSSR2_cjs.testDir, dirname), { force: true, recursive: true });
}
function listFiles(dir = "") {
const filesDir = path__default.default.join(chunk2WTKSSR2_cjs.testDir, dir);
return fs__default.default.readdirSync(filesDir);
}
function listAssets(base = "", assets = "assets") {
const assetsDir = path__default.default.join(chunk2WTKSSR2_cjs.testDir, "dist", base, assets);
return fs__default.default.readdirSync(assetsDir);
}
function findAssetFile(match, base = "", assets = "assets") {
const assetsDir = path__default.default.join(chunk2WTKSSR2_cjs.testDir, "dist", base, assets);
let files;
try {
files = fs__default.default.readdirSync(assetsDir);
} catch (e) {
if (e.code === "ENOENT") {
return "";
}
throw e;
}
const file = files.find((file2) => {
return file2.match(match);
});
return file ? fs__default.default.readFileSync(path__default.default.resolve(assetsDir, file), "utf-8") : "";
}
function readManifest(base = "") {
return JSON.parse(fs__default.default.readFileSync(path__default.default.join(chunk2WTKSSR2_cjs.testDir, "dist", base, "manifest.json"), "utf-8"));
}
async function untilUpdated(poll, expected, runInBuild = false) {
if (chunkPJYHJVIT_cjs.isBuild && !runInBuild)
return;
const maxTries = process.env.CI ? 200 : 50;
for (let tries = 0; tries < maxTries; tries++) {
const actual = await poll() ?? "";
if (actual.includes(expected) || tries === maxTries - 1) {
vitest.expect(actual).toMatch(expected);
break;
} else {
await timeout(50);
}
}
}
async function withRetry(func, runInBuild = false) {
if (chunkPJYHJVIT_cjs.isBuild && !runInBuild)
return;
const maxTries = process.env.CI ? 200 : 50;
for (let tries = 0; tries < maxTries; tries++) {
try {
await func();
return;
} catch {
}
await timeout(50);
}
await func();
}
async function untilBrowserLogAfter(operation, target, arg3, arg4) {
const expectOrder = typeof arg3 === "boolean" ? arg3 : false;
const callback = typeof arg3 === "boolean" ? arg4 : arg3;
const promise = untilBrowserLog(target, expectOrder);
await operation();
const logs = await promise;
if (callback) {
await callback(logs);
}
return logs;
}
async function untilBrowserLog(target, expectOrder = true) {
let resolve;
let reject;
const promise = new Promise((_resolve, _reject) => {
resolve = _resolve;
reject = _reject;
});
const logs = [];
try {
const isMatch = (matcher) => (text) => typeof matcher === "string" ? text === matcher : matcher.test(text);
let processMsg;
if (!target) {
processMsg = () => true;
} else if (Array.isArray(target)) {
if (expectOrder) {
const remainingTargets = [...target];
processMsg = (text) => {
const nextTarget = remainingTargets.shift();
vitest.expect(text).toMatch(nextTarget);
return remainingTargets.length === 0;
};
} else {
const remainingMatchers = target.map((element) => isMatch(element));
processMsg = (text) => {
const nextIndex = remainingMatchers.findIndex((matcher) => matcher(text));
if (nextIndex >= 0) {
remainingMatchers.splice(nextIndex, 1);
}
return remainingMatchers.length === 0;
};
}
} else {
processMsg = isMatch(target);
}
const handleMsg = (msg) => {
try {
const text = msg.text();
if (msg.text().includes("React DevTools"))
return;
logs.push(text);
const done = processMsg(text);
if (done) {
resolve();
}
} catch (err) {
reject(err);
}
};
chunk2WTKSSR2_cjs.page.on("console", handleMsg);
} catch (err) {
reject(err);
}
await promise;
return logs;
}
var formatSourcemapForSnapshot = (map) => {
const root = vite.normalizePath(chunk2WTKSSR2_cjs.testDir);
const m = { ...map };
delete m.file;
delete m.names;
m.sources = m.sources.map((source) => source.replace(root, "/root"));
return m;
};
async function killProcess(serverProcess) {
if (chunkPJYHJVIT_cjs.isWindows) {
try {
const { execaCommandSync } = await import('execa');
execaCommandSync(`taskkill /pid ${serverProcess.pid} /T /F`);
} catch (e) {
console.error("failed to taskkill:", e);
}
} else {
serverProcess.kill("SIGTERM", { forceKillAfterTimeout: 2e3 });
}
}
exports.addFile = addFile;
exports.editFile = editFile;
exports.findAssetFile = findAssetFile;
exports.formatSourcemapForSnapshot = formatSourcemapForSnapshot;
exports.killProcess = killProcess;
exports.listAssets = listAssets;
exports.listFiles = listFiles;
exports.readFile = readFile;
exports.readManifest = readManifest;
exports.removeDir = removeDir;
exports.removeFile = removeFile;
exports.renameDir = renameDir;
exports.untilBrowserLogAfter = untilBrowserLogAfter;
exports.untilUpdated = untilUpdated;
exports.withRetry = withRetry;