Files
regex-tools/scripts/pcre2-engine-pack.test.ts

90 lines
2.6 KiB
TypeScript

// @vitest-environment node
import { mkdtemp, rm } from "node:fs/promises";
import { tmpdir } from "node:os";
import path from "node:path";
import { afterEach, describe, expect, it } from "vitest";
import {
PCRE2_LOCK,
parsePcre2BuildArguments,
verifyPcre2Pack,
} from "./pcre2-engine-pack.mjs";
const temporaryDirectories: string[] = [];
afterEach(async () => {
await Promise.all(
temporaryDirectories
.splice(0)
.map((directory) => rm(directory, { recursive: true, force: true })),
);
});
describe("PCRE2 engine-pack gate", () => {
it("keeps the default build on the checked-in production-assets path", () => {
expect(parsePcre2BuildArguments([])).toEqual({ mode: "ecmascript" });
});
it("requires explicit offline source and compiler paths", () => {
expect(() => parsePcre2BuildArguments(["--pcre2"])).toThrow(
"requires both --source-dir and --emcc",
);
expect(() =>
parsePcre2BuildArguments([
"--source-dir",
"/source",
"--emcc",
"/compiler",
]),
).toThrow("explicit --pcre2 gate");
});
it("parses the exact staged-build contract", () => {
expect(
parsePcre2BuildArguments([
"--pcre2",
"--source-dir",
"/source",
"--emcc",
"/compiler",
"--force",
]),
).toEqual({
mode: "pcre2",
sourceDirectory: "/source",
emccFile: "/compiler",
force: true,
});
});
it.each([
["--unknown"],
["--pcre2", "--pcre2"],
["--pcre2", "--source-dir"],
["--pcre2", "--force", "--force"],
])("rejects ambiguous arguments %j", (...arguments_) => {
expect(() => parsePcre2BuildArguments(arguments_)).toThrow();
});
it("pins source, signed-tag object and compiler identities", () => {
expect(PCRE2_LOCK.source.tag).toBe("pcre2-10.47");
expect(PCRE2_LOCK.source.tagObject).toHaveLength(40);
expect(PCRE2_LOCK.source.commit).toHaveLength(40);
expect(PCRE2_LOCK.source.tree).toHaveLength(40);
expect(PCRE2_LOCK.emscripten.version).toBe("6.0.4");
expect(PCRE2_LOCK.emscripten.emccSha256).toHaveLength(64);
expect(PCRE2_LOCK.bridgeAbi).toBe(3);
expect(PCRE2_LOCK.maximumSubjectBytes).toBe(16 * 1024 * 1024);
expect(PCRE2_LOCK.maximumMatches).toBe(10_000);
});
it("rejects an incomplete staged pack before attempting to load it", async () => {
const directory = await mkdtemp(path.join(tmpdir(), "regex-pcre2-test-"));
temporaryDirectories.push(directory);
await expect(verifyPcre2Pack(directory, process.cwd())).rejects.toThrow(
"must contain only",
);
});
});