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
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
|
<!DOCTYPE html>
<html>
<head>
<title>HTML Templates: In body insertion mode: parser should ignore BODY token</title>
<meta name="author" title="Sergey G. Grekhov" href="mailto:sgrekhov@unipro.ru">
<meta name="author" title="Aleksei Yu. Semenov" href="mailto:a.semenov@unipro.ru">
<meta name="assert" content="http://www.w3.org/TR/2013/WD-html-templates-20130214/#in-body-addition">
<link rel="help" href="http://www.w3.org/TR/2013/WD-html-templates-20130214/#in-body-addition">
<script src="/resources/testharness.js"></script>
<script src="/resources/testharnessreport.js"></script>
<script src="/html/resources/common.js"></script>
</head>
<body>
<div id="log"></div>
<script type="text/javascript">
/*
* According to http://www.w3.org/TR/2013/WD-html-templates-20130214/#template-contents-insertion-mode
* when parser is in "template content" mode and meets <body> tag it should be switched to
* "in body" insertion mode.
* According to http://www.w3.org/TR/2013/WD-html-templates-20130214/#in-body-addition
* this token (BODY) should be ignored
*/
test(function() {
var doc = newHTMLDocument();
var template = doc.createElement('template');
template.innerHTML = '<body></body>';
doc.body.appendChild(template);
assert_equals(template.content.childNodes.length, 0,
'Template cannot contain BODY element');
}, 'Ignore BODY token. Test empty BODY element assigned to template innerHTML');
test(function() {
var doc = newHTMLDocument();
var template = doc.createElement('template');
template.innerHTML = '<body><div>Some content</div></body>';
doc.body.appendChild(template);
assert_equals(template.content.childNodes.length, 1,
'Wrong number of template content children');
assert_equals(template.content.firstChild.nodeName, 'DIV',
'Template should contain children of ignored BODY element');
}, 'Ignore BODY token. Test not empty BODY element assigned to template innerHTML');
test(function() {
var doc = newHTMLDocument();
var template = doc.createElement('template');
template.innerHTML = '<body><div <div id="div1">Some content</div></body><div id="div2">Some valid content</div>';
doc.body.appendChild(template);
assert_equals(template.content.childNodes.length, 2,
'Wrong number of template content children');
assert_not_equals(template.content.querySelector('#div1'), null,
'Template should contain children of the ignored BODY element');
assert_not_equals(template.content.querySelector('#div2'), null,
'Template should contain valid element');
}, 'Ignore BODY token. '
+ 'Test BODY element and some valid element after BODY tag assigned to template innerHTML');
test(function() {
var doc = newHTMLDocument();
var template = doc.createElement('template');
template.innerHTML = '<div id="div1">Some valid content</div><body><div id="div2">Some content</div></body>';
doc.body.appendChild(template);
assert_equals(template.content.childNodes.length, 2,
'Template cannot contain BODY element');
assert_not_equals(template.content.querySelector('#div1'), null,
'Template should contain valid element');
assert_not_equals(template.content.querySelector('#div2'), null,
'Template should contain children of the ignored BODY element');
}, 'Ignore BODY token. '
+ 'Test BODY element and some valid element before BODY tag assigned to template innerHTML');
test(function() {
var doc = newHTMLDocument();
var template = doc.createElement('template');
template.innerHTML = '<template id="t2"><body><span>Body!<span></body></template>';
doc.body.appendChild(template);
assert_equals(template.content.childNodes.length, 1,
'Template should contain nested template');
assert_not_equals(template.content.querySelector('#t2'), null,
'Template should contain nested element');
var nestedTemplate = template.content.querySelector('#t2');
assert_equals(nestedTemplate.content.childNodes.length, 1,
'Template cannot contain BODY element');
assert_equals(nestedTemplate.content.firstChild.nodeName, 'SPAN',
'Template cannot contain BODY element');
}, 'Ignore BODY token. '
+ 'Test template with not empty BODY element inside assigned to another '
+ 'template\'s innerHTML');
testInIFrame('/html/semantics/scripting-1/the-template-element/resources/template-contents-body.html', function(context) {
var doc = context.iframes[0].contentDocument;
var template = doc.body.querySelector('template');
assert_equals(template.content.childNodes.length, 0,
'Template cannot contain BODY element');
}, 'Ignore BODY token. '
+ 'Test loading a HTML file with BODY tag inside template');
</script>
</body>
</html>
|