import { describe, test, expect } from "bun:test"; import { spawnSync } from "bun"; import { bunEnv, bunExe } from "harness"; import { tmpdir } from "node:os"; import fs from "node:fs"; describe("bun", () => { describe("NO_COLOR", () => { for (const value of ["1", "0", "foo", " "]) { test(`respects NO_COLOR=${JSON.stringify(value)} to disable color`, () => { const { stdout } = spawnSync({ cmd: [bunExe()], env: { NO_COLOR: value, }, }); expect(stdout.toString()).not.toMatch(/\u001b\[\d+m/); }); } for (const value of ["", undefined]) { // TODO: need a way to fake a tty in order to test this, // and cannot use FORCE_COLOR since that will always override NO_COLOR. test.todo(`respects NO_COLOR=${JSON.stringify(value)} to enable color`, () => { const { stdout } = spawnSync({ cmd: [bunExe()], env: value === undefined ? {} : { NO_COLOR: value, }, }); expect(stdout.toString()).toMatch(/\u001b\[\d+m/); }); } }); describe("revision", () => { test("revision generates version numbers correctly", () => { var { stdout, exitCode } = Bun.spawnSync({ cmd: [bunExe(), "--version"], env: bunEnv, stderr: "inherit", }); var version = stdout.toString().trim(); var { stdout, exitCode } = Bun.spawnSync({ cmd: [bunExe(), "--revision"], env: bunEnv, stderr: "inherit", }); var revision = stdout.toString().trim(); expect(exitCode).toBe(0); expect(revision).toStartWith(version.replaceAll("_", "-")); // https://semver.org/#is-there-a-suggested-regular-expression-regex-to-check-a-semver-string expect(revision).toMatch( new RegExp( "^(0|[1-9]\\d*)\\.(0|[1-9]\\d*)\\.(0|[1-9]\\d*)(?:-((?:0|[1-9]\\d*|\\d*[a-zA-Z-][0-9a-zA-Z-]*)(?:\\.(?:0|[1-9]\\d*|\\d*[a-zA-Z-][0-9a-zA-Z-]*))*))?(?:\\+([0-9a-zA-Z-]+(?:\\.[0-9a-zA-Z-]+)*))?$", ), ); }); }); describe("test command line arguments", () => { test("test --config, issue #4128", () => { const path = `${tmpdir()}/bunfig-${Date.now()}.toml`; fs.writeFileSync(path, "[debug]"); const p = Bun.spawnSync({ cmd: [bunExe(), "--config=" + path], env: {}, stderr: "inherit", }); try { expect(p.exitCode).toBe(0); } finally { fs.unlinkSync(path); } }); }); });