/**
* Offline-posture sanitizer tests — raw-HTML fetch vectors beyond
* (which the image inliner owns). No Playwright, no PDF generation.
*
* Regression for: `;
const out = sanitizeUntrustedHtml(input);
expect(out).not.toContain("@import");
expect(out).not.toContain("evil.example");
expect(out).toContain("color: red");
});
test("strips string-form @import (no url())", () => {
const out = sanitizeUntrustedHtml(``);
expect(out).not.toContain("@import");
expect(out).not.toContain("evil.example");
});
test("neutralizes remote url() inside `;
const out = sanitizeUntrustedHtml(input);
expect(out).not.toContain("evil.example");
expect(out).toContain("url(#)");
expect(out).toContain("color: blue");
});
test("neutralizes remote url() in inline style attributes", () => {
const input = `
`;
const out = sanitizeUntrustedHtml(input);
expect(out).not.toContain("srcset");
expect(out).not.toContain("evil.example");
expect(out).toContain(`src="local.png"`);
});
test("strips unquoted remote srcset", () => {
const out = sanitizeUntrustedHtml(`
`);
expect(out).not.toContain("evil.example");
});
test("keeps local-only srcset (no network vector)", () => {
const input = `
`;
expect(sanitizeUntrustedHtml(input)).toContain(`srcset="a.png 1x, a@2x.png 2x"`);
});
test("neutralizes remote