sc-theme-builder/test/builtins.test.js
2026-07-01 20:07:28 -05:00

46 lines
1.6 KiB
JavaScript

const { test } = require("node:test");
const assert = require("node:assert");
const builtins = require("../lib/builtins");
const { compileTheme } = require("../lib/compile");
const { normalizeTokens } = require("../lib/themeSchema");
test("listBuiltins returns frozen starters with namespaced ids", () => {
const list = builtins.listBuiltins();
assert.ok(list.length >= 3);
for (const t of list) {
assert.ok(builtins.isBuiltinId(t.id), `${t.id} is namespaced`);
assert.ok(Object.isFrozen(t));
assert.equal(t.engine, "bootstrap5");
}
});
test("getBuiltin / get resolve by id, default is a real builtin", () => {
assert.equal(builtins.getBuiltin("builtin:flatly").name, "Flatly");
assert.equal(builtins.get("builtin:darkly").name, "Darkly");
assert.equal(builtins.getBuiltin("builtin:nope"), null);
assert.ok(builtins.getBuiltin(builtins.defaultId()));
});
test("isBuiltinId distinguishes builtins from uuid rows", () => {
assert.equal(builtins.isBuiltinId("builtin:flatly"), true);
assert.equal(builtins.isBuiltinId("ab12cd34-..."), false);
assert.equal(builtins.isBuiltinId(undefined), false);
});
test("fallbackCss is valid, brace-free CSS", () => {
const css = builtins.fallbackCss();
assert.equal(typeof css, "string");
assert.doesNotMatch(css, /[{}]/);
});
test("every builtin compiles to balanced CSS", () => {
for (const t of builtins.listBuiltins()) {
const out = compileTheme(normalizeTokens(t.tokens));
assert.ok(!out.warnings.some((w) => /unbalanced|invalid/.test(w)), `${t.id} compiles cleanly`);
}
});