const { HTMLParser } = require('../../gramjs/extensions/HTML')
const types = require('../../gramjs/tl/types')
describe('HTMLParser', () => {
test('it should construct a new HTMLParser', () => {
const parser = new HTMLParser('Hello world')
expect(parser.text).toEqual('')
expect(parser.entities).toEqual([])
})
describe('.parse', () => {
test('it should parse bold entities', () => {
const parser = new HTMLParser('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 HTMLParser('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 HTMLParser('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 HTMLParser('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 HTMLParser('Hello
hello
hellohello' 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 = HTMLParser.unparse(strippedText, rawEntities) expect(text).toEqual(unparsed) }) test('it should unparse nested entities', () => { const unparsed = 'Hello world' const strippedText = 'Hello world' const rawEntities = [ new types.MessageEntityBold({ offset: 0, length: 11 }), new types.MessageEntityItalic({ offset: 0, length: 11 }), ] const text = HTMLParser.unparse(strippedText, rawEntities) expect(text).toEqual(unparsed) }) }) })