зеркало из https://github.com/mozilla/pjs.git
Add html5 parser tests: tree construction, tokenizer, and comparison beteween Gecko and JS parsers. bug 373864; r=sayrer
This commit is contained in:
Родитель
34b3e7a057
Коммит
41af2e759c
|
@ -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> & <!-- & --> & </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 ¬it",
|
||||
"output":[["Character","I'm \u00ACit"]]},
|
||||
|
||||
{"description":"Entity with trailing semicolon (2)",
|
||||
"input":"I'm ∉",
|
||||
"output":[["Character","I'm \u2209"]]},
|
||||
|
||||
{"description":"Entity without trailing semicolon (1)",
|
||||
"input":"I'm ¬it",
|
||||
"output":[["Character","I'm "], "ParseError", ["Character", "\u00ACit"]]},
|
||||
|
||||
{"description":"Entity without trailing semicolon (2)",
|
||||
"input":"I'm ¬in",
|
||||
"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":"$",
|
||||
"output":[["Character","$"]]},
|
||||
|
||||
{"description":"ASCII hexadecimal entity",
|
||||
"input":"?",
|
||||
"output":[["Character","?"]]},
|
||||
|
||||
{"description":"Hexadecimal entity in attribute",
|
||||
"input":"<h a='?'></h>",
|
||||
"output":[["StartTag", "h", {"a":"?"}], ["EndTag", "h"]]},
|
||||
|
||||
{"description":"Entity in attribute without semicolon ending in x",
|
||||
"input":"<h a='¬x'>",
|
||||
"output":["ParseError", ["StartTag", "h", {"a":"¬x"}]]},
|
||||
|
||||
{"description":"Entity in attribute without semicolon ending in 1",
|
||||
"input":"<h a='¬1'>",
|
||||
"output":["ParseError", ["StartTag", "h", {"a":"¬1"}]]},
|
||||
|
||||
{"description":"Entity in attribute without semicolon ending in i",
|
||||
"input":"<h a='¬i'>",
|
||||
"output":["ParseError", ["StartTag", "h", {"a":"¬i"}]]},
|
||||
|
||||
{"description":"Entity in attribute without semicolon",
|
||||
"input":"<h a='©'>",
|
||||
"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":"�",
|
||||
"output":["ParseError", ["Character", "\uFFFD"]]},
|
||||
|
||||
{"description":"Hexadecimal entity representing the NUL character",
|
||||
"input":"�",
|
||||
"output":["ParseError", ["Character", "\uFFFD"]]},
|
||||
|
||||
{"description":"Numeric entity representing a codepoint after 1114111 (U+10FFFF)",
|
||||
"input":"�",
|
||||
"output":["ParseError", ["Character", "\uFFFD"]]},
|
||||
|
||||
{"description":"Hexadecimal entity representing a codepoint after 1114111 (U+10FFFF)",
|
||||
"input":"�",
|
||||
"output":["ParseError", ["Character", "\uFFFD"]]},
|
||||
|
||||
{"description":"Hexadecimal entity pair representing a surrogate pair",
|
||||
"input":"��",
|
||||
"output":["ParseError", ["Character", "\uFFFD"], "ParseError", ["Character", "\uFFFD"]]},
|
||||
|
||||
{"description":"Hexadecimal entity with mixed uppercase and lowercase",
|
||||
"input":"ꯍ",
|
||||
"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>\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='  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":"�",
|
||||
"output":["ParseError", "ParseError", ["Character", "\uFFFD"]]},
|
||||
|
||||
{"description":"Zero decimal numeric entity",
|
||||
"input":"�",
|
||||
"output":["ParseError", "ParseError", ["Character", "\uFFFD"]]},
|
||||
|
||||
{"description":"Zero-prefixed hex numeric entity",
|
||||
"input":"A",
|
||||
"output":[["Character", "A"]]},
|
||||
|
||||
{"description":"Zero-prefixed decimal numeric entity",
|
||||
"input":"A",
|
||||
"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":"𐀀",
|
||||
"output":[["Character", "\uD800\uDC00"]]},
|
||||
|
||||
{"description":"Maximum non-BMP numeric entity",
|
||||
"input":"",
|
||||
"output":["ParseError", ["Character", "\uFFFD"]]},
|
||||
|
||||
{"description":"Above maximum numeric entity",
|
||||
"input":"�",
|
||||
"output":["ParseError", ["Character", "\uFFFD"]]},
|
||||
|
||||
{"description":"32-bit hex numeric entity",
|
||||
"input":"�",
|
||||
"output":["ParseError", ["Character", "\uFFFD"]]},
|
||||
|
||||
{"description":"33-bit hex numeric entity",
|
||||
"input":"�",
|
||||
"output":["ParseError", ["Character", "\uFFFD"]]},
|
||||
|
||||
{"description":"33-bit decimal numeric entity",
|
||||
"input":"�",
|
||||
"output":["ParseError", ["Character", "\uFFFD"]]},
|
||||
|
||||
{"description":"65-bit hex numeric entity",
|
||||
"input":"�",
|
||||
"output":["ParseError", ["Character", "\uFFFD"]]},
|
||||
|
||||
{"description":"65-bit decimal numeric entity",
|
||||
"input":"�",
|
||||
"output":["ParseError", ["Character", "\uFFFD"]]},
|
||||
|
||||
{"description":"Surrogate code point edge cases",
|
||||
"input":"퟿����",
|
||||
"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> & <!-- & --> & </xmp>",
|
||||
"output":[["StartTag", "xmp", {}], ["Character", " & <!-- & --> & "], ["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><",
|
||||
"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 &=&>X
|
||||
<!DOCTYPE html></b test<b &=&>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
|
||||
-
|
||||
#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
|
||||
&
|
||||
#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>&</title>
|
||||
#errors
|
||||
Line: 1 Col: 7 Unexpected start tag (title). Expected DOCTYPE.
|
||||
#document
|
||||
| <html>
|
||||
| <head>
|
||||
| <title>
|
||||
| "&"
|
||||
| <body>
|
||||
|
||||
#data
|
||||
<title><!--&--></title>
|
||||
#errors
|
||||
Line: 1 Col: 7 Unexpected start tag (title). Expected DOCTYPE.
|
||||
#document
|
||||
| <html>
|
||||
| <head>
|
||||
| <title>
|
||||
| "<!--&-->"
|
||||
| <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>&</title>
|
||||
#errors
|
||||
#document
|
||||
| <!DOCTYPE html>
|
||||
| <html>
|
||||
| <head>
|
||||
| <title>
|
||||
| "&"
|
||||
| <body>
|
||||
|
||||
#data
|
||||
<!doctype html><title><!--&--></title>
|
||||
#errors
|
||||
#document
|
||||
| <!DOCTYPE html>
|
||||
| <html>
|
||||
| <head>
|
||||
| <title>
|
||||
| "<!--&-->"
|
||||
| <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);
|
||||
|
||||
}
|
Загрузка…
Ссылка в новой задаче