Skip to content

Commit 16b6aa3

Browse files
test: make published skill checks self-contained
1 parent 3dc1856 commit 16b6aa3

3 files changed

Lines changed: 48 additions & 34 deletions

File tree

skills/hyperframes-animation/scripts/package-loader.test.mjs

Lines changed: 23 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
import { test } from "node:test";
22
import assert from "node:assert/strict";
33
import { spawnSync } from "node:child_process";
4-
import { copyFileSync, mkdtempSync, rmSync, writeFileSync } from "node:fs";
4+
import { copyFileSync, mkdirSync, mkdtempSync, rmSync, writeFileSync } from "node:fs";
55
import { dirname, join } from "node:path";
66
import { tmpdir } from "node:os";
77
import { fileURLToPath } from "node:url";
@@ -22,16 +22,30 @@ test("hyperframesPackageSpec: env override wins", async () => {
2222
}
2323
});
2424

25-
// (b) resolvable version (in-repo) pins the bundled hyperframes/@hyperframes/cli version.
26-
test("hyperframesPackageSpec: resolvable in-repo version pins it", async () => {
27-
const prev = process.env[ENV];
28-
delete process.env[ENV];
25+
// (b) a resolvable ancestor package version pins the bundled package version.
26+
// Published skills do not include the HyperFrames monorepo, so build the
27+
// ancestor relationship explicitly instead of depending on the install path.
28+
test("hyperframesPackageSpec: resolvable ancestor version pins it", () => {
29+
const dir = mkdtempSync(join(tmpdir(), "hf-pkgloader-version-"));
2930
try {
30-
const { hyperframesPackageSpec } = await import("./package-loader.mjs");
31-
const spec = hyperframesPackageSpec("@hyperframes/producer");
32-
assert.match(spec, /^@hyperframes\/producer@\d+\.\d+\.\d+/);
31+
const scriptsDir = join(dir, "skills", "fixture", "scripts");
32+
writeFileSync(join(dir, "package.json"), '{"name":"hyperframes","version":"1.2.3"}\n');
33+
mkdirSync(scriptsDir, { recursive: true });
34+
copyFileSync(join(HERE, "package-loader.mjs"), join(scriptsDir, "package-loader.mjs"));
35+
const probe = join(scriptsDir, "probe.mjs");
36+
writeFileSync(
37+
probe,
38+
[
39+
'import { hyperframesPackageSpec } from "./package-loader.mjs";',
40+
'process.stdout.write(hyperframesPackageSpec("@hyperframes/producer"));',
41+
"",
42+
].join("\n"),
43+
);
44+
const probeResult = spawnSync(process.execPath, [probe], { cwd: scriptsDir, encoding: "utf8" });
45+
assert.equal(probeResult.status, 0, probeResult.stderr);
46+
assert.equal(probeResult.stdout.trim(), "@hyperframes/producer@1.2.3");
3347
} finally {
34-
if (prev !== undefined) process.env[ENV] = prev;
48+
rmSync(dir, { recursive: true, force: true });
3549
}
3650
});
3751

skills/hyperframes-creative/scripts/package-loader.test.mjs

Lines changed: 23 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
import { test } from "node:test";
22
import assert from "node:assert/strict";
33
import { spawnSync } from "node:child_process";
4-
import { copyFileSync, mkdtempSync, rmSync, writeFileSync } from "node:fs";
4+
import { copyFileSync, mkdirSync, mkdtempSync, rmSync, writeFileSync } from "node:fs";
55
import { dirname, join } from "node:path";
66
import { tmpdir } from "node:os";
77
import { fileURLToPath } from "node:url";
@@ -22,16 +22,30 @@ test("hyperframesPackageSpec: env override wins", async () => {
2222
}
2323
});
2424

25-
// (b) resolvable version (in-repo) pins the bundled hyperframes/@hyperframes/cli version.
26-
test("hyperframesPackageSpec: resolvable in-repo version pins it", async () => {
27-
const prev = process.env[ENV];
28-
delete process.env[ENV];
25+
// (b) a resolvable ancestor package version pins the bundled package version.
26+
// Published skills do not include the HyperFrames monorepo, so build the
27+
// ancestor relationship explicitly instead of depending on the install path.
28+
test("hyperframesPackageSpec: resolvable ancestor version pins it", () => {
29+
const dir = mkdtempSync(join(tmpdir(), "hf-pkgloader-version-"));
2930
try {
30-
const { hyperframesPackageSpec } = await import("./package-loader.mjs");
31-
const spec = hyperframesPackageSpec("@hyperframes/producer");
32-
assert.match(spec, /^@hyperframes\/producer@\d+\.\d+\.\d+/);
31+
const scriptsDir = join(dir, "skills", "fixture", "scripts");
32+
writeFileSync(join(dir, "package.json"), '{"name":"hyperframes","version":"1.2.3"}\n');
33+
mkdirSync(scriptsDir, { recursive: true });
34+
copyFileSync(join(HERE, "package-loader.mjs"), join(scriptsDir, "package-loader.mjs"));
35+
const probe = join(scriptsDir, "probe.mjs");
36+
writeFileSync(
37+
probe,
38+
[
39+
'import { hyperframesPackageSpec } from "./package-loader.mjs";',
40+
'process.stdout.write(hyperframesPackageSpec("@hyperframes/producer"));',
41+
"",
42+
].join("\n"),
43+
);
44+
const probeResult = spawnSync(process.execPath, [probe], { cwd: scriptsDir, encoding: "utf8" });
45+
assert.equal(probeResult.status, 0, probeResult.stderr);
46+
assert.equal(probeResult.stdout.trim(), "@hyperframes/producer@1.2.3");
3347
} finally {
34-
if (prev !== undefined) process.env[ENV] = prev;
48+
rmSync(dir, { recursive: true, force: true });
3549
}
3650
});
3751

skills/media-use/scripts/lib/lut-preset-provider.test.mjs

Lines changed: 2 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
import { strict as assert } from "node:assert";
2-
import { mkdtempSync, rmSync, existsSync, readFileSync, readdirSync } from "node:fs";
2+
import { mkdtempSync, rmSync, existsSync, readdirSync } from "node:fs";
33
import { join } from "node:path";
44
import { tmpdir } from "node:os";
55
import { test } from "node:test";
@@ -13,15 +13,6 @@ import {
1313
import { buildCube } from "./cube-build.mjs";
1414
import { validateCube, validateCubeFile } from "./cube-validate.mjs";
1515

16-
const REPO_ROOT = join(import.meta.dirname, "..", "..", "..", "..");
17-
18-
function corePresetIdsFromSource() {
19-
const src = readFileSync(join(REPO_ROOT, "packages/core/src/colorGrading.ts"), "utf8");
20-
const match = src.match(/export type HfColorGradingPresetId =([\s\S]*?);/);
21-
assert.ok(match, "core preset union should be readable");
22-
return [...match[1].matchAll(/"([^"]+)"/g)].map((m) => m[1]);
23-
}
24-
2516
test("warm daylight and warm natural light resolve to the core warm-daylight preset", () => {
2617
assert.deepEqual(matchColorLook("warm daylight"), {
2718
kind: "preset",
@@ -65,12 +56,7 @@ test("library look freezes a validated cube from params offline (--local-only)",
6556
}
6657
});
6758

68-
test("every resolver preset exists in packages/core/src/colorGrading.ts", () => {
69-
const corePresetIds = corePresetIdsFromSource();
70-
assert.deepEqual(
71-
RESOLVABLE_PRESET_IDS.filter((id) => !corePresetIds.includes(id)),
72-
[],
73-
);
59+
test("every resolver preset round-trips through the published matcher", () => {
7460
for (const id of RESOLVABLE_PRESET_IDS) {
7561
const match = matchColorLook(id);
7662
assert.equal(match.kind, "preset");

0 commit comments

Comments
 (0)