88 lines
2.7 KiB
TypeScript
88 lines
2.7 KiB
TypeScript
import { describe, expect, it } from 'vitest'
|
|
|
|
import { preprocessMarkdown } from './markdown-text'
|
|
|
|
describe('preprocessMarkdown', () => {
|
|
it('strips inline accidental triple-backtick starts', () => {
|
|
const input = [
|
|
'Working as intended.',
|
|
"Here's your scene: ``` http://localhost:8812/",
|
|
'',
|
|
'- **Multicolored cube**',
|
|
'- **Rotates**'
|
|
].join('\n')
|
|
|
|
const output = preprocessMarkdown(input)
|
|
|
|
expect(output).not.toContain('```')
|
|
expect(output).toContain("Here's your scene:")
|
|
expect(output).not.toContain('http://localhost:8812/')
|
|
expect(output).toContain('- **Multicolored cube**')
|
|
})
|
|
|
|
it('demotes invalid fenced prose blocks with closers', () => {
|
|
const fence = '```'
|
|
|
|
const input = [
|
|
`${fence} http://localhost:8812/`,
|
|
'- **Scroll wheel** - zoom',
|
|
'- **Right-drag/pan** - disabled',
|
|
fence
|
|
].join('\n')
|
|
|
|
const output = preprocessMarkdown(input)
|
|
|
|
expect(output).not.toContain('```')
|
|
expect(output).not.toContain('http://localhost:8812/')
|
|
expect(output).toContain('- **Scroll wheel** - zoom')
|
|
})
|
|
|
|
it('drops fences around a preview-only URL block', () => {
|
|
const fence = '```'
|
|
const input = ['Server is back.', '', fence, 'http://localhost:8812/', fence].join('\n')
|
|
|
|
const output = preprocessMarkdown(input)
|
|
|
|
expect(output).toContain('Server is back.')
|
|
expect(output).not.toContain('```')
|
|
expect(output).not.toContain('http://localhost:8812/')
|
|
})
|
|
|
|
it('demotes prose sentence masquerading as fence info', () => {
|
|
const input = ['```Heads up - a bunny got added', '- Pure white (`#ffffff`)', '- Ambient dropped to 0.18'].join(
|
|
'\n'
|
|
)
|
|
const output = preprocessMarkdown(input)
|
|
|
|
expect(output).not.toContain('```heads')
|
|
expect(output).toContain('Heads up - a bunny got added')
|
|
expect(output).toContain('- Pure white (`#ffffff`)')
|
|
})
|
|
|
|
it('keeps valid code fences intact', () => {
|
|
const fence = '```'
|
|
const input = [`${fence}ts`, 'const value = 1;', fence].join('\n')
|
|
|
|
const output = preprocessMarkdown(input)
|
|
|
|
expect(output).toContain('```ts')
|
|
expect(output).toContain('const value = 1;')
|
|
})
|
|
|
|
it('keeps dangling real code fences during streaming', () => {
|
|
const input = ['```ts', 'const value = 1;'].join('\n')
|
|
const output = preprocessMarkdown(input)
|
|
|
|
expect(output.startsWith('```ts')).toBe(true)
|
|
expect(output).toContain('const value = 1;')
|
|
})
|
|
|
|
it('demotes dangling prose fences', () => {
|
|
const input = ['```', '- Pure white (`#ffffff`)', '- Ambient dropped to 0.18'].join('\n')
|
|
const output = preprocessMarkdown(input)
|
|
|
|
expect(output).not.toContain('```')
|
|
expect(output).toContain('- Pure white (`#ffffff`)')
|
|
})
|
|
})
|