Add html5 parser tests: tree construction, tokenizer, and comparison beteween Gecko and JS parsers. bug 373864; r=sayrer

This commit is contained in:
Jonathan Griffin 2009-08-14 15:02:39 -07:00
Родитель 34b3e7a057
Коммит 41af2e759c
37 изменённых файлов: 17136 добавлений и 1048 удалений

Просмотреть файл

@ -46,11 +46,39 @@ include $(topsrcdir)/config/rules.mk
_TEST_FILES = parser_datreader.js \
parser_web_testrunner.js \
tokenizer_file_server.sjs \
html5lib_tokenizer_entities.test \
html5lib_tokenizer_numeric_entities.test \
html5lib_tokenizer_unicode_chars.test \
html5lib_tokenizer_test1.test \
html5lib_tokenizer_test2.test \
html5lib_tokenizer_test3.test \
html5lib_tokenizer_test4.test \
html5lib_tokenizer_test5.test \
html5lib_tree_dat1.txt \
html5lib_tree_dat2.txt \
html5lib_tree_dat3.txt \
html5lib_tree_dat5.txt \
html5lib_tree_dat6.txt \
html5lib_tree_dat7.txt \
html5lib_tree_dat8.txt \
html5lib_tree_dat9.txt \
html5lib_tree_dat10.txt \
html5lib_tree_dat11.txt \
html5lib_tree_dat12.txt \
html5lib_tree_dat14.txt \
html5_tree_construction_exceptions.js \
nu.validator.htmlparser.HtmlParser.nocache.js \
test_html5_tokenizer_entities.html \
test_html5_tokenizer_numeric_entities.html \
test_html5_tokenizer_test1.html \
test_html5_tokenizer_test2.html \
test_html5_tokenizer_test3.html \
test_html5_tokenizer_test4.html \
test_html5_tokenizer_test5.html \
test_html5_tokenizer_unicode_chars.html \
test_html5_tree_construction.html \
test_html5_tree_construction_js_compare.html \
test_bug174351.html \
test_bug339350.xhtml \
test_bug358797.html \

Просмотреть файл

