Files
wehub-resource-sync 070959e133
landing-page-staging / Deploy landing page to staging (push) Has been skipped
landing-page-ci / Validate landing page (push) Failing after 4s
visual-baseline / Capture visual baselines (push) Has been cancelled
bake-plugin-previews / Bake plugin previews (push) Has been cancelled
chore: import upstream snapshot with attribution
2026-07-13 12:00:47 +08:00

61 lines
2.1 KiB
TypeScript

import assert from "node:assert/strict";
import test from "node:test";
import { collectCssHardcodedColorMatches, collectCssNamedColorMatches } from "./style-policy.ts";
test("collectCssNamedColorMatches finds named colors inside CSS shorthands and functions", () => {
const source = [
".example { border: 1px solid red; }",
".gradient { background: linear-gradient(red, blue); }",
].join("\n");
assert.deepEqual(
collectCssNamedColorMatches(source).map((match) => match.value.toLowerCase()),
["red", "red", "blue"],
);
});
test("collectCssNamedColorMatches covers mixed-case and full CSS named colors", () => {
const source = ".example { border-color: RebeccaPurple; outline-color: tomato; }";
assert.deepEqual(
collectCssNamedColorMatches(source).map((match) => match.value),
["RebeccaPurple", "tomato"],
);
});
test("collectCssNamedColorMatches keeps CSS-wide special keywords exempt", () => {
const source = ".example { color: transparent; fill: currentColor; border-color: inherit; }";
assert.deepEqual(collectCssNamedColorMatches(source), []);
});
test("collectCssNamedColorMatches skips strings, comments, urls, and var references", () => {
const source = [
"/* .ignored { color: red; } */",
'.content { content: "green"; }',
'.content-declaration { content: "{ color: red; }"; }',
".comment { color: /* red */ var(--blue); }",
".asset { background: url('/icons/blue.svg'); }",
].join("\n");
assert.deepEqual(collectCssNamedColorMatches(source), []);
});
test("collectCssHardcodedColorMatches scans CSS var fallbacks", () => {
const source = ".example { color: var(--missing-red, red); background: var(--x, rgb(1 2 3)); }";
assert.deepEqual(
collectCssHardcodedColorMatches(source).map((match) => match.value),
["red", "rgb(1 2 3)"],
);
});
test("collectCssHardcodedColorMatches finds CSS colors in declaration values", () => {
const source = ".example { color: #ff0000; background: rgb(255 0 0); border-color: hsl(0 100% 50%); }";
assert.deepEqual(
collectCssHardcodedColorMatches(source).map((match) => match.value),
["#ff0000", "rgb(255 0 0)", "hsl(0 100% 50%)"],
);
});