Files
bun.sh/test/transpiler/runtime-transpiler.test.ts
2024-02-28 16:55:58 -08:00

188 lines
5.1 KiB
TypeScript

import { beforeEach, describe, expect, test } from "bun:test";
import { bunEnv, bunExe } from "harness";
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);
});
});