import { LegacyUnit } from '@ephox/mcagar';
import { Pipeline, Assertions } from '@ephox/agar';
import Schema from 'tinymce/core/api/html/Schema';
import Serializer from 'tinymce/core/api/html/Serializer';
import DomParser from 'tinymce/core/api/html/DomParser';
import { UnitTest } from '@ephox/bedrock';
UnitTest.asynctest('browser.tinymce.core.html.DomParserTest', function () {
const success = arguments[arguments.length - 2];
const failure = arguments[arguments.length - 1];
const suite = LegacyUnit.createSuite();
const schema = Schema({ valid_elements: '*[class|title]' });
const serializer = Serializer({}, schema);
let parser, root;
const countNodes = function (node, counter?) {
let sibling;
if (!counter) {
counter = {};
}
if (node.name in counter) {
counter[node.name]++;
} else {
counter[node.name] = 1;
}
for (sibling = node.firstChild; sibling; sibling = sibling.next) {
countNodes(sibling, counter);
}
return counter;
};
schema.addValidChildren('+body[style]');
suite.test('Parse element', function () {
let parser, root;
parser = DomParser({}, schema);
root = parser.parse('test');
LegacyUnit.equal(serializer.serialize(root), 'test', 'Inline element');
LegacyUnit.equal(root.firstChild.type, 1, 'Element type');
LegacyUnit.equal(root.firstChild.name, 'b', 'Element name');
LegacyUnit.deepEqual(
root.firstChild.attributes, [{ name: 'title', value: 'title' },
{ name: 'class', value: 'class' }],
'Element attributes'
);
LegacyUnit.deepEqual(countNodes(root), { 'body': 1, 'b': 1, '#text': 1 }, 'Element attributes (count)');
parser = DomParser({}, schema);
root = parser.parse(' \t\r\n