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); }); }); });