/[suikacvs]/markup/html/whatpm/t/tokenizer-test-1.test
Suika

Contents of /markup/html/whatpm/t/tokenizer-test-1.test

Parent Directory Parent Directory | Revision Log Revision Log


Revision 1.21 - (hide annotations) (download)
Mon Mar 3 11:56:18 2008 UTC (17 years, 4 months ago) by wakaba
Branch: MAIN
Changes since 1.20: +205 -1 lines
++ whatpm/t/ChangeLog	3 Mar 2008 11:49:36 -0000
	* tokenizer-test-1.test: New test data are added to cover
	all possible cases.

	* HTML-tree.t: Support for test coverage.

2008-03-03  Wakaba  <wakaba@suika.fam.cx>

++ whatpm/Whatpm/ChangeLog	3 Mar 2008 11:56:09 -0000
	* HTML.pm.src (_tokenize_attempt_to_consume_an_entity): Checkpoints
	are set.  Cases that are unlikely reached are noted as so.

2008-03-03  Wakaba  <wakaba@suika.fam.cx>

1 wakaba 1.1 {"tests": [
2    
3 wakaba 1.3 {"description":"<!DOCTYPE",
4     "input":"<!DOCTYPE",
5 wakaba 1.9 "output":["ParseError","ParseError",["DOCTYPE", null, null, null, false]]},
6 wakaba 1.3
7     {"description":"<!DOCTYPE ",
8     "input":"<!DOCTYPE ",
9 wakaba 1.9 "output":["ParseError",["DOCTYPE", null, null, null, false]]},
10 wakaba 1.3
11     {"description":"<!DOCTYPE >",
12     "input":"<!DOCTYPE >",
13 wakaba 1.9 "output":["ParseError",["DOCTYPE", null, null, null, false]]},
14 wakaba 1.3
15     {"description":"<!DOCTYPE h",
16     "input":"<!DOCTYPE h",
17 wakaba 1.9 "output":["ParseError",["DOCTYPE", "h", null, null, false]]},
18 wakaba 1.3
19     {"description":"<!DOCTYPE H",
20     "input":"<!DOCTYPE H",
21 wakaba 1.9 "output":["ParseError",["DOCTYPE", "H", null, null, false]]},
22 wakaba 1.3
23     {"description":"<!DOCTYPE h>",
24     "input":"<!DOCTYPE h>",
25 wakaba 1.9 "output":[["DOCTYPE", "h", null, null, true]]},
26 wakaba 1.3
27     {"description":"<!DOCTYPE H>",
28     "input":"<!DOCTYPE H>",
29 wakaba 1.9 "output":[["DOCTYPE", "H", null, null, true]]},
30 wakaba 1.3
31     {"description":"<!DOCTYPE ht",
32     "input":"<!DOCTYPE ht",
33 wakaba 1.9 "output":["ParseError",["DOCTYPE", "ht", null, null, false]]},
34 wakaba 1.3
35     {"description":"<!DOCTYPE Ht",
36     "input":"<!DOCTYPE Ht",
37 wakaba 1.9 "output":["ParseError",["DOCTYPE", "Ht", null, null, false]]},
38 wakaba 1.3
39     {"description":"<!DOCTYPE hT",
40     "input":"<!DOCTYPE hT",
41 wakaba 1.9 "output":["ParseError",["DOCTYPE", "hT", null, null, false]]},
42 wakaba 1.3
43     {"description":"<!DOCTYPE ht>",
44     "input":"<!DOCTYPE ht>",
45 wakaba 1.9 "output":[["DOCTYPE", "ht", null, null, true]]},
46 wakaba 1.3
47     {"description":"<!DOCTYPE Ht>",
48     "input":"<!DOCTYPE Ht>",
49 wakaba 1.9 "output":[["DOCTYPE", "Ht", null, null, true]]},
50 wakaba 1.3
51     {"description":"<!DOCTYPE hT>",
52     "input":"<!DOCTYPE hT>",
53 wakaba 1.9 "output":[["DOCTYPE", "hT", null, null, true]]},
54 wakaba 1.3
55     {"description":"<!DOCTYPE hT>",
56     "input":"<!DOCTYPE hT>",
57 wakaba 1.9 "output":[["DOCTYPE", "hT", null, null, true]]},
58 wakaba 1.3
59     {"description":"<!DOCTYPE htm",
60     "input":"<!DOCTYPE htm",
61 wakaba 1.9 "output":["ParseError",["DOCTYPE", "htm", null, null, false]]},
62 wakaba 1.3
63     {"description":"<!DOCTYPE Htm",
64     "input":"<!DOCTYPE Htm",
65 wakaba 1.9 "output":["ParseError",["DOCTYPE", "Htm", null, null, false]]},
66 wakaba 1.3
67     {"description":"<!DOCTYPE hTM",
68     "input":"<!DOCTYPE hTM",
69 wakaba 1.9 "output":["ParseError",["DOCTYPE", "hTM", null, null, false]]},
70 wakaba 1.3
71     {"description":"<!DOCTYPE htm>",
72     "input":"<!DOCTYPE htm>",
73 wakaba 1.9 "output":[["DOCTYPE", "htm", null, null, true]]},
74 wakaba 1.3
75     {"description":"<!DOCTYPE Htm>",
76     "input":"<!DOCTYPE Htm>",
77 wakaba 1.9 "output":[["DOCTYPE", "Htm", null, null, true]]},
78 wakaba 1.3
79     {"description":"<!DOCTYPE hTM>",
80     "input":"<!DOCTYPE hTM>",
81 wakaba 1.9 "output":[["DOCTYPE", "hTM", null, null, true]]},
82 wakaba 1.3
83     {"description":"<!DOCTYPE html5",
84     "input":"<!DOCTYPE html5",
85 wakaba 1.9 "output":["ParseError",["DOCTYPE", "html5", null, null, false]]},
86 wakaba 1.3
87     {"description":"<!DOCTYPE html5>",
88     "input":"<!DOCTYPE html5>",
89 wakaba 1.9 "output":[["DOCTYPE", "html5", null, null, true]]},
90    
91     {"description":"PUBLIC\u0022\u0022",
92     "input":"<!DOCTYPE html PUBLIC\u0022\u0022>",
93     "output":[["DOCTYPE", "html", "", null, true]]},
94    
95     {"description":"PUBLIC''",
96     "input":"<!DOCTYPE html PUBLIC''>",
97     "output":[["DOCTYPE", "html", "", null, true]]},
98    
99     {"description":"PUBLICbogus",
100     "input":"<!DOCTYPE html PUBLICbogus>",
101     "output":["ParseError",["DOCTYPE", "html", null, null, false]]},
102    
103     {"description":"PUBLIC bogus",
104     "input":"<!DOCTYPE html PUBLIC bogus>",
105     "output":["ParseError",["DOCTYPE", "html", null, null, false]]},
106    
107     {"description":"PUBLIC \u0022\u0022bogus",
108     "input":"<!DOCTYPE html PUBLIC \u0022\u0022bogus>",
109     "output":["ParseError",["DOCTYPE", "html", "", null, false]]},
110    
111     {"description":"PUBLIC \u0022\u0022 bogus",
112     "input":"<!DOCTYPE html PUBLIC \u0022\u0022 bogus>",
113     "output":["ParseError",["DOCTYPE", "html", "", null, false]]},
114    
115     {"description":"PUBLIC \u0022\u0022 \u0022\u0022bogus",
116     "input":"<!DOCTYPE html PUBLIC \u0022\u0022 \u0022\u0022bogus>",
117 wakaba 1.20 "output":["ParseError",["DOCTYPE", "html", "", "", true]]},
118 wakaba 1.9
119     {"description":"PUBLIC \u0022\u0022 \u0022\u0022 bogus",
120     "input":"<!DOCTYPE html PUBLIC \u0022\u0022 \u0022\u0022 bogus>",
121 wakaba 1.20 "output":["ParseError",["DOCTYPE", "html", "", "", true]]},
122 wakaba 1.9
123     {"description":"PUBLIC \u0022\u0022\u0022\u0022>",
124     "input":"<!DOCTYPE html PUBLIC \u0022\u0022\u0022\u0022>",
125     "output":[["DOCTYPE", "html", "", "", true]]},
126    
127     {"description":"PUBLIC \u0022\u0022''>",
128     "input":"<!DOCTYPE html PUBLIC \u0022\u0022''>",
129     "output":[["DOCTYPE", "html", "", "", true]]},
130 wakaba 1.3
131 wakaba 1.13 {"description":"SYSTEM a",
132     "input":"<!DOCTYPE html SYSTEM a>",
133     "output":["ParseError", ["DOCTYPE", "html", null, null, false]]},
134 wakaba 1.20
135     {"description": "garbage after SYSTEM literal",
136     "input": "<!DOCTYPE html SYSTEM 'a' b>",
137     "output": ["ParseError", ["DOCTYPE", "html", null, "a", true]]},
138    
139     {"description": "garbage after PUBLIC and SYSTEM literal",
140     "input": "<!DOCTYPE html PUBLIC 'c' 'a' b>",
141     "output": ["ParseError", ["DOCTYPE", "html", "c", "a", true]]},
142    
143     {"description": "garbage immediately after SYSTEM literal",
144     "input": "<!DOCTYPE html SYSTEM 'a'b>",
145     "output": ["ParseError", ["DOCTYPE", "html", null, "a", true]]},
146    
147     {"description": "garbage immediately after PUBLIC and SYSTEM literal",
148     "input": "<!DOCTYPE html PUBLIC 'c' 'a'b>",
149     "output": ["ParseError", ["DOCTYPE", "html", "c", "a", true]]},
150 wakaba 1.13
151 wakaba 1.21 {"description": "<!D>",
152     "input": "<!D>",
153     "output": ["ParseError", ["Comment", "D"]]},
154    
155     {"description": "<!DO>",
156     "input": "<!DO>",
157     "output": ["ParseError", ["Comment", "DO"]]},
158    
159     {"description": "<!DOc>",
160     "input": "<!DOc>",
161     "output": ["ParseError", ["Comment", "DOc"]]},
162    
163     {"description": "<!dOcT>",
164     "input": "<!dOcT>",
165     "output": ["ParseError", ["Comment", "dOcT"]]},
166    
167     {"description": "<!DoctY",
168     "input": "<!DoctY",
169     "output": ["ParseError", ["Comment", "DoctY"]]},
170    
171     {"description": "<!doctyp!>",
172     "input": "<!doctyp!>",
173     "output": ["ParseError", ["Comment", "doctyp!"]]},
174    
175     {"description": "<!Doc?>",
176     "input": "<!Doc?>",
177     "output": ["ParseError", ["Comment", "Doc?"]]},
178    
179     {"description": "<!Doc<type>>",
180     "input": "<!Doc<type>>",
181     "output": ["ParseError", ["Comment", "Doc<type"], ["Character", ">"]]},
182    
183     {"description": "<!DOCTYPE HTML P>",
184     "input": "<!DOCTYPE HTML P>",
185     "output": ["ParseError", ["DOCTYPE", "HTML", null, null, false]]},
186    
187     {"description": "<!DOCTYPE HTML Pa>",
188     "input": "<!DOCTYPE HTML Pa>",
189     "output": ["ParseError", ["DOCTYPE", "HTML", null, null, false]]},
190    
191     {"description": "<!DOCTYPE HTML Pua>",
192     "input": "<!DOCTYPE HTML Pua>",
193     "output": ["ParseError", ["DOCTYPE", "HTML", null, null, false]]},
194    
195     {"description": "<!DOCTYPE HTML PUB>",
196     "input": "<!DOCTYPE HTML PUB>",
197     "output": ["ParseError", ["DOCTYPE", "HTML", null, null, false]]},
198    
199     {"description": "<!DOCTYPE HTML pubL>",
200     "input": "<!DOCTYPE HTML pubL>",
201     "output": ["ParseError", ["DOCTYPE", "HTML", null, null, false]]},
202    
203     {"description": "<!DOCTYPE HTML publication>",
204     "input": "<!DOCTYPE HTML publication>",
205     "output": ["ParseError", ["DOCTYPE", "HTML", null, null, false]]},
206    
207     {"description": "<!DOCTYPE HTML publi>",
208     "input": "<!DOCTYPE HTML publi>",
209     "output": ["ParseError", ["DOCTYPE", "HTML", null, null, false]]},
210    
211     {"description": "<!DOCTYPE HTML PULICID>",
212     "input": "<!DOCTYPE HTML PUBLICID>",
213     "output": ["ParseError", ["DOCTYPE", "HTML", null, null, false]]},
214    
215     {"description": "<!DOCTYPE HTML S ''>",
216     "input": "<!DOCTYPE HTML S ''>",
217     "output": ["ParseError", ["DOCTYPE", "HTML", null, null, false]]},
218    
219     {"description": "<!DOCTYPE HTML sy>",
220     "input": "<!DOCTYPE HTML sy>",
221     "output": ["ParseError", ["DOCTYPE", "HTML", null, null, false]]},
222    
223     {"description": "<!DOCTYPE HTML sys ''>",
224     "input": "<!DOCTYPE HTML sys ''>",
225     "output": ["ParseError", ["DOCTYPE", "HTML", null, null, false]]},
226    
227     {"description": "<!DOCTYPE HTML syst>",
228     "input": "<!DOCTYPE HTML syst>",
229     "output": ["ParseError", ["DOCTYPE", "HTML", null, null, false]]},
230    
231     {"description": "<!DOCTYPE HTML SySter>",
232     "input": "<!DOCTYPE HTML SySter>",
233     "output": ["ParseError", ["DOCTYPE", "HTML", null, null, false]]},
234    
235     {"description": "<!DOCTYPE HTML systemid>",
236     "input": "<!DOCTYPE HTML systemid>",
237     "output": ["ParseError", ["DOCTYPE", "HTML", null, null, false]]},
238    
239 wakaba 1.14 {"description":"<!---x-->",
240     "input":"<!---x-->",
241     "output":[["Comment", "-x"]]},
242    
243     {"description":"<!----x-->",
244     "input":"<!----x-->",
245     "output":["ParseError", ["Comment", "--x"]]},
246    
247 wakaba 1.1 {"description":"non-PCDATA content model flag, start tag-like string",
248     "contentModelFlags":["PLAINTEXT","RCDATA","CDATA"],
249     "input":"<div>",
250 wakaba 1.2 "output":[["Character", "<div>"]]},
251    
252     {"description":"end tag followed by character data",
253     "contentModelFlags":["RCDATA","CDATA"],
254     "lastStartTag":"xxx",
255     "input":"AB</xxx>CD",
256 wakaba 1.4 "output":[["Character", "AB"],["EndTag", "xxx"],["Character", "CD"]]},
257 wakaba 1.1
258 wakaba 1.12 {"description":"NULL character reference",
259     "input":"&#0;",
260     "output":["ParseError", ["Character", "\uFFFD"]]},
261    
262     {"description":"NULL character reference",
263     "input":"&#x0;",
264     "output":["ParseError", ["Character", "\uFFFD"]]},
265    
266     {"description":"character entity &#13;",
267     "input":"&#13;",
268     "output":["ParseError", ["Character", "\u000A"]]},
269    
270     {"description":"character entity &#xd;",
271     "input":"&#xd;",
272     "output":["ParseError", ["Character", "\u000A"]]},
273    
274     {"description":"character entities &#13;&#10;",
275     "input":"&#13;&#10;",
276     "output":["ParseError", ["Character", "\u000A\u000A"]]},
277    
278     {"description":"character entity &#13; followed by a LF",
279     "input":"&#13;\u000A",
280     "output":["ParseError", ["Character", "\u000A\u000A"]]},
281    
282 wakaba 1.4 {"description":"c1 character references",
283     "input":"&#128;&#129;&#130;&#131;&#132;&#133;&#134;&#135;",
284     "output":[
285     "ParseError", ["Character", "\u20AC"],
286     "ParseError", ["Character", "\uFFFD"],
287     "ParseError", ["Character", "\u201A"],
288     "ParseError", ["Character", "\u0192"],
289     "ParseError", ["Character", "\u201E"],
290     "ParseError", ["Character", "\u2026"],
291     "ParseError", ["Character", "\u2020"],
292     "ParseError", ["Character", "\u2021"]
293     ]},
294     {"description":"c1 character references",
295     "input":"&#136;&#137;&#138;&#139;&#140;&#141;&#142;&#143;",
296     "output":[
297     "ParseError", ["Character", "\u02C6"],
298     "ParseError", ["Character", "\u2030"],
299     "ParseError", ["Character", "\u0160"],
300     "ParseError", ["Character", "\u2039"],
301     "ParseError", ["Character", "\u0152"],
302     "ParseError", ["Character", "\uFFFD"],
303     "ParseError", ["Character", "\u017D"],
304     "ParseError", ["Character", "\uFFFD"]
305     ]},
306     {"description":"c1 character references",
307     "input":"&#144;&#145;&#146;&#147;&#148;&#149;&#150;&#151;",
308     "output":[
309     "ParseError", ["Character", "\uFFFD"],
310     "ParseError", ["Character", "\u2018"],
311     "ParseError", ["Character", "\u2019"],
312     "ParseError", ["Character", "\u201C"],
313     "ParseError", ["Character", "\u201D"],
314     "ParseError", ["Character", "\u2022"],
315     "ParseError", ["Character", "\u2013"],
316     "ParseError", ["Character", "\u2014"]
317     ]},
318     {"description":"c1 character references",
319     "input":"&#152;&#153;&#154;&#155;&#156;&#157;&#158;&#159;",
320     "output":[
321     "ParseError", ["Character", "\u02DC"],
322     "ParseError", ["Character", "\u2122"],
323     "ParseError", ["Character", "\u0161"],
324     "ParseError", ["Character", "\u203A"],
325     "ParseError", ["Character", "\u0153"],
326     "ParseError", ["Character", "\uFFFD"],
327     "ParseError", ["Character", "\u017E"],
328     "ParseError", ["Character", "\u0178"]
329     ]},
330    
331     {"description":"c1 character references",
332     "input":"&#x80;&#x81;&#x82;&#x83;&#x84;&#x85;&#x86;&#x87;",
333     "output":[
334     "ParseError", ["Character", "\u20AC"],
335     "ParseError", ["Character", "\uFFFD"],
336     "ParseError", ["Character", "\u201A"],
337     "ParseError", ["Character", "\u0192"],
338     "ParseError", ["Character", "\u201E"],
339     "ParseError", ["Character", "\u2026"],
340     "ParseError", ["Character", "\u2020"],
341     "ParseError", ["Character", "\u2021"]
342     ]},
343     {"description":"c1 character references",
344     "input":"&#x88;&#x89;&#x8a;&#x8b;&#x8c;&#x8d;&#x8e;&#x8f;",
345     "output":[
346     "ParseError", ["Character", "\u02C6"],
347     "ParseError", ["Character", "\u2030"],
348     "ParseError", ["Character", "\u0160"],
349     "ParseError", ["Character", "\u2039"],
350     "ParseError", ["Character", "\u0152"],
351     "ParseError", ["Character", "\uFFFD"],
352     "ParseError", ["Character", "\u017D"],
353     "ParseError", ["Character", "\uFFFD"]
354     ]},
355     {"description":"c1 character references",
356     "input":"&#x90;&#x91;&#x92;&#x93;&#x94;&#x95;&#x96;&#x97;",
357     "output":[
358     "ParseError", ["Character", "\uFFFD"],
359     "ParseError", ["Character", "\u2018"],
360     "ParseError", ["Character", "\u2019"],
361     "ParseError", ["Character", "\u201C"],
362     "ParseError", ["Character", "\u201D"],
363     "ParseError", ["Character", "\u2022"],
364     "ParseError", ["Character", "\u2013"],
365     "ParseError", ["Character", "\u2014"]
366     ]},
367     {"description":"c1 character references",
368     "input":"&#x98;&#x99;&#x9a;&#x9b;&#x9c;&#x9d;&#x9e;&#x9f;",
369     "output":[
370     "ParseError", ["Character", "\u02DC"],
371     "ParseError", ["Character", "\u2122"],
372     "ParseError", ["Character", "\u0161"],
373     "ParseError", ["Character", "\u203A"],
374     "ParseError", ["Character", "\u0153"],
375     "ParseError", ["Character", "\uFFFD"],
376     "ParseError", ["Character", "\u017E"],
377     "ParseError", ["Character", "\u0178"]
378 wakaba 1.5 ]},
379    
380 wakaba 1.16 {"description":"Numeric entity representing a Windows-1252 'codepoint'",
381     "input":"&#137;",
382     "output":["ParseError", ["Character", "\u2030"]]},
383    
384     {"description":"Hexadecimal entity representing a Windows-1252 'codepoint'",
385     "input":"&#x89;",
386     "output":["ParseError", ["Character", "\u2030"]]},
387    
388 wakaba 1.12 {"description":"surrogate character reference",
389     "input":"&#xD800;",
390     "output":["ParseError", ["Character", "\uFFFD"]]},
391    
392     {"description":"surrogate character references",
393     "input":"&#xD800;&#xDFFF;",
394     "output":["ParseError", ["Character", "\uFFFD"],
395     "ParseError", ["Character", "\uFFFD"]]},
396    
397     {"description":"surrogate character reference",
398     "input":"\uD800&#xDFFF;",
399     "output":[["Character", "\uD800"],
400     "ParseError", ["Character", "\uFFFD"]]},
401    
402     {"description":"surrogate character reference",
403     "input":"&#xD800;\uDFFF",
404     "output":["ParseError", ["Character", "\uFFFD\uDFFF"]]},
405    
406     {"description":"surrogate character reference",
407     "input":"&#55296;",
408     "output":["ParseError", ["Character", "\uFFFD"]]},
409    
410     {"description":"surrogate character reference",
411     "input":"&#57343;",
412     "output":["ParseError", ["Character", "\uFFFD"]]},
413    
414     {"description":"non-Unicode character reference",
415     "input":"&#1114112;",
416     "output":["ParseError", ["Character", "\uFFFD"]]},
417    
418     {"description":"non-Unicode character reference",
419     "input":"&#x110000;",
420     "output":["ParseError", ["Character", "\uFFFD"]]},
421    
422 wakaba 1.15 {"description":"Broken hcro (&#x)",
423     "input":"&#x",
424     "output":["ParseError", ["Character", "&#x"]]},
425    
426     {"description":"Broken hcro (&#X)",
427     "input":"&#X",
428     "output":["ParseError", ["Character", "&#X"]]},
429    
430     {"description":"Broken hcro (&#x;)",
431     "input":"&#x;",
432     "output":["ParseError", ["Character", "&#x;"]]},
433    
434     {"description":"Broken hcro (&#X;)",
435     "input":"&#X;",
436     "output":["ParseError", ["Character", "&#X;"]]},
437    
438     {"description":"Broken hcro (&#xg)",
439     "input":"&#xg",
440     "output":["ParseError", ["Character", "&#xg"]]},
441    
442     {"description":"Broken hcro (&#Xg)",
443     "input":"&#Xg",
444     "output":["ParseError", ["Character", "&#Xg"]]},
445    
446     {"description":"Broken hcro (&#xg;)",
447     "input":"&#xg;",
448     "output":["ParseError", ["Character", "&#xg;"]]},
449    
450     {"description":"Broken hcro (&#Xg;)",
451     "input":"&#Xg;",
452     "output":["ParseError", ["Character", "&#Xg;"]]},
453    
454     {"description":"Broken hcro (&#x!)",
455     "input":"&#x!",
456     "output":["ParseError", ["Character", "&#x!"]]},
457    
458     {"description":"Broken hcro (&#X!)",
459     "input":"&#X!",
460     "output":["ParseError", ["Character", "&#X!"]]},
461    
462 wakaba 1.5 {"description":"NULL character",
463     "input":"\u0000",
464 wakaba 1.6 "output":["ParseError",["Character", "\uFFFD"]]},
465    
466     {"description":"&TRADE;",
467     "input":"&TRADE;",
468 wakaba 1.7 "output":[["Character", "\u2122"]]},
469    
470     {"description":"&lang;",
471     "input":"&lang;",
472 wakaba 1.18 "output":[["Character", "\u27E8"]]},
473 wakaba 1.7
474     {"description":"&rang;",
475     "input":"&rang;",
476 wakaba 1.18 "output":[["Character", "\u27E9"]]},
477 wakaba 1.7
478     {"description":"&amp;;",
479     "input":"&amp;;",
480 wakaba 1.8 "output":[["Character", "&;"]]},
481    
482 wakaba 1.11 {"description":"&HT",
483     "input":"&\u0009",
484     "output":[["Character", "&\u0009"]]},
485    
486     {"description":"&LF",
487     "input":"&\u000A",
488     "output":[["Character", "&\u000A"]]},
489    
490     {"description":"&VT",
491     "input":"&\u000B",
492     "output":[["Character", "&\u000B"]]},
493    
494     {"description":"&FF",
495     "input":"&\u000C",
496     "output":[["Character", "&\u000C"]]},
497    
498     {"description":"&SP",
499     "input":"& ",
500     "output":[["Character", "& "]]},
501    
502     {"description":"&<",
503     "input":"&<",
504 wakaba 1.12 "output":[["Character", "&"], "ParseError", ["Character", "<"]]},
505 wakaba 1.11
506     {"description":"&<p>",
507     "input":"&<p>",
508     "output":[["Character", "&"], ["StartTag", "p", {}]]},
509    
510     {"description":"&&",
511     "input":"&&",
512     "output":[["Character", "&&"]]},
513    
514     {"description":"&&amp;",
515     "input":"&&amp;",
516     "output":[["Character", "&&"]]},
517    
518     {"description":"&",
519     "input":"&",
520     "output":[["Character", "&"]]},
521 wakaba 1.12
522     {"description":"named character reference w/o refc",
523     "input":"&ampabc",
524     "output":["ParseError", ["Character", "&abc"]]},
525    
526     {"description":"named character reference",
527     "input":"&amp;abc",
528     "output":[["Character", "&abc"]]},
529    
530     {"description":"named character reference w/o refc",
531     "input":"&abc",
532     "output":["ParseError", ["Character", "&abc"]]},
533    
534     {"description":"unknown named character reference",
535     "input":"&abc;",
536     "output":["ParseError", ["Character", "&abc;"]]},
537    
538     {"description":"named character reference w/o refc in attr",
539     "input":"<a href='&ampabc'>",
540     "output":["ParseError", ["StartTag", "a", {"href": "&ampabc"}]]},
541    
542     {"description":"named character reference in attr",
543     "input":"<a href='&amp;abc'>",
544     "output":[["StartTag", "a", {"href": "&abc"}]]},
545    
546     {"description":"named character reference w/o refc in attr",
547     "input":"<a href='&abc'>",
548     "output":["ParseError", ["StartTag", "a", {"href": "&abc"}]]},
549    
550     {"description":"unknown named character reference in attr",
551     "input":"<a href='&abc;'>",
552     "output":["ParseError", ["StartTag", "a", {"href": "&abc;"}]]},
553 wakaba 1.15
554     {"description":"entity w/o refc at the end of unterminated attribute value",
555     "input":"<a href='&COPY",
556     "output":["ParseError", "ParseError", ["StartTag", "a", {"href": "\u00A9"}]]},
557    
558     {"description":"entity w/o refc at the end of attribute value",
559     "input":"<a href='&COPY'>",
560     "output":["ParseError", ["StartTag", "a", {"href": "\u00A9"}]]},
561    
562     {"description":"entity w/refc at the end of attribute value",
563     "input":"<a href='&COPY;'>",
564     "output":[["StartTag", "a", {"href": "\u00A9"}]]},
565    
566     {"description":"entity w/o refc href='&COPY!'",
567     "input":"<a href='&COPY!'>",
568     "output":["ParseError", ["StartTag", "a", {"href": "\u00A9!"}]]},
569    
570     {"description":"entity w/o refc href='&COPY=ok'",
571     "input":"<a href='&COPY=ok'>",
572     "output":["ParseError", ["StartTag", "a", {"href": "\u00A9=ok"}]]},
573    
574     {"description":"entity w/o refc href='&COPYright'",
575     "input":"<a href='&COPYright'>",
576     "output":["ParseError", ["StartTag", "a", {"href": "&COPYright"}]]},
577    
578     {"description":"entity w/o refc href='&COPYright;'",
579     "input":"<a href='&COPYright;'>",
580     "output":["ParseError", ["StartTag", "a", {"href": "&COPYright;"}]]},
581    
582     {"description":"entity w/o refc href='&COPYrightc'",
583     "input":"<a href='&COPYrightc'>",
584     "output":["ParseError", ["StartTag", "a", {"href": "&COPYrightc"}]]},
585    
586     {"description":"entity w/o refc href='&COPYrightcd'",
587     "input":"<a href='&COPYrightcd'>",
588     "output":["ParseError", ["StartTag", "a", {"href": "&COPYrightcd"}]]},
589 wakaba 1.11
590 wakaba 1.8 {"description":"cdata end tag containing <",
591     "contentModelFlags":["RCDATA","CDATA"],
592     "lastStartTag":"xxx",
593     "input":"</xxx<div>",
594 wakaba 1.10 "output":[["Character", "</xxx<div>"]]},
595 wakaba 1.8
596     {"description":"< in tag name state",
597     "input":"<p<div>",
598     "output":[["StartTag", "p<div", {}]]},
599    
600     {"description":"< in before attribute name state",
601     "input":"<p <div>",
602     "output":[["StartTag", "p", {"<div":""}]]},
603    
604     {"description":"< in attribute name state",
605     "input":"<p align<div>",
606     "output":[["StartTag", "p", {"align<div":""}]]},
607    
608     {"description":"< in after attribute name state",
609     "input":"<p align <div>",
610     "output":[["StartTag", "p", {"align":"","<div":""}]]},
611    
612     {"description":"< in before attribute value state",
613     "input":"<p align=<div>",
614     "output":[["StartTag", "p", {"align":"<div"}]]},
615    
616     {"description":"< in attribute value (unquoted) state",
617     "input":"<p align=left<div>",
618     "output":[["StartTag", "p", {"align":"left<div"}]]},
619    
620     {"description":"< in attribute value (single-unquoted) state",
621     "input":"<p align='left<div>",
622     "output":["ParseError", ["StartTag", "p", {"align":"left<div>"}]]},
623    
624     {"description":"< in attribute value (double-unquoted) state",
625     "input":"<p align=\u0022left<div>",
626 wakaba 1.17 "output":["ParseError", ["StartTag", "p", {"align":"left<div>"}]]},
627    
628     {"description":"/''b=\"\"",
629     "input": "<a /''b=\"\">",
630 wakaba 1.19 "output": ["ParseError", "ParseError", "ParseError",
631     ["StartTag", "a", {"''b": ""}]]},
632 wakaba 1.17
633     {"description":"/\"\"b=\"\"",
634     "input": "<a /\"\"b=\"\">",
635 wakaba 1.19 "output": ["ParseError", "ParseError", "ParseError",
636     ["StartTag", "a", {"\"\"b": ""}]]},
637 wakaba 1.17
638     {"description":"\"b=\"\"",
639     "input": "<a \"b=\"\">",
640 wakaba 1.19 "output": ["ParseError", ["StartTag", "a", {"\"b": ""}]]},
641 wakaba 1.17
642     {"description":"\"\"b=\"\"",
643     "input": "<a \"\"b=\"\">",
644 wakaba 1.19 "output": ["ParseError", "ParseError", ["StartTag", "a", {"\"\"b": ""}]]},
645 wakaba 1.17
646     {"description":"'b=\"\"",
647     "input": "<a 'b=\"\">",
648 wakaba 1.19 "output": ["ParseError", ["StartTag", "a", {"'b": ""}]]},
649 wakaba 1.17
650     {"description":"''b=\"\"",
651     "input": "<a ''b=\"\">",
652 wakaba 1.19 "output": ["ParseError", "ParseError", ["StartTag", "a", {"''b": ""}]]},
653 wakaba 1.17
654     {"description":"/b=\"\"",
655     "input": "<a /b=\"\">",
656     "output": ["ParseError", ["StartTag", "a", {"b": ""}]]},
657    
658     {"description":"b/=\"\"",
659     "input": "<a b/=\"\">",
660 wakaba 1.19 "output": ["ParseError", "ParseError", "ParseError", "ParseError",
661     ["StartTag", "a", {"b": "", "=\"\"": ""}]]},
662 wakaba 1.17
663     {"description":"b/c=\"\"",
664     "input": "<a b/c=\"\">",
665     "output": ["ParseError", ["StartTag", "a", {"b": "", "c": ""}]]},
666    
667     {"description":"bc[NULL]=\"\"",
668     "input": "<a bc\u0000=\"\">",
669     "output": ["ParseError", ["StartTag", "a", {"bc\uFFFD": ""}]]},
670    
671     {"description":"b[NULL]c=\"\"",
672     "input": "<a b\u0000c=\"\">",
673     "output": ["ParseError", ["StartTag", "a", {"b\uFFFDc": ""}]]},
674    
675     {"description":"[NULL]bc=\"\"",
676     "input": "<a \u0000bc=\"\">",
677 wakaba 1.19 "output": ["ParseError", ["StartTag", "a", {"\uFFFDbc": ""}]]},
678    
679     {"description": "<span ===>",
680     "input": "<span ===>",
681     "output": ["ParseError", "ParseError", ["StartTag", "span", {"=": "="}]]},
682    
683     {"description": "<span a==>",
684     "input": "<span a==>",
685     "output": ["ParseError", ["StartTag", "span", {"a": "="}]]},
686    
687     {"description": "<span ==a>",
688     "input": "<span ==a>",
689     "output": ["ParseError", ["StartTag", "span", {"=": "a"}]]},
690    
691     {"description": "<span a=b=>",
692     "input": "<span a=b=>",
693     "output": ["ParseError", ["StartTag", "span", {"a": "b="}]]},
694    
695     {"description": "<span =x\"=\"x>",
696     "input": "<span =x\"=\"x>",
697     "output": ["ParseError", "ParseError", "ParseError",
698     ["StartTag", "span", {"=x\"": "x>"}]]},
699    
700     {"description": "<span =x\"=\"x\">",
701     "input": "<span =x\"=\"x\">",
702     "output": ["ParseError", "ParseError", ["StartTag", "span", {"=x\"": "x"}]]},
703    
704     {"description":"&\"",
705     "input": "&\"",
706     "output": ["ParseError", ["Character", "&\""]]},
707    
708     {"description":"&'",
709     "input": "&'",
710     "output": ["ParseError", ["Character", "&'"]]},
711    
712     {"description":"<a href=\"&\">",
713     "input": "<a href=\"&\">",
714     "output": [["StartTag", "a", {"href": "&"}]]},
715    
716     {"description":"<a href=\"&'\">",
717     "input": "<a href=\"&'\">",
718     "output": ["ParseError", ["StartTag", "a", {"href": "&'"}]]},
719    
720     {"description":"<a href='&'>",
721     "input": "<a href='&'>",
722     "output": [["StartTag", "a", {"href": "&"}]]},
723    
724     {"description":"<a href='&\"'>",
725     "input": "<a href='&\"'>",
726     "output": ["ParseError", ["StartTag", "a", {"href": "&\""}]]},
727    
728     {"description":"<a href=&\">",
729     "input": "<a href=&\">",
730     "output": ["ParseError", "ParseError", ["StartTag", "a", {"href": "&\""}]]},
731    
732     {"description":"<a href=&'>",
733     "input": "<a href=&'>",
734     "output": ["ParseError", "ParseError", ["StartTag", "a", {"href": "&'"}]]},
735    
736     {"description": "<!->-->",
737     "input": "<!->-->",
738     "output": ["ParseError", ["Comment", "-"], ["Character", "-->"]]},
739    
740     {"description": "<!!--->-->",
741     "input": "<!!--->-->",
742     "output": ["ParseError", ["Comment", "!---"], ["Character", "-->"]]},
743    
744     {"description": "<a href=''rel=''>",
745     "input": "<a href=''rel=''>",
746     "output": ["ParseError", ["StartTag", "a", {"href": "", "rel": ""}]]},
747    
748     {"description": "<a href=\"\"rel=''>",
749     "input": "<a href=\"\"rel=''>",
750     "output": ["ParseError", ["StartTag", "a", {"href": "", "rel": ""}]]},
751    
752     {"description": "<a href=''/rel=''>",
753     "input": "<a href=''/rel=''>",
754     "output": ["ParseError", ["StartTag", "a", {"href": "", "rel": ""}]]},
755    
756     {"description": "<a href=''rel=''/>",
757     "input": "<a href=''rel=''/>",
758     "output": ["ParseError", "ParseError",
759     ["StartTag", "a", {"href": "", "rel": ""}]]},
760    
761     {"description": "<link href=''rel=''/>",
762     "input": "<link href=''rel=''/>",
763     "output": ["ParseError", ["StartTag", "link", {"href": "", "rel": ""}]]},
764    
765 wakaba 1.21 {"description": "permitted slash after a space",
766     "input": "<br />",
767     "output": [["StartTag", "br", {}]]},
768    
769     {"description": "slash in tag after a space",
770     "input": "<br / >",
771     "output": ["ParseError", ["StartTag", "br", {}]]},
772    
773     {"description": "non-permitted slash after a space",
774     "input": "<b />",
775     "output": ["ParseError", ["StartTag", "b", {}]]},
776    
777     {"description": "end tag (non-)permitted slash after a space",
778     "input": "</br />",
779     "output": ["ParseError", ["EndTag", "br"]]},
780    
781     {"description": "permitted slash after attribute name",
782     "input": "<br class/>",
783     "output": [["StartTag", "br", {"class": ""}]]},
784    
785     {"description": "slash in tag after attribute name",
786     "input": "<br class/ >",
787     "output": ["ParseError", ["StartTag", "br", {"class": ""}]]},
788    
789     {"description": "non permitted slash after attribute name",
790     "input": "<b class/>",
791     "output": ["ParseError", ["StartTag", "b", {"class": ""}]]},
792    
793     {"description": "end tag (non-)permitted slash after attribute name",
794     "input": "</br class/>",
795     "output": ["ParseError", "ParseError", ["EndTag", "br"]]},
796    
797     {"description": "permitted slash in after attribute name state",
798     "input": "<br class />",
799     "output": [["StartTag", "br", {"class": ""}]]},
800    
801     {"description": "non permitted slash in after attribute name state",
802     "input": "<b class />",
803     "output": ["ParseError", ["StartTag", "b", {"class": ""}]]},
804    
805     {"description": "end tag (non-)permitted slash in after attribute name state",
806     "input": "</br class />",
807     "output": ["ParseError", "ParseError", ["EndTag", "br"]]},
808    
809 wakaba 1.19 {"description": "<a \">",
810     "input": "<a \">",
811     "output": ["ParseError", ["StartTag", "a", {"\"": ""}]]},
812    
813     {"description": "<a \"\">",
814     "input": "<a \"\">",
815     "output": ["ParseError", "ParseError", ["StartTag", "a", {"\"\"": ""}]]},
816    
817     {"description": "<a '>",
818     "input": "<a '>",
819     "output": ["ParseError", ["StartTag", "a", {"'": ""}]]},
820    
821     {"description": "<a ''>",
822     "input": "<a ''>",
823     "output": ["ParseError", "ParseError", ["StartTag", "a", {"''": ""}]]},
824    
825     {"description": "<a a\">",
826     "input": "<a a\">",
827     "output": ["ParseError", ["StartTag", "a", {"a\"": ""}]]},
828    
829     {"description": "<a a'>",
830     "input": "<a a'>",
831     "output": ["ParseError", ["StartTag", "a", {"a'": ""}]]},
832    
833     {"description": "<a a\"'>",
834     "input": "<a a\"'>",
835     "output": ["ParseError", "ParseError", ["StartTag", "a", {"a\"'": ""}]]},
836    
837     {"description": "<a a=\">",
838     "input": "<a a=\">",
839     "output": ["ParseError", ["StartTag", "a", {"a": ">"}]]},
840    
841     {"description": "<a a='>",
842     "input": "<a a='>",
843     "output": ["ParseError", ["StartTag", "a", {"a": ">"}]]},
844    
845     {"description": "<a a=a\">",
846     "input": "<a a=a\">",
847     "output": ["ParseError", ["StartTag", "a", {"a": "a\""}]]},
848    
849     {"description": "<a a=a'>",
850     "input": "<a a=a'>",
851     "output": ["ParseError", ["StartTag", "a", {"a": "a'"}]]},
852    
853     {"description": "<a a=>",
854     "input": "<a a=>",
855 wakaba 1.21 "output": [["StartTag", "a", {"a": ""}]]},
856    
857     {"description": "end tag attribute (before attribute, >)",
858     "input": "</p class=\"\" >",
859     "output": ["ParseError", ["EndTag", "p"]]},
860    
861     {"description": "end tag attribute (before attribute, EOF)",
862     "input": "</p class=\"\" ",
863     "output": ["ParseError", "ParseError", ["EndTag", "p"]]},
864    
865     {"description": "end tag not closed (before attribute)",
866     "input": "</p >",
867     "output": [["EndTag", "p"]]},
868    
869     {"description": "end tag not closed (attribute name)",
870     "input": "</p class",
871     "output": ["ParseError", "ParseError", ["EndTag", "p"]]},
872    
873     {"description": "end tag attribute (after attribute name)",
874     "input": "</p class >",
875     "output": ["ParseError", ["EndTag", "p"]]},
876    
877     {"description": "end tag attributes uc (after attribute name)",
878     "input": "</p class Title>",
879     "output": ["ParseError", ["EndTag", "p"]]},
880    
881     {"description": "end tag attributes lc (after attribute name)",
882     "input": "</p class title>",
883     "output": ["ParseError", ["EndTag", "p"]]},
884    
885     {"description": "end tag not closed (after attribute name)",
886     "input": "</p class ",
887     "output": ["ParseError", "ParseError", ["EndTag", "p"]]},
888    
889     {"description": "end tag attribute (before attribute value)",
890     "input": "</p class=>",
891     "output": ["ParseError", ["EndTag", "p"]]},
892    
893     {"description": "end tag not closed (before attribute value)",
894     "input": "</p class=",
895     "output": ["ParseError", "ParseError", ["EndTag", "p"]]},
896    
897     {"description": "end tag not closed (attribute value double quote)",
898     "input": "</p class=\"",
899     "output": ["ParseError", "ParseError", ["EndTag", "p"]]},
900    
901     {"description": "end tag not closed (attribute value single quote)",
902     "input": "</p class='",
903     "output": ["ParseError", "ParseError", ["EndTag", "p"]]},
904    
905     {"description": "end tag attribute (attribute value unquoted)",
906     "input": "</p class=a>",
907     "output": ["ParseError", ["EndTag", "p"]]},
908    
909     {"description": "end tag not closed (attribute value unquoted)",
910     "input": "</p class=a",
911     "output": ["ParseError", "ParseError", ["EndTag", "p"]]},
912    
913     {"description": "end tag attribute (after attribute value double quoted)",
914     "input": "</p class=\"a\" >",
915     "output": ["ParseError", ["EndTag", "p"]]},
916    
917     {"description": "end tag attribute (after attribute value single quoted)",
918     "input": "</p class='a' >",
919     "output": ["ParseError", ["EndTag", "p"]]},
920    
921     {"description": "end tag not closed (after attribute value double quoted)",
922     "input": "</p class=\"a\" ",
923     "output": ["ParseError", "ParseError", ["EndTag", "p"]]},
924    
925     {"description": "end tag not closed (after attribute value single quoted)",
926     "input": "</p class='a' ",
927     "output": ["ParseError", "ParseError", ["EndTag", "p"]]}
928 wakaba 1.4
929     ]}

admin@suikawiki.org
ViewVC Help
Powered by ViewVC 1.1.24