import { LegacyUnit } from '@ephox/mcagar'; import { Pipeline } from '@ephox/agar'; import SaxParser from 'tinymce/core/api/html/SaxParser'; import Writer from 'tinymce/core/api/html/Writer'; import Schema from 'tinymce/core/api/html/Schema'; import Tools from 'tinymce/core/api/util/Tools'; import { UnitTest } from '@ephox/bedrock'; UnitTest.asynctest('browser.tinymce.core.html.SaxParserTest', function () { const success = arguments[arguments.length - 2]; const failure = arguments[arguments.length - 1]; const suite = LegacyUnit.createSuite(); const writer = Writer(), schema = Schema(); const createCounter = function (writer) { const counts: any = {}; return { counts, comment (text) { if ('comment' in counts) { counts.comment++; } else { counts.comment = 1; } writer.comment(text); }, cdata (text) { if ('cdata' in counts) { counts.cdata++; } else { counts.cdata = 1; } writer.cdata(text); }, text (text, raw) { if ('text' in counts) { counts.text++; } else { counts.text = 1; } writer.text(text, raw); }, start (name, attrs, empty) { if ('start' in counts) { counts.start++; } else { counts.start = 1; } writer.start(name, attrs, empty); }, end (name) { if ('end' in counts) { counts.end++; } else { counts.end = 1; } writer.end(name); }, pi (name, text) { if ('pi' in counts) { counts.pi++; } else { counts.pi = 1; } writer.pi(name, text); }, doctype (text) { if ('doctype:' in counts) { counts.doctype++; } else { counts.doctype = 1; } writer.doctype(text); } }; }; suite.test('Parse elements', function () { let counter, parser; counter = createCounter(writer); parser = SaxParser(counter, schema); writer.reset(); parser.parse( '' ); LegacyUnit.equal( writer.getContent(), '', 'Parse attribute formats.' ); LegacyUnit.deepEqual(counter.counts, { start: 1, end: 1 }, 'Parse attribute formats counts.'); counter = createCounter(writer); parser = SaxParser(counter, schema); writer.reset(); parser.parse('\'>'); LegacyUnit.equal(writer.getContent(), '', 'Parse attributes with <> in them.'); LegacyUnit.deepEqual(counter.counts, { start: 1, end: 1 }, 'Parse attributes with <> in them (count).'); counter = createCounter(writer); parser = SaxParser(counter, schema); writer.reset(); parser.parse(''); LegacyUnit.equal(writer.getContent(), '', 'Parse compressed attributes.'); LegacyUnit.deepEqual(counter.counts, { start: 1, end: 1 }, 'Parse compressed attributes (count).'); counter = createCounter(writer); parser = SaxParser(counter, schema); writer.reset(); parser.parse(''); LegacyUnit.equal(writer.getContent(), '', 'Single empty attribute.'); LegacyUnit.deepEqual(counter.counts, { start: 1, end: 1 }, 'Single empty attributes (count).'); counter = createCounter(writer); parser = SaxParser(counter, schema); writer.reset(); parser.parse(''); LegacyUnit.equal(writer.getContent(), '', 'Empty attribute at end.'); LegacyUnit.deepEqual(counter.counts, { start: 1, end: 1 }, 'Empty attribute at end (count).'); counter = createCounter(writer); parser = SaxParser(counter, schema); writer.reset(); parser.parse(''); LegacyUnit.equal(writer.getContent(), '', 'Empty attribute at start.'); LegacyUnit.deepEqual(counter.counts, { start: 1, end: 1 }, 'Empty attribute at start (count).'); counter = createCounter(writer); parser = SaxParser(counter, schema); writer.reset(); parser.parse(''); LegacyUnit.equal(writer.getContent(), '', 'Parse empty element.'); LegacyUnit.deepEqual(counter.counts, { start: 1 }, 'Parse empty element counts.'); counter = createCounter(writer); parser = SaxParser(counter, schema); writer.reset(); parser.parse(''); LegacyUnit.equal(writer.getContent(), '', 'Parse attributes with linebreak.'); LegacyUnit.deepEqual(counter.counts, { start: 1 }, 'Parse attributes with linebreak counts.'); counter = createCounter(writer); parser = SaxParser(counter, schema); writer.reset(); parser.parse(''); LegacyUnit.equal(writer.getContent(), '', 'Parse attributes with whitespace.'); LegacyUnit.deepEqual(counter.counts, { start: 1 }, 'Parse attributes with whitespace counts.'); counter = createCounter(writer); parser = SaxParser(counter, schema); writer.reset(); parser.parse('text'); LegacyUnit.equal(writer.getContent(), 'text', 'Parse element with namespace.'); LegacyUnit.deepEqual(counter.counts, { start: 1, text: 1, end: 1 }, 'Parse element with namespace counts.'); counter = createCounter(writer); parser = SaxParser(counter, schema); writer.reset(); parser.parse('text'); LegacyUnit.equal(writer.getContent(), 'text', 'Parse element with dash name.'); LegacyUnit.deepEqual(counter.counts, { start: 1, text: 1, end: 1 }, 'Parse element with dash name counts.'); counter = createCounter(writer); parser = SaxParser(counter, schema); writer.reset(); parser.parse('text'); LegacyUnit.equal(writer.getContent(), 'text', 'Parse element with underscore name.'); LegacyUnit.deepEqual(counter.counts, { start: 1, text: 1, end: 1 }, 'Parse element with underscore name counts.'); counter = createCounter(writer); parser = SaxParser(counter, schema); writer.reset(); parser.parse('text1

text2text3

text4text5'); LegacyUnit.equal(writer.getContent(), 'text1

text2text3

text4text5', 'Parse tag soup 1.'); LegacyUnit.deepEqual(counter.counts, { text: 5, start: 2, end: 2 }, 'Parse tag soup 1 counts.'); counter = createCounter(writer); parser = SaxParser(counter, schema); writer.reset(); parser.parse('text1

text2text3

text4text5'); LegacyUnit.equal(writer.getContent(), 'text1

text2text3

text4text5', 'Parse tag soup 2.'); LegacyUnit.deepEqual(counter.counts, { text: 5, start: 2, end: 2 }, 'Parse tag soup 2 counts.'); counter = createCounter(writer); parser = SaxParser(counter, schema); writer.reset(); parser.parse('text1

text2texte>xt4text5'); LegacyUnit.equal(writer.getContent(), 'text1

text2tex<t3

te>xt4text5', 'Parse tag soup 3.'); LegacyUnit.deepEqual(counter.counts, { text: 5, start: 2, end: 2 }, 'Parse tag soup 3 counts.'); counter = createCounter(writer); parser = SaxParser(counter, schema); writer.reset(); parser.parse('text1

text2text3'); LegacyUnit.equal(writer.getContent(), 'text1

text2text3

', 'Parse tag soup 4.'); LegacyUnit.deepEqual(counter.counts, { text: 3, start: 2, end: 2 }, 'Parse tag soup 4 counts.'); counter = createCounter(writer); parser = SaxParser(counter, schema); writer.reset(); parser.parse('text1