120 lines
3.2 KiB
TypeScript
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')
|
||
|
})
|
||
|
})
|