46 lines
1.6 KiB
JavaScript
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`);
|
|
}
|
|
});
|