// Golden-vector tests for the palettes. A Palette is ELEVEN keys — past the
// eight-pair limit where #js / js-obj stops preserving literal key order — so
// the KEY ORDER is asserted too, not just the values.
import test from "node:test";
import assert from "node:assert/strict";
import { readFileSync } from "node:fs";
import * as lib from "../test-dist/testlib.js";
const v = JSON.parse(readFileSync(new URL("./vectors/themes.json", import.meta.url), "utf8"));
test("Palette key order survived the eight-pair threshold", () => {
const p = lib.paletteForLevel(1, false);
assert.equal(v.paletteKeys.length, 11, "the fixture should record eleven keys");
assert.deepEqual(Object.keys(p), v.paletteKeys);
assert.deepEqual(Object.keys(p.blocks), v.blockKeys);
});
test("paletteForLevel: every level x light/dark matches the TS byte for byte", () => {
for (const { level, dark, p } of v.paletteForLevel) {
const got = lib.paletteForLevel(level, dark);
assert.deepEqual({ ...got, blocks: { ...got.blocks } }, p, `level ${level} dark=${dark}`);
}
});
test("the theme cycle wraps every ten levels (5 themes x 2 levels)", () => {
for (let level = 1; level <= 20; level++) {
assert.equal(lib.paletteForLevel(level, false).name, lib.paletteForLevel(level + 10, false).name,
`level ${level} vs ${level + 10}`);
}
});
test("shade() reproduces every recorded value", () => {
for (const { hex, amt, out } of v.shade) {
assert.equal(lib.shade(hex, amt), out, `shade(${hex}, ${amt})`);
}
});