mirror of
https://github.com/pengzhanbo/vuepress-theme-plume.git
synced 2026-04-23 10:58:13 +08:00
246 lines
6.3 KiB
TypeScript
246 lines
6.3 KiB
TypeScript
import MarkdownIt from 'markdown-it'
|
|
import { describe, expect, it } from 'vitest'
|
|
import { abbrPlugin } from '../src/node/inline/abbr.js'
|
|
|
|
function createMarkdown(globalAbbreviations?: Record<string, string>) {
|
|
return MarkdownIt().use(abbrPlugin, globalAbbreviations)
|
|
}
|
|
|
|
describe('abbrPlugin', () => {
|
|
it('should parse abbreviation definition', () => {
|
|
const md = createMarkdown()
|
|
const code = `*[HTML]: HyperText Markup Language
|
|
|
|
This is HTML content.`
|
|
|
|
const result = md.render(code)
|
|
expect(result).toContain('Abbreviation')
|
|
expect(result).toContain('HTML')
|
|
expect(result).toContain('HyperText Markup Language')
|
|
})
|
|
|
|
it('should parse multiple abbreviation definitions', () => {
|
|
const md = createMarkdown()
|
|
const code = `*[HTML]: HyperText Markup Language
|
|
*[CSS]: Cascading Style Sheets
|
|
|
|
HTML and CSS are web technologies.`
|
|
|
|
const result = md.render(code)
|
|
expect(result).toContain('HTML')
|
|
expect(result).toContain('CSS')
|
|
})
|
|
|
|
it('should work with global abbreviations', () => {
|
|
const md = createMarkdown({ API: 'Application Programming Interface' })
|
|
const code = `This is an API documentation.`
|
|
|
|
const result = md.render(code)
|
|
expect(result).toContain('Abbreviation')
|
|
expect(result).toContain('API')
|
|
expect(result).toContain('Application Programming Interface')
|
|
})
|
|
|
|
it('should merge local and global abbreviations', () => {
|
|
const md = createMarkdown({ API: 'Application Programming Interface' })
|
|
const code = `*[SDK]: Software Development Kit
|
|
|
|
API and SDK are common terms.`
|
|
|
|
const result = md.render(code)
|
|
expect(result).toContain('API')
|
|
expect(result).toContain('SDK')
|
|
})
|
|
|
|
it('should handle abbreviation in middle of text', () => {
|
|
const md = createMarkdown()
|
|
const code = `*[TEST]: Test Abbreviation
|
|
|
|
This TEST is important.`
|
|
|
|
const result = md.render(code)
|
|
expect(result).toContain('TEST')
|
|
expect(result).toContain('Test Abbreviation')
|
|
})
|
|
|
|
it('should handle abbreviation at start of text', () => {
|
|
const md = createMarkdown()
|
|
const code = `*[HTML]: HyperText Markup Language
|
|
|
|
HTML is a markup language.`
|
|
|
|
const result = md.render(code)
|
|
expect(result).toContain('Abbreviation')
|
|
})
|
|
|
|
it('should handle abbreviation at end of text', () => {
|
|
const md = createMarkdown()
|
|
const code = `*[HTML]: HyperText Markup Language
|
|
|
|
Learn HTML`
|
|
|
|
const result = md.render(code)
|
|
expect(result).toContain('Abbreviation')
|
|
})
|
|
|
|
it('should handle multiple occurrences of same abbreviation', () => {
|
|
const md = createMarkdown()
|
|
const code = `*[HTML]: HyperText Markup Language
|
|
|
|
HTML, HTML, and more HTML.`
|
|
|
|
const result = md.render(code)
|
|
expect(result).toContain('HTML')
|
|
expect(result).toContain('HyperText Markup Language')
|
|
})
|
|
|
|
it('should not match partial words', () => {
|
|
const md = createMarkdown()
|
|
const code = `*[HTML]: HyperText Markup Language
|
|
|
|
This is HTML but not XHTML.`
|
|
|
|
const result = md.render(code)
|
|
expect(result).toContain('HTML')
|
|
})
|
|
|
|
it('should handle empty abbreviation definition gracefully', () => {
|
|
const md = createMarkdown()
|
|
const code = `*[]: Empty definition
|
|
|
|
Some text.`
|
|
|
|
const result = md.render(code)
|
|
expect(result).toBeDefined()
|
|
})
|
|
|
|
it('should handle case-sensitive abbreviations', () => {
|
|
const md = createMarkdown()
|
|
const code = `*[HTML]: HyperText Markup Language
|
|
|
|
html is different from HTML.`
|
|
|
|
const result = md.render(code)
|
|
expect(result).toContain('HTML')
|
|
})
|
|
|
|
it('should handle abbreviation with markdown in title', () => {
|
|
const md = createMarkdown()
|
|
const code = `*[MD]: **Markdown** text
|
|
|
|
MD is great.`
|
|
|
|
const result = md.render(code)
|
|
expect(result).toContain('MD')
|
|
})
|
|
|
|
it('should handle empty global abbreviations', () => {
|
|
const md = createMarkdown({})
|
|
const code = `*[TEST]: Test
|
|
|
|
TEST is defined.`
|
|
|
|
const result = md.render(code)
|
|
expect(result).toContain('TEST')
|
|
})
|
|
|
|
it('should handle escaped characters in label', () => {
|
|
const md = createMarkdown()
|
|
const code = `*[HTML\\[1\\]]: HTML Version 1
|
|
|
|
HTML[1] is old.`
|
|
|
|
const result = md.render(code)
|
|
expect(result).toContain('HTML[1]')
|
|
})
|
|
|
|
it('should handle abbreviation with special characters in title', () => {
|
|
const md = createMarkdown()
|
|
const code = `*[XML]: eXtensible Markup Language
|
|
|
|
This is XML.`
|
|
|
|
const result = md.render(code)
|
|
expect(result).toContain('XML')
|
|
})
|
|
|
|
it('should handle definition with empty title', () => {
|
|
const md = createMarkdown()
|
|
const code = `*[TEST]:
|
|
|
|
Some text.`
|
|
|
|
const result = md.render(code)
|
|
expect(result).not.toContain('Abbreviation')
|
|
})
|
|
|
|
it('should handle definition with only label', () => {
|
|
const md = createMarkdown()
|
|
const code = `*[TEST]:
|
|
|
|
Some text.`
|
|
|
|
const result = md.render(code)
|
|
expect(result).not.toContain('Abbreviation')
|
|
})
|
|
|
|
it('should handle unclosed bracket in definition', () => {
|
|
const md = createMarkdown()
|
|
const code = `*[TEST: Test
|
|
|
|
Some text.`
|
|
|
|
const result = md.render(code)
|
|
expect(result).toBeDefined()
|
|
})
|
|
|
|
it('should handle nested bracket in label', () => {
|
|
const md = createMarkdown()
|
|
const code = `*[TEST[INNER]]: Test Abbreviation
|
|
|
|
Some text.`
|
|
|
|
const result = md.render(code)
|
|
expect(result).toBeDefined()
|
|
})
|
|
|
|
it('should handle global abbreviations with colon prefix', () => {
|
|
const md = createMarkdown({ ':API': 'Application Programming Interface' })
|
|
const code = `This is an API call.`
|
|
|
|
const result = md.render(code)
|
|
expect(result).toContain('API')
|
|
})
|
|
|
|
it('should handle abbreviation adjacent to punctuation', () => {
|
|
const md = createMarkdown()
|
|
const code = `*[HTML]: HyperText Markup Language
|
|
|
|
Use HTML, CSS, and JS.`
|
|
|
|
const result = md.render(code)
|
|
expect(result).toContain('Abbreviation')
|
|
expect(result).toContain('HTML')
|
|
})
|
|
|
|
it('should handle abbreviation at sentence end', () => {
|
|
const md = createMarkdown()
|
|
const code = `*[HTML]: HyperText Markup Language
|
|
|
|
This is HTML.`
|
|
|
|
const result = md.render(code)
|
|
expect(result).toContain('Abbreviation')
|
|
})
|
|
|
|
it('should handle abbreviation in parentheses', () => {
|
|
const md = createMarkdown()
|
|
const code = `*[HTML]: HyperText Markup Language
|
|
|
|
See (HTML) for details.`
|
|
|
|
const result = md.render(code)
|
|
expect(result).toContain('Abbreviation')
|
|
})
|
|
})
|