mirror of
https://github.com/oven-sh/bun
synced 2026-02-02 15:08:46 +00:00
119 lines
2.8 KiB
JavaScript
119 lines
2.8 KiB
JavaScript
const puppeteer = require("puppeteer");
|
|
const http = require("http");
|
|
const path = require("path");
|
|
const url = require("url");
|
|
const fs = require("fs");
|
|
const child_process = require("child_process");
|
|
const serverURL = process.env.TEST_SERVER_URL || "http://localhost:8080";
|
|
|
|
if (process.env.PROJECT === "bun") {
|
|
const bunFlags = [`--origin=${serverURL}`].filter(Boolean);
|
|
const bunExec = process.env.BUN_BIN || "bun";
|
|
const bunProcess = child_process.spawn(bunExec, bunFlags, {
|
|
cwd: process.cwd(),
|
|
stdio: "ignore",
|
|
env: {
|
|
...process.env,
|
|
DISABLE_BUN_ANALYTICS: "1",
|
|
},
|
|
|
|
shell: false,
|
|
});
|
|
console.log("$", bunExec, bunFlags.join(" "));
|
|
const isDebug = bunExec.endsWith("-debug");
|
|
|
|
// bunProcess.stderr.pipe(process.stderr);
|
|
// bunProcess.stdout.pipe(process.stdout);
|
|
bunProcess.once("error", (err) => {
|
|
console.error("❌ bun error", err);
|
|
process.exit(1);
|
|
});
|
|
process.on("beforeExit", () => {
|
|
bunProcess?.kill(0);
|
|
});
|
|
} else if (process.env.PROJECT === "next") {
|
|
const bunProcess = child_process.spawn(
|
|
"./node_modules/.bin/next",
|
|
["--port", "8080"],
|
|
{
|
|
cwd: process.cwd(),
|
|
stdio: "ignore",
|
|
env: {
|
|
...process.env,
|
|
},
|
|
|
|
shell: false,
|
|
}
|
|
);
|
|
}
|
|
|
|
const delay = new Promise((resolve, reject) => {
|
|
const watcher = fs.watch(path.resolve(process.cwd(), "src/colors.css.blob"));
|
|
watcher.once("change", () => {
|
|
setTimeout(() => {
|
|
resolve();
|
|
}, 1000);
|
|
});
|
|
});
|
|
|
|
async function main() {
|
|
const browser = await puppeteer.launch({
|
|
headless: false,
|
|
waitForInitialPage: true,
|
|
args: [
|
|
`--window-size=${parseInt(process.env.SCREEN_WIDTH || "1024", 10) / 2},${
|
|
parseInt(process.env.SCREEN_HEIGHT || "1024", 10) / 2
|
|
}`,
|
|
],
|
|
defaultViewport: {
|
|
width: parseInt(process.env.SCREEN_WIDTH || "1024", 10) / 2,
|
|
height: parseInt(process.env.SCREEN_HEIGHT || "1024", 10) / 2,
|
|
},
|
|
});
|
|
const promises = [];
|
|
let allTestsPassed = true;
|
|
|
|
async function runPage(key) {
|
|
var page;
|
|
|
|
try {
|
|
console.log("Opening page");
|
|
page = await browser.newPage();
|
|
|
|
console.log(`Navigating to "http://localhost:8080/"`);
|
|
|
|
while (true) {
|
|
try {
|
|
await page.goto("http://localhost:8080/", { waitUntil: "load" });
|
|
break;
|
|
} catch (exception) {
|
|
if (!exception.toString().includes("ERR_CONNECTION_REFUSED")) break;
|
|
}
|
|
}
|
|
|
|
await page.bringToFront();
|
|
|
|
await delay;
|
|
|
|
// runner.stdout.pipe(process.stdout);
|
|
// runner.stderr.pipe(process.stderr);
|
|
var didResolve = false;
|
|
|
|
console.log(`Completed. Done.`);
|
|
} catch (error) {
|
|
console.error(error);
|
|
} finally {
|
|
await page.close();
|
|
await browser.close();
|
|
}
|
|
}
|
|
|
|
return runPage();
|
|
}
|
|
|
|
main().catch((error) =>
|
|
setTimeout(() => {
|
|
throw error;
|
|
})
|
|
);
|