| <!DOCTYPE html> | |
| <title>DOMParser: <parsererror> element added on error</title> | |
| <script src="/resources/testharness.js"></script> | |
| <script src="/resources/testharnessreport.js"></script> | |
| <script> | |
| const xhtml_prologue = '<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"' + | |
| ' "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">\n' + | |
| '<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">\n' + | |
| '<body>\n', | |
| xhtml_epilogue = '</body>\n</html>\n'; | |
| [ | |
| '<span x:test="testing">1</span>', // undeclared 'x' namespace prefix | |
| '< span>2</span>', // bad start tag | |
| '<span :test="testing">3</span>', // empty namespace prefix | |
| '<span><em>4</span></em>', // staggered tags | |
| '<span>5', // missing end </span> tag | |
| '6</span>', // missing start <span> tag | |
| '<span>7< /span>', // bad end tag | |
| '<span>8</ span>', // bad end tag | |
| '<span novalue>9</span>', // missing attribute value | |
| '<span ="noattr">10</span>', // missing attribute name | |
| '<span ::="test">11</span>', // bad namespace prefix | |
| '<span xmlns:="urn:x-test:test">12</span>', // missing namespace prefix | |
| '<span xmlns:xmlns="">13</span>', // invalid namespace prefix | |
| '<span data-test=testing>14</span>', // unquoted attribute value | |
| '15<span', // bad start tag | |
| '<8:test xmlns:8="urn:x-test:test">16</8:test>', // invalid namespace prefix | |
| '<span xmlns:p1 xmlns:p2="urn:x-test:test"/>17', // missing namespace URI | |
| ].forEach(fragment => { | |
| test(() => { | |
| var document_string = xhtml_prologue + fragment + xhtml_epilogue; | |
| var doc = (new DOMParser).parseFromString(document_string, "application/xhtml+xml"); | |
| var parsererrors = doc.getElementsByTagName("parsererror"); | |
| assert_equals(parsererrors.length, 1, 'expecting one parsererror'); | |
| }, document.title + ', ' + fragment); | |
| }); | |
| [ | |
| 'text/xml', | |
| 'application/xml', | |
| 'application/xhtml+xml', | |
| 'image/svg+xml' | |
| ].forEach(mimeType => { | |
| test(() => { | |
| const doc = (new DOMParser()).parseFromString('<span x:test="testing">1</span>', mimeType); | |
| assert_equals(doc.contentType, mimeType); | |
| }, `${mimeType} is preserved in the error document`); | |
| }) | |
| </script> |