mirror of
1
0
Fork 0
ultimate-vim/sources_non_forked/coc.nvim/src/__tests__/markdown/renderer.test.ts

120 lines
3.2 KiB
TypeScript

import { marked } from 'marked'
import Renderer from '../../markdown/renderer'
import * as styles from '../../markdown/styles'
import { parseAnsiHighlights, AnsiResult } from '../../util/ansiparse'
marked.setOptions({
renderer: new Renderer()
})
function parse(text: string): AnsiResult {
let m = marked(text)
let res = parseAnsiHighlights(m.split(/\n/)[0], true)
return res
}
describe('styles', () => {
it('should add styles', async () => {
let keys = ['gray', 'magenta', 'bold', 'underline', 'italic', 'strikethrough', 'yellow', 'green', 'blue']
for (let key of keys) {
let res = styles[key]('text')
expect(res).toContain('text')
}
})
})
describe('Renderer of marked', () => {
it('should create bold highlights', async () => {
let res = parse('**note**.')
expect(res.highlights[0]).toEqual({
span: [0, 4],
hlGroup: 'CocBold'
})
})
it('should create italic highlights', async () => {
let res = parse('_note_.')
expect(res.highlights[0]).toEqual({
span: [0, 4],
hlGroup: 'CocItalic'
})
})
it('should create underline highlights for link', async () => {
let res = parse('[baidu](https://baidu.com)')
expect(res.highlights[0]).toEqual({
span: [0, 5],
hlGroup: 'CocMarkdownLink'
})
res = parse('https://baidu.com')
expect(res.highlights[0]).toEqual({
span: [0, 17],
hlGroup: 'CocUnderline'
})
})
it('should parse link', async () => {
// let res = parse('https://doc.rust-lang.org/nightly/core/iter/traits/iterator/Iterator.t.html#map.v')
// console.log(JSON.stringify(res, null, 2))
let link = 'https://doc.rust-lang.org/nightly/core/iter/traits/iterator/Iterator.t.html#map.v'
let parsed = marked(link)
let res = parseAnsiHighlights(parsed.split(/\n/)[0], true)
expect(res.line).toEqual(link)
expect(res.highlights.length).toBeGreaterThan(0)
expect(res.highlights[0].hlGroup).toBe('CocUnderline')
})
it('should create highlight for code span', async () => {
let res = parse('`let foo = "bar"`')
expect(res.highlights[0]).toEqual({
span: [0, 15],
hlGroup: 'CocMarkdownCode'
})
})
it('should create header highlights', async () => {
let res = parse('# header')
expect(res.highlights[0]).toEqual({
span: [0, 8],
hlGroup: 'CocMarkdownHeader'
})
res = parse('## header')
expect(res.highlights[0]).toEqual({
span: [0, 9],
hlGroup: 'CocMarkdownHeader'
})
res = parse('### header')
expect(res.highlights[0]).toEqual({
span: [0, 10],
hlGroup: 'CocMarkdownHeader'
})
})
it('should indent blockquote', async () => {
let res = parse('> header')
expect(res.line).toBe(' header')
})
it('should preserve code block', async () => {
let text = '``` js\nconsole.log("foo")\n```'
let m = marked(text)
expect(m.split('\n')).toEqual([
'``` js',
'console.log("foo")',
'```',
''
])
})
it('should renderer table', async () => {
let text = `
| Syntax | Description |
| ----------- | ----------- |
| Header | Title |
| Paragraph | Text |
`
let res = marked(text)
expect(res).toContain('Syntax')
})
})