1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192939495 |
- const { MarkdownParser } = require('../../gramjs/extensions/Markdown')
- const types = require('../../gramjs/tl/types')
- describe('MarkdownParser', () => {
- test('it should construct a new MarkdownParser', () => {
- const parser = new MarkdownParser('Hello world')
- expect(parser.text).toEqual('')
- expect(parser.entities).toEqual([])
- })
- describe('.parse', () => {
- test('it should parse bold entities', () => {
- const parser = new MarkdownParser('Hello **world**')
- const [text, entities] = parser.parse()
- expect(text).toEqual('Hello world')
- expect(entities.length).toEqual(1)
- expect(entities[0]).toBeInstanceOf(types.MessageEntityBold)
- })
- test('it should parse italic entities', () => {
- const parser = new MarkdownParser('Hello __world__')
- const [text, entities] = parser.parse()
- expect(text).toEqual('Hello world')
- expect(entities.length).toEqual(1)
- expect(entities[0]).toBeInstanceOf(types.MessageEntityItalic)
- })
- test('it should parse code entities', () => {
- const parser = new MarkdownParser('Hello `world`')
- const [text, entities] = parser.parse()
- expect(text).toEqual('Hello world')
- expect(entities.length).toEqual(1)
- expect(entities[0]).toBeInstanceOf(types.MessageEntityCode)
- })
- test('it should parse pre entities', () => {
- const parser = new MarkdownParser('Hello ```world```')
- const [text, entities] = parser.parse()
- expect(text).toEqual('Hello world')
- expect(entities.length).toEqual(1)
- expect(entities[0]).toBeInstanceOf(types.MessageEntityPre)
- })
- test('it should parse strike entities', () => {
- const parser = new MarkdownParser('Hello ~~world~~')
- const [text, entities] = parser.parse()
- expect(text).toEqual('Hello world')
- expect(entities.length).toEqual(1)
- expect(entities[0]).toBeInstanceOf(types.MessageEntityStrike)
- })
- test('it should parse link entities', () => {
- const parser = new MarkdownParser('Hello [world](https://hello.world)')
- const [text, entities] = parser.parse()
- expect(text).toEqual('Hello world')
- expect(entities.length).toEqual(1)
- expect(entities[0]).toBeInstanceOf(types.MessageEntityTextUrl)
- expect(entities[0].url).toEqual('https://hello.world')
- })
- test('it should not parse nested entities', () => {
- const parser = new MarkdownParser('Hello **__world__**')
- const [text, entities] = parser.parse()
- expect(text).toEqual('Hello __world__')
- expect(entities.length).toEqual(1)
- expect(entities[0]).toBeInstanceOf(types.MessageEntityBold)
- })
- test('it should parse multiple entities', () => {
- const parser = new MarkdownParser('__Hello__ **world**')
- const [text, entities] = parser.parse()
- expect(text).toEqual('Hello world')
- expect(entities.length).toEqual(2)
- expect(entities[0]).toBeInstanceOf(types.MessageEntityItalic)
- expect(entities[1]).toBeInstanceOf(types.MessageEntityBold)
- })
- })
- describe('.unparse', () => {
- test('it should create a markdown string from raw text and entities', () => {
- const unparsed = '**hello** __hello__ ~~hello~~ `hello` ```hello``` [hello](https://hello.world)'
- const strippedText = 'hello hello hello hello hello hello'
- const rawEntities = [
- new types.MessageEntityBold({ offset: 0, length: 5 }),
- new types.MessageEntityItalic({ offset: 6, length: 5 }),
- new types.MessageEntityStrike({ offset: 12, length: 5 }),
- new types.MessageEntityCode({ offset: 18, length: 5 }),
- new types.MessageEntityPre({ offset: 24, length: 5 }),
- new types.MessageEntityTextUrl({ offset: 30, length: 5, url: 'https://hello.world' }),
- ]
- const text = MarkdownParser.unparse(strippedText, rawEntities)
- expect(text).toEqual(unparsed)
- })
- })
- })
|