1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
|
<!DOCTYPE html>
<link rel=author href="mailto:jarhar@chromium.org">
<link rel=help href="https://github.com/whatwg/html/issues/9799">
<script src="/resources/testharness.js"></script>
<script src="/resources/testharnessreport.js"></script>
<body>
<select id=s1>
<div>div 1</div>
<button>button</button>
<div>div 2</div>
<datalist>
<option>option</option>
</datalist>
<div>div 3</div>
</select>
<select id=s2>
<button>button
</select>
<select id=s3>
<datalist>datalist
</select>
<select id=s4>
<button>
<select></select>
</button>
</select>
<select id=s5>
<button>
<div>
<select>
</select>
<select id=s6>
<button>
<button></button>
</button>
<datalist>
<datalist></datalist>
</datalist>
</select>
<div id=afterlast>
keep this div after the last test case
</div>
<script>
test(() => {
// The document.body check here and in the other tests is to make sure that a
// previous test case didn't leave the HTML parser open on another element.
assert_equals(document.getElementById('s1').parentNode, document.body);
assert_equals(document.getElementById('s1').innerHTML, `
div 1
<button>button</button>
div 2
<datalist>
<option>option</option>
</datalist>
div 3
`);
}, '<button>s and <datalist>s should be allowed in <select>.');
test(() => {
assert_equals(document.getElementById('s2').parentNode, document.body);
assert_equals(document.getElementById('s2').innerHTML, `
<button>button
</button>`);
}, '</select> should close <button>.');
test(() => {
assert_equals(document.getElementById('s3').parentNode, document.body);
assert_equals(document.getElementById('s3').innerHTML, `
<datalist>datalist
</datalist>`);
}, '</select> should close <datalist>.');
test(() => {
assert_equals(document.getElementById('s4').parentNode, document.body);
assert_equals(document.getElementById('s4').innerHTML, `
<button>
</button>`);
}, '<select> in <button> in <select> should remove inner <select>.');
test(() => {
assert_equals(document.getElementById('s5').parentNode, document.body);
assert_equals(document.getElementById('s5').innerHTML, `
<button>
<div>
</div></button>`);
}, '<select> in <select><button><div> should remove inner <select>.');
test(() => {
assert_equals(document.getElementById('s6').parentNode, document.body);
assert_equals(document.getElementById('s6').innerHTML, `
<button>
</button>
<datalist>
</datalist>
`);
}, 'Nested <button>s or <datalist>s in <select> should be dropped.');
test(() => {
assert_equals(document.getElementById('afterlast').parentNode, document.body);
}, 'The last test should not leave any tags open after parsing.');
</script>
|