{"tests": [ {"description":"Correct Doctype lowercase", "input":"", "output":[["DOCTYPE", "html", null, null, true]]}, {"description":"Correct Doctype uppercase", "input":"", "output":[["DOCTYPE", "html", null, null, true]]}, {"description":"Correct Doctype mixed case", "input":"", "output":[["DOCTYPE", "html", null, null, true]]}, {"description":"Correct Doctype case with EOF", "input":"", "output":[["Comment", "DOC"]], "errors":[ { "code": "incorrectly-opened-comment", "line": 1, "col": 3 } ]}, {"description":"Doctype in error", "input":"", "output":[["DOCTYPE", "foo", null, null, true]]}, {"description":"Single Start Tag", "input":"", "output":[["StartTag", "h", {}]]}, {"description":"Empty end tag", "input":"", "output":[], "errors":[ { "code": "missing-end-tag-name", "line": 1, "col": 3 } ]}, {"description":"Empty start tag", "input":"<>", "output":[["Character", "<>"]], "errors":[ { "code": "invalid-first-character-of-tag-name", "line": 1, "col": 2 } ]}, {"description":"Start Tag w/attribute", "input":"", "output":[["StartTag", "h", {"a":"b"}]]}, {"description":"Start Tag w/attribute no quotes", "input":"", "output":[["StartTag", "h", {"a":"b"}]]}, {"description":"Start/End Tag", "input":"", "output":[["StartTag", "h", {}], ["EndTag", "h"]]}, {"description":"Two unclosed start tags", "input":"

One

Two", "output":[["StartTag", "p", {}], ["Character", "One"], ["StartTag", "p", {}], ["Character", "Two"]]}, {"description":"End Tag w/attribute", "input":"", "output":[["StartTag", "h", {}], ["EndTag", "h"]], "errors":[ { "code": "end-tag-with-attributes", "line": 1, "col": 13 } ]}, {"description":"Multiple atts", "input":"", "output":[["StartTag", "h", {"a":"b", "c":"d"}]]}, {"description":"Multiple atts no space", "input":"", "output":[["StartTag", "h", {"a":"b", "c":"d"}]], "errors":[ { "code": "missing-whitespace-between-attributes", "line": 1, "col": 9 } ]}, {"description":"Repeated attr", "input":"", "output":[["StartTag", "h", {"a":"b"}]], "errors":[ { "code": "duplicate-attribute", "line": 1, "col": 11 } ]}, {"description":"Simple comment", "input":"", "output":[["Comment", "comment"]]}, {"description":"Comment, Central dash no space", "input":"", "output":[["Comment", "-"]]}, {"description":"Comment, two central dashes", "input":"", "output":[["Comment", " --comment "]]}, {"description":"Comment, central less-than bang", "input":"", "output":[["Comment", "", "output":[["Comment", ""]], "errors":[ { "code": "abrupt-closing-of-empty-comment", "line": 1, "col": 5 } ]}, {"description":"Short comment two", "input":"", "output":[["Comment", ""]], "errors":[ { "code": "abrupt-closing-of-empty-comment", "line": 1, "col": 6 } ]}, {"description":"Short comment three", "input":"", "output":[["Comment", ""]]}, {"description":"< in comment", "input":"", "output":[["Comment", " ", "output":[["Comment", "<<"]]}, {"description":"", "output":[["Comment", " ", "output":[["Comment", " ", "output":[["Comment", " ", "output":[["Comment", " <", "output":[["Character", ""]]}, {"description":"", "output":[["Character", ""]]}, {"description":"", "output":[["Character", ""]]}, {"description":"Escaped script data", "initialStates":["Script data state"], "input":"", "output":[["Character", ""]]}, {"description":"< in script HTML comment", "initialStates":["Script data state"], "input":"", "output":[["Character", ""]]}, {"description":"", "output":[["Character", ""]]}, {"description":"Start tag in script HTML comment", "initialStates":["Script data state"], "input":"", "output":[["Character", ""]]}, {"description":"End tag in script HTML comment", "initialStates":["Script data state"], "input":"", "output":[["Character", ""]]}, {"description":"- in script HTML comment double escaped", "initialStates":["Script data state"], "input":"", "output":[["Character", ""]]}, {"description":"-- in script HTML comment double escaped", "initialStates":["Script data state"], "input":"", "output":[["Character", ""]]}, {"description":"--- in script HTML comment double escaped", "initialStates":["Script data state"], "input":"", "output":[["Character", ""]]}, {"description":"- spaced in script HTML comment double escaped", "initialStates":["Script data state"], "input":"", "output":[["Character", ""]]}, {"description":"-- spaced in script HTML comment double escaped", "initialStates":["Script data state"], "input":"", "output":[["Character", ""]]}, {"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":[["Character", "&f"]]}, {"description":"Ampersand, number sign", "input":"&#", "output":[["Character", "&#"]], "errors":[ { "code": "absence-of-digits-in-numeric-character-reference", "line": 1, "col": 3 } ]}, {"description":"Unfinished numeric entity", "input":"&#x", "output":[["Character", "&#x"]], "errors":[ { "code": "absence-of-digits-in-numeric-character-reference", "line": 1, "col": 4 } ]}, {"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 \u00ACit"]], "errors": [ {"code" : "missing-semicolon-after-character-reference", "line": 1, "col": 9 } ]}, {"description":"Entity without trailing semicolon (2)", "input":"I'm ¬in", "output":[["Character","I'm \u00ACin"]], "errors": [ {"code" : "missing-semicolon-after-character-reference", "line": 1, "col": 9 } ]}, {"description":"Partial entity match at end of file", "input":"I'm &no", "output":[["Character","I'm &no"]]}, {"description":"Non-ASCII character reference name", "input":"&\u00AC;", "output":[["Character", "&\u00AC;"]]}, {"description":"ASCII decimal entity", "input":"$", "output":[["Character","$"]]}, {"description":"ASCII hexadecimal entity", "input":"?", "output":[["Character","?"]]}, {"description":"Hexadecimal entity in attribute", "input":"", "output":[["StartTag", "h", {"a":"?"}], ["EndTag", "h"]]}, {"description":"Entity in attribute without semicolon ending in x", "input":"", "output":[["StartTag", "h", {"a":"¬x"}]]}, {"description":"Entity in attribute without semicolon ending in 1", "input":"", "output":[["StartTag", "h", {"a":"¬1"}]]}, {"description":"Entity in attribute without semicolon ending in i", "input":"", "output":[["StartTag", "h", {"a":"¬i"}]]}, {"description":"Entity in attribute without semicolon", "input":"", "output":[["StartTag", "h", {"a":"\u00A9"}]], "errors": [ {"code" : "missing-semicolon-after-character-reference", "line": 1, "col": 12 } ]}, {"description":"Unquoted attribute ending in ampersand", "input":"", "output":[["StartTag","s",{"o":"&","t":""}]]}, {"description":"Unquoted attribute at end of tag with final character of &, with tag followed by characters", "input":"foo", "output":[["StartTag", "a", {"a":"a&"}], ["Character", "foo"]]}, {"description":"plaintext element", "input":"

foobar", "output":[["StartTag","plaintext",{}], ["Character","foobar"]]}, {"description":"Open angled bracket in unquoted attribute value state", "input":"<a a=f<>", "output":[["StartTag", "a", {"a":"f<"}]], "errors":[ { "code": "unexpected-character-in-unquoted-attribute-value", "line": 1, "col": 7 } ]} ]}