import { describe, expect, it } from "vitest"; import { markdownToSignalText } from "./format.js"; describe("markdownToSignalText", () => { it("renders inline styles", () => { const res = markdownToSignalText("hi _there_ **boss** ~~nope~~ `code`"); expect(res.text).toBe("hi there boss nope code"); expect(res.styles).toEqual([ { start: 3, length: 5, style: "ITALIC" }, { start: 9, length: 4, style: "BOLD" }, { start: 14, length: 4, style: "STRIKETHROUGH" }, { start: 19, length: 4, style: "MONOSPACE" }, ]); }); it("renders links as label plus url when needed", () => { const res = markdownToSignalText("see [docs](https://example.com) and https://example.com"); expect(res.text).toBe("see docs (https://example.com) and https://example.com"); expect(res.styles).toEqual([]); }); it("applies spoiler styling", () => { const res = markdownToSignalText("hello ||secret|| world"); expect(res.text).toBe("hello secret world"); expect(res.styles).toEqual([{ start: 6, length: 6, style: "SPOILER" }]); }); it("renders fenced code blocks with monospaced styles", () => { const res = markdownToSignalText("before\n\n```\nconst x = 1;\n```\n\nafter"); const prefix = "before\n\n"; const code = "const x = 1;\n"; const suffix = "\nafter"; expect(res.text).toBe(`${prefix}${code}${suffix}`); expect(res.styles).toEqual([{ start: prefix.length, length: code.length, style: "MONOSPACE" }]); }); it("renders lists without extra block markup", () => { const res = markdownToSignalText("- one\n- two"); expect(res.text).toBe("• one\n• two"); expect(res.styles).toEqual([]); }); it("uses UTF-16 code units for offsets", () => { const res = markdownToSignalText("šŸ˜€ **bold**"); const prefix = "šŸ˜€ "; expect(res.text).toBe(`${prefix}bold`); expect(res.styles).toEqual([{ start: prefix.length, length: 4, style: "BOLD" }]); }); });