UNPKG

vitest-e2e

Version:
196 lines (190 loc) 6.61 kB
'use strict'; 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;