Files

25 lines
1.0 KiB
TypeScript

import { expect, test } from "bun:test";
import { shouldInlineCss } from "../src/inline-css.ts";
test("production CSS inlining uses a configurable UTF-8 byte budget", () => {
expect(shouldInlineCss("x".repeat(4096), undefined)).toBe(true);
expect(shouldInlineCss("x".repeat(4097), undefined)).toBe(false);
expect(shouldInlineCss("x".repeat(5000), 6000)).toBe(true);
expect(shouldInlineCss("é".repeat(10), 10)).toBe(false);
expect(shouldInlineCss("", 0)).toBe(false);
for (const value of [-1, NaN, Infinity, 1.5]) expect(() => shouldInlineCss("", value)).toThrow();
});
test("relative asset URLs stay external so their base does not change", () => {
for (const url of ["./font.woff2", "../font.woff2", "font.woff2", "#mask"]) {
expect(shouldInlineCss(`a{background:url("${url}")}`, undefined)).toBe(false);
}
for (const url of [
"/font.woff2",
"https://cdn.example/font.woff2",
"data:image/svg+xml;base64,AAAA",
]) {
expect(shouldInlineCss(`a{background:url('${url}')}`, undefined)).toBe(true);
}
});