opencode-config/.opencode/telegram/tests/markdown.test.ts

41 lines
No EOL
1.5 KiB
TypeScript

import { describe, it, expect } from "vitest"
import { escapeMarkdownV2, MARKDOWN_V2_SPECIAL_CHARS } from "../src/markdown.ts"
describe("escapeMarkdownV2", () => {
it("empty string → empty", () => {
expect(escapeMarkdownV2("")).toBe("")
})
it("string without special chars → unchanged", () => {
expect(escapeMarkdownV2("hello world 123 abc")).toBe("hello world 123 abc")
})
it("cyrillic → unchanged", () => {
expect(escapeMarkdownV2("Привет мир")).toBe("Привет мир")
})
it.each([...MARKDOWN_V2_SPECIAL_CHARS])("escapes single special char %j", (ch) => {
expect(escapeMarkdownV2(ch)).toBe("\\" + ch)
})
it("mix cyrillic + special chars: cyrillic untouched, special escaped", () => {
// comma and space are NOT in the special set — stay as-is
expect(escapeMarkdownV2("Привет, *мир*!")).toBe("Привет, \\*мир\\*\\!")
})
it("all special chars at once", () => {
const all = [...MARKDOWN_V2_SPECIAL_CHARS].join("")
const expected = [...MARKDOWN_V2_SPECIAL_CHARS].map((c) => "\\" + c).join("")
expect(escapeMarkdownV2(all)).toBe(expected)
})
it("backtick is escaped", () => {
expect(escapeMarkdownV2("`code`")).toBe("\\`code\\`")
})
it("backslash is NOT in MARKDOWN_V2_SPECIAL_CHARS and passes through", () => {
expect(MARKDOWN_V2_SPECIAL_CHARS as readonly string[]).not.toContain("\\")
// input `\*` (2 chars): backslash stays, asterisk escaped → `\\*` (3 chars)
expect(escapeMarkdownV2("\\*")).toBe("\\\\*")
})
})