Files
2026-08-07 20:59:50 -04:00

35 lines
1.6 KiB
TypeScript

import { expect, test } from "bun:test"
import { SyntaxStyle, TextRenderable, type MarkdownOptions, type RenderNodeContext } from "@opentui/core"
import { createTestRenderer } from "@opentui/core/testing"
import { combineMarkdownRenderers } from "../src/plugin/context"
const code = (language: string) => ({ type: "code" as const, lang: language, text: "content", raw: "" })
const context: RenderNodeContext = {
syntaxStyle: SyntaxStyle.fromStyles({ default: { fg: "#ffffff" } }),
conceal: false,
concealCode: false,
defaultRender: () => null,
}
test("dispatches Markdown code blocks by normalized language", async () => {
const { renderer } = await createTestRenderer({ width: 20, height: 4 })
const expected = new TextRenderable(renderer, { content: "expected" })
const render = (() => expected) satisfies NonNullable<MarkdownOptions["renderNode"]>
const combined = combineMarkdownRenderers([{ mermaid: render }])!
expect(combined(code("mermaid title=example"), context)).toBe(expected)
expect(combined(code("typescript"), context)).toBeUndefined()
renderer.destroy()
})
test("later Markdown renderer registrations take precedence", async () => {
const { renderer } = await createTestRenderer({ width: 20, height: 4 })
const first = new TextRenderable(renderer, { content: "first" })
const second = new TextRenderable(renderer, { content: "second" })
const combined = combineMarkdownRenderers([{ mermaid: () => first }, { mermaid: () => second }])!
expect(combined(code("mermaid"), context)).toBe(second)
expect(combineMarkdownRenderers([])).toBeUndefined()
renderer.destroy()
})