mirror of
https://github.com/oven-sh/bun
synced 2026-02-10 02:48:50 +00:00
212 lines
5.7 KiB
TypeScript
212 lines
5.7 KiB
TypeScript
import { beforeEach, describe, expect, test } from "bun:test";
|
|
import { bunEnv, bunExe } from "harness";
|
|
|
|
test("use strict causes CommonJS", () => {
|
|
const { stdout, exitCode } = Bun.spawnSync({
|
|
cmd: [bunExe(), require.resolve("./use-strict-fixture.js")],
|
|
env: bunEnv,
|
|
});
|
|
expect(stdout.toString()).toBe("function\n");
|
|
expect(exitCode).toBe(0);
|
|
});
|
|
|
|
test("non-ascii regexp literals", () => {
|
|
var str = "🔴11 54 / 10,000";
|
|
expect(str.replace(/[🔵🔴,]+/g, "")).toBe("11 54 / 10000");
|
|
});
|
|
|
|
test("ascii regex with escapes", () => {
|
|
expect(/^[-#!$@£%^&*()_+|~=`{}\[\]:";'<>?,.\/ ]$/).toBeInstanceOf(RegExp);
|
|
});
|
|
|
|
describe("// @bun", () => {
|
|
beforeEach(() => {
|
|
delete require.cache[require.resolve("./async-transpiler-entry")];
|
|
delete require.cache[require.resolve("./async-transpiler-imported")];
|
|
});
|
|
|
|
test("async transpiler", async () => {
|
|
const { default: value, hbs } = await import("./async-transpiler-entry");
|
|
expect(value).toBe(42);
|
|
expect(hbs).toBeString();
|
|
});
|
|
|
|
test("require()", async () => {
|
|
const { default: value, hbs } = require("./async-transpiler-entry");
|
|
expect(value).toBe(42);
|
|
expect(hbs).toBeString();
|
|
});
|
|
|
|
test("synchronous", async () => {
|
|
const { stdout, exitCode } = Bun.spawnSync({
|
|
cmd: [bunExe(), require.resolve("./async-transpiler-imported")],
|
|
cwd: import.meta.dir,
|
|
env: bunEnv,
|
|
stderr: "inherit",
|
|
stdout: "pipe",
|
|
});
|
|
expect(stdout.toString()).toBe("Hello world!\n");
|
|
expect(exitCode).toBe(0);
|
|
});
|
|
});
|
|
|
|
describe("json imports", () => {
|
|
test("require(*.json)", async () => {
|
|
const {
|
|
name,
|
|
description,
|
|
players,
|
|
version,
|
|
creator,
|
|
default: defaultExport,
|
|
...other
|
|
} = require("./runtime-transpiler-json-fixture.json");
|
|
const obj = {
|
|
"name": "Spiral 4v4 NS",
|
|
"description": "4v4 unshared map. 4 spawns in a spiral. Preferred to play with 4v4 NS.",
|
|
"version": "1.0",
|
|
"creator": "Grand Homie",
|
|
"players": [8, 8],
|
|
default: { a: 1 },
|
|
};
|
|
expect({
|
|
name,
|
|
description,
|
|
players,
|
|
version,
|
|
creator,
|
|
default: { a: 1 },
|
|
}).toEqual(obj);
|
|
expect(other).toEqual({});
|
|
|
|
// This tests that importing and requiring when already in the cache keeps the state the same
|
|
{
|
|
const {
|
|
name,
|
|
description,
|
|
players,
|
|
version,
|
|
creator,
|
|
default: defaultExport,
|
|
// @ts-ignore
|
|
} = await import("./runtime-transpiler-json-fixture.json");
|
|
const obj = {
|
|
"name": "Spiral 4v4 NS",
|
|
"description": "4v4 unshared map. 4 spawns in a spiral. Preferred to play with 4v4 NS.",
|
|
"version": "1.0",
|
|
"creator": "Grand Homie",
|
|
"players": [8, 8],
|
|
default: { a: 1 },
|
|
};
|
|
expect({
|
|
name,
|
|
description,
|
|
players,
|
|
version,
|
|
creator,
|
|
default: { a: 1 },
|
|
}).toEqual(obj);
|
|
// They should be strictly equal
|
|
expect(defaultExport.players).toBe(players);
|
|
expect(defaultExport).toEqual(obj);
|
|
}
|
|
|
|
delete require.cache[require.resolve("./runtime-transpiler-json-fixture.json")];
|
|
});
|
|
|
|
test("import(*.json)", async () => {
|
|
const {
|
|
name,
|
|
description,
|
|
players,
|
|
version,
|
|
creator,
|
|
default: defaultExport,
|
|
// @ts-ignore
|
|
} = await import("./runtime-transpiler-json-fixture.json");
|
|
delete require.cache[require.resolve("./runtime-transpiler-json-fixture.json")];
|
|
const obj = {
|
|
"name": "Spiral 4v4 NS",
|
|
"description": "4v4 unshared map. 4 spawns in a spiral. Preferred to play with 4v4 NS.",
|
|
"version": "1.0",
|
|
"creator": "Grand Homie",
|
|
"players": [8, 8],
|
|
default: { a: 1 },
|
|
};
|
|
expect({
|
|
name,
|
|
description,
|
|
players,
|
|
version,
|
|
creator,
|
|
default: { a: 1 },
|
|
}).toEqual(obj);
|
|
// They should be strictly equal
|
|
expect(defaultExport.players).toBe(players);
|
|
expect(defaultExport).toEqual(obj);
|
|
});
|
|
|
|
test("should support comments in tsconfig.json", async () => {
|
|
// @ts-ignore
|
|
const { buildOptions, default: defaultExport } = await import("./tsconfig.with-commas.json");
|
|
delete require.cache[require.resolve("./tsconfig.with-commas.json")];
|
|
const obj = {
|
|
"buildOptions": {
|
|
"outDir": "dist",
|
|
"baseUrl": ".",
|
|
"paths": {
|
|
"src/*": ["src/*"],
|
|
},
|
|
},
|
|
};
|
|
expect({
|
|
buildOptions,
|
|
}).toEqual(obj);
|
|
// They should be strictly equal
|
|
expect(defaultExport.buildOptions).toBe(buildOptions);
|
|
expect(defaultExport).toEqual(obj);
|
|
});
|
|
|
|
test("should handle non-boecjts in tsconfig.json", async () => {
|
|
// @ts-ignore
|
|
const { default: num } = await import("./tsconfig.is-just-a-number.json");
|
|
delete require.cache[require.resolve("./tsconfig.is-just-a-number.json")];
|
|
expect(num).toBe(1);
|
|
});
|
|
|
|
test("should handle duplicate keys", async () => {
|
|
// @ts-ignore
|
|
expect((await import("./runtime-transpiler-fixture-duplicate-keys.json")).a).toBe("4");
|
|
});
|
|
});
|
|
|
|
describe("with statement", () => {
|
|
test("works", () => {
|
|
const { exitCode } = Bun.spawnSync({
|
|
cmd: [bunExe(), require.resolve("./with-statement-works.js")],
|
|
cwd: import.meta.dir,
|
|
env: bunEnv,
|
|
stderr: "inherit",
|
|
stdout: "inherit",
|
|
stdin: "inherit",
|
|
});
|
|
|
|
expect(exitCode).toBe(0);
|
|
});
|
|
});
|
|
|
|
test("math.pow", () => {
|
|
function foo1(foo) {
|
|
return 10 ** (foo / 20);
|
|
}
|
|
|
|
function foo2(foo) {
|
|
return foo ** -0.5;
|
|
}
|
|
|
|
expect(foo1(-1) + "").toEqual("0.8912509381337456");
|
|
expect(10 ** (-1 / 20) + "").toEqual("0.8912509381337456");
|
|
expect(foo2(20.4) + "").toEqual("0.22140372138502384");
|
|
expect(20.4 ** -0.5 + "").toEqual("0.22140372138502384");
|
|
});
|