html5 0.1.0 → 0.10.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (98) hide show
  1. data/History.txt +9 -2
  2. data/Manifest.txt +61 -2
  3. data/README +41 -5
  4. data/Rakefile.rb +22 -6
  5. data/{parse.rb → bin/html5} +11 -11
  6. data/lib/core_ext/string.rb +17 -0
  7. data/lib/html5/constants.rb +228 -0
  8. data/lib/html5/filters/iso639codes.rb +752 -0
  9. data/lib/html5/filters/rfc2046.rb +30 -0
  10. data/lib/html5/filters/rfc3987.rb +89 -0
  11. data/lib/html5/filters/validator.rb +830 -0
  12. data/lib/html5/html5parser.rb +25 -25
  13. data/lib/html5/html5parser/after_body_phase.rb +3 -3
  14. data/lib/html5/html5parser/after_frameset_phase.rb +3 -4
  15. data/lib/html5/html5parser/after_head_phase.rb +6 -6
  16. data/lib/html5/html5parser/before_head_phase.rb +1 -1
  17. data/lib/html5/html5parser/in_body_phase.rb +54 -48
  18. data/lib/html5/html5parser/in_caption_phase.rb +7 -6
  19. data/lib/html5/html5parser/in_cell_phase.rb +3 -3
  20. data/lib/html5/html5parser/in_column_group_phase.rb +1 -1
  21. data/lib/html5/html5parser/in_frameset_phase.rb +5 -5
  22. data/lib/html5/html5parser/in_head_phase.rb +10 -10
  23. data/lib/html5/html5parser/in_row_phase.rb +4 -2
  24. data/lib/html5/html5parser/in_select_phase.rb +7 -6
  25. data/lib/html5/html5parser/in_table_body_phase.rb +8 -5
  26. data/lib/html5/html5parser/in_table_phase.rb +12 -7
  27. data/lib/html5/html5parser/initial_phase.rb +5 -6
  28. data/lib/html5/html5parser/phase.rb +5 -9
  29. data/lib/html5/html5parser/root_element_phase.rb +1 -2
  30. data/lib/html5/html5parser/trailing_end_phase.rb +3 -3
  31. data/lib/html5/inputstream.rb +25 -31
  32. data/lib/html5/liberalxmlparser.rb +2 -2
  33. data/lib/html5/sanitizer.rb +6 -6
  34. data/lib/html5/serializer/htmlserializer.rb +2 -3
  35. data/lib/html5/sniffer.rb +45 -0
  36. data/lib/html5/tokenizer.rb +57 -59
  37. data/lib/html5/treebuilders/rexml.rb +7 -6
  38. data/lib/html5/treebuilders/simpletree.rb +1 -1
  39. data/lib/html5/treewalkers/base.rb +8 -0
  40. data/lib/html5/version.rb +3 -0
  41. data/testdata/encoding/chardet/test_big5.txt +51 -0
  42. data/testdata/encoding/test-yahoo-jp.dat +10 -0
  43. data/testdata/encoding/tests1.dat +394 -0
  44. data/testdata/encoding/tests2.dat +81 -0
  45. data/testdata/sanitizer/tests1.dat +416 -0
  46. data/testdata/serializer/core.test +104 -0
  47. data/testdata/serializer/injectmeta.test +65 -0
  48. data/testdata/serializer/optionaltags.test +900 -0
  49. data/testdata/serializer/options.test +60 -0
  50. data/testdata/serializer/whitespace.test +51 -0
  51. data/testdata/sites/google-results.htm +1 -0
  52. data/testdata/sites/python-ref-import.htm +1 -0
  53. data/testdata/sites/web-apps-old.htm +1 -0
  54. data/testdata/sites/web-apps.htm +34275 -0
  55. data/testdata/sniffer/htmlOrFeed.json +43 -0
  56. data/testdata/tokenizer/contentModelFlags.test +48 -0
  57. data/testdata/tokenizer/entities.test +2339 -0
  58. data/testdata/tokenizer/escapeFlag.test +21 -0
  59. data/testdata/tokenizer/test1.test +172 -0
  60. data/testdata/tokenizer/test2.test +129 -0
  61. data/testdata/tokenizer/test3.test +367 -0
  62. data/testdata/tokenizer/test4.test +198 -0
  63. data/testdata/tree-construction/tests1.dat +1950 -0
  64. data/testdata/tree-construction/tests2.dat +773 -0
  65. data/testdata/tree-construction/tests3.dat +270 -0
  66. data/testdata/tree-construction/tests4.dat +60 -0
  67. data/testdata/tree-construction/tests5.dat +175 -0
  68. data/testdata/tree-construction/tests6.dat +196 -0
  69. data/testdata/validator/attributes.test +1035 -0
  70. data/testdata/validator/base-href-attribute.test +787 -0
  71. data/testdata/validator/base-target-attribute.test +35 -0
  72. data/testdata/validator/blockquote-cite-attribute.test +7 -0
  73. data/testdata/validator/classattribute.test +152 -0
  74. data/testdata/validator/contenteditableattribute.test +59 -0
  75. data/testdata/validator/contextmenuattribute.test +115 -0
  76. data/testdata/validator/dirattribute.test +59 -0
  77. data/testdata/validator/draggableattribute.test +63 -0
  78. data/testdata/validator/html-xmlns-attribute.test +23 -0
  79. data/testdata/validator/idattribute.test +115 -0
  80. data/testdata/validator/inputattributes.test +2795 -0
  81. data/testdata/validator/irrelevantattribute.test +63 -0
  82. data/testdata/validator/langattribute.test +5579 -0
  83. data/testdata/validator/li-value-attribute.test +7 -0
  84. data/testdata/validator/link-href-attribute.test +7 -0
  85. data/testdata/validator/link-hreflang-attribute.test +7 -0
  86. data/testdata/validator/link-rel-attribute.test +271 -0
  87. data/testdata/validator/ol-start-attribute.test +7 -0
  88. data/testdata/validator/starttags.test +375 -0
  89. data/testdata/validator/style-scoped-attribute.test +7 -0
  90. data/testdata/validator/tabindexattribute.test +79 -0
  91. data/tests/preamble.rb +7 -17
  92. data/tests/test_encoding.rb +1 -1
  93. data/tests/test_lxp.rb +16 -0
  94. data/tests/test_parser.rb +2 -2
  95. data/tests/test_sniffer.rb +27 -0
  96. data/tests/test_treewalkers.rb +41 -22
  97. data/tests/test_validator.rb +31 -0
  98. metadata +65 -6
