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>
|