@ -1,71 +1,43 @@
/* these are the tests we don't pass */
var html5Exceptions = {
"<b><table><td><i></table>": true,
"<b><table><td></b><i></table>X": true,
"<p><b><div><marquee></p></b></div>X": true,
"<!--><div>--<!-->": true,
"<p><hr></p>": true,
"<select><b><option><select><option></b></select>X": true,
"<a><table><td><a><table></table><a></tr><a></table><b>X</b>C<a>Y": true,
"<!-----><font><div>hello<table>excite!<b>me!<th><i>please!</tr><!--X-->": true,
"<!DOCTYPE HTML><li>hello<li>world<ul>how<li>do</ul>you</body><!--do-->": true,
"<!DOCTYPE HTML>A<option>B<optgroup>C<select>D</option>E": true,
"</#": true,
"<?": true,
"<?#": true,
"<!": true,
"<!#": true,
"<?COMMENT?>": true,
"<!COMMENT>": true,
"</ COMMENT >": true,
"<?COM--MENT?>": true,
"<!COM--MENT>": true,
"</ COM--MENT >": true,
"<p id=a><b><p id=b></b>TEST": true,
"<b id=a><p><b id=b></p></b>TEST": true,
"<b>A<cite>B<div>C": true,
"<b>A<cite>B<div>C</cite>D": true,
"<cite><b><cite><i><cite><i><cite><i><div>X</b>TEST": true,
"<DIV> abc <B> def <I> ghi <P>": true,
"<DIV> abc <B> def <I> ghi <P> jkl": true,
"<DIV> abc <B> def <I> ghi <P> jkl </B>": true,
"<DIV> abc <B> def <I> ghi <P> jkl </B> mno": true,
"<DIV> abc <B> def <I> ghi <P> jkl </B> mno </I>": true,
"<DIV> abc <B> def <I> ghi <P> jkl </B> mno </I> pqr": true,
"<DIV> abc <B> def <I> ghi <P> jkl </B> mno </I> pqr </P>": true,
"<DIV> abc <B> def <I> ghi <P> jkl </B> mno </I> pqr </P> stu": true,
"<a href=\"blah\">aba<table><a href=\"foo\">br<tr><td></td></tr>x</table>aoe": true,
"<a href=\"blah\">aba<table><tr><td><a href=\"foo\">br</td></tr>x</table>aoe": true,
"<table><a href=\"blah\">aba<tr><td><a href=\"foo\">br</td></tr>x</table>aoe": true,
"<a href=a>aa<marquee>aa<a href=b>bb</marquee>aa": true,
"<a><table><a></table><p><a><div><a>": true,
"<head></p><meta><p>": true,
"<b><table><td></b><i></table>": true,
"<a><p><a></a></p></a>": true,
"<p><b><div><marquee></p></b></div>": true,
"<select><b><option><select><option></b></select>": true,
"<a><table><td><a><table></table><a></tr><a></table><a>": true,
"<ul><li></li><div><li></div><li><li><div><li><address><li><b><em></b><li></ul>": true,
"<table><col><tbody><col><tr><col><td><col></table><col>": true,
"</strong></b></em></i></u></strike></s></blink></tt></pre></big></small></font></select></h1></h2></h3></h4></h5></h6></body></br></a></img></title></span></style></script></table></th></td></tr></frame></area></link></param></hr></input></col></base></meta></basefont></bgsound></embed></spacer></p></dd></dt></caption></colgroup></tbody></tfoot></thead></address></blockquote></center></dir></div></dl></fieldset></listing></menu></ol></ul></li></nobr></wbr></form></button></marquee></object></html></frameset></head></iframe></image></isindex></noembed></noframes></noscript></optgroup></option></plaintext></textarea>": true,
"<table><tr></strong></b></em></i></u></strike></s></blink></tt></pre></big></small></font></select></h1></h2></h3></h4></h5></h6></body></br></a></img></title></span></style></script></table></th></td></tr></frame></area></link></param></hr></input></col></base></meta></basefont></bgsound></embed></spacer></p></dd></dt></caption></colgroup></tbody></tfoot></thead></address></blockquote></center></dir></div></dl></fieldset></listing></menu></ol></ul></li></nobr></wbr></form></button></marquee></object></html></frameset></head></iframe></image></isindex></noembed></noframes></noscript></optgroup></option></plaintext></textarea>": true,
"<!DOCTYPE htmL><dt><div><dd>": true,
"<!doctypehtml><scrIPt type=text/x-foobar;baz>X</SCRipt": true,
"&#X": true,
"&#x": true,
"<!doctype html><p><b><i><u></p> <p>X": true,
"<!doctype html><!-- X": true,
"<!doctype html><select><optgroup><option></optgroup><option><select><option>": true,
"<!DoctypE html><!-- XXX - XXX -->": true,
"<!DoctypE html><!-- XXX - XXX": true,
"<!DoctypE html><!-- XXX - XXX - XXX -->": true,
var html5TreeConstructionExceptions = {
"<isindex test=x name=x>": true,
" \n ": true,
"<!doctype html> <html>": true,
"<!doctype html><!--x--": true,
"<head></head><!-- --><style></style><!-- --><script></script>": true,
"<head></head><!-- -->x<style></style><!-- --><script></script>": true,
"<body><body><base><link><meta><title><p></title><body><p></body>": true,
"<!doctype html><body><title>X</title><meta name=z><link rel=foo><style>\nx { content:\"</style\" } </style>": true,
"<select><keygen>": true,
"<!DOCTYPE html><body xlink:href=foo><math xlink:href=foo></math>": true,
"<!DOCTYPE html><body xlink:href=foo xml:lang=en><math><mi xml:lang=en xlink:href=foo></mi></math>": true,
"<!DOCTYPE html><body xlink:href=foo xml:lang=en><math><mi xml:lang=en xlink:href=foo /></math>": true,
"<!DOCTYPE html><body xlink:href=foo xml:lang=en><math><mi xml:lang=en xlink:href=foo />bar</math>": true,
"<!DOCTYPE html><body xlink:href=foo><svg xlink:href=foo></svg>": true,
"<!DOCTYPE html><body xlink:href=foo xml:lang=en><svg><g xml:lang=en xlink:href=foo></g></svg>": true,
"<!DOCTYPE html><body xlink:href=foo xml:lang=en><svg><g xml:lang=en xlink:href=foo /></svg>": true,
"<!DOCTYPE html><body xlink:href=foo xml:lang=en><svg><g xml:lang=en xlink:href=foo />bar</svg>": true,
"<body><body><base><link><meta><title><p></title><body><p>#</body>": true,
"<!doctype html><body><title>X</title><meta name=y><link rel=foo><style>\u000ax { content:\"</style\" } </style>": true,
"<!DOCTYPE html><body><table><tr><td></td><input tYPe=\"\u0009hiDDen\u0009\"><td></td></tr></table></body>": true,
"<!DOCTYPE html><html><head></head><form><input></form><frameset rows=\"*\"><frame></frameset></html>": true,
"<!DOCTYPE html><html><head></head><form><input type=\"hidden\"></form><frameset rows=\"*\"><frame></frameset></html>": true,
"<!DOCTYPE html><html><head></head><form><input tYpE=\"\u0009HIdDen\u0009\"></form><frameset rows=\"*\"><frame></frameset></html>": true,
"<!DOCTYPE html><html><body><table><link><tr><td>Hi!</td></tr></table></html>": true,
}
var html5TokenizerExceptions = {
"<xmp> &amp; <!-- &amp; --> &amp; </xmp>": true,
"a\uFFFFb": true,
"a\u000cb": true,
"<!-- foo -- bar -->": true,
}
var html5JSCompareExceptions = {
"<table><tr></strong></b></em></i></u></strike></s></blink></tt></pre></big></small></font></select></h1></h2></h3></h4></h5></h6></body></br></a></img></title></span></style></script></table></th></td></tr></frame></area></link></param></hr></input></col></base></meta></basefont></bgsound></embed></spacer></p></dd></dt></caption></colgroup></tbody></tfoot></thead></address></blockquote></center></dir></div></dl></fieldset></listing></menu></ol></ul></li></nobr></wbr></form></button></marquee></object></html></frameset></head></iframe></image></isindex></noembed></noframes></noscript></optgroup></option></plaintext></textarea>": true,
"<noscript><!--</noscript>--></noscript>": true,
"<!DOCTYPE html><body xlink:href=foo><math xlink:href=foo></math>": true,
"<!DOCTYPE html><body xlink:href=foo xml:lang=en><math><mi xml:lang=en xlink:href=foo></mi></math>": true,
"<!DOCTYPE html><body xlink:href=foo xml:lang=en><math><mi xml:lang=en xlink:href=foo /></math>": true,
"<!DOCTYPE html><body xlink:href=foo xml:lang=en><math><mi xml:lang=en xlink:href=foo />bar</math>": true,
"<!DOCTYPE html><body xlink:href=foo><svg xlink:href=foo></svg>": true,
"<!DOCTYPE html><body xlink:href=foo xml:lang=en><svg><g xml:lang=en xlink:href=foo></g></svg>": true,
"<!DOCTYPE html><body xlink:href=foo xml:lang=en><svg><g xml:lang=en xlink:href=foo /></svg>": true,
"<!DOCTYPE html><body xlink:href=foo xml:lang=en><svg><g xml:lang=en xlink:href=foo />bar</svg>": true,
"<!DOCTYPE html><html><body><xyz:abc></xyz:abc>": true,
"<!DOCTYPE html><html><html abc:def=gh><xyz:abc></xyz:abc>": true,
"<!DOCTYPE html><html xml:lang=bar><html xml:lang=foo>": true,
}

Разница между файлами не показана из-за своего большого размера Загрузить разницу

Разница между файлами не показана из-за своего большого размера Загрузить разницу

Просмотреть файл

@ -0,0 +1,196 @@
var tokenizerTests = {"tests": [
{"description":"Correct Doctype lowercase",
"input":"<!DOCTYPE html>",
"output":[["DOCTYPE", "html", null, null, true]]},
{"description":"Correct Doctype uppercase",
"input":"<!DOCTYPE HTML>",
"output":[["DOCTYPE", "html", null, null, true]]},
{"description":"Correct Doctype mixed case",
"input":"<!DOCTYPE HtMl>",
"output":[["DOCTYPE", "html", null, null, true]]},
{"description":"Correct Doctype case with EOF",
"input":"<!DOCTYPE HtMl",
"output":["ParseError", ["DOCTYPE", "html", null, null, false]]},
{"description":"Truncated doctype start",
"input":"<!DOC>",
"output":["ParseError", ["Comment", "DOC"]]},
{"description":"Doctype in error",
"input":"<!DOCTYPE foo>",
"output":[["DOCTYPE", "foo", null, null, true]]},
{"description":"Single Start Tag",
"input":"<h>",
"output":[["StartTag", "h", {}]]},
{"description":"Empty end tag",
"input":"</>",
"output":["ParseError"]},
{"description":"Empty start tag",
"input":"<>",
"output":["ParseError", ["Character", "<>"]]},
{"description":"Start Tag w/attribute",
"input":"<h a='b'>",
"output":[["StartTag", "h", {"a":"b"}]]},
{"description":"Start Tag w/attribute no quotes",
"input":"<h a=b>",
"output":[["StartTag", "h", {"a":"b"}]]},
{"description":"Start/End Tag",
"input":"<h></h>",
"output":[["StartTag", "h", {}], ["EndTag", "h"]]},
{"description":"Two unclosed start tags",
"input":"<p>One<p>Two",
"output":[["StartTag", "p", {}], ["Character", "One"], ["EndTag", "p"], ["StartTag", "p", {}], ["Character", "Two"]]},
{"description":"End Tag w/attribute",
"input":"<h></h a='b'>",
"output":[["StartTag", "h", {}], "ParseError", ["EndTag", "h"]]},
{"description":"Multiple atts",
"input":"<h a='b' c='d'>",
"output":[["StartTag", "h", {"a":"b", "c":"d"}]]},
{"description":"Multiple atts no space",
"input":"<h a='b'c='d'>",
"output":["ParseError", ["StartTag", "h", {"a":"b", "c":"d"}]]},
{"description":"Repeated attr",
"input":"<h a='b' a='d'>",
"output":["ParseError", ["StartTag", "h", {"a":"b"}]]},
{"description":"Simple comment",
"input":"<!--comment-->",
"output":[["Comment", "comment"]]},
{"description":"Comment, Central dash no space",
"input":"<!----->",
"output":["ParseError", ["Comment", "-"]]},
{"description":"Comment, two central dashes",
"input":"<!-- --comment -->",
"output":["ParseError", ["Comment", " --comment "]]},
{"description":"Unfinished comment",
"input":"<!--comment",
"output":["ParseError", ["Comment", "comment"]]},
{"description":"Start of a comment",
"input":"<!-",
"output":["ParseError", ["Comment", "-"]]},
{"description":"Short comment",
"input":"<!-->",
"output":["ParseError", ["Comment", ""]]},
{"description":"Short comment two",
"input":"<!--->",
"output":["ParseError", ["Comment", ""]]},
{"description":"Short comment three",
"input":"<!---->",
"output":[["Comment", ""]]},
{"description":"Ampersand EOF",
"input":"&",
"output":[["Character", "&"]]},
{"description":"Ampersand ampersand EOF",
"input":"&&",
"output":[["Character", "&&"]]},
{"description":"Ampersand space EOF",
"input":"& ",
"output":[["Character", "& "]]},
{"description":"Unfinished entity",
"input":"&f",
"output":["ParseError", ["Character", "&f"]]},
{"description":"Ampersand, number sign",
"input":"&#",
"output":["ParseError", ["Character", "&#"]]},
{"description":"Unfinished numeric entity",
"input":"&#x",
"output":["ParseError", ["Character", "&#x"]]},
{"description":"Entity with trailing semicolon (1)",
"input":"I'm &not;it",
"output":[["Character","I'm \u00ACit"]]},
{"description":"Entity with trailing semicolon (2)",
"input":"I'm &notin;",
"output":[["Character","I'm \u2209"]]},
{"description":"Entity without trailing semicolon (1)",
"input":"I'm &notit",
"output":[["Character","I'm "], "ParseError", ["Character", "\u00ACit"]]},
{"description":"Entity without trailing semicolon (2)",
"input":"I'm &notin",
"output":[["Character","I'm "], "ParseError", ["Character", "\u00ACin"]]},
{"description":"Partial entity match at end of file",
"input":"I'm &no",
"output":[["Character","I'm "], "ParseError", ["Character", "&no"]]},
{"description":"Non-ASCII character reference name",
"input":"&\u00AC;",
"output":["ParseError", ["Character", "&\u00AC;"]]},
{"description":"ASCII decimal entity",
"input":"&#0036;",
"output":[["Character","$"]]},
{"description":"ASCII hexadecimal entity",
"input":"&#x3f;",
"output":[["Character","?"]]},
{"description":"Hexadecimal entity in attribute",
"input":"<h a='&#x3f;'></h>",
"output":[["StartTag", "h", {"a":"?"}], ["EndTag", "h"]]},
{"description":"Entity in attribute without semicolon ending in x",
"input":"<h a='&notx'>",
"output":["ParseError", ["StartTag", "h", {"a":"&notx"}]]},
{"description":"Entity in attribute without semicolon ending in 1",
"input":"<h a='&not1'>",
"output":["ParseError", ["StartTag", "h", {"a":"&not1"}]]},
{"description":"Entity in attribute without semicolon ending in i",
"input":"<h a='&noti'>",
"output":["ParseError", ["StartTag", "h", {"a":"&noti"}]]},
{"description":"Entity in attribute without semicolon",
"input":"<h a='&COPY'>",
"output":["ParseError", ["StartTag", "h", {"a":"\u00A9"}]]},
{"description":"Unquoted attribute ending in ampersand",
"input":"<s o=& t>",
"output":[["StartTag","s",{"o":"&","t":""}]]},
{"description":"Unquoted attribute at end of tag with final character of &, with tag followed by characters",
"input":"<a a=a&>foo",
"output":["ParseError", ["StartTag", "a", {"a":"a&"}], ["Character", "foo"]]},
{"description":"plaintext element",
"input":"<plaintext>foobar",
"output":[["StartTag","plaintext",{}], ["Character","foobar"]]},
{"description":"Open angled bracket in unquoted attribute value state",
"input":"<a a=f<>",
"output":["ParseError", ["StartTag", "a", {"a":"f<"}]]}
]}

Просмотреть файл

@ -0,0 +1,163 @@
var tokenizerTests = {"tests": [
{"description":"DOCTYPE without name",
"input":"<!DOCTYPE>",
"output":["ParseError", "ParseError", ["DOCTYPE", "", null, null, false]]},
{"description":"DOCTYPE without space before name",
"input":"<!DOCTYPEhtml>",
"output":["ParseError", ["DOCTYPE", "html", null, null, true]]},
{"description":"Incorrect DOCTYPE without a space before name",
"input":"<!DOCTYPEfoo>",
"output":["ParseError", ["DOCTYPE", "foo", null, null, true]]},
{"description":"DOCTYPE with publicId",
"input":"<!DOCTYPE html PUBLIC \"-//W3C//DTD HTML Transitional 4.01//EN\">",
"output":[["DOCTYPE", "html", "-//W3C//DTD HTML Transitional 4.01//EN", null, true]]},
{"description":"DOCTYPE with EOF after PUBLIC",
"input":"<!DOCTYPE html PUBLIC",
"output":["ParseError", ["DOCTYPE", "html", null, null, false]]},
{"description":"DOCTYPE with EOF after PUBLIC '",
"input":"<!DOCTYPE html PUBLIC '",
"output":["ParseError", ["DOCTYPE", "html", "", null, false]]},
{"description":"DOCTYPE with EOF after PUBLIC 'x",
"input":"<!DOCTYPE html PUBLIC 'x",
"output":["ParseError", ["DOCTYPE", "html", "x", null, false]]},
{"description":"DOCTYPE with systemId",
"input":"<!DOCTYPE html SYSTEM \"-//W3C//DTD HTML Transitional 4.01//EN\">",
"output":[["DOCTYPE", "html", null, "-//W3C//DTD HTML Transitional 4.01//EN", true]]},
{"description":"DOCTYPE with publicId and systemId",
"input":"<!DOCTYPE html PUBLIC \"-//W3C//DTD HTML Transitional 4.01//EN\" \"-//W3C//DTD HTML Transitional 4.01//EN\">",
"output":[["DOCTYPE", "html", "-//W3C//DTD HTML Transitional 4.01//EN", "-//W3C//DTD HTML Transitional 4.01//EN", true]]},
{"description":"DOCTYPE with > in double-quoted publicId",
"input":"<!DOCTYPE html PUBLIC \">x",
"output":["ParseError", ["DOCTYPE", "html", "", null, false], ["Character", "x"]]},
{"description":"DOCTYPE with > in single-quoted publicId",
"input":"<!DOCTYPE html PUBLIC '>x",
"output":["ParseError", ["DOCTYPE", "html", "", null, false], ["Character", "x"]]},
{"description":"DOCTYPE with > in double-quoted systemId",
"input":"<!DOCTYPE html PUBLIC \"foo\" \">x",
"output":["ParseError", ["DOCTYPE", "html", "foo", "", false], ["Character", "x"]]},
{"description":"DOCTYPE with > in single-quoted systemId",
"input":"<!DOCTYPE html PUBLIC 'foo' '>x",
"output":["ParseError", ["DOCTYPE", "html", "foo", "", false], ["Character", "x"]]},
{"description":"Incomplete doctype",
"input":"<!DOCTYPE html ",
"output":["ParseError", ["DOCTYPE", "html", null, null, false]]},
{"description":"Numeric entity representing the NUL character",
"input":"&#0000;",
"output":["ParseError", ["Character", "\uFFFD"]]},
{"description":"Hexadecimal entity representing the NUL character",
"input":"&#x0000;",
"output":["ParseError", ["Character", "\uFFFD"]]},
{"description":"Numeric entity representing a codepoint after 1114111 (U+10FFFF)",
"input":"&#2225222;",
"output":["ParseError", ["Character", "\uFFFD"]]},
{"description":"Hexadecimal entity representing a codepoint after 1114111 (U+10FFFF)",
"input":"&#x1010FFFF;",
"output":["ParseError", ["Character", "\uFFFD"]]},
{"description":"Hexadecimal entity pair representing a surrogate pair",
"input":"&#xD869;&#xDED6;",
"output":["ParseError", ["Character", "\uFFFD"], "ParseError", ["Character", "\uFFFD"]]},
{"description":"Hexadecimal entity with mixed uppercase and lowercase",
"input":"&#xaBcD;",
"output":[["Character", "\uABCD"]]},
{"description":"Entity without a name",
"input":"&;",
"output":["ParseError", ["Character", "&;"]]},
{"description":"Unescaped ampersand in attribute value",
"input":"<h a='&'>",
"output":[["StartTag", "h", { "a":"&" }]]},
{"description":"StartTag containing <",
"input":"<a<b>",
"output":[["StartTag", "a<b", { }]]},
{"description":"Non-void element containing trailing /",
"input":"<h/>",
"output":[["StartTag","h",{},true]]},
{"description":"Void element with permitted slash",
"input":"<br/>",
"output":[["StartTag","br",{},true]]},
{"description":"Void element with permitted slash (with attribute)",
"input":"<br foo='bar'/>",
"output":[["StartTag","br",{"foo":"bar"},true]]},
{"description":"StartTag containing /",
"input":"<h/a='b'>",
"output":["ParseError", ["StartTag", "h", { "a":"b" }]]},
{"description":"Double-quoted attribute value",
"input":"<h a=\"b\">",
"output":[["StartTag", "h", { "a":"b" }]]},
{"description":"Unescaped </",
"input":"</",
"output":["ParseError", ["Character", "</"]]},
{"description":"Illegal end tag name",
"input":"</1>",
"output":["ParseError", ["Comment", "1"]]},
{"description":"Simili processing instruction",
"input":"<?namespace>",
"output":["ParseError", ["Comment", "?namespace"]]},
{"description":"A bogus comment stops at >, even if preceeded by two dashes",
"input":"<?foo-->",
"output":["ParseError", ["Comment", "?foo--"]]},
{"description":"Unescaped <",
"input":"foo < bar",
"output":[["Character", "foo "], "ParseError", ["Character", "< bar"]]},
{"description":"Null Byte Replacement",
"input":"\u0000",
"output":["ParseError", ["Character", "\ufffd"]]},
{"description":"Comment with dash",
"input":"<!---x",
"output":["ParseError", ["Comment", "-x"]]},
{"description":"Entity + newline",
"input":"\nx\n&gt;\n",
"output":[["Character","\nx\n>\n"]]},
{"description":"Start tag with no attributes but space before the greater-than sign",
"input":"<h >",
"output":[["StartTag", "h", {}]]},
{"description":"Empty attribute followed by uppercase attribute",
"input":"<h a B=''>",
"output":[["StartTag", "h", {"a":"", "b":""}]]},
{"description":"Double-quote after attribute name",
"input":"<h a \">",
"output":["ParseError", ["StartTag", "h", {"a":"", "\"":""}]]},
{"description":"Single-quote after attribute name",
"input":"<h a '>",
"output":["ParseError", ["StartTag", "h", {"a":"", "'":""}]]}
]}

Разница между файлами не показана из-за своего большого размера Загрузить разницу

Просмотреть файл

@ -0,0 +1,305 @@
var tokenizerTests = {"tests": [
{"description":"< in attribute name",
"input":"<z/0 <>",
"output":["ParseError", "ParseError", ["StartTag", "z", {"0": "", "<": ""}]]},
{"description":"< in attribute value",
"input":"<z x=<>",
"output":["ParseError", ["StartTag", "z", {"x": "<"}]]},
{"description":"= in unquoted attribute value",
"input":"<z z=z=z>",
"output":["ParseError", ["StartTag", "z", {"z": "z=z"}]]},
{"description":"= attribute",
"input":"<z =>",
"output":["ParseError", ["StartTag", "z", {"=": ""}]]},
{"description":"== attribute",
"input":"<z ==>",
"output":["ParseError", "ParseError", ["StartTag", "z", {"=": ""}]]},
{"description":"=== attribute",
"input":"<z ===>",
"output":["ParseError", "ParseError", ["StartTag", "z", {"=": "="}]]},
{"description":"==== attribute",
"input":"<z ====>",
"output":["ParseError", "ParseError", "ParseError", ["StartTag", "z", {"=": "=="}]]},
{"description":"Allowed \" after ampersand in attribute value",
"input":"<z z=\"&\">",
"output":[["StartTag", "z", {"z": "&"}]]},
{"description":"Non-allowed ' after ampersand in attribute value",
"input":"<z z=\"&'\">",
"output":["ParseError", ["StartTag", "z", {"z": "&'"}]]},
{"description":"Allowed ' after ampersand in attribute value",
"input":"<z z='&'>",
"output":[["StartTag", "z", {"z": "&"}]]},
{"description":"Non-allowed \" after ampersand in attribute value",
"input":"<z z='&\"'>",
"output":["ParseError", ["StartTag", "z", {"z": "&\""}]]},
{"description":"Text after bogus character reference",
"input":"<z z='&xlink_xmlns;'>bar<z>",
"output":["ParseError",["StartTag","z",{"z":"&xlink_xmlns;"}],["Character","bar"],["StartTag","z",{}]]},
{"description":"Text after hex character reference",
"input":"<z z='&#x0020; foo'>bar<z>",
"output":[["StartTag","z",{"z":" foo"}],["Character","bar"],["StartTag","z",{}]]},
{"description":"Attribute name starting with \"",
"input":"<foo \"='bar'>",
"output":["ParseError", ["StartTag", "foo", {"\"": "bar"}]]},
{"description":"Attribute name starting with '",
"input":"<foo '='bar'>",
"output":["ParseError", ["StartTag", "foo", {"'": "bar"}]]},
{"description":"Attribute name containing \"",
"input":"<foo a\"b='bar'>",
"output":["ParseError", ["StartTag", "foo", {"a\"b": "bar"}]]},
{"description":"Attribute name containing '",
"input":"<foo a'b='bar'>",
"output":["ParseError", ["StartTag", "foo", {"a'b": "bar"}]]},
{"description":"Unquoted attribute value containing '",
"input":"<foo a=b'c>",
"output":["ParseError", ["StartTag", "foo", {"a": "b'c"}]]},
{"description":"Unquoted attribute value containing \"",
"input":"<foo a=b\"c>",
"output":["ParseError", ["StartTag", "foo", {"a": "b\"c"}]]},
{"description":"Double-quoted attribute value not followed by whitespace",
"input":"<foo a=\"b\"c>",
"output":["ParseError", ["StartTag", "foo", {"a": "b", "c": ""}]]},
{"description":"Single-quoted attribute value not followed by whitespace",
"input":"<foo a='b'c>",
"output":["ParseError", ["StartTag", "foo", {"a": "b", "c": ""}]]},
{"description":"Quoted attribute followed by permitted /",
"input":"<br a='b'/>",
"output":[["StartTag","br",{"a":"b"},true]]},
{"description":"Quoted attribute followed by non-permitted /",
"input":"<bar a='b'/>",
"output":[["StartTag","bar",{"a":"b"},true]]},
{"description":"CR EOF after doctype name",
"input":"<!doctype html \r",
"output":["ParseError", ["DOCTYPE", "html", null, null, false]]},
{"description":"CR EOF in tag name",
"input":"<z\r",
"output":["ParseError"]},
{"description":"Slash EOF in tag name",
"input":"<z/",
"output":["ParseError"]},
{"description":"Zero hex numeric entity",
"input":"&#x0",
"output":["ParseError", "ParseError", ["Character", "\uFFFD"]]},
{"description":"Zero decimal numeric entity",
"input":"&#0",
"output":["ParseError", "ParseError", ["Character", "\uFFFD"]]},
{"description":"Zero-prefixed hex numeric entity",
"input":"&#x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000041;",
"output":[["Character", "A"]]},
{"description":"Zero-prefixed decimal numeric entity",
"input":"&#000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000065;",
"output":[["Character", "A"]]},
{"description":"Empty hex numeric entities",
"input":"&#x &#X ",
"output":["ParseError", ["Character", "&#x "], "ParseError", ["Character", "&#X "]]},
{"description":"Empty decimal numeric entities",
"input":"&# &#; ",
"output":["ParseError", ["Character", "&# "], "ParseError", ["Character", "&#; "]]},
{"description":"Non-BMP numeric entity",
"input":"&#x10000;",
"output":[["Character", "\uD800\uDC00"]]},
{"description":"Maximum non-BMP numeric entity",
"input":"&#X10FFFF;",
"output":["ParseError", ["Character", "\uFFFD"]]},
{"description":"Above maximum numeric entity",
"input":"&#x110000;",
"output":["ParseError", ["Character", "\uFFFD"]]},
{"description":"32-bit hex numeric entity",
"input":"&#x80000041;",
"output":["ParseError", ["Character", "\uFFFD"]]},
{"description":"33-bit hex numeric entity",
"input":"&#x100000041;",
"output":["ParseError", ["Character", "\uFFFD"]]},
{"description":"33-bit decimal numeric entity",
"input":"&#4294967361;",
"output":["ParseError", ["Character", "\uFFFD"]]},
{"description":"65-bit hex numeric entity",
"input":"&#x10000000000000041;",
"output":["ParseError", ["Character", "\uFFFD"]]},
{"description":"65-bit decimal numeric entity",
"input":"&#18446744073709551681;",
"output":["ParseError", ["Character", "\uFFFD"]]},
{"description":"Surrogate code point edge cases",
"input":"&#xD7FF;&#xD800;&#xD801;&#xDFFE;&#xDFFF;&#xE000;",
"output":[["Character", "\uD7FF"], "ParseError", ["Character", "\uFFFD"], "ParseError", ["Character", "\uFFFD"], "ParseError", ["Character", "\uFFFD"], "ParseError", ["Character", "\uFFFD\uE000"]]},
{"description":"Uppercase start tag name",
"input":"<X>",
"output":[["StartTag", "x", {}]]},
{"description":"Uppercase end tag name",
"input":"</X>",
"output":[["EndTag", "x"]]},
{"description":"Uppercase attribute name",
"input":"<x X>",
"output":[["StartTag", "x", { "x":"" }]]},
{"description":"Tag/attribute name case edge values",
"input":"<x@AZ[`az{ @AZ[`az{>",
"output":[["StartTag", "x@az[`az{", { "@az[`az{":"" }]]},
{"description":"Duplicate different-case attributes",
"input":"<x x=1 x=2 X=3>",
"output":["ParseError", "ParseError", ["StartTag", "x", { "x":"1" }]]},
{"description":"Uppercase close tag attributes",
"input":"</x X>",
"output":["ParseError", ["EndTag", "x"]]},
{"description":"Duplicate close tag attributes",
"input":"</x x x>",
"output":["ParseError", "ParseError", ["EndTag", "x"]]},
{"description":"Permitted slash",
"input":"<br/>",
"output":[["StartTag","br",{},true]]},
{"description":"Non-permitted slash",
"input":"<xr/>",
"output":[["StartTag","xr",{},true]]},
{"description":"Permitted slash but in close tag",
"input":"</br/>",
"output":["ParseError", ["StartTag", "br", {}], ["EndTag", "br"]]},
{"description":"Doctype public case-sensitivity (1)",
"input":"<!DoCtYpE HtMl PuBlIc \"AbC\" \"XyZ\">",
"output":[["DOCTYPE", "html", "AbC", "XyZ", true]]},
{"description":"Doctype public case-sensitivity (2)",
"input":"<!dOcTyPe hTmL pUbLiC \"aBc\" \"xYz\">",
"output":[["DOCTYPE", "html", "aBc", "xYz", true]]},
{"description":"Doctype system case-sensitivity (1)",
"input":"<!DoCtYpE HtMl SyStEm \"XyZ\">",
"output":[["DOCTYPE", "html", null, "XyZ", true]]},
{"description":"Doctype system case-sensitivity (2)",
"input":"<!dOcTyPe hTmL sYsTeM \"xYz\">",
"output":[["DOCTYPE", "html", null, "xYz", true]]},
{"description":"U+0000 in lookahead region after non-matching character",
"input":"<!doc>\u0000",
"output":["ParseError", ["Comment", "doc"], "ParseError", ["Character", "\uFFFD"]],
"ignoreErrorOrder":true},
{"description":"U+0000 in lookahead region",
"input":"<!doc\u0000",
"output":["ParseError", "ParseError", ["Comment", "doc\uFFFD"]],
"ignoreErrorOrder":true},
{"description":"U+0080 in lookahead region",
"input":"<!doc\u0080",
"output":["ParseError", "ParseError", ["Comment", "doc\u0080"]],
"ignoreErrorOrder":true},
{"description":"U+FDD1 in lookahead region",
"input":"<!doc\uFDD1",
"output":["ParseError", "ParseError", ["Comment", "doc\uFDD1"]],
"ignoreErrorOrder":true},
{"description":"U+1FFFF in lookahead region",
"input":"<!doc\uD83F\uDFFF",
"output":["ParseError", "ParseError", ["Comment", "doc\uD83F\uDFFF"]],
"ignoreErrorOrder":true},
{"description":"CR followed by U+0000",
"input":"\r\u0000",
"output":["ParseError", ["Character", "\n\uFFFD"]],
"ignoreErrorOrder":true},
{"description":"CR followed by non-LF",
"input":"\r?",
"output":[["Character", "\n?"]]},
{"description":"CR at EOF",
"input":"\r",
"output":[["Character", "\n"]]},
{"description":"LF at EOF",
"input":"\n",
"output":[["Character", "\n"]]},
{"description":"CR LF",
"input":"\r\n",
"output":[["Character", "\n"]]},
{"description":"CR CR",
"input":"\r\r",
"output":[["Character", "\n\n"]]},
{"description":"LF LF",
"input":"\n\n",
"output":[["Character", "\n\n"]]},
{"description":"LF CR",
"input":"\n\r",
"output":[["Character", "\n\n"]]},
{"description":"text CR CR CR text",
"input":"text\r\r\rtext",
"output":[["Character", "text\n\n\ntext"]]},
{"description":"Doctype publik",
"input":"<!DOCTYPE html PUBLIK \"AbC\" \"XyZ\">",
"output":["ParseError", ["DOCTYPE", "html", null, null, false]]},
{"description":"Doctype publi",
"input":"<!DOCTYPE html PUBLI",
"output":["ParseError", ["DOCTYPE", "html", null, null, false]]},
{"description":"Doctype sistem",
"input":"<!DOCTYPE html SISTEM \"AbC\">",
"output":["ParseError", ["DOCTYPE", "html", null, null, false]]},
{"description":"Doctype sys",
"input":"<!DOCTYPE html SYS",
"output":["ParseError", ["DOCTYPE", "html", null, null, false]]},
{"description":"Doctype html x>text",
"input":"<!DOCTYPE html x>text",
"output":["ParseError", ["DOCTYPE", "html", null, null, false], ["Character", "text"]]}
]}

Просмотреть файл

@ -0,0 +1,132 @@
/**
* Tests in this file are taken from contentModelFlags.test, escapeFlag.test,
* and xmlViolation.test, at
* http://html5lib.googlecode.com/hg/testdata/tokenizer/. Those tests with
* a 'lastStartTag' field have been adjusted to add the start tag to the
* input and output, since these tests are run through the tree builder and
* not just the tokenizer.
*/
var tokenizerTests = {"tests": [
{"description":"Commented close tag in [R]CDATA",
"contentModelFlags":["RCDATA", "CDATA"],
"lastStartTag":"xmp",
"input":"<xmp>foo<!--</xmp>--></xmp>",
"output":[["StartTag", "xmp", {}], ["Character", "foo<!--</xmp>-->"], ["EndTag", "xmp"]]},
{"description":"Bogus comment in [R]CDATA",
"contentModelFlags":["RCDATA", "CDATA"],
"lastStartTag":"xmp",
"input":"<xmp>foo<!-->baz</xmp>",
"output":[["StartTag", "xmp", {}], ["Character", "foo<!-->baz"], ["EndTag", "xmp"]]},
{"description":"End tag surrounded by bogus comment in [R]CDATA",
"contentModelFlags":["RCDATA", "CDATA"],
"lastStartTag":"xmp",
"input":"<xmp>foo<!--></xmp><!-->baz</xmp>",
"output":[["StartTag", "xmp", {}], ["Character", "foo<!-->"], ["EndTag", "xmp"], "ParseError", ["Comment", ""], ["Character", "baz"], ["EndTag", "xmp"]]},
{"description":"Commented entities in RCDATA",
"contentModelFlags":["RCDATA"],
"lastStartTag":"xmp",
"input":"<xmp> &amp; <!-- &amp; --> &amp; </xmp>",
"output":[["StartTag", "xmp", {}], ["Character", " & <!-- &amp; --> & "], ["EndTag", "xmp"]]},
{"description":"Incorrect comment ending sequences in [R]CDATA",
"contentModelFlags":["RCDATA", "CDATA"],
"lastStartTag":"xmp",
"input":"<xmp>foo<!-- x --x>x-- >x--!>x--<></xmp>",
"output":[["StartTag", "xmp", {}], ["Character", "foo<!-- x --x>x-- >x--!>x--<></xmp>"]]},
{"description":"Non-XML character",
"input":"a\uFFFFb",
"ignoreErrorOrder":true,
"output":["ParseError",["Character","a\uFFFDb"]]},
{"description":"Non-XML space",
"input":"a\u000Cb",
"ignoreErrorOrder":true,
"output":[["Character","a b"]]},
{"description":"Double hyphen in comment",
"input":"<!-- foo -- bar -->",
"output":["ParseError",["Comment"," foo - - bar "]]},
{"description":"FF between attributes",
"input":"<a b=''\u000Cc=''>",
"output":[["StartTag","a",{"b":"","c":""}]]},
{"description":"PLAINTEXT content model flag",
"contentModelFlags":["PLAINTEXT"],
"lastStartTag":"plaintext",
"input":"<plaintext><head>&body;",
"output":[["StartTag", "plaintext", {}], ["Character", "<head>&body;"]]},
{"description":"End tag closing RCDATA or CDATA",
"contentModelFlags":["RCDATA", "CDATA"],
"lastStartTag":"xmp",
"input":"<xmp>foo</xmp>",
"output":[["StartTag", "xmp", {}], ["Character", "foo"], ["EndTag", "xmp"]]},
{"description":"End tag closing RCDATA or CDATA (case-insensitivity)",
"contentModelFlags":["RCDATA", "CDATA"],
"lastStartTag":"xmp",
"input":"<xmp>foo</xMp>",
"output":[["StartTag", "xmp", {}], ["Character", "foo"], ["EndTag", "xmp"]]},
{"description":"End tag closing RCDATA or CDATA (ending with space)",
"contentModelFlags":["RCDATA", "CDATA"],
"lastStartTag":"xmp",
"input":"<xmp>foo</xmp ",
"output":[["StartTag", "xmp", {}], ["Character", "foo"], "ParseError"]},
{"description":"End tag closing RCDATA or CDATA (ending with EOF)",
"contentModelFlags":["RCDATA", "CDATA"],
"lastStartTag":"xmp",
"input":"<xmp>foo</xmp",
"output":[["StartTag", "xmp", {}], ["Character", "foo"], "ParseError"]},
{"description":"End tag closing RCDATA or CDATA (ending with slash)",
"contentModelFlags":["RCDATA", "CDATA"],
"lastStartTag":"xmp",
"input":"<xmp>foo</xmp/",
"output":[["StartTag", "xmp", {}], ["Character", "foo"], "ParseError"]},
{"description":"End tag not closing RCDATA or CDATA (ending with left-angle-bracket)",
"contentModelFlags":["RCDATA", "CDATA"],
"lastStartTag":"xmp",
"input":"<xmp>foo</xmp<",
"output":[["StartTag", "xmp", {}], ["Character", "foo</xmp<"]]},
{"description":"End tag with incorrect name in RCDATA or CDATA",
"contentModelFlags":["RCDATA", "CDATA"],
"lastStartTag":"xmp",
"input":"<xmp></foo>bar</xmp>",
"output":[["StartTag", "xmp", {}], ["Character", "</foo>bar"], ["EndTag", "xmp"]]},
{"description":"End tag with incorrect name in RCDATA or CDATA (starting like correct name)",
"contentModelFlags":["RCDATA", "CDATA"],
"lastStartTag":"xmp",
"input":"<xmp></foo>bar</xmpaar>",
"output":[["StartTag", "xmp", {}], ["Character", "</foo>bar</xmpaar>"]]},
{"description":"End tag closing RCDATA or CDATA, switching back to PCDATA",
"contentModelFlags":["RCDATA", "CDATA"],
"lastStartTag":"xmp",
"input":"<xmp>foo</xmp></baz>",
"output":[["StartTag", "xmp", {}], ["Character", "foo"], ["EndTag", "xmp"], ["EndTag", "baz"]]},
{"description":"CDATA w/ something looking like an entity",
"contentModelFlags":["CDATA"],
"lastStartTag":"xmp",
"input":"<xmp>&foo;",
"output":[["StartTag", "xmp", {}], ["Character", "&foo;"]]},
{"description":"RCDATA w/ an entity",
"contentModelFlags":["RCDATA"],
"lastStartTag":"textarea",
"input":"<textarea>&lt;",
"output":[["StartTag", "textarea", {}], ["Character", "<"]]}
]}

Разница между файлами не показана из-за своего большого размера Загрузить разницу

Разница между файлами не показана из-за своего большого размера Загрузить разницу

Просмотреть файл

@ -0,0 +1,430 @@
#data
<!DOCTYPE html><svg></svg>
#errors
#document
| <!DOCTYPE html>
| <html>
| <head>
| <body>
| <svg svg>
#data
<!DOCTYPE html><body><svg></svg>
#errors
#document
| <!DOCTYPE html>
| <html>
| <head>
| <body>
| <svg svg>
#data
<!DOCTYPE html><body><select><svg></svg></select>
#errors
35: Stray “svg” start tag.
42: Stray end tag “svg”
#document
| <!DOCTYPE html>
| <html>
| <head>
| <body>
| <select>
#data
<!DOCTYPE html><body><select><option><svg></svg></option></select>
#errors
43: Stray “svg” start tag.
50: Stray end tag “svg”
#document
| <!DOCTYPE html>
| <html>
| <head>
| <body>
| <select>
| <option>
#data
<!DOCTYPE html><body><table><svg></svg></table>
#errors
34: Start tag “svg” seen in “table”.
41: Stray end tag “svg”.
#document
| <!DOCTYPE html>
| <html>
| <head>
| <body>
| <svg svg>
| <table>
#data
<!DOCTYPE html><body><table><svg><g>foo</g></svg></table>
#errors
34: Start tag “svg” seen in “table”.
46: Stray end tag “g”.
53: Stray end tag “svg”.
#document
| <!DOCTYPE html>
| <html>
| <head>
| <body>
| <svg svg>
| <svg g>
| "foo"
| <table>
#data
<!DOCTYPE html><body><table><svg><g>foo</g><g>bar</g></svg></table>
#errors
34: Start tag “svg” seen in “table”.
46: Stray end tag “g”.
58: Stray end tag “g”.
65: Stray end tag “svg”.
#document
| <!DOCTYPE html>
| <html>
| <head>
| <body>
| <svg svg>
| <svg g>
| "foo"
| <svg g>
| "bar"
| <table>
#data
<!DOCTYPE html><body><table><tbody><svg><g>foo</g><g>bar</g></svg></tbody></table>
#errors
41: Start tag “svg” seen in “table”.
53: Stray end tag “g”.
65: Stray end tag “g”.
72: Stray end tag “svg”.
#document
| <!DOCTYPE html>
| <html>
| <head>
| <body>
| <svg svg>
| <svg g>
| "foo"
| <svg g>
| "bar"
| <table>
| <tbody>
#data
<!DOCTYPE html><body><table><tbody><tr><svg><g>foo</g><g>bar</g></svg></tr></tbody></table>
#errors
45: Start tag “svg” seen in “table”.
57: Stray end tag “g”.
69: Stray end tag “g”.
76: Stray end tag “svg”.
#document
| <!DOCTYPE html>
| <html>
| <head>
| <body>
| <svg svg>
| <svg g>
| "foo"
| <svg g>
| "bar"
| <table>
| <tbody>
| <tr>
#data
<!DOCTYPE html><body><table><tbody><tr><td><svg><g>foo</g><g>bar</g></svg></td></tr></tbody></table>
#errors
#document
| <!DOCTYPE html>
| <html>
| <head>
| <body>
| <table>
| <tbody>
| <tr>
| <td>
| <svg svg>
| <svg g>
| "foo"
| <svg g>
| "bar"
#data
<!DOCTYPE html><body><table><tbody><tr><td><svg><g>foo</g><g>bar</g></svg><p>baz</td></tr></tbody></table>
#errors
#document
| <!DOCTYPE html>
| <html>
| <head>
| <body>
| <table>
| <tbody>
| <tr>
| <td>
| <svg svg>
| <svg g>
| "foo"
| <svg g>
| "bar"
| <p>
| "baz"
#data
<!DOCTYPE html><body><table><caption><svg><g>foo</g><g>bar</g></svg><p>baz</caption></table>
#errors
#document
| <!DOCTYPE html>
| <html>
| <head>
| <body>
| <table>
| <caption>
| <svg svg>
| <svg g>
| "foo"
| <svg g>
| "bar"
| <p>
| "baz"
#data
<!DOCTYPE html><body><table><caption><svg><g>foo</g><g>bar</g><p>baz</table><p>quux
#errors
70: HTML start tag “p” in a foreign namespace context.
81: “table” closed but “caption” was still open.
#document
| <!DOCTYPE html>
| <html>
| <head>
| <body>
| <table>
| <caption>
| <svg svg>
| <svg g>
| "foo"
| <svg g>
| "bar"
| <p>
| "baz"
| <p>
| "quux"
#data
<!DOCTYPE html><body><table><caption><svg><g>foo</g><g>bar</g>baz</table><p>quux
#errors
78: “table” closed but “caption” was still open.
78: Unclosed elements on stack.
#document
| <!DOCTYPE html>
| <html>
| <head>
| <body>
| <table>
| <caption>
| <svg svg>
| <svg g>
| "foo"
| <svg g>
| "bar"
| "baz"
| <p>
| "quux"
#data
<!DOCTYPE html><body><table><colgroup><svg><g>foo</g><g>bar</g><p>baz</table><p>quux
#errors
44: Start tag “svg” seen in “table”.
56: Stray end tag “g”.
68: Stray end tag “g”.
71: HTML start tag “p” in a foreign namespace context.
71: Start tag “p” seen in “table”.
#document
| <!DOCTYPE html>
| <html>
| <head>
| <body>
| <svg svg>
| <svg g>
| "foo"
| <svg g>
| "bar"
| <p>
| "baz"
| <table>
| <colgroup>
| <p>
| "quux"
#data
<!DOCTYPE html><body><table><tr><td><select><svg><g>foo</g><g>bar</g><p>baz</table><p>quux
#errors
50: Stray “svg” start tag.
54: Stray “g” start tag.
62: Stray end tag “g”
66: Stray “g” start tag.
74: Stray end tag “g”
77: Stray “p” start tag.
88: “table” end tag with “select” open.
#document
| <!DOCTYPE html>
| <html>
| <head>
| <body>
| <table>
| <tbody>
| <tr>
| <td>
| <select>
| "foobarbaz"
| <p>
| "quux"
#data
<!DOCTYPE html><body><table><select><svg><g>foo</g><g>bar</g><p>baz</table><p>quux
#errors
36: Start tag “select” seen in “table”.
42: Stray “svg” start tag.
46: Stray “g” start tag.
54: Stray end tag “g”
58: Stray “g” start tag.
66: Stray end tag “g”
69: Stray “p” start tag.
80: “table” end tag with “select” open.
#document
| <!DOCTYPE html>
| <html>
| <head>
| <body>
| <select>
| "foobarbaz"
| <table>
| <p>
| "quux"
#data
<!DOCTYPE html><body></body></html><svg><g>foo</g><g>bar</g><p>baz
#errors
41: Stray “svg” start tag.
68: HTML start tag “p” in a foreign namespace context.
#document
| <!DOCTYPE html>
| <html>
| <head>
| <body>
| <svg svg>
| <svg g>
| "foo"
| <svg g>
| "bar"
| <p>
| "baz"
#data
<!DOCTYPE html><body></body><svg><g>foo</g><g>bar</g><p>baz
#errors
34: Stray “svg” start tag.
61: HTML start tag “p” in a foreign namespace context.
#document
| <!DOCTYPE html>
| <html>
| <head>
| <body>
| <svg svg>
| <svg g>
| "foo"
| <svg g>
| "bar"
| <p>
| "baz"
#data
<!DOCTYPE html><frameset><svg><g></g><g></g><p><span>
#errors
31: Stray “svg” start tag.
35: Stray “g” start tag.
40: Stray end tag “g”
44: Stray “g” start tag.
49: Stray end tag “g”
52: Stray “p” start tag.
58: Stray “span” start tag.
58: End of file seen and there were open elements.
#document
| <!DOCTYPE html>
| <html>
| <head>
| <frameset>
#data
<!DOCTYPE html><frameset></frameset><svg><g></g><g></g><p><span>
#errors
42: Stray “svg” start tag.
46: Stray “g” start tag.
51: Stray end tag “g”
55: Stray “g” start tag.
60: Stray end tag “g”
63: Stray “p” start tag.
69: Stray “span” start tag.
#document
| <!DOCTYPE html>
| <html>
| <head>
| <frameset>
#data
<!DOCTYPE html><body xlink:href=foo><svg xlink:href=foo></svg>
#errors
#document
| <!DOCTYPE html>
| <html>
| <head>
| <body>
| xlink:href="foo"
| <svg svg>
| xlink href="foo"
#data
<!DOCTYPE html><body xlink:href=foo xml:lang=en><svg><g xml:lang=en xlink:href=foo></g></svg>
#errors
#document
| <!DOCTYPE html>
| <html>
| <head>
| <body>
| xlink:href="foo"
| xml:lang="en"
| <svg svg>
| <svg g>
| xlink href="foo"
| xml lang="en"
#data
<!DOCTYPE html><body xlink:href=foo xml:lang=en><svg><g xml:lang=en xlink:href=foo /></svg>
#errors
#document
| <!DOCTYPE html>
| <html>
| <head>
| <body>
| xlink:href="foo"
| xml:lang="en"
| <svg svg>
| <svg g>
| xlink href="foo"
| xml lang="en"
#data
<!DOCTYPE html><body xlink:href=foo xml:lang=en><svg><g xml:lang=en xlink:href=foo />bar</svg>
#errors
#document
| <!DOCTYPE html>
| <html>
| <head>
| <body>
| xlink:href="foo"
| xml:lang="en"
| <svg svg>
| <svg g>
| xlink href="foo"
| xml lang="en"
| "bar"

Просмотреть файл

@ -0,0 +1,482 @@
#data
<!DOCTYPE html><body><svg attributeName='' attributeType='' baseFrequency='' baseProfile='' calcMode='' clipPathUnits='' contentScriptType='' contentStyleType='' diffuseConstant='' edgeMode='' externalResourcesRequired='' filterRes='' filterUnits='' glyphRef='' gradientTransform='' gradientUnits='' kernelMatrix='' kernelUnitLength='' keyPoints='' keySplines='' keyTimes='' lengthAdjust='' limitingConeAngle='' markerHeight='' markerUnits='' markerWidth='' maskContentUnits='' maskUnits='' numOctaves='' pathLength='' patternContentUnits='' patternTransform='' patternUnits='' pointsAtX='' pointsAtY='' pointsAtZ='' preserveAlpha='' preserveAspectRatio='' primitiveUnits='' refX='' refY='' repeatCount='' repeatDur='' requiredExtensions='' requiredFeatures='' specularConstant='' specularExponent='' spreadMethod='' startOffset='' stdDeviation='' stitchTiles='' surfaceScale='' systemLanguage='' tableValues='' targetX='' targetY='' textLength='' viewBox='' viewTarget='' xChannelSelector='' yChannelSelector='' zoomAndPan=''></svg>
#errors
#document
| <!DOCTYPE html>
| <html>
| <head>
| <body>
| <svg svg>
| attributeName=""
| attributeType=""
| baseFrequency=""
| baseProfile=""
| calcMode=""
| clipPathUnits=""
| contentScriptType=""
| contentStyleType=""
| diffuseConstant=""
| edgeMode=""
| externalResourcesRequired=""
| filterRes=""
| filterUnits=""
| glyphRef=""
| gradientTransform=""
| gradientUnits=""
| kernelMatrix=""
| kernelUnitLength=""
| keyPoints=""
| keySplines=""
| keyTimes=""
| lengthAdjust=""
| limitingConeAngle=""
| markerHeight=""
| markerUnits=""
| markerWidth=""
| maskContentUnits=""
| maskUnits=""
| numOctaves=""
| pathLength=""
| patternContentUnits=""
| patternTransform=""
| patternUnits=""
| pointsAtX=""
| pointsAtY=""
| pointsAtZ=""
| preserveAlpha=""
| preserveAspectRatio=""
| primitiveUnits=""
| refX=""
| refY=""
| repeatCount=""
| repeatDur=""
| requiredExtensions=""
| requiredFeatures=""
| specularConstant=""
| specularExponent=""
| spreadMethod=""
| startOffset=""
| stdDeviation=""
| stitchTiles=""
| surfaceScale=""
| systemLanguage=""
| tableValues=""
| targetX=""
| targetY=""
| textLength=""
| viewBox=""
| viewTarget=""
| xChannelSelector=""
| yChannelSelector=""
| zoomAndPan=""
#data
<!DOCTYPE html><BODY><SVG ATTRIBUTENAME='' ATTRIBUTETYPE='' BASEFREQUENCY='' BASEPROFILE='' CALCMODE='' CLIPPATHUNITS='' CONTENTSCRIPTTYPE='' CONTENTSTYLETYPE='' DIFFUSECONSTANT='' EDGEMODE='' EXTERNALRESOURCESREQUIRED='' FILTERRES='' FILTERUNITS='' GLYPHREF='' GRADIENTTRANSFORM='' GRADIENTUNITS='' KERNELMATRIX='' KERNELUNITLENGTH='' KEYPOINTS='' KEYSPLINES='' KEYTIMES='' LENGTHADJUST='' LIMITINGCONEANGLE='' MARKERHEIGHT='' MARKERUNITS='' MARKERWIDTH='' MASKCONTENTUNITS='' MASKUNITS='' NUMOCTAVES='' PATHLENGTH='' PATTERNCONTENTUNITS='' PATTERNTRANSFORM='' PATTERNUNITS='' POINTSATX='' POINTSATY='' POINTSATZ='' PRESERVEALPHA='' PRESERVEASPECTRATIO='' PRIMITIVEUNITS='' REFX='' REFY='' REPEATCOUNT='' REPEATDUR='' REQUIREDEXTENSIONS='' REQUIREDFEATURES='' SPECULARCONSTANT='' SPECULAREXPONENT='' SPREADMETHOD='' STARTOFFSET='' STDDEVIATION='' STITCHTILES='' SURFACESCALE='' SYSTEMLANGUAGE='' TABLEVALUES='' TARGETX='' TARGETY='' TEXTLENGTH='' VIEWBOX='' VIEWTARGET='' XCHANNELSELECTOR='' YCHANNELSELECTOR='' ZOOMANDPAN=''></SVG>
#errors
#document
| <!DOCTYPE html>
| <html>
| <head>
| <body>
| <svg svg>
| attributeName=""
| attributeType=""
| baseFrequency=""
| baseProfile=""
| calcMode=""
| clipPathUnits=""
| contentScriptType=""
| contentStyleType=""
| diffuseConstant=""
| edgeMode=""
| externalResourcesRequired=""
| filterRes=""
| filterUnits=""
| glyphRef=""
| gradientTransform=""
| gradientUnits=""
| kernelMatrix=""
| kernelUnitLength=""
| keyPoints=""
| keySplines=""
| keyTimes=""
| lengthAdjust=""
| limitingConeAngle=""
| markerHeight=""
| markerUnits=""
| markerWidth=""
| maskContentUnits=""
| maskUnits=""
| numOctaves=""
| pathLength=""
| patternContentUnits=""
| patternTransform=""
| patternUnits=""
| pointsAtX=""
| pointsAtY=""
| pointsAtZ=""
| preserveAlpha=""
| preserveAspectRatio=""
| primitiveUnits=""
| refX=""
| refY=""
| repeatCount=""
| repeatDur=""
| requiredExtensions=""
| requiredFeatures=""
| specularConstant=""
| specularExponent=""
| spreadMethod=""
| startOffset=""
| stdDeviation=""
| stitchTiles=""
| surfaceScale=""
| systemLanguage=""
| tableValues=""
| targetX=""
| targetY=""
| textLength=""
| viewBox=""
| viewTarget=""
| xChannelSelector=""
| yChannelSelector=""
| zoomAndPan=""
#data
<!DOCTYPE html><body><svg attributename='' attributetype='' basefrequency='' baseprofile='' calcmode='' clippathunits='' contentscripttype='' contentstyletype='' diffuseconstant='' edgemode='' externalresourcesrequired='' filterres='' filterunits='' glyphref='' gradienttransform='' gradientunits='' kernelmatrix='' kernelunitlength='' keypoints='' keysplines='' keytimes='' lengthadjust='' limitingconeangle='' markerheight='' markerunits='' markerwidth='' maskcontentunits='' maskunits='' numoctaves='' pathlength='' patterncontentunits='' patterntransform='' patternunits='' pointsatx='' pointsaty='' pointsatz='' preservealpha='' preserveaspectratio='' primitiveunits='' refx='' refy='' repeatcount='' repeatdur='' requiredextensions='' requiredfeatures='' specularconstant='' specularexponent='' spreadmethod='' startoffset='' stddeviation='' stitchtiles='' surfacescale='' systemlanguage='' tablevalues='' targetx='' targety='' textlength='' viewbox='' viewtarget='' xchannelselector='' ychannelselector='' zoomandpan=''></svg>
#errors
#document
| <!DOCTYPE html>
| <html>
| <head>
| <body>
| <svg svg>
| attributeName=""
| attributeType=""
| baseFrequency=""
| baseProfile=""
| calcMode=""
| clipPathUnits=""
| contentScriptType=""
| contentStyleType=""
| diffuseConstant=""
| edgeMode=""
| externalResourcesRequired=""
| filterRes=""
| filterUnits=""
| glyphRef=""
| gradientTransform=""
| gradientUnits=""
| kernelMatrix=""
| kernelUnitLength=""
| keyPoints=""
| keySplines=""
| keyTimes=""
| lengthAdjust=""
| limitingConeAngle=""
| markerHeight=""
| markerUnits=""
| markerWidth=""
| maskContentUnits=""
| maskUnits=""
| numOctaves=""
| pathLength=""
| patternContentUnits=""
| patternTransform=""
| patternUnits=""
| pointsAtX=""
| pointsAtY=""
| pointsAtZ=""
| preserveAlpha=""
| preserveAspectRatio=""
| primitiveUnits=""
| refX=""
| refY=""
| repeatCount=""
| repeatDur=""
| requiredExtensions=""
| requiredFeatures=""
| specularConstant=""
| specularExponent=""
| spreadMethod=""
| startOffset=""
| stdDeviation=""
| stitchTiles=""
| surfaceScale=""
| systemLanguage=""
| tableValues=""
| targetX=""
| targetY=""
| textLength=""
| viewBox=""
| viewTarget=""
| xChannelSelector=""
| yChannelSelector=""
| zoomAndPan=""
#data
<!DOCTYPE html><body><math attributeName='' attributeType='' baseFrequency='' baseProfile='' calcMode='' clipPathUnits='' contentScriptType='' contentStyleType='' diffuseConstant='' edgeMode='' externalResourcesRequired='' filterRes='' filterUnits='' glyphRef='' gradientTransform='' gradientUnits='' kernelMatrix='' kernelUnitLength='' keyPoints='' keySplines='' keyTimes='' lengthAdjust='' limitingConeAngle='' markerHeight='' markerUnits='' markerWidth='' maskContentUnits='' maskUnits='' numOctaves='' pathLength='' patternContentUnits='' patternTransform='' patternUnits='' pointsAtX='' pointsAtY='' pointsAtZ='' preserveAlpha='' preserveAspectRatio='' primitiveUnits='' refX='' refY='' repeatCount='' repeatDur='' requiredExtensions='' requiredFeatures='' specularConstant='' specularExponent='' spreadMethod='' startOffset='' stdDeviation='' stitchTiles='' surfaceScale='' systemLanguage='' tableValues='' targetX='' targetY='' textLength='' viewBox='' viewTarget='' xChannelSelector='' yChannelSelector='' zoomAndPan=''></math>
#errors
#document
| <!DOCTYPE html>
| <html>
| <head>
| <body>
| <math math>
| attributename=""
| attributetype=""
| basefrequency=""
| baseprofile=""
| calcmode=""
| clippathunits=""
| contentscripttype=""
| contentstyletype=""
| diffuseconstant=""
| edgemode=""
| externalresourcesrequired=""
| filterres=""
| filterunits=""
| glyphref=""
| gradienttransform=""
| gradientunits=""
| kernelmatrix=""
| kernelunitlength=""
| keypoints=""
| keysplines=""
| keytimes=""
| lengthadjust=""
| limitingconeangle=""
| markerheight=""
| markerunits=""
| markerwidth=""
| maskcontentunits=""
| maskunits=""
| numoctaves=""
| pathlength=""
| patterncontentunits=""
| patterntransform=""
| patternunits=""
| pointsatx=""
| pointsaty=""
| pointsatz=""
| preservealpha=""
| preserveaspectratio=""
| primitiveunits=""
| refx=""
| refy=""
| repeatcount=""
| repeatdur=""
| requiredextensions=""
| requiredfeatures=""
| specularconstant=""
| specularexponent=""
| spreadmethod=""
| startoffset=""
| stddeviation=""
| stitchtiles=""
| surfacescale=""
| systemlanguage=""
| tablevalues=""
| targetx=""
| targety=""
| textlength=""
| viewbox=""
| viewtarget=""
| xchannelselector=""
| ychannelselector=""
| zoomandpan=""
#data
<!DOCTYPE html><body><svg><altGlyph /><altGlyphDef /><altGlyphItem /><animateColor /><animateMotion /><animateTransform /><clipPath /><feBlend /><feColorMatrix /><feComponentTransfer /><feComposite /><feConvolveMatrix /><feDiffuseLighting /><feDisplacementMap /><feDistantLight /><feFlood /><feFuncA /><feFuncB /><feFuncG /><feFuncR /><feGaussianBlur /><feImage /><feMerge /><feMergeNode /><feMorphology /><feOffset /><fePointLight /><feSpecularLighting /><feSpotLight /><feTile /><feTurbulence /><foreignObject /><glyphRef /><linearGradient /><radialGradient /><textPath /></svg>
#errors
#document
| <!DOCTYPE html>
| <html>
| <head>
| <body>
| <svg svg>
| <svg altGlyph>
| <svg altGlyphDef>
| <svg altGlyphItem>
| <svg animateColor>
| <svg animateMotion>
| <svg animateTransform>
| <svg clipPath>
| <svg feBlend>
| <svg feColorMatrix>
| <svg feComponentTransfer>
| <svg feComposite>
| <svg feConvolveMatrix>
| <svg feDiffuseLighting>
| <svg feDisplacementMap>
| <svg feDistantLight>
| <svg feFlood>
| <svg feFuncA>
| <svg feFuncB>
| <svg feFuncG>
| <svg feFuncR>
| <svg feGaussianBlur>
| <svg feImage>
| <svg feMerge>
| <svg feMergeNode>
| <svg feMorphology>
| <svg feOffset>
| <svg fePointLight>
| <svg feSpecularLighting>
| <svg feSpotLight>
| <svg feTile>
| <svg feTurbulence>
| <svg foreignObject>
| <svg glyphRef>
| <svg linearGradient>
| <svg radialGradient>
| <svg textPath>
#data
<!DOCTYPE html><body><svg><altglyph /><altglyphdef /><altglyphitem /><animatecolor /><animatemotion /><animatetransform /><clippath /><feblend /><fecolormatrix /><fecomponenttransfer /><fecomposite /><feconvolvematrix /><fediffuselighting /><fedisplacementmap /><fedistantlight /><feflood /><fefunca /><fefuncb /><fefuncg /><fefuncr /><fegaussianblur /><feimage /><femerge /><femergenode /><femorphology /><feoffset /><fepointlight /><fespecularlighting /><fespotlight /><fetile /><feturbulence /><foreignobject /><glyphref /><lineargradient /><radialgradient /><textpath /></svg>
#errors
#document
| <!DOCTYPE html>
| <html>
| <head>
| <body>
| <svg svg>
| <svg altGlyph>
| <svg altGlyphDef>
| <svg altGlyphItem>
| <svg animateColor>
| <svg animateMotion>
| <svg animateTransform>
| <svg clipPath>
| <svg feBlend>
| <svg feColorMatrix>
| <svg feComponentTransfer>
| <svg feComposite>
| <svg feConvolveMatrix>
| <svg feDiffuseLighting>
| <svg feDisplacementMap>
| <svg feDistantLight>
| <svg feFlood>
| <svg feFuncA>
| <svg feFuncB>
| <svg feFuncG>
| <svg feFuncR>
| <svg feGaussianBlur>
| <svg feImage>
| <svg feMerge>
| <svg feMergeNode>
| <svg feMorphology>
| <svg feOffset>
| <svg fePointLight>
| <svg feSpecularLighting>
| <svg feSpotLight>
| <svg feTile>
| <svg feTurbulence>
| <svg foreignObject>
| <svg glyphRef>
| <svg linearGradient>
| <svg radialGradient>
| <svg textPath>
#data
<!DOCTYPE html><BODY><SVG><ALTGLYPH /><ALTGLYPHDEF /><ALTGLYPHITEM /><ANIMATECOLOR /><ANIMATEMOTION /><ANIMATETRANSFORM /><CLIPPATH /><FEBLEND /><FECOLORMATRIX /><FECOMPONENTTRANSFER /><FECOMPOSITE /><FECONVOLVEMATRIX /><FEDIFFUSELIGHTING /><FEDISPLACEMENTMAP /><FEDISTANTLIGHT /><FEFLOOD /><FEFUNCA /><FEFUNCB /><FEFUNCG /><FEFUNCR /><FEGAUSSIANBLUR /><FEIMAGE /><FEMERGE /><FEMERGENODE /><FEMORPHOLOGY /><FEOFFSET /><FEPOINTLIGHT /><FESPECULARLIGHTING /><FESPOTLIGHT /><FETILE /><FETURBULENCE /><FOREIGNOBJECT /><GLYPHREF /><LINEARGRADIENT /><RADIALGRADIENT /><TEXTPATH /></SVG>
#errors
#document
| <!DOCTYPE html>
| <html>
| <head>
| <body>
| <svg svg>
| <svg altGlyph>
| <svg altGlyphDef>
| <svg altGlyphItem>
| <svg animateColor>
| <svg animateMotion>
| <svg animateTransform>
| <svg clipPath>
| <svg feBlend>
| <svg feColorMatrix>
| <svg feComponentTransfer>
| <svg feComposite>
| <svg feConvolveMatrix>
| <svg feDiffuseLighting>
| <svg feDisplacementMap>
| <svg feDistantLight>
| <svg feFlood>
| <svg feFuncA>
| <svg feFuncB>
| <svg feFuncG>
| <svg feFuncR>
| <svg feGaussianBlur>
| <svg feImage>
| <svg feMerge>
| <svg feMergeNode>
| <svg feMorphology>
| <svg feOffset>
| <svg fePointLight>
| <svg feSpecularLighting>
| <svg feSpotLight>
| <svg feTile>
| <svg feTurbulence>
| <svg foreignObject>
| <svg glyphRef>
| <svg linearGradient>
| <svg radialGradient>
| <svg textPath>
#data
<!DOCTYPE html><body><math><altGlyph /><altGlyphDef /><altGlyphItem /><animateColor /><animateMotion /><animateTransform /><clipPath /><feBlend /><feColorMatrix /><feComponentTransfer /><feComposite /><feConvolveMatrix /><feDiffuseLighting /><feDisplacementMap /><feDistantLight /><feFlood /><feFuncA /><feFuncB /><feFuncG /><feFuncR /><feGaussianBlur /><feImage /><feMerge /><feMergeNode /><feMorphology /><feOffset /><fePointLight /><feSpecularLighting /><feSpotLight /><feTile /><feTurbulence /><foreignObject /><glyphRef /><linearGradient /><radialGradient /><textPath /></math>
#errors
#document
| <!DOCTYPE html>
| <html>
| <head>
| <body>
| <math math>
| <math altglyph>
| <math altglyphdef>
| <math altglyphitem>
| <math animatecolor>
| <math animatemotion>
| <math animatetransform>
| <math clippath>
| <math feblend>
| <math fecolormatrix>
| <math fecomponenttransfer>
| <math fecomposite>
| <math feconvolvematrix>
| <math fediffuselighting>
| <math fedisplacementmap>
| <math fedistantlight>
| <math feflood>
| <math fefunca>
| <math fefuncb>
| <math fefuncg>
| <math fefuncr>
| <math fegaussianblur>
| <math feimage>
| <math femerge>
| <math femergenode>
| <math femorphology>
| <math feoffset>
| <math fepointlight>
| <math fespecularlighting>
| <math fespotlight>
| <math fetile>
| <math feturbulence>
| <math foreignobject>
| <math glyphref>
| <math lineargradient>
| <math radialgradient>
| <math textpath>
#data
<!DOCTYPE html><body><svg><solidColor /></svg>
#errors
#document
| <!DOCTYPE html>
| <html>
| <head>
| <body>
| <svg svg>
| <svg solidcolor>

Просмотреть файл

@ -0,0 +1,62 @@
#data
<!DOCTYPE html><body><p>foo<math><mtext><i>baz</i></mtext><annotation-xml><svg><desc><b>eggs</b></desc><g><foreignObject><P>spam<TABLE><tr><td><img></td></table></foreignObject></g><g>quux</g></svg></annotation-xml></math>bar
#errors
#document
| <!DOCTYPE html>
| <html>
| <head>
| <body>
| <p>
| "foo"
| <math math>
| <math mtext>
| <i>
| "baz"
| <math annotation-xml>
| <svg svg>
| <svg desc>
| <b>
| "eggs"
| <svg g>
| <svg foreignObject>
| <p>
| "spam"
| <table>
| <tbody>
| <tr>
| <td>
| <img>
| <svg g>
| "quux"
| "bar"
#data
<!DOCTYPE html><body>foo<math><mtext><i>baz</i></mtext><annotation-xml><svg><desc><b>eggs</b></desc><g><foreignObject><P>spam<TABLE><tr><td><img></td></table></foreignObject></g><g>quux</g></svg></annotation-xml></math>bar
#errors
#document
| <!DOCTYPE html>
| <html>
| <head>
| <body>
| "foo"
| <math math>
| <math mtext>
| <i>
| "baz"
| <math annotation-xml>
| <svg svg>
| <svg desc>
| <b>
| "eggs"
| <svg g>
| <svg foreignObject>
| <p>
| "spam"
| <table>
| <tbody>
| <tr>
| <td>
| <img>
| <svg g>
| "quux"
| "bar"

Просмотреть файл

@ -0,0 +1,32 @@
#data
<!DOCTYPE html><html><body><xyz:abc></xyz:abc>
#errors
#document
| <!DOCTYPE html>
| <html>
| <head>
| <body>
| <xyz:abc>
#data
<!DOCTYPE html><html><html abc:def=gh><xyz:abc></xyz:abc>
#errors
15: Unexpected start tag html
#document
| <!DOCTYPE html>
| <html>
| abc:def="gh"
| <head>
| <body>
| <xyz:abc>
#data
<!DOCTYPE html><html xml:lang=bar><html xml:lang=foo>
#errors
15: Unexpected start tag html
#document
| <!DOCTYPE html>
| <html>
| xml:lang="bar"
| <head>
| <body>

Просмотреть файл

@ -1,8 +1,8 @@
#data
<!doctype html>Test
<!DOCTYPE html>Test
#errors
#document
| <!DOCTYPE HTML>
| <!DOCTYPE html>
| <html>
| <head>
| <body>
@ -11,9 +11,8 @@
#data
<textarea>test</div>test
#errors
10: missing document type declaration.
17: unescaped '</' in CDATA or RCDATA block.
25: unexpected end of file while parsing CDATA section for element textarea.
Line: 1 Col: 10 Unexpected start tag (textarea). Expected DOCTYPE.
Line: 1 Col: 24 Expected closing tag. Unexpected end of file.
#document
| <html>
| <head>
@ -24,9 +23,9 @@
#data
<table><td>
#errors
7: missing document type declaration.
11: required tr element start tag implied by unexpected td element start tag.
12: unexpected end of file implied table element end tag.
Line: 1 Col: 7 Unexpected start tag (table). Expected DOCTYPE.
Line: 1 Col: 11 Unexpected table cell start tag (td) in the table body phase.
Line: 1 Col: 11 Expected closing tag. Unexpected end of file.
#document
| <html>
| <head>
@ -39,8 +38,8 @@
#data
<table><td>test</tbody></table>
#errors
missing document type declarattion
Unexpected and of file
Line: 1 Col: 7 Unexpected start tag (table). Expected DOCTYPE.
Line: 1 Col: 11 Unexpected table cell start tag (td) in the table body phase.
#document
| <html>
| <head>
@ -54,8 +53,8 @@ Unexpected and of file
#data
<frame>test
#errors
missing document type declaration
frame element can't occur here
Line: 1 Col: 7 Unexpected start tag (frame). Expected DOCTYPE.
Line: 1 Col: 7 Unexpected start tag frame. Ignored.
#document
| <html>
| <head>
@ -63,32 +62,34 @@ frame element can't occur here
| "test"
#data
<!doctype html><frameset>test
<!DOCTYPE html><frameset>test
#errors
frameset can't contain text
Unexpected end of file
Line: 1 Col: 29 Unepxected characters in the frameset phase. Characters ignored.
Line: 1 Col: 29 Expected closing tag. Unexpected end of file.
#document
| <!DOCTYPE HTML>
| <!DOCTYPE html>
| <html>
| <head>
| <frameset>
#data
<!doctype html><frameset><!doctype html>
<!DOCTYPE html><frameset><!DOCTYPE html>
#errors
document type declaration can only occur at the start of a document
Expected end tag </frameset>
Line: 1 Col: 40 Unexpected DOCTYPE. Ignored.
Line: 1 Col: 40 Expected closing tag. Unexpected end of file.
#document
| <!DOCTYPE HTML>
| <!DOCTYPE html>
| <html>
| <head>
| <frameset>
#data
<!doctype html><font><p><b>test</font>
<!DOCTYPE html><font><p><b>test</font>
#errors
Line: 1 Col: 38 End tag (font) violates step 1, paragraph 3 of the adoption agency algorithm.
Line: 1 Col: 38 End tag (font) violates step 1, paragraph 3 of the adoption agency algorithm.
#document
| <!DOCTYPE HTML>
| <!DOCTYPE html>
| <html>
| <head>
| <body>
@ -99,10 +100,11 @@ Expected end tag </frameset>
| "test"
#data
<!DOCTYPE htmL><dt><div><dd>
<!DOCTYPE html><dt><div><dd>
#errors
Line: 1 Col: 28 Missing end tag (div, dt).
#document
| <!DOCTYPE HTML>
| <!DOCTYPE html>
| <html>
| <head>
| <body>
@ -113,9 +115,8 @@ Expected end tag </frameset>
#data
<script></x
#errors
no document type
</ in script
Unexpected end of file. Expected </script> end tag.
Line: 1 Col: 8 Unexpected start tag (script). Expected DOCTYPE.
Line: 1 Col: 11 Unexpected end of file. Expected end tag (script).
#document
| <html>
| <head>
@ -126,10 +127,9 @@ Unexpected end of file. Expected </script> end tag.
#data
<table><plaintext><td>
#errors
no document type
<plaintext> directly inside table
Characters inside table.
Unexpected end of file.
Line: 1 Col: 7 Unexpected start tag (table). Expected DOCTYPE.
Line: 1 Col: 18 Unexpected start tag (plaintext) in table context caused voodoo mode.
Line: 1 Col: 22 Unexpected end of file. Expected table content.
#document
| <html>
| <head>
@ -141,8 +141,8 @@ Unexpected end of file.
#data
<plaintext></plaintext>
#errors
No DOCTYPE seen.
Unexpected end of file.
Line: 1 Col: 11 Unexpected start tag (plaintext). Expected DOCTYPE.
Line: 1 Col: 23 Expected closing tag. Unexpected end of file.
#document
| <html>
| <head>
@ -151,12 +151,12 @@ Unexpected end of file.
| "</plaintext>"
#data
<!doctype html><table><tr>TEST
<!DOCTYPE html><table><tr>TEST
#errors
TEST can't occur in <tr>
Unexpected end of file.
Line: 1 Col: 30 Unexpected non-space characters in table context caused voodoo mode.
Line: 1 Col: 30 Unexpected end of file. Expected table content.
#document
| <!DOCTYPE HTML>
| <!DOCTYPE html>
| <html>
| <head>
| <body>
@ -166,56 +166,52 @@ Unexpected end of file.
| <tr>
#data
<!doctype html><body t1=1><body t2=2><body t3=3 t4=4>
<!DOCTYPE html><body t1=1><body t2=2><body t3=3 t4=4>
#errors
Unexpected start tag "body"
Unexpected start tag "body"
Line: 1 Col: 37 Unexpected start tag (body).
Line: 1 Col: 53 Unexpected start tag (body).
#document
| <!DOCTYPE HTML>
| <!DOCTYPE html>
| <html>
| <head>
| <body>
| t4="4"
| t1="1"
| t2="2"
| t3="3"
| t1="1"
| t4="4"
#data
</b test
#errors
Unexpected EOF in attribute
Unexpected attribute in end tag.
No doctype.
Unexpected end tag.
Line: 1 Col: 8 Unexpected end of file in attribute name.
Line: 1 Col: 8 End tag contains unexpected attributes.
Line: 1 Col: 8 Unexpected end tag (b). Expected DOCTYPE.
Line: 1 Col: 8 Unexpected end tag (b) after the (implied) root element.
#document
| <html>
| <head>
| <body>
#data
<!doctype HtML></b test<b &=&amp>X
<!DOCTYPE html></b test<b &=&amp>X
#errors
Unexpected < in attribute
End tag contains attributes.
Unexpected end tag.
Named entity didn't end with ;
Unexpected EOF. Missing closing tag.
Line: 1 Col: 32 Named entity didn't end with ';'.
Line: 1 Col: 33 End tag contains unexpected attributes.
Line: 1 Col: 33 Unexpected end tag (b) after the (implied) root element.
#document
| <!DOCTYPE HTML>
| <!DOCTYPE html>
| <html>
| <head>
| <body>
| <b>
| &="&"
| "X"
| "X"
#data
<!doctypehtml><scrIPt type=text/x-foobar;baz>X</SCRipt
#errors
No space after literal DOCTYPE.
Unexpected EOF in (end) tag name
Line: 1 Col: 9 No space after literal string 'DOCTYPE'.
Line: 1 Col: 54 Unexpected end of file in the tag name.
#document
| <!DOCTYPE HTML>
| <!DOCTYPE html>
| <html>
| <head>
| <script>
@ -226,8 +222,7 @@ Unexpected EOF in (end) tag name
#data
&
#errors
No doctype.
Unfinished entity.
Line: 1 Col: 1 Unexpected non-space characters. Expected DOCTYPE.
#document
| <html>
| <head>
@ -237,8 +232,8 @@ Unfinished entity.
#data
&#
#errors
No doctype.
Unfinished numeric entity.
Line: 1 Col: 1 Numeric entity expected. Got end of file instead.
Line: 1 Col: 1 Unexpected non-space characters. Expected DOCTYPE.
#document
| <html>
| <head>
@ -248,8 +243,8 @@ Unfinished numeric entity.
#data
&#X
#errors
No doctype.
Unfinished hexadecimal entity.
Line: 1 Col: 3 Numeric entity expected but none found.
Line: 1 Col: 3 Unexpected non-space characters. Expected DOCTYPE.
#document
| <html>
| <head>
@ -259,8 +254,8 @@ Unfinished hexadecimal entity.
#data
&#x
#errors
No doctype.
Unfinished hexadecimal entity.
Line: 1 Col: 3 Numeric entity expected but none found.
Line: 1 Col: 3 Unexpected non-space characters. Expected DOCTYPE.
#document
| <html>
| <head>
@ -270,8 +265,8 @@ Unfinished hexadecimal entity.
#data
&#45
#errors
No doctype.
Numeric entity didn't end with ;
Line: 1 Col: 4 Numeric entity didn't end with ';'.
Line: 1 Col: 4 Unexpected non-space characters. Expected DOCTYPE.
#document
| <html>
| <head>
@ -281,8 +276,8 @@ Numeric entity didn't end with ;
#data
&x-test
#errors
No doctype.
Unfinished named entity.
Line: 1 Col: 1 Named entity expected. Got none.
Line: 1 Col: 1 Unexpected non-space characters. Expected DOCTYPE.
#document
| <html>
| <head>
@ -292,9 +287,9 @@ Unfinished named entity.
#data
<!doctypehtml><p><li>
#errors
No space after literal DOCTYPE.
Line: 1 Col: 9 No space after literal string 'DOCTYPE'.
#document
| <!DOCTYPE HTML>
| <!DOCTYPE html>
| <html>
| <head>
| <body>
@ -304,9 +299,9 @@ No space after literal DOCTYPE.
#data
<!doctypehtml><p><dt>
#errors
No space after literal DOCTYPE.
Line: 1 Col: 9 No space after literal string 'DOCTYPE'.
#document
| <!DOCTYPE HTML>
| <!DOCTYPE html>
| <html>
| <head>
| <body>
@ -316,9 +311,9 @@ No space after literal DOCTYPE.
#data
<!doctypehtml><p><dd>
#errors
No space after literal DOCTYPE.
Line: 1 Col: 9 No space after literal string 'DOCTYPE'.
#document
| <!DOCTYPE HTML>
| <!DOCTYPE html>
| <html>
| <head>
| <body>
@ -328,10 +323,10 @@ No space after literal DOCTYPE.
#data
<!doctypehtml><p><form>
#errors
No space after literal DOCTYPE.
Unexpected EOF.
Line: 1 Col: 9 No space after literal string 'DOCTYPE'.
Line: 1 Col: 23 Expected closing tag. Unexpected end of file.
#document
| <!DOCTYPE HTML>
| <!DOCTYPE html>
| <html>
| <head>
| <body>
@ -339,31 +334,10 @@ Unexpected EOF.
| <form>
#data
<!doctype html><p><b><i><u></p> <p>X
#errors
Unexpected end tag </p>.
Unexpected end EOF. Missing closing tags.
#document
| <!DOCTYPE HTML>
| <html>
| <head>
| <body>
| <p>
| <b>
| <i>
| <u>
| " "
| <p>
| <b>
| <i>
| <u>
| "X"
#data
<!doctype html><p></P>X
<!DOCTYPE html><p></P>X
#errors
#document
| <!DOCTYPE HTML>
| <!DOCTYPE html>
| <html>
| <head>
| <body>
@ -373,8 +347,8 @@ Unexpected end EOF. Missing closing tags.
#data
&AMP
#errors
No doctype.
No closing ; for the entity.
Line: 1 Col: 4 Named entity didn't end with ';'.
Line: 1 Col: 4 Unexpected non-space characters. Expected DOCTYPE.
#document
| <html>
| <head>
@ -384,8 +358,8 @@ No closing ; for the entity.
#data
&AMp;
#errors
No doctype.
Invalid entity.
Line: 1 Col: 1 Named entity expected. Got none.
Line: 1 Col: 1 Unexpected non-space characters. Expected DOCTYPE.
#document
| <html>
| <head>
@ -393,45 +367,45 @@ Invalid entity.
| "&AMp;"
#data
<!doctype html><html><head></head><body><thisISasillyTESTelementNameToMakeSureCrazyTagNamesArePARSEDcorrectLY>
<!DOCTYPE html><html><head></head><body><thisISasillyTESTelementNameToMakeSureCrazyTagNamesArePARSEDcorrectLY>
#errors
Unexpected end of file.
Line: 1 Col: 110 Expected closing tag. Unexpected end of file.
#document
| <!DOCTYPE HTML>
| <!DOCTYPE html>
| <html>
| <head>
| <body>
| <thisisasillytestelementnametomakesurecrazytagnamesareparsedcorrectly>
#data
<!doctype html>X</body>X
<!DOCTYPE html>X</body>X
#errors
Unexpected non-space characters in the after body phase.
Line: 1 Col: 24 Unexpected non-space characters in the after body phase.
#document
| <!DOCTYPE HTML>
| <!DOCTYPE html>
| <html>
| <head>
| <body>
| "XX"
#data
<!doctype html><!-- X
<!DOCTYPE html><!-- X
#errors
Unexpected end of file in comment.
Line: 1 Col: 21 Unexpected end of file in comment.
#document
| <!DOCTYPE HTML>
| <!DOCTYPE html>
| <!-- X -->
| <html>
| <head>
| <body>
#data
<!doctype html><table><caption>test TEST</caption><td>test
<!DOCTYPE html><table><caption>test TEST</caption><td>test
#errors
Unexpected <td> in table body phase.
Unexpected end of file.
Line: 1 Col: 54 Unexpected table cell start tag (td) in the table body phase.
Line: 1 Col: 58 Expected closing tag. Unexpected end of file.
#document
| <!DOCTYPE HTML>
| <!DOCTYPE html>
| <html>
| <head>
| <body>
@ -444,11 +418,11 @@ Unexpected end of file.
| "test"
#data
<!doctype html><select><option><optgroup>
<!DOCTYPE html><select><option><optgroup>
#errors
Unexpected end of file. Missing closing tags.
Line: 1 Col: 41 Expected closing tag. Unexpected end of file.
#document
| <!DOCTYPE HTML>
| <!DOCTYPE html>
| <html>
| <head>
| <body>
@ -457,12 +431,12 @@ Unexpected end of file. Missing closing tags.
| <optgroup>
#data
<!doctype html><select><optgroup><option></optgroup><option><select><option>
<!DOCTYPE html><select><optgroup><option></optgroup><option><select><option>
#errors
Unexpected start tag <select> in <select>.
Unexpected start tag <option>.
Line: 1 Col: 68 Unexpected select start tag in the select phase treated as select end tag.
Line: 1 Col: 76 Expected closing tag. Unexpected end of file.
#document
| <!DOCTYPE HTML>
| <!DOCTYPE html>
| <html>
| <head>
| <body>
@ -470,13 +444,14 @@ Unexpected start tag <option>.
| <optgroup>
| <option>
| <option>
| <option>
#data
<!doctype html><select><optgroup><option><optgroup>
<!DOCTYPE html><select><optgroup><option><optgroup>
#errors
Unexpected end of file. Missing closing tags.
Line: 1 Col: 51 Expected closing tag. Unexpected end of file.
#document
| <!DOCTYPE HTML>
| <!DOCTYPE html>
| <html>
| <head>
| <body>
@ -486,10 +461,10 @@ Unexpected end of file. Missing closing tags.
| <optgroup>
#data
<!doctype html><font><input><input></font>
<!DOCTYPE html><font><input><input></font>
#errors
#document
| <!DOCTYPE HTML>
| <!DOCTYPE html>
| <html>
| <head>
| <body>
@ -498,31 +473,31 @@ Unexpected end of file. Missing closing tags.
| <input>
#data
<!DoctypE html><!-- XXX - XXX -->
<!DOCTYPE html><!-- XXX - XXX -->
#errors
#document
| <!DOCTYPE HTML>
| <!DOCTYPE html>
| <!-- XXX - XXX -->
| <html>
| <head>
| <body>
#data
<!DoctypE html><!-- XXX - XXX
<!DOCTYPE html><!-- XXX - XXX
#errors
Unexpected EOF in comment.
Line: 1 Col: 29 Unexpected end of file in comment (-)
#document
| <!DOCTYPE HTML>
| <!DOCTYPE html>
| <!-- XXX - XXX -->
| <html>
| <head>
| <body>
#data
<!DoctypE html><!-- XXX - XXX - XXX -->
<!DOCTYPE html><!-- XXX - XXX - XXX -->
#errors
#document
| <!DOCTYPE HTML>
| <!DOCTYPE html>
| <!-- XXX - XXX - XXX -->
| <html>
| <head>
@ -531,27 +506,26 @@ Unexpected EOF in comment.
#data
<isindex test=x name=x>
#errors
No doctype
<isindex> is not ok!
Line: 1 Col: 23 Unexpected start tag (isindex). Expected DOCTYPE.
Line: 1 Col: 23 Unexpected start tag isindex. Don't use it!
#document
| <html>
| <head>
| <body>
| <form>
| <hr>
| <p>
| <label>
| "This is a searchable index. Insert your search keywords here:"
| <input>
| test="x"
| name="isindex"
| <label>
| "This is a searchable index. Insert your search keywords here: "
| <input>
| name="isindex"
| test="x"
| <hr>
#data
test
test
#errors
No doctype
Line: 2 Col: 4 Unexpected non-space characters. Expected DOCTYPE.
#document
| <html>
| <head>
@ -560,69 +534,40 @@ No doctype
test"
#data
<p><b><i><u></p>
<p>X
<!DOCTYPE html><body><title>test</body></title>
#errors
No doctype
Unexpected end tag p.
Unexpected EOF.
#document
| <!DOCTYPE html>
| <html>
| <head>
| <body>
| <p>
| <b>
| <i>
| <u>
| "
"
| <p>
| <b>
| <i>
| <u>
| "X"
#data
<!doctype html><body><title>test</body></title>
#errors
Unexpected start tag that belongs in the head.
Expected closing tag after </.
#document
| <!DOCTYPE HTML>
| <html>
| <head>
| <title>
| "test</body>"
| <body>
#data
<!doctype html><body><title>X</title><meta name=z><link rel=foo><style>
<!DOCTYPE html><body><title>X</title><meta name=z><link rel=foo><style>
x { content:"</style" } </style>
#errors
Unexpected start tag that belongs in head.
Unexpected start tag that belongs in head.
Unexpected start tag that belongs in head.
Expected closing tag after </.
#document
| <!DOCTYPE HTML>
| <!DOCTYPE html>
| <html>
| <head>
| <body>
| <title>
| "X"
| <meta>
| name="z"
| <link>
| rel="foo"
| <body>
| <style>
| "
x { content:"</style" } "
#data
<!doctype html><select><optgroup></optgroup></select>
<!DOCTYPE html><select><optgroup></optgroup></select>
#errors
#document
| <!DOCTYPE HTML>
| <!DOCTYPE html>
| <html>
| <head>
| <body>
@ -633,30 +578,27 @@ x { content:"</style" } "
#errors
No doctype.
Line: 2 Col: 1 Unexpected End of file. Expected DOCTYPE.
#document
| "
"
| <html>
| <head>
| <body>
#data
<!doctype html> <html>
<!DOCTYPE html> <html>
#errors
#document
| <!DOCTYPE HTML>
| " "
| <!DOCTYPE html>
| <html>
| <head>
| <body>
#data
<!doctype html><script>
<!DOCTYPE html><script>
</script> <title>x</title> </head>
#errors
#document
| <!DOCTYPE HTML>
| <!DOCTYPE html>
| <html>
| <head>
| <script>
@ -669,23 +611,23 @@ No doctype.
| <body>
#data
<!doctype html><html><body><html id=x>
<!DOCTYPE html><html><body><html id=x>
#errors
duplicate html start tag
Line: 1 Col: 38 html needs to be the first start tag.
#document
| <!DOCTYPE HTML>
| <!DOCTYPE html>
| <html>
| id="x"
| <head>
| <body>
#data
<!doctype html>X</body><html id="x">
<!DOCTYPE html>X</body><html id="x">
#errors
Unexpected html start tag in the after body phase.
html needs to be the first start tag.
Line: 1 Col: 36 Unexpected start tag token (html) in the after body phase.
Line: 1 Col: 36 html needs to be the first start tag.
#document
| <!DOCTYPE HTML>
| <!DOCTYPE html>
| <html>
| id="x"
| <head>
@ -693,45 +635,43 @@ html needs to be the first start tag.
| "X"
#data
<!doctype html><head><html id=x>
<!DOCTYPE html><head><html id=x>
#errors
html start tag too late
Line: 1 Col: 32 html needs to be the first start tag.
#document
| <!DOCTYPE HTML>
| <!DOCTYPE html>
| <html>
| id="x"
| <head>
| <body>
#data
<!doctype html>X</html>X
<!DOCTYPE html>X</html>X
#errors
Unexpected non-space characters. Expected end of file.
Unexpected non-space characters in after body phase. Expected end of file.
Line: 1 Col: 24 Unexpected non-space characters in the after body phase.
#document
| <!DOCTYPE HTML>
| <!DOCTYPE html>
| <html>
| <head>
| <body>
| "XX"
#data
<!doctype html>X</html>
<!DOCTYPE html>X</html>
#errors
#document
| <!DOCTYPE HTML>
| <!DOCTYPE html>
| <html>
| <head>
| <body>
| "X "
#data
<!doctype html>X</html><p>X
<!DOCTYPE html>X</html><p>X
#errors
Unexpected start tag <p> in trailing end phase.
Unexpected start tag <p> in after body phase.
Line: 1 Col: 26 Unexpected start tag (p).
#document
| <!DOCTYPE HTML>
| <!DOCTYPE html>
| <html>
| <head>
| <body>
@ -740,29 +680,59 @@ Unexpected start tag <p> in after body phase.
| "X"
#data
<!doctype html>X<p/x/y/z>
<!DOCTYPE html>X<p/x/y/z>
#errors
Solidus (/) incorrectly placed.
Solidus (/) incorrectly placed.
Solidus (/) incorrectly placed.
Line: 1 Col: 19 Expected a > after the /.
Line: 1 Col: 21 Solidus (/) incorrectly placed in tag.
Line: 1 Col: 23 Solidus (/) incorrectly placed in tag.
#document
| <!DOCTYPE HTML>
| <!DOCTYPE html>
| <html>
| <head>
| <body>
| "X"
| <p>
| y=""
| x=""
| y=""
| z=""
#data
<!doctype html><!--x--
<!DOCTYPE html><!--x--
#errors
Unexpected end of file in comment.
Line: 1 Col: 22 Unexpected end of file in comment (--).
#document
| <!DOCTYPE HTML>
| <!DOCTYPE html>
| <!-- x -->
| <html>
| <head>
| <body>
#data
<!DOCTYPE html><table><tr><td></p></table>
#errors
Line: 1 Col: 34 Unexpected end tag (p). Ignored.
#document
| <!DOCTYPE html>
| <html>
| <head>
| <body>
| <table>
| <tbody>
| <tr>
| <td>
| <p>
#data
<!DOCTYPE <!DOCTYPE HTML>><!--<!--x-->-->
#errors
Line: 1 Col: 20 Expected space or '>'. Got ''
Line: 1 Col: 25 Erroneous DOCTYPE.
Line: 1 Col: 35 Unexpected character in comment found.
#document
| <!DOCTYPE <!doctype>
| <html>
| <head>
| <body>
| ">"
| <!-- <!--x -->
| "-->"

Просмотреть файл

@ -1,8 +1,8 @@
#data
<head></head><style></style>
#errors
No DOCTYPE
<style> in after-head mode
Line: 1 Col: 6 Unexpected start tag (head). Expected DOCTYPE.
Line: 1 Col: 20 Unexpected start tag (style) that can be in head. Moved.
#document
| <html>
| <head>
@ -12,8 +12,8 @@ No DOCTYPE
#data
<head></head><script></script>
#errors
No DOCTYPE
<script> in after-head mode
Line: 1 Col: 6 Unexpected start tag (head). Expected DOCTYPE.
Line: 1 Col: 21 Unexpected start tag (script) that can be in head. Moved.
#document
| <html>
| <head>
@ -23,8 +23,8 @@ No DOCTYPE
#data
<head></head><!-- --><style></style><!-- --><script></script>
#errors
No DOCTYPE
<style> in after-head mode
Line: 1 Col: 6 Unexpected start tag (head). Expected DOCTYPE.
Line: 1 Col: 28 Unexpected start tag (style) that can be in head. Moved.
#document
| <html>
| <head>
@ -37,7 +37,7 @@ No DOCTYPE
#data
<head></head><!-- -->x<style></style><!-- --><script></script>
#errors
No DOCTYPE
Line: 1 Col: 6 Unexpected start tag (head). Expected DOCTYPE.
#document
| <html>
| <head>
@ -53,7 +53,7 @@ No DOCTYPE
</pre></body></html>
#errors
#document
| <!DOCTYPE HTML>
| <!DOCTYPE html>
| <html>
| <head>
| <body>
@ -61,31 +61,42 @@ No DOCTYPE
#data
<!DOCTYPE html><html><head></head><body><pre>
foo</pre></body></html>
foo2</pre></body></html>
#errors
#document
| <!DOCTYPE HTML>
| <!DOCTYPE html>
| <html>
| <head>
| <body>
| <pre>
| "foo"
| "foo2"
#data
<!DOCTYPE html><html><head></head><body><pre>
foo
foo3</pre></body></html>
#errors
#document
| <!DOCTYPE html>
| <html>
| <head>
| <body>
| <pre>
| "
foo3"
#data
<!DOCTYPE html><html><head></head><body><pre>
foo4
</pre></body></html>
#errors
#document
| <!DOCTYPE HTML>
| <!DOCTYPE html>
| <html>
| <head>
| <body>
| <pre>
| "foo
| "foo4
"
#data
@ -93,7 +104,7 @@ foo
</span></body></html>
#errors
#document
| <!DOCTYPE HTML>
| <!DOCTYPE html>
| <html>
| <head>
| <body>
@ -108,7 +119,7 @@ foo
y</pre></body></html>
#errors
#document
| <!DOCTYPE HTML>
| <!DOCTYPE html>
| <html>
| <head>
| <body>
@ -120,8 +131,9 @@ y"
<!DOCTYPE html><html><head></head><body><pre>x<div>
y</pre></body></html>
#errors
Line: 2 Col: 7 End tag (pre) seen too early. Expected other end tag.
#document
| <!DOCTYPE HTML>
| <!DOCTYPE html>
| <html>
| <head>
| <body>
@ -129,4 +141,153 @@ y</pre></body></html>
| "x"
| <div>
| "
| y"
y"
#data
<!DOCTYPE html><HTML><META><HEAD></HEAD></HTML>
#errors
Line: 1 Col: 33 Unexpected start tag head in existing head. Ignored.
#document
| <!DOCTYPE html>
| <html>
| <head>
| <meta>
| <body>
#data
<!DOCTYPE html><HTML><HEAD><head></HEAD></HTML>
#errors
Line: 1 Col: 33 Unexpected start tag head in existing head. Ignored.
#document
| <!DOCTYPE html>
| <html>
| <head>
| <body>
#data
<textarea>foo<span>bar</span><i>baz
#errors
Line: 1 Col: 10 Unexpected start tag (textarea). Expected DOCTYPE.
Line: 1 Col: 35 Expected closing tag. Unexpected end of file.
#document
| <html>
| <head>
| <body>
| <textarea>
| "foo<span>bar</span><i>baz"
#data
<title>foo<span>bar</em><i>baz
#errors
Line: 1 Col: 7 Unexpected start tag (title). Expected DOCTYPE.
Line: 1 Col: 30 Unexpected end of file. Expected end tag (title).
#document
| <html>
| <head>
| <title>
| "foo<span>bar</em><i>baz"
| <body>
#data
<!DOCTYPE html><textarea>
</textarea>
#errors
#document
| <!DOCTYPE html>
| <html>
| <head>
| <body>
| <textarea>
#data
<!DOCTYPE html><textarea>
foo</textarea>
#errors
#document
| <!DOCTYPE html>
| <html>
| <head>
| <body>
| <textarea>
| "foo"
#data
<!DOCTYPE html><textarea>
foo</textarea>
#errors
#document
| <!DOCTYPE html>
| <html>
| <head>
| <body>
| <textarea>
| "
foo"
#data
<!DOCTYPE html><html><head></head><body><ul><li><div><p><li></ul></body></html>
#errors
Line: 1 Col: 60 Missing end tag (div, li).
#document
| <!DOCTYPE html>
| <html>
| <head>
| <body>
| <ul>
| <li>
| <div>
| <p>
| <li>
#data
<!doctype html><nobr><nobr><nobr>
#errors
Line: 1 Col: 27 Unexpected start tag (nobr) implies end tag (nobr).
Line: 1 Col: 33 Unexpected start tag (nobr) implies end tag (nobr).
Line: 1 Col: 33 Expected closing tag. Unexpected end of file.
#document
| <!DOCTYPE html>
| <html>
| <head>
| <body>
| <nobr>
| <nobr>
| <nobr>
#data
<!doctype html><nobr><nobr></nobr><nobr>
#errors
Line: 1 Col: 27 Unexpected start tag (nobr) implies end tag (nobr).
Line: 1 Col: 40 Expected closing tag. Unexpected end of file.
#document
| <!DOCTYPE html>
| <html>
| <head>
| <body>
| <nobr>
| <nobr>
| <nobr>
#data
<!doctype html><html><body><p><table></table></body></html>
#errors
Not known
#document
| <!DOCTYPE html>
| <html>
| <head>
| <body>
| <p>
| <table>
#data
<p><table></table>
#errors
Not known
#document
| <html>
| <head>
| <body>
| <p>
| <table>

Просмотреть файл

@ -0,0 +1,175 @@
#data
<style> <!-- </style>x
#errors
Line: 1 Col: 7 Unexpected start tag (style). Expected DOCTYPE.
Line: 1 Col: 22 Unexpected end of file. Expected end tag (style).
#document
| <html>
| <head>
| <style>
| " <!-- </style>x"
| <body>
#data
<style> <!-- </style> --> </style>x
#errors
Line: 1 Col: 7 Unexpected start tag (style). Expected DOCTYPE.
#document
| <html>
| <head>
| <style>
| " <!-- </style> --> "
| <body>
| "x"
#data
<style> <!--> </style>x
#errors
Line: 1 Col: 7 Unexpected start tag (style). Expected DOCTYPE.
#document
| <html>
| <head>
| <style>
| " <!--> "
| <body>
| "x"
#data
<style> <!---> </style>x
#errors
Line: 1 Col: 7 Unexpected start tag (style). Expected DOCTYPE.
#document
| <html>
| <head>
| <style>
| " <!---> "
| <body>
| "x"
#data
<iframe> <!---> </iframe>x
#errors
Line: 1 Col: 8 Unexpected start tag (iframe). Expected DOCTYPE.
#document
| <html>
| <head>
| <body>
| <iframe>
| " <!---> "
| "x"
#data
<iframe> <!--- </iframe>->x</iframe> --> </iframe>x
#errors
Line: 1 Col: 8 Unexpected start tag (iframe). Expected DOCTYPE.
#document
| <html>
| <head>
| <body>
| <iframe>
| " <!--- </iframe>->x</iframe> --> "
| "x"
#data
<script> <!-- </script> --> </script>x
#errors
Line: 1 Col: 8 Unexpected start tag (script). Expected DOCTYPE.
#document
| <html>
| <head>
| <script>
| " <!-- </script> --> "
| <body>
| "x"
#data
<title> <!-- </title> --> </title>x
#errors
Line: 1 Col: 7 Unexpected start tag (title). Expected DOCTYPE.
#document
| <html>
| <head>
| <title>
| " <!-- </title> --> "
| <body>
| "x"
#data
<textarea> <!--- </textarea>->x</textarea> --> </textarea>x
#errors
Line: 1 Col: 10 Unexpected start tag (textarea). Expected DOCTYPE.
#document
| <html>
| <head>
| <body>
| <textarea>
| " <!--- </textarea>->x</textarea> --> "
| "x"
#data
<style> <!</-- </style>x
#errors
Line: 1 Col: 7 Unexpected start tag (style). Expected DOCTYPE.
#document
| <html>
| <head>
| <style>
| " <!</-- "
| <body>
| "x"
#data
<xmp> <!-- > --> </xmp>
#errors
Line: 1 Col: 5 Unexpected start tag (xmp). Expected DOCTYPE.
#document
| <html>
| <head>
| <body>
| <xmp>
| " <!-- > --> "
#data
<title>&amp;</title>
#errors
Line: 1 Col: 7 Unexpected start tag (title). Expected DOCTYPE.
#document
| <html>
| <head>
| <title>
| "&"
| <body>
#data
<title><!--&amp;--></title>
#errors
Line: 1 Col: 7 Unexpected start tag (title). Expected DOCTYPE.
#document
| <html>
| <head>
| <title>
| "<!--&amp;-->"
| <body>
#data
<title><!--</title>
#errors
Line: 1 Col: 7 Unexpected start tag (title). Expected DOCTYPE.
Line: 1 Col: 19 Unexpected end of file. Expected end tag (title).
#document
| <html>
| <head>
| <title>
| "<!--</title>"
| <body>
#data
<noscript><!--</noscript>--></noscript>
#errors
Line: 1 Col: 10 Unexpected start tag (noscript). Expected DOCTYPE.
#document
| <html>
| <head>
| <noscript>
| "<!--</noscript>-->"
| <body>

Просмотреть файл

@ -0,0 +1,611 @@
#data
<!doctype html></head> <head>
#errors
Line: 1 Col: 29 Unexpected start tag head. Ignored.
#document
| <!DOCTYPE html>
| <html>
| <head>
| " "
| <body>
#data
<!doctype html><form><div></form><div>
#errors
33: End tag "form" seen but there were unclosed elements.
38: End of file seen and there were open elements.
#document
| <!DOCTYPE html>
| <html>
| <head>
| <body>
| <form>
| <div>
| <div>
#data
<!doctype html><title>&amp;</title>
#errors
#document
| <!DOCTYPE html>
| <html>
| <head>
| <title>
| "&"
| <body>
#data
<!doctype html><title><!--&amp;--></title>
#errors
#document
| <!DOCTYPE html>
| <html>
| <head>
| <title>
| "<!--&amp;-->"
| <body>
#data
<!doctype>
#errors
Line: 1 Col: 9 No space after literal string 'DOCTYPE'.
Line: 1 Col: 10 Unexpected > character. Expected DOCTYPE name.
Line: 1 Col: 10 Erroneous DOCTYPE.
#document
| <!DOCTYPE >
| <html>
| <head>
| <body>
#data
<!---x
#errors
Line: 1 Col: 6 Unexpected end of file in comment.
Line: 1 Col: 6 Unexpected End of file. Expected DOCTYPE.
#document
| <!-- -x -->
| <html>
| <head>
| <body>
#data
<body>
<div>
#errors
Line: 1 Col: 6 Unexpected start tag (body).
Line: 2 Col: 5 Expected closing tag. Unexpected end of file.
#document-fragment
div
#document
| "
"
| <div>
#data
<frameset></frameset>
foo
#errors
Line: 1 Col: 10 Unexpected start tag (frameset). Expected DOCTYPE.
Line: 2 Col: 3 Unexpected non-space characters in the after frameset phase. Ignored.
#document
| <html>
| <head>
| <frameset>
| "
"
#data
<frameset></frameset>
<noframes>
#errors
Line: 1 Col: 10 Unexpected start tag (frameset). Expected DOCTYPE.
Line: 2 Col: 10 Expected closing tag. Unexpected end of file.
#document
| <html>
| <head>
| <frameset>
| "
"
| <noframes>
#data
<frameset></frameset>
<div>
#errors
Line: 1 Col: 10 Unexpected start tag (frameset). Expected DOCTYPE.
Line: 2 Col: 5 Unexpected start tag (div) in the after frameset phase. Ignored.
#document
| <html>
| <head>
| <frameset>
| "
"
#data
<frameset></frameset>
</html>
#errors
Line: 1 Col: 10 Unexpected start tag (frameset). Expected DOCTYPE.
#document
| <html>
| <head>
| <frameset>
| "
"
#data
<frameset></frameset>
</div>
#errors
Line: 1 Col: 10 Unexpected start tag (frameset). Expected DOCTYPE.
Line: 2 Col: 6 Unexpected end tag (div) in the after frameset phase. Ignored.
#document
| <html>
| <head>
| <frameset>
| "
"
#data
<form><form>
#errors
Line: 1 Col: 6 Unexpected start tag (form). Expected DOCTYPE.
Line: 1 Col: 12 Unexpected start tag (form).
Line: 1 Col: 12 Expected closing tag. Unexpected end of file.
#document
| <html>
| <head>
| <body>
| <form>
#data
<button><button>
#errors
Line: 1 Col: 8 Unexpected start tag (button). Expected DOCTYPE.
Line: 1 Col: 16 Unexpected start tag (button) implies end tag (button).
Line: 1 Col: 16 Expected closing tag. Unexpected end of file.
#document
| <html>
| <head>
| <body>
| <button>
| <button>
#data
<table><tr><td></th>
#errors
Line: 1 Col: 7 Unexpected start tag (table). Expected DOCTYPE.
Line: 1 Col: 20 Unexpected end tag (th). Ignored.
Line: 1 Col: 20 Expected closing tag. Unexpected end of file.
#document
| <html>
| <head>
| <body>
| <table>
| <tbody>
| <tr>
| <td>
#data
<table><caption><td>
#errors
Line: 1 Col: 7 Unexpected start tag (table). Expected DOCTYPE.
Line: 1 Col: 20 Unexpected end tag (td). Ignored.
Line: 1 Col: 20 Unexpected table cell start tag (td) in the table body phase.
Line: 1 Col: 20 Expected closing tag. Unexpected end of file.
#document
| <html>
| <head>
| <body>
| <table>
| <caption>
| <tbody>
| <tr>
| <td>
#data
<table><caption><div>
#errors
Line: 1 Col: 7 Unexpected start tag (table). Expected DOCTYPE.
Line: 1 Col: 21 Expected closing tag. Unexpected end of file.
#document
| <html>
| <head>
| <body>
| <table>
| <caption>
| <div>
#data
</caption><div>
#errors
Line: 1 Col: 10 Unexpected end tag (caption). Ignored.
Line: 1 Col: 15 Expected closing tag. Unexpected end of file.
#document-fragment
caption
#document
| <div>
#data
<table><caption><div></caption>
#errors
Line: 1 Col: 7 Unexpected start tag (table). Expected DOCTYPE.
Line: 1 Col: 31 Unexpected end tag (caption). Missing end tag (div).
Line: 1 Col: 31 Unexpected end of file. Expected table content.
#document
| <html>
| <head>
| <body>
| <table>
| <caption>
| <div>
#data
<table><caption></table>
#errors
Line: 1 Col: 7 Unexpected start tag (table). Expected DOCTYPE.
Line: 1 Col: 24 Unexpected end table tag in caption. Generates implied end caption.
#document
| <html>
| <head>
| <body>
| <table>
| <caption>
#data
</table><div>
#errors
Line: 1 Col: 8 Unexpected end table tag in caption. Generates implied end caption.
Line: 1 Col: 8 Unexpected end tag (caption). Ignored.
Line: 1 Col: 13 Expected closing tag. Unexpected end of file.
#document-fragment
caption
#document
| <div>
#data
<table><caption></body></col></colgroup></html></tbody></td></tfoot></th></thead></tr>
#errors
Line: 1 Col: 7 Unexpected start tag (table). Expected DOCTYPE.
Line: 1 Col: 23 Unexpected end tag (body). Ignored.
Line: 1 Col: 29 Unexpected end tag (col). Ignored.
Line: 1 Col: 40 Unexpected end tag (colgroup). Ignored.
Line: 1 Col: 47 Unexpected end tag (html). Ignored.
Line: 1 Col: 55 Unexpected end tag (tbody). Ignored.
Line: 1 Col: 60 Unexpected end tag (td). Ignored.
Line: 1 Col: 68 Unexpected end tag (tfoot). Ignored.
Line: 1 Col: 73 Unexpected end tag (th). Ignored.
Line: 1 Col: 81 Unexpected end tag (thead). Ignored.
Line: 1 Col: 86 Unexpected end tag (tr). Ignored.
Line: 1 Col: 86 Expected closing tag. Unexpected end of file.
#document
| <html>
| <head>
| <body>
| <table>
| <caption>
#data
<table><caption><div></div>
#errors
Line: 1 Col: 7 Unexpected start tag (table). Expected DOCTYPE.
Line: 1 Col: 27 Expected closing tag. Unexpected end of file.
#document
| <html>
| <head>
| <body>
| <table>
| <caption>
| <div>
#data
<table><tr><td></body></caption></col></colgroup></html>
#errors
Line: 1 Col: 7 Unexpected start tag (table). Expected DOCTYPE.
Line: 1 Col: 22 Unexpected end tag (body). Ignored.
Line: 1 Col: 32 Unexpected end tag (caption). Ignored.
Line: 1 Col: 38 Unexpected end tag (col). Ignored.
Line: 1 Col: 49 Unexpected end tag (colgroup). Ignored.
Line: 1 Col: 56 Unexpected end tag (html). Ignored.
Line: 1 Col: 56 Expected closing tag. Unexpected end of file.
#document
| <html>
| <head>
| <body>
| <table>
| <tbody>
| <tr>
| <td>
#data
</table></tbody></tfoot></thead></tr><div>
#errors
Line: 1 Col: 8 Unexpected end tag (table). Ignored.
Line: 1 Col: 16 Unexpected end tag (tbody). Ignored.
Line: 1 Col: 24 Unexpected end tag (tfoot). Ignored.
Line: 1 Col: 32 Unexpected end tag (thead). Ignored.
Line: 1 Col: 37 Unexpected end tag (tr). Ignored.
Line: 1 Col: 42 Expected closing tag. Unexpected end of file.
#document-fragment
td
#document
| <div>
#data
<table><colgroup>foo
#errors
Line: 1 Col: 7 Unexpected start tag (table). Expected DOCTYPE.
Line: 1 Col: 20 Unexpected non-space characters in table context caused voodoo mode.
Line: 1 Col: 20 Unexpected end of file. Expected table content.
#document
| <html>
| <head>
| <body>
| "foo"
| <table>
| <colgroup>
#data
foo<col>
#errors
Line: 1 Col: 3 Unexpected end tag (colgroup). Ignored.
#document-fragment
colgroup
#document
| <col>
#data
<table><colgroup></col>
#errors
Line: 1 Col: 7 Unexpected start tag (table). Expected DOCTYPE.
Line: 1 Col: 23 This element (col) has no end tag.
Line: 1 Col: 23 Expected closing tag. Unexpected end of file.
#document
| <html>
| <head>
| <body>
| <table>
| <colgroup>
#data
<frameset><div>
#errors
Line: 1 Col: 10 Unexpected start tag (frameset). Expected DOCTYPE.
Line: 1 Col: 15 Unexpected start tag token (div) in the frameset phase. Ignored.
Line: 1 Col: 15 Expected closing tag. Unexpected end of file.
#document
| <html>
| <head>
| <frameset>
#data
</frameset><frame>
#errors
Line: 1 Col: 11 Unexpected end tag token (frameset) in the frameset phase (innerHTML).
#document-fragment
frameset
#document
| <frame>
#data
<frameset></div>
#errors
Line: 1 Col: 10 Unexpected start tag (frameset). Expected DOCTYPE.
Line: 1 Col: 16 Unexpected end tag token (div) in the frameset phase. Ignored.
Line: 1 Col: 16 Expected closing tag. Unexpected end of file.
#document
| <html>
| <head>
| <frameset>
#data
</body><div>
#errors
Line: 1 Col: 7 Unexpected end tag (body). Ignored.
Line: 1 Col: 12 Expected closing tag. Unexpected end of file.
#document-fragment
body
#document
| <div>
#data
<table><tr><div>
#errors
Line: 1 Col: 7 Unexpected start tag (table). Expected DOCTYPE.
Line: 1 Col: 16 Unexpected start tag (div) in table context caused voodoo mode.
Line: 1 Col: 16 Unexpected end of file. Expected table content.
#document
| <html>
| <head>
| <body>
| <div>
| <table>
| <tbody>
| <tr>
#data
</tr><td>
#errors
Line: 1 Col: 5 Unexpected end tag (tr). Ignored.
#document-fragment
tr
#document
| <td>
#data
</tbody></tfoot></thead><td>
#errors
Line: 1 Col: 8 Unexpected end tag (tbody). Ignored.
Line: 1 Col: 16 Unexpected end tag (tfoot). Ignored.
Line: 1 Col: 24 Unexpected end tag (thead). Ignored.
#document-fragment
tr
#document
| <td>
#data
<table><tr><div><td>
#errors
Line: 1 Col: 7 Unexpected start tag (table). Expected DOCTYPE.
Line: 1 Col: 16 Unexpected start tag (div) in table context caused voodoo mode.
Line: 1 Col: 20 Unexpected implied end tag (div) in the table row phase.
Line: 1 Col: 20 Expected closing tag. Unexpected end of file.
#document
| <html>
| <head>
| <body>
| <div>
| <table>
| <tbody>
| <tr>
| <td>
#data
<caption><col><colgroup><tbody><tfoot><thead><tr>
#errors
Line: 1 Col: 9 Unexpected start tag (caption).
Line: 1 Col: 14 Unexpected start tag (col).
Line: 1 Col: 24 Unexpected start tag (colgroup).
Line: 1 Col: 31 Unexpected start tag (tbody).
Line: 1 Col: 38 Unexpected start tag (tfoot).
Line: 1 Col: 45 Unexpected start tag (thead).
Line: 1 Col: 49 Unexpected end of file. Expected table content.
#document-fragment
tbody
#document
| <tr>
#data
<table><tbody></thead>
#errors
Line: 1 Col: 7 Unexpected start tag (table). Expected DOCTYPE.
Line: 1 Col: 22 Unexpected end tag (thead) in the table body phase. Ignored.
Line: 1 Col: 22 Unexpected end of file. Expected table content.
#document
| <html>
| <head>
| <body>
| <table>
| <tbody>
#data
</table><tr>
#errors
Line: 1 Col: 8 Unexpected end tag (table). Ignored.
Line: 1 Col: 12 Unexpected end of file. Expected table content.
#document-fragment
tbody
#document
| <tr>
#data
<table><tbody></body></caption></col></colgroup></html></td></th></tr>
#errors
Line: 1 Col: 7 Unexpected start tag (table). Expected DOCTYPE.
Line: 1 Col: 21 Unexpected end tag (body) in the table body phase. Ignored.
Line: 1 Col: 31 Unexpected end tag (caption) in the table body phase. Ignored.
Line: 1 Col: 37 Unexpected end tag (col) in the table body phase. Ignored.
Line: 1 Col: 48 Unexpected end tag (colgroup) in the table body phase. Ignored.
Line: 1 Col: 55 Unexpected end tag (html) in the table body phase. Ignored.
Line: 1 Col: 60 Unexpected end tag (td) in the table body phase. Ignored.
Line: 1 Col: 65 Unexpected end tag (th) in the table body phase. Ignored.
Line: 1 Col: 70 Unexpected end tag (tr) in the table body phase. Ignored.
Line: 1 Col: 70 Unexpected end of file. Expected table content.
#document
| <html>
| <head>
| <body>
| <table>
| <tbody>
#data
<table><tbody></div>
#errors
Line: 1 Col: 7 Unexpected start tag (table). Expected DOCTYPE.
Line: 1 Col: 20 Unexpected end tag (div) in table context caused voodoo mode.
Line: 1 Col: 20 End tag (div) seen too early. Expected other end tag.
Line: 1 Col: 20 Unexpected end of file. Expected table content.
#document
| <html>
| <head>
| <body>
| <table>
| <tbody>
#data
<table><table>
#errors
Line: 1 Col: 7 Unexpected start tag (table). Expected DOCTYPE.
Line: 1 Col: 14 Unexpected start tag (table) implies end tag (table).
Line: 1 Col: 14 Unexpected end of file. Expected table content.
#document
| <html>
| <head>
| <body>
| <table>
| <table>
#data
<table></body></caption></col></colgroup></html></tbody></td></tfoot></th></thead></tr>
#errors
Line: 1 Col: 7 Unexpected start tag (table). Expected DOCTYPE.
Line: 1 Col: 14 Unexpected end tag (body). Ignored.
Line: 1 Col: 24 Unexpected end tag (caption). Ignored.
Line: 1 Col: 30 Unexpected end tag (col). Ignored.
Line: 1 Col: 41 Unexpected end tag (colgroup). Ignored.
Line: 1 Col: 48 Unexpected end tag (html). Ignored.
Line: 1 Col: 56 Unexpected end tag (tbody). Ignored.
Line: 1 Col: 61 Unexpected end tag (td). Ignored.
Line: 1 Col: 69 Unexpected end tag (tfoot). Ignored.
Line: 1 Col: 74 Unexpected end tag (th). Ignored.
Line: 1 Col: 82 Unexpected end tag (thead). Ignored.
Line: 1 Col: 87 Unexpected end tag (tr). Ignored.
Line: 1 Col: 87 Unexpected end of file. Expected table content.
#document
| <html>
| <head>
| <body>
| <table>
#data
</table><tr>
#errors
Line: 1 Col: 8 Unexpected end tag (table). Ignored.
Line: 1 Col: 12 Unexpected end of file. Expected table content.
#document-fragment
table
#document
| <tbody>
| <tr>
#data
<body></body></html>
#errors
Line: 1 Col: 20 Unexpected html end tag in inner html mode.
Line: 1 Col: 20 Unexpected EOF in inner html mode.
#document-fragment
html
#document
| <head>
| <body>
#data
<html><frameset></frameset></html>
#errors
Line: 1 Col: 6 Unexpected start tag (html). Expected DOCTYPE.
#document
| <html>
| <head>
| <frameset>
| " "
#data
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01//EN"><html></html>
#errors
Line: 1 Col: 50 Erroneous DOCTYPE.
Line: 1 Col: 63 Unexpected end tag (html) after the (implied) root element.
#document
| <!DOCTYPE html>
| <html>
| <head>
| <body>

Просмотреть файл

@ -0,0 +1,390 @@
#data
<!doctype html><body><title>X</title>
#errors
#document
| <!DOCTYPE html>
| <html>
| <head>
| <body>
| <title>
| "X"
#data
<!doctype html><table><title>X</title></table>
#errors
Line: 1 Col: 29 Unexpected start tag (title) in table context caused voodoo mode.
Line: 1 Col: 38 Unexpected end tag (title) in table context caused voodoo mode.
#document
| <!DOCTYPE html>
| <html>
| <head>
| <body>
| <title>
| "X"
| <table>
#data
<!doctype html><head></head><title>X</title>
#errors
Line: 1 Col: 35 Unexpected start tag (title) that can be in head. Moved.
#document
| <!DOCTYPE html>
| <html>
| <head>
| <title>
| "X"
| <body>
#data
<!doctype html></head><title>X</title>
#errors
Line: 1 Col: 29 Unexpected start tag (title) that can be in head. Moved.
#document
| <!DOCTYPE html>
| <html>
| <head>
| <title>
| "X"
| <body>
#data
<!doctype html><table><meta></table>
#errors
Line: 1 Col: 28 Unexpected start tag (meta) in table context caused voodoo mode.
#document
| <!DOCTYPE html>
| <html>
| <head>
| <body>
| <meta>
| <table>
#data
<!doctype html><table>X<tr><td><table> <meta></table></table>
#errors
Line: 1 Col: 23 Unexpected non-space characters in table context caused voodoo mode.
Line: 1 Col: 45 Unexpected start tag (meta) in table context caused voodoo mode.
#document
| <!DOCTYPE html>
| <html>
| <head>
| <body>
| "X"
| <table>
| <tbody>
| <tr>
| <td>
| <meta>
| <table>
| " "
#data
<!doctype html><html> <head>
#errors
#document
| <!DOCTYPE html>
| <html>
| <head>
| <body>
#data
<!doctype html> <head>
#errors
#document
| <!DOCTYPE html>
| <html>
| <head>
| <body>
#data
<!doctype html><table><style> <tr>x </style> </table>
#errors
#document
| <!DOCTYPE html>
| <html>
| <head>
| <body>
| <table>
| <style>
| " <tr>x "
| " "
#data
<!doctype html><table><TBODY><script> <tr>x </script> </table>
#errors
#document
| <!DOCTYPE html>
| <html>
| <head>
| <body>
| <table>
| <tbody>
| <script>
| " <tr>x "
| " "
#data
<!doctype html><p><applet><p>X</p></applet>
#errors
#document
| <!DOCTYPE html>
| <html>
| <head>
| <body>
| <p>
| <applet>
| <p>
| "X"
#data
<!doctype html><listing>
X</listing>
#errors
#document
| <!DOCTYPE html>
| <html>
| <head>
| <body>
| <listing>
| "X"
#data
<!doctype html><select><input>X
#errors
Line: 1 Col: 30 Unexpected input start tag in the select phase.
#document
| <!DOCTYPE html>
| <html>
| <head>
| <body>
| <select>
| <input>
| "X"
#data
<!doctype html><select><select>X
#errors
Line: 1 Col: 31 Unexpected select start tag in the select phase treated as select end tag.
#document
| <!DOCTYPE html>
| <html>
| <head>
| <body>
| <select>
| "X"
#data
<!doctype html><table><input type=hidDEN></table>
#errors
Line: 1 Col: 41 Unexpected input with type hidden in table context.
#document
| <!DOCTYPE html>
| <html>
| <head>
| <body>
| <table>
| <input>
| type="hidDEN"
#data
<!doctype html><table>X<input type=hidDEN></table>
#errors
Line: 1 Col: 23 Unexpected non-space characters in table context caused voodoo mode.
#document
| <!DOCTYPE html>
| <html>
| <head>
| <body>
| "X"
| <table>
| <input>
| type="hidDEN"
#data
<!doctype html><table> <input type=hidDEN></table>
#errors
Line: 1 Col: 43 Unexpected input with type hidden in table context.
#document
| <!DOCTYPE html>
| <html>
| <head>
| <body>
| <table>
| " "
| <input>
| type="hidDEN"
#data
<!doctype html><table> <input type='hidDEN'></table>
#errors
Line: 1 Col: 45 Unexpected input with type hidden in table context.
#document
| <!DOCTYPE html>
| <html>
| <head>
| <body>
| <table>
| " "
| <input>
| type="hidDEN"
#data
<!doctype html><table><input type=" hidden"><input type=hidDEN></table>
#errors
Line: 1 Col: 44 Unexpected start tag (input) in table context caused voodoo mode.
#document
| <!DOCTYPE html>
| <html>
| <head>
| <body>
| <input>
| type=" hidden"
| <table>
| <input>
| type="hidDEN"
#data
<!doctype html><table><select>X<tr>
#errors
Line: 1 Col: 30 Unexpected start tag (select) in table context caused voodoo mode.
Line: 1 Col: 35 Unexpected table element start tag (trs) in the select in table phase.
Line: 1 Col: 35 Unexpected end of file. Expected table content.
#document
| <!DOCTYPE html>
| <html>
| <head>
| <body>
| <select>
| "X"
| <table>
| <tbody>
| <tr>
#data
<!doctype html><select>X</select>
#errors
#document
| <!DOCTYPE html>
| <html>
| <head>
| <body>
| <select>
| "X"
#data
<!DOCTYPE hTmL><html></html>
#errors
Line: 1 Col: 28 Unexpected end tag (html) after the (implied) root element.
#document
| <!DOCTYPE html>
| <html>
| <head>
| <body>
#data
<!DOCTYPE HTML><html></html>
#errors
Line: 1 Col: 28 Unexpected end tag (html) after the (implied) root element.
#document
| <!DOCTYPE html>
| <html>
| <head>
| <body>
#data
<body>X</body></body>
#errors
Line: 1 Col: 21 Unexpected end tag token (body) in the after body phase.
Line: 1 Col: 21 Unexpected EOF in inner html mode.
#document-fragment
html
#document
| <head>
| <body>
| "X"
#data
<div><p>a</x> b
#errors
Line: 1 Col: 5 Unexpected start tag (div). Expected DOCTYPE.
Line: 1 Col: 13 Unexpected end tag (x). Ignored.
Line: 1 Col: 15 Expected closing tag. Unexpected end of file.
#document
| <html>
| <head>
| <body>
| <div>
| <p>
| "a b"
#data
<table><tr><td><code></code> </table>
#errors
Line: 1 Col: 7 Unexpected start tag (table). Expected DOCTYPE.
#document
| <html>
| <head>
| <body>
| <table>
| <tbody>
| <tr>
| <td>
| <code>
| " "
#data
<table><b><tr><td>aaa</td></tr>bbb</table>ccc
#errors
XXX: Fix me
#document
| <html>
| <head>
| <body>
| <b>
| <b>
| "bbb"
| <table>
| <tbody>
| <tr>
| <td>
| "aaa"
| <b>
| "ccc"
#data
A<table><tr> B</tr> B</table>
#errors
XXX: Fix me
#document
| <html>
| <head>
| <body>
| "A B B"
| <table>
| <tbody>
| <tr>
#data
A<table><tr> B</tr> </em>C</table>
#errors
XXX: Fix me
#document
| <html>
| <head>
| <body>
| "A BC"
| <table>
| <tbody>
| <tr>
| " "
#data
<select><keygen>
#errors
Not known
#document
| <html>
| <head>
| <body>
| <select>
| <keygen>

Просмотреть файл

@ -0,0 +1,148 @@
#data
<div>
<div></div>
</span>x
#errors
Line: 1 Col: 5 Unexpected start tag (div). Expected DOCTYPE.
Line: 3 Col: 7 Unexpected end tag (span). Ignored.
Line: 3 Col: 8 Expected closing tag. Unexpected end of file.
#document
| <html>
| <head>
| <body>
| <div>
| "
"
| <div>
| "
x"
#data
<div>x<div></div>
</span>x
#errors
Line: 1 Col: 5 Unexpected start tag (div). Expected DOCTYPE.
Line: 2 Col: 7 Unexpected end tag (span). Ignored.
Line: 2 Col: 8 Expected closing tag. Unexpected end of file.
#document
| <html>
| <head>
| <body>
| <div>
| "x"
| <div>
| "
x"
#data
<div>x<div></div>x</span>x
#errors
Line: 1 Col: 5 Unexpected start tag (div). Expected DOCTYPE.
Line: 1 Col: 25 Unexpected end tag (span). Ignored.
Line: 1 Col: 26 Expected closing tag. Unexpected end of file.
#document
| <html>
| <head>
| <body>
| <div>
| "x"
| <div>
| "xx"
#data
<div>x<div></div>y</span>z
#errors
Line: 1 Col: 5 Unexpected start tag (div). Expected DOCTYPE.
Line: 1 Col: 25 Unexpected end tag (span). Ignored.
Line: 1 Col: 26 Expected closing tag. Unexpected end of file.
#document
| <html>
| <head>
| <body>
| <div>
| "x"
| <div>
| "yz"
#data
<table><div>x<div></div>x</span>x
#errors
Line: 1 Col: 7 Unexpected start tag (table). Expected DOCTYPE.
Line: 1 Col: 12 Unexpected start tag (div) in table context caused voodoo mode.
Line: 1 Col: 18 Unexpected start tag (div) in table context caused voodoo mode.
Line: 1 Col: 24 Unexpected end tag (div) in table context caused voodoo mode.
Line: 1 Col: 32 Unexpected end tag (span) in table context caused voodoo mode.
Line: 1 Col: 32 Unexpected end tag (span). Ignored.
Line: 1 Col: 33 Unexpected end of file. Expected table content.
#document
| <html>
| <head>
| <body>
| <div>
| "x"
| <div>
| "xx"
| <table>
#data
x<table>x
#errors
Line: 1 Col: 1 Unexpected non-space characters. Expected DOCTYPE.
Line: 1 Col: 9 Unexpected non-space characters in table context caused voodoo mode.
Line: 1 Col: 9 Unexpected end of file. Expected table content.
#document
| <html>
| <head>
| <body>
| "xx"
| <table>
#data
x<table><table>x
#errors
Line: 1 Col: 1 Unexpected non-space characters. Expected DOCTYPE.
Line: 1 Col: 15 Unexpected start tag (table) implies end tag (table).
Line: 1 Col: 16 Unexpected non-space characters in table context caused voodoo mode.
Line: 1 Col: 16 Unexpected end of file. Expected table content.
#document
| <html>
| <head>
| <body>
| "x"
| <table>
| "x"
| <table>
#data
<b>a<div></div><div></b>y
#errors
Line: 1 Col: 3 Unexpected start tag (b). Expected DOCTYPE.
Line: 1 Col: 24 End tag (b) violates step 1, paragraph 3 of the adoption agency algorithm.
Line: 1 Col: 25 Expected closing tag. Unexpected end of file.
#document
| <html>
| <head>
| <body>
| <b>
| "a"
| <div>
| <div>
| <b>
| "y"
#data
<a><div><p></a>
#errors
Line: 1 Col: 3 Unexpected start tag (a). Expected DOCTYPE.
Line: 1 Col: 15 End tag (a) violates step 1, paragraph 3 of the adoption agency algorithm.
Line: 1 Col: 15 End tag (a) violates step 1, paragraph 3 of the adoption agency algorithm.
Line: 1 Col: 15 Expected closing tag. Unexpected end of file.
#document
| <html>
| <head>
| <body>
| <a>
| <div>
| <a>
| <p>
| <a>

Просмотреть файл

@ -0,0 +1,430 @@
#data
<!DOCTYPE html><math></math>
#errors
#document
| <!DOCTYPE html>
| <html>
| <head>
| <body>
| <math math>
#data
<!DOCTYPE html><body><math></math>
#errors
#document
| <!DOCTYPE html>
| <html>
| <head>
| <body>
| <math math>
#data
<!DOCTYPE html><body><select><math></math></select>
#errors
Line: 1 Col: 35 Unexpected start tag token (math) in the select phase. Ignored.
Line: 1 Col: 42 Unexpected end tag (math) in the select phase. Ignored.
#document
| <!DOCTYPE html>
| <html>
| <head>
| <body>
| <select>
#data
<!DOCTYPE html><body><select><option><math></math></option></select>
#errors
Line: 1 Col: 43 Unexpected start tag token (math) in the select phase. Ignored.
Line: 1 Col: 50 Unexpected end tag (math) in the select phase. Ignored.
#document
| <!DOCTYPE html>
| <html>
| <head>
| <body>
| <select>
| <option>
#data
<!DOCTYPE html><body><table><math></math></table>
#errors
Line: 1 Col: 34 Unexpected start tag (math) in table context caused voodoo mode.
Line: 1 Col: 41 Unexpected end tag (math) in table context caused voodoo mode.
#document
| <!DOCTYPE html>
| <html>
| <head>
| <body>
| <math math>
| <table>
#data
<!DOCTYPE html><body><table><math><mi>foo</mi></math></table>
#errors
Line: 1 Col: 34 Unexpected start tag (math) in table context caused voodoo mode.
Line: 1 Col: 46 Unexpected end tag (mi) in table context caused voodoo mode.
Line: 1 Col: 53 Unexpected end tag (math) in table context caused voodoo mode.
#document
| <!DOCTYPE html>
| <html>
| <head>
| <body>
| <math math>
| <math mi>
| "foo"
| <table>
#data
<!DOCTYPE html><body><table><math><mi>foo</mi><mi>bar</mi></math></table>
#errors
Line: 1 Col: 34 Unexpected start tag (math) in table context caused voodoo mode.
Line: 1 Col: 46 Unexpected end tag (mi) in table context caused voodoo mode.
Line: 1 Col: 58 Unexpected end tag (mi) in table context caused voodoo mode.
Line: 1 Col: 65 Unexpected end tag (math) in table context caused voodoo mode.
#document
| <!DOCTYPE html>
| <html>
| <head>
| <body>
| <math math>
| <math mi>
| "foo"
| <math mi>
| "bar"
| <table>
#data
<!DOCTYPE html><body><table><tbody><math><mi>foo</mi><mi>bar</mi></math></tbody></table>
#errors
Line: 1 Col: 41 Unexpected start tag (math) in table context caused voodoo mode.
Line: 1 Col: 53 Unexpected end tag (mi) in table context caused voodoo mode.
Line: 1 Col: 65 Unexpected end tag (mi) in table context caused voodoo mode.
Line: 1 Col: 72 Unexpected end tag (math) in table context caused voodoo mode.
#document
| <!DOCTYPE html>
| <html>
| <head>
| <body>
| <math math>
| <math mi>
| "foo"
| <math mi>
| "bar"
| <table>
| <tbody>
#data
<!DOCTYPE html><body><table><tbody><tr><math><mi>foo</mi><mi>bar</mi></math></tr></tbody></table>
#errors
Line: 1 Col: 45 Unexpected start tag (math) in table context caused voodoo mode.
Line: 1 Col: 57 Unexpected end tag (mi) in table context caused voodoo mode.
Line: 1 Col: 69 Unexpected end tag (mi) in table context caused voodoo mode.
Line: 1 Col: 76 Unexpected end tag (math) in table context caused voodoo mode.
#document
| <!DOCTYPE html>
| <html>
| <head>
| <body>
| <math math>
| <math mi>
| "foo"
| <math mi>
| "bar"
| <table>
| <tbody>
| <tr>
#data
<!DOCTYPE html><body><table><tbody><tr><td><math><mi>foo</mi><mi>bar</mi></math></td></tr></tbody></table>
#errors
#document
| <!DOCTYPE html>
| <html>
| <head>
| <body>
| <table>
| <tbody>
| <tr>
| <td>
| <math math>
| <math mi>
| "foo"
| <math mi>
| "bar"
#data
<!DOCTYPE html><body><table><tbody><tr><td><math><mi>foo</mi><mi>bar</mi></math><p>baz</td></tr></tbody></table>
#errors
#document
| <!DOCTYPE html>
| <html>
| <head>
| <body>
| <table>
| <tbody>
| <tr>
| <td>
| <math math>
| <math mi>
| "foo"
| <math mi>
| "bar"
| <p>
| "baz"
#data
<!DOCTYPE html><body><table><caption><math><mi>foo</mi><mi>bar</mi></math><p>baz</caption></table>
#errors
#document
| <!DOCTYPE html>
| <html>
| <head>
| <body>
| <table>
| <caption>
| <math math>
| <math mi>
| "foo"
| <math mi>
| "bar"
| <p>
| "baz"
#data
<!DOCTYPE html><body><table><caption><math><mi>foo</mi><mi>bar</mi><p>baz</table><p>quux
#errors
Line: 1 Col: 70 HTML start tag "p" in a foreign namespace context.
Line: 1 Col: 81 Unexpected end table tag in caption. Generates implied end caption.
#document
| <!DOCTYPE html>
| <html>
| <head>
| <body>
| <table>
| <caption>
| <math math>
| <math mi>
| "foo"
| <math mi>
| "bar"
| <p>
| "baz"
| <p>
| "quux"
#data
<!DOCTYPE html><body><table><caption><math><mi>foo</mi><mi>bar</mi>baz</table><p>quux
#errors
Line: 1 Col: 78 Unexpected end table tag in caption. Generates implied end caption.
Line: 1 Col: 78 Unexpected end tag (caption). Missing end tag (math).
#document
| <!DOCTYPE html>
| <html>
| <head>
| <body>
| <table>
| <caption>
| <math math>
| <math mi>
| "foo"
| <math mi>
| "bar"
| "baz"
| <p>
| "quux"
#data
<!DOCTYPE html><body><table><colgroup><math><mi>foo</mi><mi>bar</mi><p>baz</table><p>quux
#errors
Line: 1 Col: 44 Unexpected start tag (math) in table context caused voodoo mode.
Line: 1 Col: 56 Unexpected end tag (mi) in table context caused voodoo mode.
Line: 1 Col: 68 Unexpected end tag (mi) in table context caused voodoo mode.
Line: 1 Col: 71 HTML start tag "p" in a foreign namespace context.
Line: 1 Col: 71 Unexpected start tag (p) in table context caused voodoo mode.
#document
| <!DOCTYPE html>
| <html>
| <head>
| <body>
| <math math>
| <math mi>
| "foo"
| <math mi>
| "bar"
| <p>
| "baz"
| <table>
| <colgroup>
| <p>
| "quux"
#data
<!DOCTYPE html><body><table><tr><td><select><math><mi>foo</mi><mi>bar</mi><p>baz</table><p>quux
#errors
Line: 1 Col: 50 Unexpected start tag token (math) in the select phase. Ignored.
Line: 1 Col: 54 Unexpected start tag token (mi) in the select phase. Ignored.
Line: 1 Col: 62 Unexpected end tag (mi) in the select phase. Ignored.
Line: 1 Col: 66 Unexpected start tag token (mi) in the select phase. Ignored.
Line: 1 Col: 74 Unexpected end tag (mi) in the select phase. Ignored.
Line: 1 Col: 77 Unexpected start tag token (p) in the select phase. Ignored.
Line: 1 Col: 88 Unexpected table element end tag (tables) in the select in table phase.
#document
| <!DOCTYPE html>
| <html>
| <head>
| <body>
| <table>
| <tbody>
| <tr>
| <td>
| <select>
| "foobarbaz"
| <p>
| "quux"
#data
<!DOCTYPE html><body><table><select><math><mi>foo</mi><mi>bar</mi><p>baz</table><p>quux
#errors
Line: 1 Col: 36 Unexpected start tag (select) in table context caused voodoo mode.
Line: 1 Col: 42 Unexpected start tag token (math) in the select phase. Ignored.
Line: 1 Col: 46 Unexpected start tag token (mi) in the select phase. Ignored.
Line: 1 Col: 54 Unexpected end tag (mi) in the select phase. Ignored.
Line: 1 Col: 58 Unexpected start tag token (mi) in the select phase. Ignored.
Line: 1 Col: 66 Unexpected end tag (mi) in the select phase. Ignored.
Line: 1 Col: 69 Unexpected start tag token (p) in the select phase. Ignored.
Line: 1 Col: 80 Unexpected table element end tag (tables) in the select in table phase.
#document
| <!DOCTYPE html>
| <html>
| <head>
| <body>
| <select>
| "foobarbaz"
| <table>
| <p>
| "quux"
#data
<!DOCTYPE html><body></body></html><math><mi>foo</mi><mi>bar</mi><p>baz
#errors
Line: 1 Col: 41 Unexpected start tag (math).
Line: 1 Col: 68 HTML start tag "p" in a foreign namespace context.
#document
| <!DOCTYPE html>
| <html>
| <head>
| <body>
| <math math>
| <math mi>
| "foo"
| <math mi>
| "bar"
| <p>
| "baz"
#data
<!DOCTYPE html><body></body><math><mi>foo</mi><mi>bar</mi><p>baz
#errors
Line: 1 Col: 34 Unexpected start tag token (math) in the after body phase.
Line: 1 Col: 61 HTML start tag "p" in a foreign namespace context.
#document
| <!DOCTYPE html>
| <html>
| <head>
| <body>
| <math math>
| <math mi>
| "foo"
| <math mi>
| "bar"
| <p>
| "baz"
#data
<!DOCTYPE html><frameset><math><mi></mi><mi></mi><p><span>
#errors
Line: 1 Col: 31 Unexpected start tag token (math) in the frameset phase. Ignored.
Line: 1 Col: 35 Unexpected start tag token (mi) in the frameset phase. Ignored.
Line: 1 Col: 40 Unexpected end tag token (mi) in the frameset phase. Ignored.
Line: 1 Col: 44 Unexpected start tag token (mi) in the frameset phase. Ignored.
Line: 1 Col: 49 Unexpected end tag token (mi) in the frameset phase. Ignored.
Line: 1 Col: 52 Unexpected start tag token (p) in the frameset phase. Ignored.
Line: 1 Col: 58 Unexpected start tag token (span) in the frameset phase. Ignored.
Line: 1 Col: 58 Expected closing tag. Unexpected end of file.
#document
| <!DOCTYPE html>
| <html>
| <head>
| <frameset>
#data
<!DOCTYPE html><frameset></frameset><math><mi></mi><mi></mi><p><span>
#errors
Line: 1 Col: 42 Unexpected start tag (math) in the after frameset phase. Ignored.
Line: 1 Col: 46 Unexpected start tag (mi) in the after frameset phase. Ignored.
Line: 1 Col: 51 Unexpected end tag (mi) in the after frameset phase. Ignored.
Line: 1 Col: 55 Unexpected start tag (mi) in the after frameset phase. Ignored.
Line: 1 Col: 60 Unexpected end tag (mi) in the after frameset phase. Ignored.
Line: 1 Col: 63 Unexpected start tag (p) in the after frameset phase. Ignored.
Line: 1 Col: 69 Unexpected start tag (span) in the after frameset phase. Ignored.
#document
| <!DOCTYPE html>
| <html>
| <head>
| <frameset>
#data
<!DOCTYPE html><body xlink:href=foo><math xlink:href=foo></math>
#errors
#document
| <!DOCTYPE html>
| <html>
| <head>
| <body>
| xlink:href="foo"
| <math math>
| xlink href="foo"
#data
<!DOCTYPE html><body xlink:href=foo xml:lang=en><math><mi xml:lang=en xlink:href=foo></mi></math>
#errors
#document
| <!DOCTYPE html>
| <html>
| <head>
| <body>
| xlink:href="foo"
| xml:lang="en"
| <math math>
| <math mi>
| xlink href="foo"
| xml lang="en"
#data
<!DOCTYPE html><body xlink:href=foo xml:lang=en><math><mi xml:lang=en xlink:href=foo /></math>
#errors
#document
| <!DOCTYPE html>
| <html>
| <head>
| <body>
| xlink:href="foo"
| xml:lang="en"
| <math math>
| <math mi>
| xlink href="foo"
| xml lang="en"
#data
<!DOCTYPE html><body xlink:href=foo xml:lang=en><math><mi xml:lang=en xlink:href=foo />bar</math>
#errors
#document
| <!DOCTYPE html>
| <html>
| <head>
| <body>
| xlink:href="foo"
| xml:lang="en"
| <math math>
| <math mi>
| xlink href="foo"
| xml lang="en"
| "bar"

Различия файлов скрыты, потому что одна или несколько строк слишком длинны

Просмотреть файл

@ -21,6 +21,7 @@
*
* Contributor(s):
* Robert Sayre <sayrer@gmail.com>
* Jonathan Griffin <jgriffin@mozilla.com>
*
* Alternatively, the contents of this file may be used under the terms of
* either the GNU General Public License Version 2 or later (the "GPL"), or
@ -58,6 +59,142 @@ function trimString(s) {
return(s.replace(/^\s+/,'').replace(/\s+$/,''));
}
function getLastLine(str) {
var str_array = str.split("\n");
let last_line = str_array[str_array.length - 1];
return last_line;
}
/**
* Produces a string containing the expected output of a
* JSON-formatted test, by running the "output" object
* of the test through a serializer.
*
* @param buf string buffer containing the serialized output
* @param obj the object to serialize
* @param indent the current line indent
* @param mode the current node type being serialized, or -1
* between nodes
*/
function dumpTree(buf, obj, indent, mode) {
var dumpMode = mode;
if (typeof(dumpMode) == "undefined") {
dumpMode = -1
}
var buffer = buf;
if (typeof(obj) == "object" && (obj instanceof Array)) {
for each (var item in obj) {
[buffer, indent, dumpMode] =
dumpTree(buffer, item, indent, dumpMode);
}
dumpMode = -1;
}
else {
// Node.* constants are used here for convenience.
switch(obj) {
case "ParseError":
// no-op
break;
case "Character":
dumpMode = Node.TEXT_NODE;
break;
case "StartTag":
dumpMode = Node.ELEMENT_NODE;
break;
case "EndTag":
indent = indent.substring(2);
break;
case "Comment":
dumpMode = Node.COMMENT_NODE;
break;
case "DOCTYPE":
dumpMode = Node.DOCUMENT_TYPE_NODE;
break;
default:
switch(dumpMode) {
case Node.DOCUMENT_TYPE_NODE:
buffer += "<!DOCTYPE " + obj + ">\n<html>\n <head>\n <body>";
indent += " "
dumpMode = -1;
break;
case Node.COMMENT_NODE:
if (buffer.length > 1) {
buffer += "\n";
}
buffer += indent + "<!-- " + obj + " -->";
dumpMode = -1;
break;
case Node.ATTRIBUTE_NODE:
is(typeof(obj), "object", "obj not an object!");
indent += " ";
for (var key in obj) {
buffer += "\n" + indent + key + "=\"" + obj[key] + "\"";
}
dumpMode = -1;
break;
case Node.TEXT_NODE:
if (buffer.indexOf("<head>") == -1) {
buffer += "\n<html>\n <head>\n <body>";
indent += " ";
}
// If this text is being appended to some earlier
// text, concatenate the two by chopping off the
// trailing quote before adding new string.
let last_line = trimString(getLastLine(buffer));
if (last_line[0] == "\"" &&
last_line[last_line.length - 1] == "\"") {
buffer = buffer.substring(0, buffer.length - 1);
}
else {
buffer += "\n" + indent + "\"";
}
buffer += obj + "\"";
break;
case Node.ELEMENT_NODE:
buffer += "\n" + indent + "<" + obj + ">";
dumpMode = Node.ATTRIBUTE_NODE;
break;
default:
// no-op
break;
}
break;
}
}
return [buffer, indent, dumpMode];
}
/**
* Parses an individual testcase in decoded JSON form,
* as for tokenizer tests.
*
* @param An object containing a single testcase
*/
function parseJsonTestcase(testcase) {
// If the test begins with something that looks like the
// beginning of a doctype, then don't add a standard doctype,
// otherwise do.
if (testcase["input"].toLowerCase().indexOf("<!doc") == 0) {
var test_output = dumpTree(
"",
testcase["output"],
"");
} else {
var test_output = dumpTree(
"<!DOCTYPE html>\n<html>\n <head>\n <body>",
testcase["output"],
" ");
}
// Add html, head and body elements now if they
// haven't been added already.
if (test_output[0].indexOf("<head>") == -1) {
test_output[0] += "\n<html>\n <head>\n <body>";
}
return [testcase["input"], test_output[0], "",
testcase["description"],
JSON.stringify(testcase["output"])];
}
/**
* Parses an individual testcase into an array containing the input
* string, a string representing the expected tree (DOM), and a list
@ -66,6 +203,7 @@ function trimString(s) {
* @param A string containing a single testcase
*/
function parseTestcase(testcase) {
var documentFragmentTest = false;
var lines = testcase.split("\n");
if (lines[0] != "#data") {
log(lines);
@ -74,85 +212,39 @@ function parseTestcase(testcase) {
var input = [];
var output = [];
var errors = [];
var description = undefined;
var expectedTokenizerOutput = undefined;
var currentList = input;
for each (var line in lines) {
if (line && !(startsWith(line, "#error") ||
startsWith(line, "#document") ||
startsWith(line, "#data"))) {
// allow blank lines in input
if ((line || currentList == input) && !(startsWith(line, "#errors") ||
startsWith(line, "#document") ||
startsWith(line, "#description") ||
startsWith(line, "#expected") ||
startsWith(line, "#data"))) {
if (currentList == output && startsWith(line, "|")) {
currentList.push(line.substring(2));
currentList.push(line.substring(2));
} else {
currentList.push(line);
currentList.push(line);
}
} else if (line == "#errors") {
currentList = errors;
} else if (line == "#document") {
currentList = output;
} else if (line == "#document-fragment") {
documentFragmentTest = true;
}
}
}
// For #document-fragment tests, erase the output, so that the
// test is skipped in makeTestChecker()...there is no good way
// to run fragment tests without direct access to the parser.
if (documentFragmentTest) {
output = [];
}
//logger.log(input.length, output.length, errors.length);
return [input.join("\n"), output.join("\n"), errors];
}
/**
* Sometimes the test output will depend on attribute order.
* This function fixes up that output to match, if possible.
*
* @param output The string generated from walking the DOM
* @param expected The expected output from the test case
*/
function reorderToMatchExpected(output, expected) {
var outputLines = output.split("\n");
var expectedLines = expected.split("\n");
// if the line count is different, they don't match anyway
if (expectedLines.length != outputLines.length)
return output;
var fixedOutput = [];
var outputAtts = {};
var expectedAtts = [];
printAtts = function() {
for each (var expectedAtt in expectedAtts) {
if (outputAtts.hasOwnProperty(expectedAtt)) {
fixedOutput.push(outputAtts[expectedAtt]);
} else {
// found a missing attribute
return false;
}
}
outputAtts = {};
expectedAtts = [];
return true;
}
for (var i=0; i < outputLines.length; i++) {
var outputLine = outputLines[i];
var expectedLine = expectedLines[i];
var inAttrList = false;
if (isAttributeLine(outputLine)) {
// attribute mismatch, return original
if (!isAttributeLine(expectedLine)) {
return output; // mismatch, return original
}
// stick these in a dictionary
inAttrList = true;
outputAtts[attName(outputLine)] = outputLine;
expectedAtts.push(attName(expectedLine));
} else {
if (inAttrList && !printAtts()) {
return output; // mismatch, return original
}
inAttrList = false;
fixedOutput.push(outputLine);
}
}
if (inAttrList && !printAtts()) {
return output; // mismatch, return original
}
return fixedOutput.join("\n");
return [input.join("\n"), output.join("\n"), errors, description,
expectedTokenizerOutput];
}
function attName(line) {
@ -165,65 +257,84 @@ function isAttributeLine(line) {
return (!startsWith(str, "<") && !startsWith(str, "\"") &&
(str.indexOf("=\"") > 0));
}
/**
* A generator function that accepts a list of strings. Each list
* member corresponds to the contents of a ".dat" file from the
* html5lib test suite.
*
* @param The list of strings
*/
function test_parser(testlist) {
for each (var testgroup in testlist) {
var tests = testgroup.split("#data\n");
tests = ["#data\n" + test for each(test in tests) if (test)];
for each (var test in tests) {
yield parseTestcase(test);
}
}
}
/**
* Transforms a DOM document to a string matching the format in
* the test cases.
*
* @param the DOM document
* @param doc the DOM document
* @param mode the mode of the current test runner
*/
function docToTestOutput(doc) {
function docToTestOutput(doc, mode) {
var walker = doc.createTreeWalker(doc, NodeFilter.SHOW_ALL, null, true);
return addLevels(walker, "", "").slice(0,-1); // remove the last newline
return addLevels(walker, "", "", mode).slice(0,-1); // remove last newline
}
function addLevels(walker, buf, indent) {
function addLevels(walker, buf, indent, mode) {
if(walker.firstChild()) {
do {
buf += indent;
switch (walker.currentNode.nodeType) {
case Node.ELEMENT_NODE:
buf += "<" + walker.currentNode.tagName.toLowerCase() + ">";
buf += indent + "<";
// Prefix MathML element names with "math " to match
// the format of the expected output.
if (walker.currentNode.namespaceURI.toLowerCase().
indexOf("math") != -1) {
buf += "math " + walker.currentNode.tagName.toLowerCase() + ">\n";
}
else if (walker.currentNode.namespaceURI.toLowerCase().
indexOf("svg") != -1) {
buf += "svg " + walker.currentNode.tagName + ">\n";
}
else {
buf += walker.currentNode.tagName.toLowerCase() + ">\n";
}
if (walker.currentNode.hasAttributes()) {
var attrs = walker.currentNode.attributes;
for (var i=0; i < attrs.length; ++i) {
buf += "\n" + indent + " " + attrs[i].name +
"=\"" + attrs[i].value +"\"";
// Ignore the -moz-math-font-style attr, which
// Firefox automatically adds to every math element.
var attrname = attrs[i].name;
if (attrname != "-moz-math-font-style") {
buf += indent + " " + attrname +
"=\"" + attrs[i].value +"\"\n";
}
}
}
break;
case Node.DOCUMENT_TYPE_NODE:
buf += "<!DOCTYPE " + walker.currentNode.name + ">";
// Skip document type nodes for MODE_JSCOMPARE, as the nu.validator
// doesn't emit them.
if (mode != MODE_JSCOMPARE) {
buf += indent + "<!DOCTYPE " + walker.currentNode.name + ">\n";
}
break;
case Node.COMMENT_NODE:
buf += "<!-- " + walker.currentNode.nodeValue + " -->";
// Skip comment nodes for MODE_JSCOMPARE, as the nu.validator
// doesn't emit them.
if (mode != MODE_JSCOMPARE) {
buf += indent + "<!-- " + walker.currentNode.nodeValue + " -->\n";
}
break;
case Node.TEXT_NODE:
buf += "\"" + walker.currentNode.nodeValue + "\"";
// If this text is being appended to some earlier
// text at the same indent level, concatenate the two by
// removing the trailing quote before adding new string.
let last_line = getLastLine(
buf.substring(0, buf.length - 1));
if (last_line[indent.length] == "\"" &&
last_line[last_line.length - 1] == "\"") {
buf = buf.substring(0, buf.length - 2);
}
else {
buf += indent + "\"";
}
buf += walker.currentNode.nodeValue + "\"\n";
break;
}
buf += "\n";
buf = addLevels(walker, buf, indent + " ");
buf = addLevels(walker, buf, indent + " ", mode);
} while(walker.nextSibling());
walker.parentNode();
}
return buf;
}

Просмотреть файл

@ -21,6 +21,7 @@
*
* Contributor(s):
* Robert Sayre <sayrer@gmail.com>
* Jonathan Griffin <jgriffin@mozilla.com>
*
* Alternatively, the contents of this file may be used under the terms of
* either the GNU General Public License Version 2 or later (the "GPL"), or
@ -36,99 +37,383 @@
*
* ***** END LICENSE BLOCK *****/
/**
* Runs html5lib-formatted test cases in the browser. Requires SimpleTest.
*
* Define an array named parserDatFiles before loading this script,
* and it will load each of those dat files into an array, then run
* the test parser on each and run the tests by assigning the input
* data to an iframe's url.
*
* Your test document should have an element with id "display" and
* an iframe with id "testframe".
*/
const MODE_PARSER = 1;
const MODE_TOKENIZER = 2;
const MODE_JSCOMPARE = 3;
function writeErrorSummary(input, expected, got, isTodo) {
/**********************************************************************
* The ParserTestRunner class. This is the base class for running all
* supported types (tree construction, tokenizer, and js comparison) of
* html5lib-formatted HTML5 parser tests. Subclasses exist for tokenizer
* and js comparison tests, which override some methods of the base class.
*
* To use this with tree construction tests:
* Define an array named parserDatFiles which contain the names of the
* .dat files to be tested. Create an instance of the ParserTestRunner()
* class, and call the startTest() method on that instance.
* To use this with js comparison tests:
* Define an array named parserDatFiles which contain the names of the
* .dat files to be tested. Create an instance of the JSCompareTestRunner()
* class, and call the startTest() method on that instance. You must
* load the nu.validator JS parser before starting the test.
* To use this with tokenizer tests:
* Before loading this script, load a script containing a JSON object
* named tokenizerTests, which contains the tests to be run. Create
* an instance of the TokenizerTestRunner() class, and pass the filename
* of the script containing the tokenizerTests object to the constructor.
* Call the startTest() method on that instance to start the test.
*
* In all cases, your test document should have an element with id "display"
* and an iframe with id "testframe".
*/
function ParserTestRunner() {
this.mode = MODE_PARSER;
}
/**
* For failed tests, write an error summary to the main document, in
* order to make it easier to work with them.
*/
ParserTestRunner.prototype.writeErrorSummary = function (input,
expected, got, isTodo, description, expectedTokenizerOutput) {
if (!isTodo) {
appendChildNodes($("display"), H2("Unexpected Failure:"));
}
appendChildNodes(
$("display"), BR(),
SPAN("Matched: "), "" + (expected == got),
P("Input: " + input),
PRE("Expected:\n|" + expected +"|", "\n-\n",
"Output:\n|" + got + "|\n\n"),
SPAN("Matched: "), "" + (expected == got)
);
if (typeof(description) != "undefined") {
appendChildNodes(
$("display"), P("Description: " + description)
);
}
appendChildNodes(
$("display"),
PRE("Input: " + JSON.stringify(input))
);
if (typeof(expectedTokenizerOutput) != "undefined") {
appendChildNodes(
$("display"), P("Expected raw tokenizer output: " +
expectedTokenizerOutput)
);
}
let expectedTitle = this.mode == MODE_JSCOMPARE ?
"JavaScript parser output:" : "Expected:";
let outputTitle = this.mode == MODE_JSCOMPARE ?
"Gecko parser output:" : "Output:";
appendChildNodes(
$("display"),
PRE(expectedTitle + "\n|" + expected +"|", "\n-\n",
outputTitle + "\n|" + got + "|\n\n"),
HR()
);
}
/**
* Control will bounce back and forth between nextTest() and the
* event handler returned by makeTestChecker() until the 'testcases'
* iterator is spent.
* Restore the original value of the "html5.enable" pref and
* let SimpleTest the test is finished.
*/
function makeTestChecker(input, expected, errors) {
return function (e) {
var domAsString = docToTestOutput(e.target.contentDocument);
// It's possible we need to reorder attributes to get these to match
ParserTestRunner.prototype.finishTest = function() {
if (typeof(this.originalHtml5Pref) == "boolean") {
netscape.security.PrivilegeManager
.enablePrivilege("UniversalXPConnect");
var prefs = Components.classes["@mozilla.org/preferences-service;1"]
.getService(Components.interfaces.nsIPrefBranch);
prefs.setBoolPref("html5.enable", this.originalHtml5Pref);
}
SimpleTest.finish();
}
/**
* Set the "html5.enable" pref to true, and store the original
* value of the pref to be restored at the end of the test.
*/
ParserTestRunner.prototype.enableHTML5Parser = function() {
netscape.security.PrivilegeManager.
enablePrivilege("UniversalXPConnect");
var prefs = Components.classes["@mozilla.org/preferences-service;1"]
.getService(Components.interfaces.nsIPrefBranch);
this.originalHtml5Pref = prefs.getBoolPref("html5.enable");
prefs.setBoolPref("html5.enable", true);
}
/**
* Returns true if the input is in the exception list of tests
* known to fail.
*
* @param the 'input' field of the test to check
*/
ParserTestRunner.prototype.inTodoList = function(input) {
return html5TreeConstructionExceptions[input];
}
/**
* Verify the test, by comparing the DOM in the test document with a
* reference version. For MODE_PARSER tests, mark failed tests
* as "todo" if they appear in the html5Exceptions list.
*
* Where the "reference version" comes from is dependent on the test
* type; for MODE_PARSER and MODE_TOKENIZER, it is generated based
* on the expected output which appears in the test file. For
* MODE_JSCOMPARE, it is the DOM of another iframe which was
* populated by the nu.validator JS parser.
*
* @param input a string containing the test input
* @param expected a string containing the expected test output
* @param errors a string containing expected errors that the test
* will induce in the parser; currently unused
* @param description a string description of the test
* @param expectedTokenizerOutput for tokenizer tests, an array
* containing the expected output, otherwise
* undefined
* @param testDocument the document property of the testframe that
* contains the DOM under test
*/
ParserTestRunner.prototype.checkTests = function (input, expected,
errors, description, expectedTokenizerOutput, testDocument) {
// For fragment tests, the expected output will be empty, so skip
// the test.
if (expected.length > 1) {
var domAsString = docToTestOutput(testDocument, this.mode);
if (expected == domAsString) {
is(domAsString, expected, "HTML5 expected success. " + new Date());
} else {
var reorderedDOM = reorderToMatchExpected(domAsString, expected);
if (html5Exceptions[input]) {
todo(reorderedDOM == expected, "HTML5 expected failure. " + new Date());
writeErrorSummary(input, expected, reorderedDOM, true);
if (this.inTodoList(input)) {
todo(domAsString == expected,
"HTML5 expected failure. " + new Date());
this.writeErrorSummary(input, expected, domAsString,
true, description, expectedTokenizerOutput);
} else {
if (reorderedDOM != expected) {
is(reorderedDOM, expected, "HTML5 unexpected failure. " + input + " " + new Date());
writeErrorSummary(input, expected, reorderedDOM, false);
if (domAsString != expected) {
is(domAsString, expected,
"HTML5 unexpected failure. " + input + " " + new Date());
this.writeErrorSummary(input, expected, domAsString, false,
description, expectedTokenizerOutput);
} else {
is(reorderedDOM, expected, "HTML5 expected success. " + new Date());
is(domAsString, expected, "HTML5 expected success. " + new Date());
}
}
}
nextTest(e.target);
}
}
var testcases;
function nextTest(testframe) {
var test = 0;
try {
var [input, output, errors] = testcases.next();
dataURL = "data:text/html;base64," + btoa(input);
testframe.onload = makeTestChecker(input, output, errors);
testframe.src = dataURL;
} catch (err if err instanceof StopIteration) {
SimpleTest.finish();
}
}
var framesLoaded = [];
function frameLoaded(e) {
framesLoaded.push(e.target);
if (framesLoaded.length == parserDatFiles.length) {
var tests = [scrapeText(ifr.contentDocument)
for each (ifr in framesLoaded)];
testcases = test_parser(tests);
nextTest($("testframe"));
//SimpleTest.finish();
}
}
/**
* Create an iframe for each dat file
* Call the test checker to verify the current test, then
* go to the next test.
*
* Control will bounce back and forth between nextTest() and
* parseTests() until the 'testcases' iterator is spent.
*/
function makeIFrames() {
ParserTestRunner.prototype.makeTestChecker = function (input,
expected, errors, description, expectedTokenizerOutput,
testframe) {
this.checkTests(input, expected, errors, description,
expectedTokenizerOutput, testframe.contentDocument);
this.nextTest(testframe);
}
/**
* A generator function that accepts a list of tests. Each list
* member corresponds to the contents of a ".dat" file from the
* html5lib test suite.
*
* @param the list of strings
*/
ParserTestRunner.prototype.parseTests = function(testlist) {
for each (var testgroup in testlist) {
var tests = testgroup.split("#data\n");
tests = ["#data\n" + test for each(test in tests) if (test)];
for each (var test in tests) {
yield parseTestcase(test);
}
}
}
/**
* Parse the next test, then set the src attribute of the testframe
* to a data: url containing the base64-encoded value of the test input.
*
* @param the iframe used for the test content
*/
ParserTestRunner.prototype.nextTest = function(testframe) {
try {
var [input, output, errors, description, expectedTokenizerOutput] =
this.testcases.next();
dataURL = "data:text/html;base64," + btoa(input);
var me = this;
testframe.onload = function(e) {
me.makeTestChecker.call(me, input, output, errors,
description, expectedTokenizerOutput, e.target);
};
testframe.src = dataURL;
} catch (err if err instanceof StopIteration) {
this.finishTest();
}
}
/**
* Create an iframe for each .dat file. Once all the
* iframes are loaded, concatenate their content into
* one large string, pass that to the test parser, and
* begin interating through the tests.
*/
ParserTestRunner.prototype.makeIFrames = function () {
var framesLoaded = [];
var me = this;
for each (var filename in parserDatFiles) {
var datFrame = document.createElement("iframe");
datFrame.onload = frameLoaded;
datFrame.addEventListener("load", function(e) {
framesLoaded.push(e.target);
if (framesLoaded.length == parserDatFiles.length) {
var tests = [scrapeText(ifr.contentDocument)
for each (ifr in framesLoaded)];
me.testcases = me.parseTests(tests);
me.nextTest($("testframe"));
}
}, false);
datFrame.src = filename;
$("display").appendChild(datFrame);
}
appendChildNodes($("display"), BR(), "Results: ", HR());
}
addLoadEvent(makeIFrames);
SimpleTest.waitForExplicitFinish();
/**
* Start testing as soon as the onload event is fired.
*/
ParserTestRunner.prototype.startTest = function () {
SimpleTest.waitForExplicitFinish();
this.enableHTML5Parser();
var me = this;
var onLoadHandler = function (e) { me.makeIFrames.apply(me); }
addLoadEvent(onLoadHandler);
};
/**********************************************************************
* The TokenizerTestRunner() class, which inherits from ParserTestRunner().
*/
function TokenizerTestRunner(filename) {
this.mode = MODE_TOKENIZER;
this.filename = filename;
}
TokenizerTestRunner.prototype = new ParserTestRunner();
TokenizerTestRunner.prototype.constructor = TokenizerTestRunner;
/**
* Returns true if the input is in the exception list of tests
* known to fail.
*
* @param the 'input' field of the test to check
*/
TokenizerTestRunner.prototype.inTodoList = function(input) {
return html5TokenizerExceptions[input];
}
/**
* Parse the next test, then set the src attribute of the testframe
* to a url which will be served by a server-side javascript;
* the .sjs will return a document containing the test input.
*
* Note that tokenizer tests can't use the same method as the other
* parser tests for loading the test input into the iframe,
* as some tokenizer test input contains invalid unicode characters,
* which are impossible to express in a base64-encoded data: url.
*
* @param the iframe used for the test content
*/
TokenizerTestRunner.prototype.nextTest = function(testframe) {
try {
var [index, input, expected, errors, description, expectedTokenizerOutput]
= this.testcases.next();
let dataURL = "tokenizer_file_server.sjs?" + index +
"&" + this.filename;
var me = this;
testframe.onload = function(e) {
me.makeTestChecker.call(me, input, expected, errors,
description, expectedTokenizerOutput, e.target);
};
testframe.src = dataURL;
} catch (err if err instanceof StopIteration) {
this.finishTest();
}
}
/**
* A generator function that iterates through a list of
* tokenizer tests which have been decoded from JSON
* .test files.
*
* @param A decoded JSON object containing a series of tests.
*/
TokenizerTestRunner.prototype.parseTests = function(jsonTestList) {
var index = 1;
for each (var test in jsonTestList) {
var tmpArray = [index];
yield tmpArray.concat(parseJsonTestcase(test));
index++;
}
}
/**
* Pass the JSON test object to the test parser, and begin
* interating through the tests.
*/
TokenizerTestRunner.prototype.startTestParser = function() {
appendChildNodes($("display"), BR(), "Results: ", HR());
this.testcases = this.parseTests(tokenizerTests["tests"]);
this.nextTest($("testframe"));
}
/**
* Start testing as soon as the onload event is fired.
*/
TokenizerTestRunner.prototype.startTest = function () {
SimpleTest.waitForExplicitFinish();
this.enableHTML5Parser();
var me = this;
var onLoadHandler = function (e) { me.startTestParser.apply(me); }
addLoadEvent(onLoadHandler);
}
/**********************************************************************
* The JSCompareTestRunner() class, which inherits from ParserTestRunner().
*
* This class compares output of the Gecko HTML parser with that of the
* JavaScript nu.validator parser.
*/
function JSCompareTestRunner() {
this.mode = MODE_JSCOMPARE;
}
JSCompareTestRunner.prototype = new ParserTestRunner();
JSCompareTestRunner.prototype.constructor = JSCompareTestRunner;
/**
* Call the test checker to verify the current test, then
* go to the next test.
*
* Control will bounce back and forth between nextTest() and
* parseTests() until the 'testcases' iterator is spent.
*/
JSCompareTestRunner.prototype.makeTestChecker = function (input,
expected, errors, description, expectedTokenizerOutput,
testframe) {
var me = this;
window.parseHtmlDocument(input, $("jsframe").contentDocument,
function() {
expected = docToTestOutput($("jsframe").contentDocument,
me.mode);
me.checkTests(input, expected, errors, description,
expectedTokenizerOutput, testframe.contentDocument);
me.nextTest(testframe);
}, null);
}
/**
* Returns true if the input is in the exception list of tests
* known to fail.
*
* @param the 'input' field of the test to check
*/
JSCompareTestRunner.prototype.inTodoList = function(input) {
return html5JSCompareExceptions[input];
}

Просмотреть файл

@ -2,7 +2,7 @@
<!DOCTYPE html><html><head><noscript></noscript><style></style></head><frameset></frameset>
#errors
#document
| <!DOCTYPE HTML>
| <!DOCTYPE html>
| <html>
| <head>
| <noscript>
@ -13,7 +13,7 @@
<!DOCTYPE html><html><head><link><body></body></html>
#errors
#document
| <!DOCTYPE HTML>
| <!DOCTYPE html>
| <html>
| <head>
| <link>
@ -23,7 +23,7 @@
<!DOCTYPE html><html><link><body>#</body></html>
#errors
#document
| <!DOCTYPE HTML>
| <!DOCTYPE html>
| <html>
| <head>
| <link>
@ -61,7 +61,7 @@ Unexpected start tag that belongs in head.
Unexpected start tag that belongs in head.
Expected closing tag after </.
#document
| <!DOCTYPE HTML>
| <!DOCTYPE html>
| <html>
| <head>
| <title>
@ -79,7 +79,7 @@ x { content:"</style" } "
<!DOCTYPE html><body><table><tr><td></td><input><td></td></tr></table></body>
#errors
#document
| <!DOCTYPE HTML>
| <!DOCTYPE html>
| <html>
| <head>
| <body>
@ -94,7 +94,7 @@ x { content:"</style" } "
<!DOCTYPE html><body><table><tr><td></td><input type="hidden"><td></td></tr></table></body>
#errors
#document
| <!DOCTYPE HTML>
| <!DOCTYPE html>
| <html>
| <head>
| <body>
@ -110,7 +110,7 @@ x { content:"</style" } "
<!DOCTYPE html><body><table><tr><td></td><input tYPe=" hiDDen "><td></td></tr></table></body>
#errors
#document
| <!DOCTYPE HTML>
| <!DOCTYPE html>
| <html>
| <head>
| <body>
@ -126,7 +126,7 @@ x { content:"</style" } "
<!DOCTYPE html><body><table><tr><td></td><input tYPe=" hiDDen "><td></td></tr></table></body>
#errors
#document
| <!DOCTYPE HTML>
| <!DOCTYPE html>
| <html>
| <head>
| <body>
@ -142,7 +142,7 @@ x { content:"</style" } "
<!DOCTYPE html><body><table><tr><td></td><input type="text" type="hidden"><td></td></tr></table></body>
#errors
#document
| <!DOCTYPE HTML>
| <!DOCTYPE html>
| <html>
| <head>
| <body>
@ -158,7 +158,7 @@ x { content:"</style" } "
<!DOCTYPE html><body><table><tr><td></td><input type="hidden" type="text"><td></td></tr></table></body>
#errors
#document
| <!DOCTYPE HTML>
| <!DOCTYPE html>
| <html>
| <head>
| <body>
@ -174,7 +174,7 @@ x { content:"</style" } "
<!DOCTYPE html><body><table><tr><td></td><input id="one"><input type="hidden"><input id="two"><td></td></tr></table></body>
#errors
#document
| <!DOCTYPE HTML>
| <!DOCTYPE html>
| <html>
| <head>
| <body>
@ -194,7 +194,7 @@ x { content:"</style" } "
<!DOCTYPE html><body><table><tr><td></td><input id="one" type="hidden"><input id="two"><input id="three" type="hidden"><td></td></tr></table></body>
#errors
#document
| <!DOCTYPE HTML>
| <!DOCTYPE html>
| <html>
| <head>
| <body>
@ -216,7 +216,7 @@ x { content:"</style" } "
<!DOCTYPE html><body><table><input><tr><td></td><td></td></tr></table></body>
#errors
#document
| <!DOCTYPE HTML>
| <!DOCTYPE html>
| <html>
| <head>
| <body>
@ -231,7 +231,7 @@ x { content:"</style" } "
<!DOCTYPE html><body><table><input type="hidden"><tr><td></td><td></td></tr></table></body>
#errors
#document
| <!DOCTYPE HTML>
| <!DOCTYPE html>
| <html>
| <head>
| <body>
@ -247,7 +247,7 @@ x { content:"</style" } "
<!DOCTYPE html><body><table><tbody><input><tr><td></td><td></td></tr></tbody></table></body>
#errors
#document
| <!DOCTYPE HTML>
| <!DOCTYPE html>
| <html>
| <head>
| <body>
@ -262,7 +262,7 @@ x { content:"</style" } "
<!DOCTYPE html><body><table><tbody><input type="hidden"><tr><td></td><td></td></tr></tbody></table></body>
#errors
#document
| <!DOCTYPE HTML>
| <!DOCTYPE html>
| <html>
| <head>
| <body>
@ -278,7 +278,7 @@ x { content:"</style" } "
<!DOCTYPE html><body><table><thead><input><tr><td></td><td></td></tr></thead></table></body>
#errors
#document
| <!DOCTYPE HTML>
| <!DOCTYPE html>
| <html>
| <head>
| <body>
@ -293,7 +293,7 @@ x { content:"</style" } "
<!DOCTYPE html><body><table><thead><input type="hidden"><tr><td></td><td></td></tr></thead></table></body>
#errors
#document
| <!DOCTYPE HTML>
| <!DOCTYPE html>
| <html>
| <head>
| <body>
@ -309,7 +309,7 @@ x { content:"</style" } "
<!DOCTYPE html><body><table><tfoot><input><tr><td></td><td></td></tr></tfoot></table></body>
#errors
#document
| <!DOCTYPE HTML>
| <!DOCTYPE html>
| <html>
| <head>
| <body>
@ -324,7 +324,7 @@ x { content:"</style" } "
<!DOCTYPE html><body><table><tfoot><input type="hidden"><tr><td></td><td></td></tr></tfoot></table></body>
#errors
#document
| <!DOCTYPE HTML>
| <!DOCTYPE html>
| <html>
| <head>
| <body>
@ -340,7 +340,7 @@ x { content:"</style" } "
<!DOCTYPE html><html><head></head><form><input></form><frameset rows="*"><frame></frameset></html>
#errors
#document
| <!DOCTYPE HTML>
| <!DOCTYPE html>
| <html>
| <head>
| <frameset>
@ -351,7 +351,7 @@ x { content:"</style" } "
<!DOCTYPE html><html><head></head><form><input type="text"></form><frameset rows="*"><frame></frameset></html>
#errors
#document
| <!DOCTYPE HTML>
| <!DOCTYPE html>
| <html>
| <head>
| <body>
@ -363,7 +363,7 @@ x { content:"</style" } "
<!DOCTYPE html><html><head></head><form><input type="hidden"></form><frameset rows="*"><frame></frameset></html>
#errors
#document
| <!DOCTYPE HTML>
| <!DOCTYPE html>
| <html>
| <head>
| <frameset>
@ -374,7 +374,7 @@ x { content:"</style" } "
<!DOCTYPE html><html><head></head><form><input tYpE=" HIdDen "></form><frameset rows="*"><frame></frameset></html>
#errors
#document
| <!DOCTYPE HTML>
| <!DOCTYPE html>
| <html>
| <head>
| <frameset>
@ -385,7 +385,7 @@ x { content:"</style" } "
<!DOCTYPE html><html><body><table><link><tr><td>Hi!</td></tr></table></html>
#errors
#document
| <!DOCTYPE HTML>
| <!DOCTYPE html>
| <html>
| <head>
| <body>
@ -400,7 +400,7 @@ x { content:"</style" } "
<!DOCTYPE html><html><body><table><style>td { color: green }</style><tr><td>Hi!</tr></td></table>
#errors
#document
| <!DOCTYPE HTML>
| <!DOCTYPE html>
| <html>
| <head>
| <body>
@ -411,11 +411,12 @@ x { content:"</style" } "
| <tr>
| <td>
| "Hi!"
#data
<!DOCTYPE html><html><head></head><form><input type=" hidden"></form><frameset rows="*"><frame></frameset></html>
#errors
#document
| <!DOCTYPE HTML>
| <!DOCTYPE html>
| <html>
| <head>
| <body>

Просмотреть файл

@ -0,0 +1,40 @@
<!DOCTYPE HTML>
<html>
<!--
https://bugzilla.mozilla.org/show_bug.cgi?id=373864
-->
<head>
<title>HTML5 Tokenizer Tests</title>
<script type="text/javascript" src="/MochiKit/packed.js"></script>
<script type="text/javascript"
src="/tests/SimpleTest/SimpleTest.js"></script>
<link rel="stylesheet" type="text/css"
href="/tests/SimpleTest/test.css" />
<script type="application/javascript;version=1.7"
src="parser_datreader.js"></script>
<script type="application/javascript"
src="html5_tree_construction_exceptions.js"></script>
<script type="application/javascript"
src="html5lib_tokenizer_entities.test"></script>
<script type="application/javascript;version=1.7"
src="parser_web_testrunner.js"></script>
<script type="application/javascript;version=1.7">
var testRunner = new TokenizerTestRunner("html5lib_tokenizer_entities.test");
testRunner.startTest();
</script>
</head>
<body>
<p>HTML5 Tokenizer Tests: Entities</p>
<a href="https://bugzilla.mozilla.org/show_bug.cgi?id=373864"
target="_blank">Mozilla Bug 373864</a>
<div id="content">
<iframe src="" id="testframe"></iframe>
</div>
test data converted from http://code.google.com/p/html5lib/source/browse/testdata/tokenizer<br>
<div id="display">
</div>
</body>
</html>

Просмотреть файл

@ -0,0 +1,40 @@
<!DOCTYPE HTML>
<html>
<!--
https://bugzilla.mozilla.org/show_bug.cgi?id=373864
-->
<head>
<title>HTML5 Tokenizer Tests</title>
<script type="text/javascript" src="/MochiKit/packed.js"></script>
<script type="text/javascript"
src="/tests/SimpleTest/SimpleTest.js"></script>
<link rel="stylesheet" type="text/css"
href="/tests/SimpleTest/test.css" />
<script type="application/javascript;version=1.7"
src="parser_datreader.js"></script>
<script type="application/javascript"
src="html5_tree_construction_exceptions.js"></script>
<script type="application/javascript"
src="html5lib_tokenizer_numeric_entities.test"></script>
<script type="application/javascript;version=1.7"
src="parser_web_testrunner.js"></script>
<script type="application/javascript;version=1.7">
var testRunner = new TokenizerTestRunner("html5lib_tokenizer_numeric_entities.test");
testRunner.startTest();
</script>
</head>
<body>
<p>HTML5 Tokenizer Tests: Numeric Entities</p>
<a href="https://bugzilla.mozilla.org/show_bug.cgi?id=373864"
target="_blank">Mozilla Bug 373864</a>
<div id="content">
<iframe src="" id="testframe"></iframe>
</div>
test data converted from http://code.google.com/p/html5lib/source/browse/testdata/tokenizer<br>
<div id="display">
</div>
</body>
</html>

Просмотреть файл

@ -0,0 +1,40 @@
<!DOCTYPE HTML>
<html>
<!--
https://bugzilla.mozilla.org/show_bug.cgi?id=373864
-->
<head>
<title>HTML5 Tokenizer Tests</title>
<script type="text/javascript" src="/MochiKit/packed.js"></script>
<script type="text/javascript"
src="/tests/SimpleTest/SimpleTest.js"></script>
<link rel="stylesheet" type="text/css"
href="/tests/SimpleTest/test.css" />
<script type="application/javascript;version=1.7"
src="parser_datreader.js"></script>
<script type="application/javascript"
src="html5_tree_construction_exceptions.js"></script>
<script type="application/javascript"
src="html5lib_tokenizer_test1.test"></script>
<script type="application/javascript;version=1.7"
src="parser_web_testrunner.js"></script>
<script type="application/javascript;version=1.7">
var testRunner = new TokenizerTestRunner("html5lib_tokenizer_test1.test");
testRunner.startTest();
</script>
</head>
<body>
<p>HTML5 Tokenizer Tests: Test Group 1</p>
<a href="https://bugzilla.mozilla.org/show_bug.cgi?id=373864"
target="_blank">Mozilla Bug 373864</a>
<div id="content">
<iframe src="" id="testframe"></iframe>
</div>
test data converted from http://code.google.com/p/html5lib/source/browse/testdata/tokenizer<br>
<div id="display">
</div>
</body>
</html>

Просмотреть файл

@ -0,0 +1,40 @@
<!DOCTYPE HTML>
<html>
<!--
https://bugzilla.mozilla.org/show_bug.cgi?id=373864
-->
<head>
<title>HTML5 Tokenizer Tests</title>
<script type="text/javascript" src="/MochiKit/packed.js"></script>
<script type="text/javascript"
src="/tests/SimpleTest/SimpleTest.js"></script>
<link rel="stylesheet" type="text/css"
href="/tests/SimpleTest/test.css" />
<script type="application/javascript;version=1.7"
src="parser_datreader.js"></script>
<script type="application/javascript"
src="html5_tree_construction_exceptions.js"></script>
<script type="application/javascript"
src="html5lib_tokenizer_test2.test"></script>
<script type="application/javascript;version=1.7"
src="parser_web_testrunner.js"></script>
<script type="application/javascript;version=1.7">
var testRunner = new TokenizerTestRunner("html5lib_tokenizer_test2.test");
testRunner.startTest();
</script>
</head>
<body>
<p>HTML5 Tokenizer Tests: Test Group 2</p>
<a href="https://bugzilla.mozilla.org/show_bug.cgi?id=373864"
target="_blank">Mozilla Bug 373864</a>
<div id="content">
<iframe src="" id="testframe"></iframe>
</div>
test data converted from http://code.google.com/p/html5lib/source/browse/testdata/tokenizer<br>
<div id="display">
</div>
</body>
</html>

Просмотреть файл

@ -0,0 +1,40 @@
<!DOCTYPE HTML>
<html>
<!--
https://bugzilla.mozilla.org/show_bug.cgi?id=373864
-->
<head>
<title>HTML5 Tokenizer Tests</title>
<script type="text/javascript" src="/MochiKit/packed.js"></script>
<script type="text/javascript"
src="/tests/SimpleTest/SimpleTest.js"></script>
<link rel="stylesheet" type="text/css"
href="/tests/SimpleTest/test.css" />
<script type="application/javascript;version=1.7"
src="parser_datreader.js"></script>
<script type="application/javascript"
src="html5_tree_construction_exceptions.js"></script>
<script type="application/javascript"
src="html5lib_tokenizer_test3.test"></script>
<script type="application/javascript;version=1.7"
src="parser_web_testrunner.js"></script>
<script type="application/javascript;version=1.7">
var testRunner = new TokenizerTestRunner("html5lib_tokenizer_test3.test");
testRunner.startTest();
</script>
</head>
<body>
<p>HTML5 Tokenizer Tests: Test Group 3</p>
<a href="https://bugzilla.mozilla.org/show_bug.cgi?id=373864"
target="_blank">Mozilla Bug 373864</a>
<div id="content">
<iframe src="" id="testframe"></iframe>
</div>
test data converted from http://code.google.com/p/html5lib/source/browse/testdata/tokenizer<br>
<div id="display">
</div>
</body>
</html>

Просмотреть файл

@ -0,0 +1,40 @@
<!DOCTYPE HTML>
<html>
<!--
https://bugzilla.mozilla.org/show_bug.cgi?id=373864
-->
<head>
<title>HTML5 Tokenizer Tests</title>
<script type="text/javascript" src="/MochiKit/packed.js"></script>
<script type="text/javascript"
src="/tests/SimpleTest/SimpleTest.js"></script>
<link rel="stylesheet" type="text/css"
href="/tests/SimpleTest/test.css" />
<script type="application/javascript;version=1.7"
src="parser_datreader.js"></script>
<script type="application/javascript"
src="html5_tree_construction_exceptions.js"></script>
<script type="application/javascript"
src="html5lib_tokenizer_test4.test"></script>
<script type="application/javascript;version=1.7"
src="parser_web_testrunner.js"></script>
<script type="application/javascript;version=1.7">
var testRunner = new TokenizerTestRunner("html5lib_tokenizer_test4.test");
testRunner.startTest();
</script>
</head>
<body>
<p>HTML5 Tokenizer Tests: Test Group 4</p>
<a href="https://bugzilla.mozilla.org/show_bug.cgi?id=373864"
target="_blank">Mozilla Bug 373864</a>
<div id="content">
<iframe src="" id="testframe"></iframe>
</div>
test data converted from http://code.google.com/p/html5lib/source/browse/testdata/tokenizer<br>
<div id="display">
</div>
</body>
</html>

Просмотреть файл

@ -0,0 +1,40 @@
<!DOCTYPE HTML>
<html>
<!--
https://bugzilla.mozilla.org/show_bug.cgi?id=366936
-->
<head>
<title>HTML5 Tokenizer Tests</title>
<script type="text/javascript" src="/MochiKit/packed.js"></script>
<script type="text/javascript"
src="/tests/SimpleTest/SimpleTest.js"></script>
<link rel="stylesheet" type="text/css"
href="/tests/SimpleTest/test.css" />
<script type="application/javascript;version=1.7"
src="parser_datreader.js"></script>
<script type="application/javascript"
src="html5_tree_construction_exceptions.js"></script>
<script type="application/javascript"
src="html5lib_tokenizer_test5.test"></script>
<script type="application/javascript;version=1.7"
src="parser_web_testrunner.js"></script>
<script type="application/javascript;version=1.7">
var testRunner = new TokenizerTestRunner("html5lib_tokenizer_test5.test");
testRunner.startTest();
</script>
</head>
<body>
<p>HTML5 Tokenizer Tests: Test Group 5</p>
<a href="https://bugzilla.mozilla.org/show_bug.cgi?id=366936"
target="_blank">Mozilla Bug 366936</a>
<div id="content">
<iframe src="" id="testframe"></iframe>
</div>
test data converted from http://code.google.com/p/html5lib/source/browse/testdata/tokenizer<br>
<div id="display">
</div>
</body>
</html>

Просмотреть файл

@ -0,0 +1,40 @@
<!DOCTYPE HTML>
<html>
<!--
https://bugzilla.mozilla.org/show_bug.cgi?id=366936
-->
<head>
<title>HTML5 Tokenizer Tests</title>
<script type="text/javascript" src="/MochiKit/packed.js"></script>
<script type="text/javascript"
src="/tests/SimpleTest/SimpleTest.js"></script>
<link rel="stylesheet" type="text/css"
href="/tests/SimpleTest/test.css" />
<script type="application/javascript;version=1.7"
src="parser_datreader.js"></script>
<script type="application/javascript"
src="html5_tree_construction_exceptions.js"></script>
<script type="application/javascript"
src="html5lib_tokenizer_unicode_chars.test"></script>
<script type="application/javascript;version=1.7"
src="parser_web_testrunner.js"></script>
<script type="application/javascript;version=1.7">
var testRunner = new TokenizerTestRunner("html5lib_tokenizer_unicode_chars.test");
testRunner.startTest();
</script>
</head>
<body>
<p>HTML5 Tokenizer Tests: Unicode Characters</p>
<a href="https://bugzilla.mozilla.org/show_bug.cgi?id=366936"
target="_blank">Mozilla Bug 366936</a>
<div id="content">
<iframe src="" id="testframe"></iframe>
</div>
test data converted from http://code.google.com/p/html5lib/source/browse/testdata/tokenizer<br>
<div id="display">
</div>
</body>
</html>

Просмотреть файл

@ -15,13 +15,28 @@ https://bugzilla.mozilla.org/show_bug.cgi?id=366936
<script type="application/javascript"
src="html5_tree_construction_exceptions.js"></script>
<script class="testbody" type="application/javascript;version=1.7">
var parserDatFiles = ["html5lib_tree_dat1.txt",
var parserDatFiles = ["html5lib_tree_dat1.txt",
"html5lib_tree_dat2.txt",
"html5lib_tree_dat3.txt",
"regressions.txt"];
"html5lib_tree_dat5.txt",
"html5lib_tree_dat6.txt",
"html5lib_tree_dat7.txt",
"html5lib_tree_dat8.txt",
"html5lib_tree_dat9.txt",
"html5lib_tree_dat10.txt",
"html5lib_tree_dat11.txt",
"html5lib_tree_dat12.txt",
"html5lib_tree_dat14.txt",
"regressions.txt"
];
</script>
<script type="application/javascript;version=1.7"
src="parser_web_testrunner.js"></script>
<script type="application/javascript;version=1.7">
var testRunner = new ParserTestRunner();
testRunner.startTest();
</script>
</head>
<body>
<a href="https://bugzilla.mozilla.org/show_bug.cgi?id=366936"

Просмотреть файл

@ -0,0 +1,54 @@
<!DOCTYPE HTML>
<html>
<!--
https://bugzilla.mozilla.org/show_bug.cgi?id=366936
-->
<head>
<title>Test for Bug 366936</title>
<script type="text/javascript" src="/MochiKit/packed.js"></script>
<script type="text/javascript"
src="/tests/SimpleTest/SimpleTest.js"></script>
<link rel="stylesheet" type="text/css"
href="/tests/SimpleTest/test.css" />
<script type="application/javascript;version=1.7"
src="parser_datreader.js"></script>
<script type="application/javascript"
src="html5_tree_construction_exceptions.js"></script>
<script class="testbody" type="application/javascript;version=1.7">
var parserDatFiles = ["html5lib_tree_dat1.txt",
"html5lib_tree_dat2.txt",
"html5lib_tree_dat3.txt",
"html5lib_tree_dat5.txt",
"html5lib_tree_dat6.txt",
"html5lib_tree_dat7.txt",
"html5lib_tree_dat8.txt",
"html5lib_tree_dat9.txt",
"html5lib_tree_dat10.txt",
"html5lib_tree_dat11.txt",
"html5lib_tree_dat12.txt",
"html5lib_tree_dat14.txt"
];
</script>
<script type="application/javascript;version=1.7"
src="nu.validator.htmlparser.HtmlParser.nocache.js"></script>
<script type="application/javascript;version=1.7"
src="parser_web_testrunner.js"></script>
<script type="application/javascript;version=1.7">
var testRunner = new JSCompareTestRunner();
testRunner.startTest();
</script>
</head>
<body>
<a href="https://bugzilla.mozilla.org/show_bug.cgi?id=366936"
target="_blank">Mozilla Bug 366936</a>
<div id="content">
<iframe src="" id="testframe"></iframe>
<iframe src="" id="jsframe"></iframe>
</div>
See html5lib.googlecode.com for original test data<br>
<div id="display">
</div>
</body>
</html>

Просмотреть файл

@ -0,0 +1,110 @@
/**
* Server-side javascript CGI for serving html5lib tokenizer test data.
*/
const Cc = Components.classes;
const Ci = Components.interfaces;
/**
* Read the contents of a file and return it as a string.
*/
function getFileContents(aFile) {
const PR_RDONLY = 0x01;
var fileStream = Cc["@mozilla.org/network/file-input-stream;1"]
.createInstance(Ci.nsIFileInputStream);
fileStream.init(aFile, PR_RDONLY, 0400,
Ci.nsIFileInputStream.CLOSE_ON_EOF);
var inputStream = Cc["@mozilla.org/scriptableinputstream;1"]
.createInstance(Ci.nsIScriptableInputStream);
inputStream.init(fileStream);
var data = "";
do {
var str = inputStream.read(inputStream.available());
data += str;
} while(str.length > 0);
return data;
}
/**
* Handle the HTTP request by writing an appropriate response.
*/
function handleRequest(request, response)
{
// The query string of the request is expected to be in the format
// xx&filename.test, where xx is an integer representing the index
// of the test in filename.test to return.
var index = parseInt(request.queryString, 10);
var filename =
request.queryString.substring(request.queryString.indexOf("&") + 1);
var file = Components.classes["@mozilla.org/file/directory_service;1"]
.getService(Components.interfaces.nsIProperties)
.get("CurWorkD", Components.interfaces.nsIFile);
file.append("tests");
file.append("parser");
file.append("htmlparser");
file.append("tests");
file.append("mochitest");
file.append(filename);
var fileContent = getFileContents(file);
response.setHeader("Content-Type", "text/html; charset=utf-8");
var nativeJSON = Components.classes["@mozilla.org/dom/json;1"]
.createInstance(Components.interfaces.nsIJSON);
var tests =
nativeJSON.decode(fileContent.substring(fileContent.indexOf("{")));
// If the test case doesn't include anything that looks like
// a doctype, prepend a standard doctype and header to the test
// data.
var bodystr = tests["tests"][(index - 1)]["input"];
if (bodystr.toLowerCase().indexOf("<!doc") == -1) {
response.write("<!DOCTYPE html><html><head><body>");
}
var bos = Components.classes["@mozilla.org/binaryoutputstream;1"]
.createInstance(Components.interfaces.nsIBinaryOutputStream);
bos.setOutputStream(response.bodyOutputStream);
var body = [];
for (var i = 0; i < bodystr.length; i++) {
var charcode = bodystr.charCodeAt(i);
// For unicode character codes greater than 65,536, two bytes
// are used in the source string to represent the character. Combine
// these into a single decimal integer using the algorithm from
// https://developer.mozilla.org/en/Core_JavaScript_1.5_Reference/
// Global_Objects/String/charCodeAt
if (0xD800 <= charcode && charcode <= 0xDBFF)
{
var hi = charcode;
var lo = bodystr.charCodeAt(++i);
charcode = ((hi - 0xD800) * 0x400) + (lo - 0xDC00) + 0x10000;
}
// For unicode character codes greater than 128, pump out a
// 2-, 3-, or 4-byte utf-8 sequence.
if (charcode < 128) {
body.push(charcode);
}
else if (charcode >=128 && charcode <=2047) {
body.push(192 + Math.floor(charcode / 64));
body.push(128 + (charcode % 64));
} else if (charcode >=2048 && charcode <=65535) {
body.push(224 + Math.floor(charcode / 4096));
body.push(128 + (Math.floor(charcode / 64) % 64));
body.push(128 + (charcode % 64));
} else {
body.push(240 + Math.floor(charcode / 262144));
body.push(128 + (Math.floor(charcode / 4096) % 64));
body.push(128 + (Math.floor(charcode / 64) % 64));
body.push(128 + (charcode % 64));
}
}
bos.writeByteArray(body, body.length);
}