41 lines
No EOL
1.5 KiB
TypeScript
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("\\\\*")
|
|
})
|
|
}) |