diff options
-rw-r--r-- | .github/workflows/run-test-manually.yml | 2 | ||||
-rw-r--r-- | scripts/bun-test.ts | 40 | ||||
-rw-r--r-- | scripts/package.json | 3 |
3 files changed, 28 insertions, 17 deletions
diff --git a/.github/workflows/run-test-manually.yml b/.github/workflows/run-test-manually.yml index 7c799683f..6609b7932 100644 --- a/.github/workflows/run-test-manually.yml +++ b/.github/workflows/run-test-manually.yml @@ -37,4 +37,4 @@ jobs: bun install bun install --cwd test/bun.js bun install --cwd test/bun.js/third-party/body-parser-test - bun run scripts/bun-test.ts test/ --isolated + bunx ts-node --esm scripts/bun-test.ts --isolated test/ diff --git a/scripts/bun-test.ts b/scripts/bun-test.ts index f3905aca4..a88535634 100644 --- a/scripts/bun-test.ts +++ b/scripts/bun-test.ts @@ -1,5 +1,6 @@ -import { readdirSync, writeSync, fsyncSync, appendFileSync } from "node:fs"; import { join, basename } from "node:path"; +import { readdirSync, writeSync, fsyncSync, appendFileSync } from "node:fs"; +import { spawn } from "node:child_process"; export { parseTest, runTest, formatTest }; @@ -206,7 +207,7 @@ function parseInfo(line: string): TestInfo | undefined { return { name, version, - revision: Bun.revision.startsWith(revision) ? Bun.revision : revision, + revision: "Bun" in globalThis && Bun.revision.startsWith(revision) ? Bun.revision : revision, }; } @@ -393,24 +394,31 @@ async function* runTest(options: RunTestOptions): AsyncGenerator<RunTestResult, } } const runSingleTest = async (args: string[]) => { - const runner = Bun.spawn({ + const runner = spawn("bun", ["test", ...args], { cwd, - cmd: ["bun", "test", ...args], env: { ...process.env, "FORCE_COLOR": "1", }, - stdout: "pipe", - stderr: "pipe", + stdio: "pipe", + }); + let stderr = ""; + let stdout = ""; + const exitCode = await new Promise<number | null>(resolve => { + runner.stdout.on("data", (data: Buffer) => { + stdout += data.toString("utf-8"); + }); + runner.stderr.on("data", (data: Buffer) => { + stderr += data.toString("utf-8"); + }); + runner.on("error", ({ name, message }) => { + stderr += `${name}: ${message}`; + resolve(null); + }); + runner.on("exit", exitCode => { + resolve(exitCode); + }); }); - const exitCode = await Promise.race([ - runner.exited, - Bun.sleep(timeout).then(() => { - runner.kill(); - return null; - }), - ]); - const [stdout, stderr] = await Promise.all([readStream(runner.stdout), readStream(runner.stderr)]); const lines = stderr.split("\n").map(stripAnsi); const result = parseTest(lines, { cwd, paths }); return { @@ -539,7 +547,7 @@ ${tests}`; } function printTest(result: RunTestResult): void { - const isAction = !!process.env["GITHUB_ACTIONS"] || true; + const isAction = !!process.env["GITHUB_ACTIONS"]; const isGroup = result.files.length === 1; if (isGroup) { const { file, status } = result.files[0]; @@ -628,6 +636,6 @@ async function main() { process.exit(0); } -if (import.meta.main) { +if (import.meta.main || import.meta.url === `file://${process.argv[1]}`) { await main(); } diff --git a/scripts/package.json b/scripts/package.json new file mode 100644 index 000000000..3dbc1ca59 --- /dev/null +++ b/scripts/package.json @@ -0,0 +1,3 @@ +{ + "type": "module" +} |