hololake-system-architecture/product-source/hololake-platform/src/utils/markdownFences.test.ts

47 lines
1.8 KiB
TypeScript

import { describe, expect, it } from 'vitest'
import {
advanceMarkdownFence,
isInsideMarkdownFence,
readMarkdownFence,
type MarkdownFenceScanOptions,
} from './markdownFences'
describe('markdown fence scanning', () => {
it('reads backtick and tilde fence openings with the default indentation rule', () => {
expect(readMarkdownFence('```ts')).toEqual({ character: '`', length: 3 })
expect(readMarkdownFence(' ~~~~')).toEqual({ character: '~', length: 4 })
expect(readMarkdownFence(' ```ts')).toBeNull()
expect(readMarkdownFence('not a fence')).toBeNull()
})
it('requires matching closing fence character and sufficient length', () => {
const opening = readMarkdownFence('````ts')
expect(advanceMarkdownFence('```', opening)).toBe(opening)
expect(advanceMarkdownFence('~~~~', opening)).toBe(opening)
expect(advanceMarkdownFence('````', opening)).toBeNull()
})
it('keeps strict closing fences to only the fence plus whitespace by default', () => {
const opening = readMarkdownFence('```ts')
expect(advanceMarkdownFence('```ts', opening)).toBe(opening)
expect(advanceMarkdownFence('``` ', opening)).toBeNull()
})
it('supports the existing wikilink prefix scanner shape when requested', () => {
const options: MarkdownFenceScanOptions = {
closingMustEndLine: false,
maxLeadingSpaces: null,
}
const opening = readMarkdownFence(' ```ts', options)
expect(opening).toEqual({ character: '`', length: 3 })
expect(advanceMarkdownFence(' ``` still treated as closing', opening, options)).toBeNull()
})
it('detects whether a markdown prefix is currently inside a fence', () => {
expect(isInsideMarkdownFence('before\n~~~mermaid\nA --> B')).toBe(true)
expect(isInsideMarkdownFence('before\n~~~mermaid\nA --> B\n~~~\nafter')).toBe(false)
})
})