UNPKG

@wireapp/cryptobox

Version:

High-level API with persistent storage for Proteus.

75 lines (59 loc) 2.47 kB
/* eslint-env jest */ const Markdown = require('../../src/markdown/Markdown') const markdown = new Markdown({ renderer: { '_': (input) => `<i>${input}</i>`, '*': (input) => `<b>${input}</b>`, '`': (input) => `<code>${input}</code>` } }) it('should parse bold', () => { expect(markdown.parse('*one*')).toBe('<b>one</b>') }) it('should parse italic', () => { expect(markdown.parse('_two_')).toBe('<i>two</i>') }) it('should parse code', () => { expect(markdown.parse('`three`')).toBe('<code>three</code>') }) it('should parse mutiple tokens in string', () => { expect( markdown.parse('lorem `ipsum` *dolor* _sit_ amet') ).toBe('lorem <code>ipsum</code> <b>dolor</b> <i>sit</i> amet') }) it('allows rules nesting', () => { expect(markdown.parse('foo _one*two*three*four*five_ bar')).toBe('foo <i>one<b>two</b>three<b>four</b>five</i> bar') }) it('ignores improperly nested/closed rules', () => { expect(markdown.parse('_before*after_')).toBe('<i>before*after</i>') expect(markdown.parse('*foo_`bar*')).toBe('<b>foo_`bar</b>') expect(markdown.parse('foo_bar*')).toBe('foo_bar*') expect(markdown.parse('*foo_bar')).toBe('*foo_bar') expect(markdown.parse('foo_*bar')).toBe('foo_*bar') expect(markdown.parse('`hi`lo`')).toBe('<code>hi</code>lo`') expect(markdown.parse('`foo')).toContain('`foo') }) // Some of tests based on http://spec.commonmark.org/0.28/#inlines xit('should not format snake_case words', () => { // do we really need this? expect(markdown.parse('foo_bar_')).toBe('foo_bar_') expect(markdown.parse('_foo_bar')).toBe('_foo_bar') expect(markdown.parse('_*te_st*')).toBe('_<b>te_st</b>') expect(markdown.parse('_*te_st*_')).toBe('<i><b>te_st</b></i>') }) describe('code spans', () => { it('ignores markdown inside code spans', () => { expect( markdown.parse('`_call_` the `*foo_bar*` method on the `quux_service` endpoint') ).toBe('<code>_call_</code> the <code>*foo_bar*</code> method on the <code>quux_service</code> endpoint') }) it('ignores escaping inside of code spans', () => { expect(markdown.parse('`foo\\`bar`')).toBe('<code>foo\\</code>bar`') }) it('treats code span backticks with highest priority', () => { expect(markdown.parse('baz*foo`*`')).toBe('baz*foo<code>*</code>') }) it('allows escaping', () => { expect(markdown.parse('\\not \\*bold*')).toBe('\\not *bold*') expect(markdown.parse('\\\\*bold*')).toBe('\\<b>bold</b>') }) })