import { describe, expect, it } from "vitest"; import { safeHref } from "#lib/safeHref.ts"; describe("safeHref", () => { it("returns links unchanged", () => { for (const value of [ "https://tangled.org/about", "http://example.com", "example.com/blog", "mailto:me@example.com", "ssh://git@github.com/owner/repo.git", "git@github.com:owner/repo.git", "http://[" ]) { expect(safeHref(value), value).toBe(value); } }); it("drops links the browser would run", () => { for (const value of [ "javascript:alert(document.domain)", "JavaScript:alert(1)", " javascript:alert(1)", "java\tscript:alert(1)", "java\nscript:alert(1)", "\u0001javascript:alert(1)", "vbscript:msgbox(1)", "data:text/html," ]) { expect(safeHref(value), JSON.stringify(value)).toBeUndefined(); } }); it("drops empty values", () => { expect(safeHref(undefined)).toBeUndefined(); expect(safeHref("")).toBeUndefined(); }); });