@@ -0,0 +1,196 @@
1
+ #data
2
+ <!doctype html></head> <head>
3
+ #errors
4
+ Unexpected start tag head. Ignored.
5
+ #document
6
+ | <!DOCTYPE html>
7
+ | <html>
8
+ | <head>
9
+ | " "
10
+ | <body>
11
+
12
+ #data
13
+ <!doctype html></html> <head>
14
+ #errors
15
+ Unexpected start tag head.
16
+ Unexpected start tag head in after body phase.
17
+ Unexpected start tag head. Ignored.
18
+ #document
19
+ | <!DOCTYPE html>
20
+ | <html>
21
+ | <head>
22
+ | <body>
23
+ | " "
24
+
25
+ #data
26
+ <!doctype html></body><meta>
27
+ #errors
28
+ Unexpected meta element in after body phase.
29
+ #document
30
+ | <!DOCTYPE html>
31
+ | <html>
32
+ | <head>
33
+ | <body>
34
+ | <meta>
35
+
36
+ #data
37
+ <!doctype HTml><form><div></form><div>
38
+ #errors
39
+ Form end tag ignored.
40
+ Unexpected end of file.
41
+ #document
42
+ | <!DOCTYPE HTml>
43
+ | <html>
44
+ | <head>
45
+ | <body>
46
+ | <form>
47
+ | <div>
48
+ | <div>
49
+
50
+ #data
51
+ <!doctype HTml><title>&amp;</title>
52
+ #errors
53
+ #document
54
+ | <!DOCTYPE HTml>
55
+ | <html>
56
+ | <head>
57
+ | <title>
58
+ | "&"
59
+ | <body>
60
+
61
+ #data
62
+ <!doctype HTml><title><!--&amp;--></title>
63
+ #errors
64
+ #document
65
+ | <!DOCTYPE HTml>
66
+ | <html>
67
+ | <head>
68
+ | <title>
69
+ | "<!--&amp;-->"
70
+ | <body>
71
+
72
+ #data
73
+ <!doctype>
74
+ #errors
75
+ No space after "doctype"
76
+ Unexpected ">"
77
+ Incorrect doctype
78
+ #document
79
+ | <!DOCTYPE >
80
+ | <html>
81
+ | <head>
82
+ | <body>
83
+
84
+ #data
85
+ <!---x
86
+ #errors
87
+ End of file in comment
88
+ End of file before doctype
89
+ #document
90
+ | <!-- -x -->
91
+ | <html>
92
+ | <head>
93
+ | <body>
94
+
95
+ #data
96
+ <body>
97
+ <div>
98
+ #errors
99
+ Unexpected start tag (body)
100
+ Expected closing tag. Unexpected end of file
101
+ #document-fragment
102
+ div
103
+ #document
104
+ | "
105
+ "
106
+ | <div>
107
+
108
+ #data
109
+ <frameset></frameset>
110
+ foo
111
+ #errors
112
+ Unexpected start tag (frameset). Expected DOCTYPE.
113
+ Unexpected non-space characters in the after frameset phase. Ignored.
114
+ #document
115
+ | <html>
116
+ | <head>
117
+ | <frameset>
118
+ | "
119
+ "
120
+
121
+ #data
122
+ <frameset></frameset>
123
+ <noframes>
124
+ #errors
125
+ Unexpected start tag (frameset). Expected DOCTYPE.
126
+ Expected closing tag. Unexpected end of file.
127
+ #document
128
+ | <html>
129
+ | <head>
130
+ | <frameset>
131
+ | "
132
+ "
133
+ | <noframes>
134
+
135
+ #data
136
+ <frameset></frameset>
137
+ <div>
138
+ #errors
139
+ Unexpected start tag (frameset). Expected DOCTYPE.
140
+ Unexpected start tag (div) in the after frameset phase. Ignored.
141
+ #document
142
+ | <html>
143
+ | <head>
144
+ | <frameset>
145
+ | "
146
+ "
147
+
148
+ #data
149
+ <frameset></frameset>
150
+ </html>
151
+ #errors
152
+ Unexpected start tag (frameset). Expected DOCTYPE.
153
+ #document
154
+ | <html>
155
+ | <head>
156
+ | <frameset>
157
+ | "
158
+ "
159
+
160
+ #data
161
+ <frameset></frameset>
162
+ </div>
163
+ #errors
164
+ Unexpected start tag (frameset). Expected DOCTYPE.
165
+ Unexpected end tag (div) in the after frameset phase. Ignored.
166
+ #document
167
+ | <html>
168
+ | <head>
169
+ | <frameset>
170
+ | "
171
+ "
172
+
173
+ #data
174
+ <form><form>
175
+ #errors
176
+ Unexpected start tag (form). Expected DOCTYPE.
177
+ Unexpected start tag (form).
178
+ Expected closing tag. Unexpected end of file.
179
+ #document
180
+ | <html>
181
+ | <head>
182
+ | <body>
183
+ | <form>
184
+
185
+ #data
186
+ <button><button>
187
+ #errors
188
+ Unexpected start tag (button). Expected DOCTYPE.
189
+ Unexpected start tag (button) implies end tag (button).
190
+ Expected closing tag. Unexpected end of file.
191
+ #document
192
+ | <html>
193
+ | <head>
194
+ | <body>
195
+ | <button>
196
+ | <button>
@@ -0,0 +1,1035 @@
1
+ {"tests": [
2
+
3
+ {"description": "allowed 'class' attribute on <span>",
4
+ "input": "<span class>",
5
+ "fail-if": "unknown-attribute"},
6
+
7
+ {"description": "allowed 'contenteditable' attribute on <span>",
8
+ "input": "<span contenteditable>",
9
+ "fail-if": "unknown-attribute"},
10
+
11
+ {"description": "allowed 'contextmenu' attribute on <span>",
12
+ "input": "<span contextmenu>",
13
+ "fail-if": "unknown-attribute"},
14
+
15
+ {"description": "allowed 'dir' attribute on <span>",
16
+ "input": "<span dir>",
17
+ "fail-if": "unknown-attribute"},
18
+
19
+ {"description": "allowed 'draggable' attribute on <span>",
20
+ "input": "<span draggable>",
21
+ "fail-if": "unknown-attribute"},
22
+
23
+ {"description": "allowed 'id' attribute on <span>",
24
+ "input": "<span id>",
25
+ "fail-if": "unknown-attribute"},
26
+
27
+ {"description": "allowed 'irrelevant' attribute on <span>",
28
+ "input": "<span irrelevant>",
29
+ "fail-if": "unknown-attribute"},
30
+
31
+ {"description": "allowed 'lang' attribute on <span>",
32
+ "input": "<span lang>",
33
+ "fail-if": "unknown-attribute"},
34
+
35
+ {"description": "allowed 'ref' attribute on <span>",
36
+ "input": "<span ref>",
37
+ "fail-if": "unknown-attribute"},
38
+
39
+ {"description": "allowed 'tabindex' attribute on <span>",
40
+ "input": "<span tabindex>",
41
+ "fail-if": "unknown-attribute"},
42
+
43
+ {"description": "allowed 'template' attribute on <span>",
44
+ "input": "<span template>",
45
+ "fail-if": "unknown-attribute"},
46
+
47
+ {"description": "allowed 'title' attribute on <span>",
48
+ "input": "<span title>",
49
+ "fail-if": "unknown-attribute"},
50
+
51
+ {"description": "allowed 'onabort' attribute on <span>",
52
+ "input": "<span onabort>",
53
+ "fail-if": "unknown-attribute"},
54
+
55
+ {"description": "allowed 'onbeforeunload' attribute on <span>",
56
+ "input": "<span onbeforeunload>",
57
+ "fail-if": "unknown-attribute"},
58
+
59
+ {"description": "allowed 'onblur' attribute on <span>",
60
+ "input": "<span onblur>",
61
+ "fail-if": "unknown-attribute"},
62
+
63
+ {"description": "allowed 'onchange' attribute on <span>",
64
+ "input": "<span onchange>",
65
+ "fail-if": "unknown-attribute"},
66
+
67
+ {"description": "allowed 'onclick' attribute on <span>",
68
+ "input": "<span onclick>",
69
+ "fail-if": "unknown-attribute"},
70
+
71
+ {"description": "allowed 'oncontextmenu' attribute on <span>",
72
+ "input": "<span oncontextmenu>",
73
+ "fail-if": "unknown-attribute"},
74
+
75
+ {"description": "allowed 'ondblclick' attribute on <span>",
76
+ "input": "<span ondblclick>",
77
+ "fail-if": "unknown-attribute"},
78
+
79
+ {"description": "allowed 'ondrag' attribute on <span>",
80
+ "input": "<span ondrag>",
81
+ "fail-if": "unknown-attribute"},
82
+
83
+ {"description": "allowed 'ondragend' attribute on <span>",
84
+ "input": "<span ondragend>",
85
+ "fail-if": "unknown-attribute"},
86
+
87
+ {"description": "allowed 'ondragenter' attribute on <span>",
88
+ "input": "<span ondragenter>",
89
+ "fail-if": "unknown-attribute"},
90
+
91
+ {"description": "allowed 'ondragleave' attribute on <span>",
92
+ "input": "<span ondragleave>",
93
+ "fail-if": "unknown-attribute"},
94
+
95
+ {"description": "allowed 'ondragover' attribute on <span>",
96
+ "input": "<span ondragover>",
97
+ "fail-if": "unknown-attribute"},
98
+
99
+ {"description": "allowed 'ondragstart' attribute on <span>",
100
+ "input": "<span ondragstart>",
101
+ "fail-if": "unknown-attribute"},
102
+
103
+ {"description": "allowed 'ondrop' attribute on <span>",
104
+ "input": "<span ondrop>",
105
+ "fail-if": "unknown-attribute"},
106
+
107
+ {"description": "allowed 'onerror' attribute on <span>",
108
+ "input": "<span onerror>",
109
+ "fail-if": "unknown-attribute"},
110
+
111
+ {"description": "allowed 'onfocus' attribute on <span>",
112
+ "input": "<span onfocus>",
113
+ "fail-if": "unknown-attribute"},
114
+
115
+ {"description": "allowed 'onkeydown' attribute on <span>",
116
+ "input": "<span onkeydown>",
117
+ "fail-if": "unknown-attribute"},
118
+
119
+ {"description": "allowed 'onkeypress' attribute on <span>",
120
+ "input": "<span onkeypress>",
121
+ "fail-if": "unknown-attribute"},
122
+
123
+ {"description": "allowed 'onkeyup' attribute on <span>",
124
+ "input": "<span onkeyup>",
125
+ "fail-if": "unknown-attribute"},
126
+
127
+ {"description": "allowed 'onload' attribute on <span>",
128
+ "input": "<span onload>",
129
+ "fail-if": "unknown-attribute"},
130
+
131
+ {"description": "allowed 'onmessage' attribute on <span>",
132
+ "input": "<span onmessage>",
133
+ "fail-if": "unknown-attribute"},
134
+
135
+ {"description": "allowed 'onmousedown' attribute on <span>",
136
+ "input": "<span onmousedown>",
137
+ "fail-if": "unknown-attribute"},
138
+
139
+ {"description": "allowed 'onmousemove' attribute on <span>",
140
+ "input": "<span onmousemove>",
141
+ "fail-if": "unknown-attribute"},
142
+
143
+ {"description": "allowed 'onmouseout' attribute on <span>",
144
+ "input": "<span onmouseout>",
145
+ "fail-if": "unknown-attribute"},
146
+
147
+ {"description": "allowed 'onmouseover' attribute on <span>",
148
+ "input": "<span onmouseover>",
149
+ "fail-if": "unknown-attribute"},
150
+
151
+ {"description": "allowed 'onmouseup' attribute on <span>",
152
+ "input": "<span onmouseup>",
153
+ "fail-if": "unknown-attribute"},
154
+
155
+ {"description": "allowed 'onmousewheel' attribute on <span>",
156
+ "input": "<span onmousewheel>",
157
+ "fail-if": "unknown-attribute"},
158
+
159
+ {"description": "allowed 'onresize' attribute on <span>",
160
+ "input": "<span onresize>",
161
+ "fail-if": "unknown-attribute"},
162
+
163
+ {"description": "allowed 'onscroll' attribute on <span>",
164
+ "input": "<span onscroll>",
165
+ "fail-if": "unknown-attribute"},
166
+
167
+ {"description": "allowed 'onselect' attribute on <span>",
168
+ "input": "<span onselect>",
169
+ "fail-if": "unknown-attribute"},
170
+
171
+ {"description": "allowed 'onsubmit' attribute on <span>",
172
+ "input": "<span onsubmit>",
173
+ "fail-if": "unknown-attribute"},
174
+
175
+ {"description": "allowed 'onunload' attribute on <span>",
176
+ "input": "<span onunload>",
177
+ "fail-if": "unknown-attribute"},
178
+
179
+ {"description": "allowed 'type' attribute on <command>",
180
+ "input": "<command type>",
181
+ "fail-if": "unknown-attribute"},
182
+
183
+ {"description": "allowed 'label' attribute on <command>",
184
+ "input": "<command label>",
185
+ "fail-if": "unknown-attribute"},
186
+
187
+ {"description": "allowed 'icon' attribute on <command>",
188
+ "input": "<command icon>",
189
+ "fail-if": "unknown-attribute"},
190
+
191
+ {"description": "allowed 'hidden' attribute on <command>",
192
+ "input": "<command hidden>",
193
+ "fail-if": "unknown-attribute"},
194
+
195
+ {"description": "allowed 'disabled' attribute on <command>",
196
+ "input": "<command disabled>",
197
+ "fail-if": "unknown-attribute"},
198
+
199
+ {"description": "allowed 'checked' attribute on <command>",
200
+ "input": "<command checked>",
201
+ "fail-if": "unknown-attribute"},
202
+
203
+ {"description": "allowed 'radiogroup' attribute on <command>",
204
+ "input": "<command radiogroup>",
205
+ "fail-if": "unknown-attribute"},
206
+
207
+ {"description": "allowed 'default' attribute on <command>",
208
+ "input": "<command default>",
209
+ "fail-if": "unknown-attribute"},
210
+
211
+ {"description": "allowed 'value' attribute on <meter>",
212
+ "input": "<meter value>",
213
+ "fail-if": "unknown-attribute"},
214
+
215
+ {"description": "allowed 'min' attribute on <meter>",
216
+ "input": "<meter min>",
217
+ "fail-if": "unknown-attribute"},
218
+
219
+ {"description": "allowed 'low' attribute on <meter>",
220
+ "input": "<meter low>",
221
+ "fail-if": "unknown-attribute"},
222
+
223
+ {"description": "allowed 'high' attribute on <meter>",
224
+ "input": "<meter high>",
225
+ "fail-if": "unknown-attribute"},
226
+
227
+ {"description": "allowed 'max' attribute on <meter>",
228
+ "input": "<meter max>",
229
+ "fail-if": "unknown-attribute"},
230
+
231
+ {"description": "allowed 'optimum' attribute on <meter>",
232
+ "input": "<meter optimum>",
233
+ "fail-if": "unknown-attribute"},
234
+
235
+ {"description": "allowed 'cite' attribute on <ins>",
236
+ "input": "<ins cite>",
237
+ "fail-if": "unknown-attribute"},
238
+
239
+ {"description": "allowed 'datetime' attribute on <ins>",
240
+ "input": "<ins datetime>",
241
+ "fail-if": "unknown-attribute"},
242
+
243
+ {"description": "allowed 'multiple' attribute on <datagrid>",
244
+ "input": "<datagrid multiple>",
245
+ "fail-if": "unknown-attribute"},
246
+
247
+ {"description": "allowed 'disabled' attribute on <datagrid>",
248
+ "input": "<datagrid disabled>",
249
+ "fail-if": "unknown-attribute"},
250
+
251
+ {"description": "allowed 'name' attribute on <meta>",
252
+ "input": "<meta name>",
253
+ "fail-if": "unknown-attribute"},
254
+
255
+ {"description": "allowed 'http-equiv' attribute on <meta>",
256
+ "input": "<meta http-equiv>",
257
+ "fail-if": "unknown-attribute"},
258
+
259
+ {"description": "allowed 'content' attribute on <meta>",
260
+ "input": "<meta content>",
261
+ "fail-if": "unknown-attribute"},
262
+
263
+ {"description": "allowed 'charset' attribute on <meta>",
264
+ "input": "<meta charset>",
265
+ "fail-if": "unknown-attribute"},
266
+
267
+ {"description": "allowed 'src' attribute on <video>",
268
+ "input": "<video src>",
269
+ "fail-if": "unknown-attribute"},
270
+
271
+ {"description": "allowed 'autoplay' attribute on <video>",
272
+ "input": "<video autoplay>",
273
+ "fail-if": "unknown-attribute"},
274
+
275
+ {"description": "allowed 'start' attribute on <video>",
276
+ "input": "<video start>",
277
+ "fail-if": "unknown-attribute"},
278
+
279
+ {"description": "allowed 'loopstart' attribute on <video>",
280
+ "input": "<video loopstart>",
281
+ "fail-if": "unknown-attribute"},
282
+
283
+ {"description": "allowed 'loopend' attribute on <video>",
284
+ "input": "<video loopend>",
285
+ "fail-if": "unknown-attribute"},
286
+
287
+ {"description": "allowed 'end' attribute on <video>",
288
+ "input": "<video end>",
289
+ "fail-if": "unknown-attribute"},
290
+
291
+ {"description": "allowed 'loopcount' attribute on <video>",
292
+ "input": "<video loopcount>",
293
+ "fail-if": "unknown-attribute"},
294
+
295
+ {"description": "allowed 'controls' attribute on <video>",
296
+ "input": "<video controls>",
297
+ "fail-if": "unknown-attribute"},
298
+
299
+ {"description": "allowed 'style' attribute on <font>",
300
+ "input": "<font style>",
301
+ "fail-if": "unknown-attribute"},
302
+
303
+ {"description": "allowed 'media' attribute on <style>",
304
+ "input": "<style media>",
305
+ "fail-if": "unknown-attribute"},
306
+
307
+ {"description": "allowed 'type' attribute on <style>",
308
+ "input": "<style type>",
309
+ "fail-if": "unknown-attribute"},
310
+
311
+ {"description": "allowed 'scoped' attribute on <style>",
312
+ "input": "<style scoped>",
313
+ "fail-if": "unknown-attribute"},
314
+
315
+ {"description": "allowed 'alt' attribute on <img>",
316
+ "input": "<img alt>",
317
+ "fail-if": "unknown-attribute"},
318
+
319
+ {"description": "allowed 'src' attribute on <img>",
320
+ "input": "<img src>",
321
+ "fail-if": "unknown-attribute"},
322
+
323
+ {"description": "allowed 'usemap' attribute on <img>",
324
+ "input": "<img usemap>",
325
+ "fail-if": "unknown-attribute"},
326
+
327
+ {"description": "allowed 'ismap' attribute on <img>",
328
+ "input": "<img ismap>",
329
+ "fail-if": "unknown-attribute"},
330
+
331
+ {"description": "allowed 'height' attribute on <img>",
332
+ "input": "<img height>",
333
+ "fail-if": "unknown-attribute"},
334
+
335
+ {"description": "allowed 'width' attribute on <img>",
336
+ "input": "<img width>",
337
+ "fail-if": "unknown-attribute"},
338
+
339
+ {"description": "allowed 'alt' attribute on <area>",
340
+ "input": "<area alt>",
341
+ "fail-if": "unknown-attribute"},
342
+
343
+ {"description": "allowed 'coords' attribute on <area>",
344
+ "input": "<area coords>",
345
+ "fail-if": "unknown-attribute"},
346
+
347
+ {"description": "allowed 'shape' attribute on <area>",
348
+ "input": "<area shape>",
349
+ "fail-if": "unknown-attribute"},
350
+
351
+ {"description": "allowed 'href' attribute on <area>",
352
+ "input": "<area href>",
353
+ "fail-if": "unknown-attribute"},
354
+
355
+ {"description": "allowed 'target' attribute on <area>",
356
+ "input": "<area target>",
357
+ "fail-if": "unknown-attribute"},
358
+
359
+ {"description": "allowed 'ping' attribute on <area>",
360
+ "input": "<area ping>",
361
+ "fail-if": "unknown-attribute"},
362
+
363
+ {"description": "allowed 'rel' attribute on <area>",
364
+ "input": "<area rel>",
365
+ "fail-if": "unknown-attribute"},
366
+
367
+ {"description": "allowed 'media' attribute on <area>",
368
+ "input": "<area media>",
369
+ "fail-if": "unknown-attribute"},
370
+
371
+ {"description": "allowed 'hreflang' attribute on <area>",
372
+ "input": "<area hreflang>",
373
+ "fail-if": "unknown-attribute"},
374
+
375
+ {"description": "allowed 'type' attribute on <area>",
376
+ "input": "<area type>",
377
+ "fail-if": "unknown-attribute"},
378
+
379
+ {"description": "allowed 'type' attribute on <menu>",
380
+ "input": "<menu type>",
381
+ "fail-if": "unknown-attribute"},
382
+
383
+ {"description": "allowed 'label' attribute on <menu>",
384
+ "input": "<menu label>",
385
+ "fail-if": "unknown-attribute"},
386
+
387
+ {"description": "allowed 'autosubmit' attribute on <menu>",
388
+ "input": "<menu autosubmit>",
389
+ "fail-if": "unknown-attribute"},
390
+
391
+ {"description": "allowed 'name' attribute on <param>",
392
+ "input": "<param name>",
393
+ "fail-if": "unknown-attribute"},
394
+
395
+ {"description": "allowed 'value' attribute on <param>",
396
+ "input": "<param value>",
397
+ "fail-if": "unknown-attribute"},
398
+
399
+ {"description": "allowed 'value' attribute on <li>",
400
+ "input": "<li value>",
401
+ "fail-if": "unknown-attribute"},
402
+
403
+ {"description": "allowed 'src' attribute on <source>",
404
+ "input": "<source src>",
405
+ "fail-if": "unknown-attribute"},
406
+
407
+ {"description": "allowed 'type' attribute on <source>",
408
+ "input": "<source type>",
409
+ "fail-if": "unknown-attribute"},
410
+
411
+ {"description": "allowed 'media' attribute on <source>",
412
+ "input": "<source media>",
413
+ "fail-if": "unknown-attribute"},
414
+
415
+ {"description": "allowed 'xmlns' attribute on <html>",
416
+ "input": "<html xmlns>",
417
+ "fail-if": "unknown-attribute"},
418
+
419
+ {"description": "allowed 'open' attribute on <details>",
420
+ "input": "<details open>",
421
+ "fail-if": "unknown-attribute"},
422
+
423
+ {"description": "allowed 'colspan' attribute on <th>",
424
+ "input": "<th colspan>",
425
+ "fail-if": "unknown-attribute"},
426
+
427
+ {"description": "allowed 'rowspan' attribute on <th>",
428
+ "input": "<th rowspan>",
429
+ "fail-if": "unknown-attribute"},
430
+
431
+ {"description": "allowed 'scope' attribute on <th>",
432
+ "input": "<th scope>",
433
+ "fail-if": "unknown-attribute"},
434
+
435
+ {"description": "allowed 'value' attribute on <progress>",
436
+ "input": "<progress value>",
437
+ "fail-if": "unknown-attribute"},
438
+
439
+ {"description": "allowed 'max' attribute on <progress>",
440
+ "input": "<progress max>",
441
+ "fail-if": "unknown-attribute"},
442
+
443
+ {"description": "allowed 'colspan' attribute on <td>",
444
+ "input": "<td colspan>",
445
+ "fail-if": "unknown-attribute"},
446
+
447
+ {"description": "allowed 'rowspan' attribute on <td>",
448
+ "input": "<td rowspan>",
449
+ "fail-if": "unknown-attribute"},
450
+
451
+ {"description": "allowed 'cite' attribute on <blockquote>",
452
+ "input": "<blockquote cite>",
453
+ "fail-if": "unknown-attribute"},
454
+
455
+ {"description": "allowed 'data' attribute on <object>",
456
+ "input": "<object data>",
457
+ "fail-if": "unknown-attribute"},
458
+
459
+ {"description": "allowed 'type' attribute on <object>",
460
+ "input": "<object type>",
461
+ "fail-if": "unknown-attribute"},
462
+
463
+ {"description": "allowed 'usemap' attribute on <object>",
464
+ "input": "<object usemap>",
465
+ "fail-if": "unknown-attribute"},
466
+
467
+ {"description": "allowed 'height' attribute on <object>",
468
+ "input": "<object height>",
469
+ "fail-if": "unknown-attribute"},
470
+
471
+ {"description": "allowed 'width' attribute on <object>",
472
+ "input": "<object width>",
473
+ "fail-if": "unknown-attribute"},
474
+
475
+ {"description": "allowed 'height' attribute on <canvas>",
476
+ "input": "<canvas height>",
477
+ "fail-if": "unknown-attribute"},
478
+
479
+ {"description": "allowed 'width' attribute on <canvas>",
480
+ "input": "<canvas width>",
481
+ "fail-if": "unknown-attribute"},
482
+
483
+ {"description": "allowed 'href' attribute on <base>",
484
+ "input": "<base href>",
485
+ "fail-if": "unknown-attribute"},
486
+
487
+ {"description": "allowed 'target' attribute on <base>",
488
+ "input": "<base target>",
489
+ "fail-if": "unknown-attribute"},
490
+
491
+ {"description": "allowed 'href' attribute on <link>",
492
+ "input": "<link href>",
493
+ "fail-if": "unknown-attribute"},
494
+
495
+ {"description": "allowed 'rel' attribute on <link>",
496
+ "input": "<link rel>",
497
+ "fail-if": "unknown-attribute"},
498
+
499
+ {"description": "allowed 'media' attribute on <link>",
500
+ "input": "<link media>",
501
+ "fail-if": "unknown-attribute"},
502
+
503
+ {"description": "allowed 'hreflang' attribute on <link>",
504
+ "input": "<link hreflang>",
505
+ "fail-if": "unknown-attribute"},
506
+
507
+ {"description": "allowed 'type' attribute on <link>",
508
+ "input": "<link type>",
509
+ "fail-if": "unknown-attribute"},
510
+
511
+ {"description": "allowed 'href' attribute on <a>",
512
+ "input": "<a href>",
513
+ "fail-if": "unknown-attribute"},
514
+
515
+ {"description": "allowed 'target' attribute on <a>",
516
+ "input": "<a target>",
517
+ "fail-if": "unknown-attribute"},
518
+
519
+ {"description": "allowed 'ping' attribute on <a>",
520
+ "input": "<a ping>",
521
+ "fail-if": "unknown-attribute"},
522
+
523
+ {"description": "allowed 'rel' attribute on <a>",
524
+ "input": "<a rel>",
525
+ "fail-if": "unknown-attribute"},
526
+
527
+ {"description": "allowed 'media' attribute on <a>",
528
+ "input": "<a media>",
529
+ "fail-if": "unknown-attribute"},
530
+
531
+ {"description": "allowed 'hreflang' attribute on <a>",
532
+ "input": "<a hreflang>",
533
+ "fail-if": "unknown-attribute"},
534
+
535
+ {"description": "allowed 'type' attribute on <a>",
536
+ "input": "<a type>",
537
+ "fail-if": "unknown-attribute"},
538
+
539
+ {"description": "allowed 'src' attribute on <event-source>",
540
+ "input": "<event-source src>",
541
+ "fail-if": "unknown-attribute"},
542
+
543
+ {"description": "allowed 'start' attribute on <ol>",
544
+ "input": "<ol start>",
545
+ "fail-if": "unknown-attribute"},
546
+
547
+ {"description": "allowed 'span' attribute on <colgroup>",
548
+ "input": "<colgroup span>",
549
+ "fail-if": "unknown-attribute"},
550
+
551
+ {"description": "allowed 'src' attribute on <script>",
552
+ "input": "<script src>",
553
+ "fail-if": "unknown-attribute"},
554
+
555
+ {"description": "allowed 'defer' attribute on <script>",
556
+ "input": "<script defer>",
557
+ "fail-if": "unknown-attribute"},
558
+
559
+ {"description": "allowed 'async' attribute on <script>",
560
+ "input": "<script async>",
561
+ "fail-if": "unknown-attribute"},
562
+
563
+ {"description": "allowed 'type' attribute on <script>",
564
+ "input": "<script type>",
565
+ "fail-if": "unknown-attribute"},
566
+
567
+ {"description": "allowed 'cite' attribute on <q>",
568
+ "input": "<q cite>",
569
+ "fail-if": "unknown-attribute"},
570
+
571
+ {"description": "allowed 'cite' attribute on <del>",
572
+ "input": "<del cite>",
573
+ "fail-if": "unknown-attribute"},
574
+
575
+ {"description": "allowed 'datetime' attribute on <del>",
576
+ "input": "<del datetime>",
577
+ "fail-if": "unknown-attribute"},
578
+
579
+ {"description": "allowed 'src' attribute on <iframe>",
580
+ "input": "<iframe src>",
581
+ "fail-if": "unknown-attribute"},
582
+
583
+ {"description": "allowed 'datetime' attribute on <time>",
584
+ "input": "<time datetime>",
585
+ "fail-if": "unknown-attribute"},
586
+
587
+ {"description": "allowed 'src' attribute on <audio>",
588
+ "input": "<audio src>",
589
+ "fail-if": "unknown-attribute"},
590
+
591
+ {"description": "allowed 'autoplay' attribute on <audio>",
592
+ "input": "<audio autoplay>",
593
+ "fail-if": "unknown-attribute"},
594
+
595
+ {"description": "allowed 'start' attribute on <audio>",
596
+ "input": "<audio start>",
597
+ "fail-if": "unknown-attribute"},
598
+
599
+ {"description": "allowed 'loopstart' attribute on <audio>",
600
+ "input": "<audio loopstart>",
601
+ "fail-if": "unknown-attribute"},
602
+
603
+ {"description": "allowed 'loopend' attribute on <audio>",
604
+ "input": "<audio loopend>",
605
+ "fail-if": "unknown-attribute"},
606
+
607
+ {"description": "allowed 'end' attribute on <audio>",
608
+ "input": "<audio end>",
609
+ "fail-if": "unknown-attribute"},
610
+
611
+ {"description": "allowed 'loopcount' attribute on <audio>",
612
+ "input": "<audio loopcount>",
613
+ "fail-if": "unknown-attribute"},
614
+
615
+ {"description": "allowed 'controls' attribute on <audio>",
616
+ "input": "<audio controls>",
617
+ "fail-if": "unknown-attribute"},
618
+
619
+ {"description": "allowed 'span' attribute on <col>",
620
+ "input": "<col span>",
621
+ "fail-if": "unknown-attribute"},
622
+
623
+ {"description": "allowed 'disabled' attribute on <fieldset>",
624
+ "input": "<fieldset disabled>",
625
+ "fail-if": "unknown-attribute"},
626
+
627
+ {"description": "allowed 'form' attribute on <fieldset>",
628
+ "input": "<fieldset form>",
629
+ "fail-if": "unknown-attribute"},
630
+
631
+ {"description": "allowed 'onsubmit' attribute on <form>",
632
+ "input": "<form onsubmit>",
633
+ "fail-if": "unknown-attribute"},
634
+
635
+ {"description": "allowed 'name' attribute on <form>",
636
+ "input": "<form name>",
637
+ "fail-if": "unknown-attribute"},
638
+
639
+ {"description": "allowed 'onreset' attribute on <form>",
640
+ "input": "<form onreset>",
641
+ "fail-if": "unknown-attribute"},
642
+
643
+ {"description": "allowed 'accept' attribute on <form>",
644
+ "input": "<form accept>",
645
+ "fail-if": "unknown-attribute"},
646
+
647
+ {"description": "allowed 'replace' attribute on <form>",
648
+ "input": "<form replace>",
649
+ "fail-if": "unknown-attribute"},
650
+
651
+ {"description": "allowed 'accept-charset' attribute on <form>",
652
+ "input": "<form accept-charset>",
653
+ "fail-if": "unknown-attribute"},
654
+
655
+ {"description": "allowed 'action' attribute on <form>",
656
+ "input": "<form action>",
657
+ "fail-if": "unknown-attribute"},
658
+
659
+ {"description": "allowed 'data' attribute on <form>",
660
+ "input": "<form data>",
661
+ "fail-if": "unknown-attribute"},
662
+
663
+ {"description": "allowed 'method' attribute on <form>",
664
+ "input": "<form method>",
665
+ "fail-if": "unknown-attribute"},
666
+
667
+ {"description": "allowed 'enctype' attribute on <form>",
668
+ "input": "<form enctype>",
669
+ "fail-if": "unknown-attribute"},
670
+
671
+ {"description": "allowed 'rows' attribute on <textarea>",
672
+ "input": "<textarea rows>",
673
+ "fail-if": "unknown-attribute"},
674
+
675
+ {"description": "allowed 'name' attribute on <textarea>",
676
+ "input": "<textarea name>",
677
+ "fail-if": "unknown-attribute"},
678
+
679
+ {"description": "allowed 'form' attribute on <textarea>",
680
+ "input": "<textarea form>",
681
+ "fail-if": "unknown-attribute"},
682
+
683
+ {"description": "allowed 'required' attribute on <textarea>",
684
+ "input": "<textarea required>",
685
+ "fail-if": "unknown-attribute"},
686
+
687
+ {"description": "allowed 'cols' attribute on <textarea>",
688
+ "input": "<textarea cols>",
689
+ "fail-if": "unknown-attribute"},
690
+
691
+ {"description": "allowed 'accept' attribute on <textarea>",
692
+ "input": "<textarea accept>",
693
+ "fail-if": "unknown-attribute"},
694
+
695
+ {"description": "allowed 'disabled' attribute on <textarea>",
696
+ "input": "<textarea disabled>",
697
+ "fail-if": "unknown-attribute"},
698
+
699
+ {"description": "allowed 'readonly' attribute on <textarea>",
700
+ "input": "<textarea readonly>",
701
+ "fail-if": "unknown-attribute"},
702
+
703
+ {"description": "allowed 'wrap' attribute on <textarea>",
704
+ "input": "<textarea wrap>",
705
+ "fail-if": "unknown-attribute"},
706
+
707
+ {"description": "allowed 'autofocus' attribute on <textarea>",
708
+ "input": "<textarea autofocus>",
709
+ "fail-if": "unknown-attribute"},
710
+
711
+ {"description": "allowed 'maxlength' attribute on <textarea>",
712
+ "input": "<textarea maxlength>",
713
+ "fail-if": "unknown-attribute"},
714
+
715
+ {"description": "allowed 'a' attribute on <datalist>",
716
+ "input": "<datalist a>",
717
+ "fail-unless": "unknown-attribute"},
718
+
719
+ {"description": "allowed 'd' attribute on <datalist>",
720
+ "input": "<datalist d>",
721
+ "fail-unless": "unknown-attribute"},
722
+
723
+ {"description": "allowed 't' attribute on <datalist>",
724
+ "input": "<datalist t>",
725
+ "fail-unless": "unknown-attribute"},
726
+
727
+ {"description": "allowed 'action' attribute on <button>",
728
+ "input": "<button action>",
729
+ "fail-if": "unknown-attribute"},
730
+
731
+ {"description": "allowed 'enctype' attribute on <button>",
732
+ "input": "<button enctype>",
733
+ "fail-if": "unknown-attribute"},
734
+
735
+ {"description": "allowed 'method' attribute on <button>",
736
+ "input": "<button method>",
737
+ "fail-if": "unknown-attribute"},
738
+
739
+ {"description": "allowed 'replace' attribute on <button>",
740
+ "input": "<button replace>",
741
+ "fail-if": "unknown-attribute"},
742
+
743
+ {"description": "allowed 'template' attribute on <button>",
744
+ "input": "<button template>",
745
+ "fail-if": "unknown-attribute"},
746
+
747
+ {"description": "allowed 'name' attribute on <button>",
748
+ "input": "<button name>",
749
+ "fail-if": "unknown-attribute"},
750
+
751
+ {"description": "allowed 'form' attribute on <button>",
752
+ "input": "<button form>",
753
+ "fail-if": "unknown-attribute"},
754
+
755
+ {"description": "allowed 'value' attribute on <button>",
756
+ "input": "<button value>",
757
+ "fail-if": "unknown-attribute"},
758
+
759
+ {"description": "allowed 'disabled' attribute on <button>",
760
+ "input": "<button disabled>",
761
+ "fail-if": "unknown-attribute"},
762
+
763
+ {"description": "allowed 'autofocus' attribute on <button>",
764
+ "input": "<button autofocus>",
765
+ "fail-if": "unknown-attribute"},
766
+
767
+ {"description": "allowed 'type' attribute on <button>",
768
+ "input": "<button type>",
769
+ "fail-if": "unknown-attribute"},
770
+
771
+ {"description": "allowed 'accesskey' attribute on <label>",
772
+ "input": "<label accesskey>",
773
+ "fail-if": "unknown-attribute"},
774
+
775
+ {"description": "allowed 'form' attribute on <label>",
776
+ "input": "<label form>",
777
+ "fail-if": "unknown-attribute"},
778
+
779
+ {"description": "allowed 'for' attribute on <label>",
780
+ "input": "<label for>",
781
+ "fail-if": "unknown-attribute"},
782
+
783
+ {"description": "allowed 'disabled' attribute on <optgroup>",
784
+ "input": "<optgroup disabled>",
785
+ "fail-if": "unknown-attribute"},
786
+
787
+ {"description": "allowed 'label' attribute on <optgroup>",
788
+ "input": "<optgroup label>",
789
+ "fail-if": "unknown-attribute"},
790
+
791
+ {"description": "allowed 'onforminput' attribute on <output>",
792
+ "input": "<output onforminput>",
793
+ "fail-if": "unknown-attribute"},
794
+
795
+ {"description": "allowed 'onformchange' attribute on <output>",
796
+ "input": "<output onformchange>",
797
+ "fail-if": "unknown-attribute"},
798
+
799
+ {"description": "allowed 'name' attribute on <output>",
800
+ "input": "<output name>",
801
+ "fail-if": "unknown-attribute"},
802
+
803
+ {"description": "allowed 'form' attribute on <output>",
804
+ "input": "<output form>",
805
+ "fail-if": "unknown-attribute"},
806
+
807
+ {"description": "allowed 'for' attribute on <output>",
808
+ "input": "<output for>",
809
+ "fail-if": "unknown-attribute"},
810
+
811
+ {"description": "allowed 'multiple' attribute on <select>",
812
+ "input": "<select multiple>",
813
+ "fail-if": "unknown-attribute"},
814
+
815
+ {"description": "allowed 'name' attribute on <select>",
816
+ "input": "<select name>",
817
+ "fail-if": "unknown-attribute"},
818
+
819
+ {"description": "allowed 'form' attribute on <select>",
820
+ "input": "<select form>",
821
+ "fail-if": "unknown-attribute"},
822
+
823
+ {"description": "allowed 'accesskey' attribute on <select>",
824
+ "input": "<select accesskey>",
825
+ "fail-if": "unknown-attribute"},
826
+
827
+ {"description": "allowed 'disabled' attribute on <select>",
828
+ "input": "<select disabled>",
829
+ "fail-if": "unknown-attribute"},
830
+
831
+ {"description": "allowed 'autofocus' attribute on <select>",
832
+ "input": "<select autofocus>",
833
+ "fail-if": "unknown-attribute"},
834
+
835
+ {"description": "allowed 'data' attribute on <select>",
836
+ "input": "<select data>",
837
+ "fail-if": "unknown-attribute"},
838
+
839
+ {"description": "allowed 'size' attribute on <select>",
840
+ "input": "<select size>",
841
+ "fail-if": "unknown-attribute"},
842
+
843
+ {"description": "allowed 'selected' attribute on <option>",
844
+ "input": "<option selected>",
845
+ "fail-if": "unknown-attribute"},
846
+
847
+ {"description": "allowed 'value' attribute on <option>",
848
+ "input": "<option value>",
849
+ "fail-if": "unknown-attribute"},
850
+
851
+ {"description": "allowed 'label' attribute on <option>",
852
+ "input": "<option label>",
853
+ "fail-if": "unknown-attribute"},
854
+
855
+ {"description": "allowed 'disabled' attribute on <option>",
856
+ "input": "<option disabled>",
857
+ "fail-if": "unknown-attribute"},
858
+
859
+ {"description": "unknown 'foo' attribute on <command>",
860
+ "input": "<command foo>",
861
+ "fail-unless": "unknown-attribute"},
862
+
863
+ {"description": "unknown 'foo' attribute on <meter>",
864
+ "input": "<meter foo>",
865
+ "fail-unless": "unknown-attribute"},
866
+
867
+ {"description": "unknown 'foo' attribute on <ins>",
868
+ "input": "<ins foo>",
869
+ "fail-unless": "unknown-attribute"},
870
+
871
+ {"description": "unknown 'foo' attribute on <datagrid>",
872
+ "input": "<datagrid foo>",
873
+ "fail-unless": "unknown-attribute"},
874
+
875
+ {"description": "unknown 'foo' attribute on <meta>",
876
+ "input": "<meta foo>",
877
+ "fail-unless": "unknown-attribute"},
878
+
879
+ {"description": "unknown 'foo' attribute on <video>",
880
+ "input": "<video foo>",
881
+ "fail-unless": "unknown-attribute"},
882
+
883
+ {"description": "unknown 'foo' attribute on <font>",
884
+ "input": "<font foo>",
885
+ "fail-unless": "unknown-attribute"},
886
+
887
+ {"description": "unknown 'foo' attribute on <style>",
888
+ "input": "<style foo>",
889
+ "fail-unless": "unknown-attribute"},
890
+
891
+ {"description": "unknown 'foo' attribute on <img>",
892
+ "input": "<img foo>",
893
+ "fail-unless": "unknown-attribute"},
894
+
895
+ {"description": "unknown 'foo' attribute on <area>",
896
+ "input": "<area foo>",
897
+ "fail-unless": "unknown-attribute"},
898
+
899
+ {"description": "unknown 'foo' attribute on <menu>",
900
+ "input": "<menu foo>",
901
+ "fail-unless": "unknown-attribute"},
902
+
903
+ {"description": "unknown 'foo' attribute on <param>",
904
+ "input": "<param foo>",
905
+ "fail-unless": "unknown-attribute"},
906
+
907
+ {"description": "unknown 'foo' attribute on <li>",
908
+ "input": "<li foo>",
909
+ "fail-unless": "unknown-attribute"},
910
+
911
+ {"description": "unknown 'foo' attribute on <source>",
912
+ "input": "<source foo>",
913
+ "fail-unless": "unknown-attribute"},
914
+
915
+ {"description": "unknown 'foo' attribute on <html>",
916
+ "input": "<html foo>",
917
+ "fail-unless": "unknown-attribute"},
918
+
919
+ {"description": "unknown 'foo' attribute on <details>",
920
+ "input": "<details foo>",
921
+ "fail-unless": "unknown-attribute"},
922
+
923
+ {"description": "unknown 'foo' attribute on <th>",
924
+ "input": "<th foo>",
925
+ "fail-unless": "unknown-attribute"},
926
+
927
+ {"description": "unknown 'foo' attribute on <progress>",
928
+ "input": "<progress foo>",
929
+ "fail-unless": "unknown-attribute"},
930
+
931
+ {"description": "unknown 'foo' attribute on <td>",
932
+ "input": "<td foo>",
933
+ "fail-unless": "unknown-attribute"},
934
+
935
+ {"description": "unknown 'foo' attribute on <blockquote>",
936
+ "input": "<blockquote foo>",
937
+ "fail-unless": "unknown-attribute"},
938
+
939
+ {"description": "unknown 'foo' attribute on <object>",
940
+ "input": "<object foo>",
941
+ "fail-unless": "unknown-attribute"},
942
+
943
+ {"description": "unknown 'foo' attribute on <canvas>",
944
+ "input": "<canvas foo>",
945
+ "fail-unless": "unknown-attribute"},
946
+
947
+ {"description": "unknown 'foo' attribute on <base>",
948
+ "input": "<base foo>",
949
+ "fail-unless": "unknown-attribute"},
950
+
951
+ {"description": "unknown 'foo' attribute on <link>",
952
+ "input": "<link foo>",
953
+ "fail-unless": "unknown-attribute"},
954
+
955
+ {"description": "unknown 'foo' attribute on <a>",
956
+ "input": "<a foo>",
957
+ "fail-unless": "unknown-attribute"},
958
+
959
+ {"description": "unknown 'foo' attribute on <event-source>",
960
+ "input": "<event-source foo>",
961
+ "fail-unless": "unknown-attribute"},
962
+
963
+ {"description": "unknown 'foo' attribute on <ol>",
964
+ "input": "<ol foo>",
965
+ "fail-unless": "unknown-attribute"},
966
+
967
+ {"description": "unknown 'foo' attribute on <colgroup>",
968
+ "input": "<colgroup foo>",
969
+ "fail-unless": "unknown-attribute"},
970
+
971
+ {"description": "unknown 'foo' attribute on <script>",
972
+ "input": "<script foo>",
973
+ "fail-unless": "unknown-attribute"},
974
+
975
+ {"description": "unknown 'foo' attribute on <q>",
976
+ "input": "<q foo>",
977
+ "fail-unless": "unknown-attribute"},
978
+
979
+ {"description": "unknown 'foo' attribute on <del>",
980
+ "input": "<del foo>",
981
+ "fail-unless": "unknown-attribute"},
982
+
983
+ {"description": "unknown 'foo' attribute on <iframe>",
984
+ "input": "<iframe foo>",
985
+ "fail-unless": "unknown-attribute"},
986
+
987
+ {"description": "unknown 'foo' attribute on <time>",
988
+ "input": "<time foo>",
989
+ "fail-unless": "unknown-attribute"},
990
+
991
+ {"description": "unknown 'foo' attribute on <audio>",
992
+ "input": "<audio foo>",
993
+ "fail-unless": "unknown-attribute"},
994
+
995
+ {"description": "unknown 'foo' attribute on <col>",
996
+ "input": "<col foo>",
997
+ "fail-unless": "unknown-attribute"},
998
+
999
+ {"description": "missing required 'href' attribute on <link>",
1000
+ "input": "<link rel>",
1001
+ "fail-unless": "missing-required-attribute"},
1002
+
1003
+ {"description": "missing required 'rel' attribute on <link>",
1004
+ "input": "<link href>",
1005
+ "fail-unless": "missing-required-attribute"},
1006
+
1007
+ {"description": "missing required 'dir' attribute on <bdo>",
1008
+ "input": "<bdo>",
1009
+ "fail-unless": "missing-required-attribute"},
1010
+
1011
+ {"description": "missing required 'src' attribute on <img>",
1012
+ "input": "<img>",
1013
+ "fail-unless": "missing-required-attribute"},
1014
+
1015
+ {"description": "missing required 'src' attribute on <embed>",
1016
+ "input": "<embed>",
1017
+ "fail-unless": "missing-required-attribute"},
1018
+
1019
+ {"description": "missing required 'name' attribute on <param>",
1020
+ "input": "<param value>",
1021
+ "fail-unless": "missing-required-attribute"},
1022
+
1023
+ {"description": "missing required 'value' attribute on <param>",
1024
+ "input": "<param name>",
1025
+ "fail-unless": "missing-required-attribute"},
1026
+
1027
+ {"description": "missing required 'src' attribute on <source>",
1028
+ "input": "<source>",
1029
+ "fail-unless": "missing-required-attribute"},
1030
+
1031
+ {"description": "missing required 'id' attribute on <map>",
1032
+ "input": "<map>",
1033
+ "fail-unless": "missing-required-attribute"}
1034
+
1035
+ ]}