const HTML = require('../../packages/parse5/lib/common/html'); function createFragmentContext(tagName, treeAdapter) { if (!tagName) { return null; } let namespace = HTML.NAMESPACES.HTML; const parts = tagName.split(' '); if (parts.length > 1) { tagName = parts[1]; if (parts[0] === 'svg') { namespace = HTML.NAMESPACES.SVG; } else if (parts[0] === 'math') { namespace = HTML.NAMESPACES.MATHML; } } return treeAdapter.createElement(tagName, namespace, []); } module.exports = function parseDatFile(testSet, treeAdapter) { const testDescrs = []; let curDirective = ''; let curDescr = null; testSet.split(/\r?\n/).forEach((line, idx) => { if (line === '#data') { curDescr = { '#line': idx + 1 }; testDescrs.push(curDescr); } if (line[0] === '#') { curDirective = line; curDescr[curDirective] = []; } else { curDescr[curDirective].push(line); } }); return testDescrs.map(descr => { const fragmentContextTagName = descr['#document-fragment'] && descr['#document-fragment'][0]; return { input: descr['#data'].join('\n'), expected: descr['#document'].join('\n'), expectedErrors: descr['#new-errors'] || [], disableEntitiesDecoding: !!descr['#disable-html-entities-decoding'], lineNum: descr['#line'], scriptingEnabled: !descr['#script-off'], fragmentContext: createFragmentContext(fragmentContextTagName, treeAdapter) }; }); };