/** * sanitizeSkillIcon unit tests: security checks before inline rendering of a * custom Skill icon (raw icon.svg content) — anything containing root / missing content is also * rejected; a clean line-art SVG passes through as-is (after trim). */ import { describe, expect, it } from "vitest"; import { sanitizeSkillIcon } from "../src/features/skills/skill-icon"; const CLEAN = '' + ''; describe("sanitizeSkillIcon", () => { it("干净的 SVG 放行(trim 后原样返回,供内联渲染继承 currentColor)", () => { expect(sanitizeSkillIcon(CLEAN)).toBe(CLEAN); expect(sanitizeSkillIcon(`\n ${CLEAN}\n`)).toBe(CLEAN); }); it("缺失 / 空串 / 空白回退 null", () => { expect(sanitizeSkillIcon(undefined)).toBeNull(); expect(sanitizeSkillIcon("")).toBeNull(); expect(sanitizeSkillIcon(" ")).toBeNull(); }); it("非 根拒绝(含伪装成文本的任意 HTML)", () => { expect(sanitizeSkillIcon("
not svg
")).toBeNull(); expect(sanitizeSkillIcon("plain text")).toBeNull(); expect(sanitizeSkillIcon(`${CLEAN}`)).toBeNull(); // is not an root (the tag name must end with whitespace or >). expect(sanitizeSkillIcon('')).toBeNull(); }); it("含