feat: publish Regex Tools 0.2.0
This commit is contained in:
89
scripts/pcre2-engine-pack.test.ts
Normal file
89
scripts/pcre2-engine-pack.test.ts
Normal file
@@ -0,0 +1,89 @@
|
||||
// @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",
|
||||
);
|
||||
});
|
||||
});
|
||||
Reference in New Issue
Block a user