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 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192
|
<!DOCTYPE html>
<html>
<head>
<title>HTML Templates: When node's document changes its owner document should be changed</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="When a template element's node document changes, the template element's content DocumentFragment must be adopted into the new node document's template contents owner document">
<link rel="help" href="http://www.w3.org/TR/2013/WD-html-templates-20130214/#template-element">
<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">
test(function() {
var doc1 = newHTMLDocument();
var template = doc1.createElement('template');
assert_equals(template.ownerDocument, doc1, 'Wrong template node owner document');
assert_not_equals(template.content.ownerDocument, doc1,
'Wrong template content owner document');
var doc2 = newHTMLDocument();
var template2 = doc2.createElement('template');
doc2.body.appendChild(template);
assert_equals(template.ownerDocument, template2.ownerDocument,
'Template node owner document should be changed');
assert_equals(template.content.ownerDocument, template2.content.ownerDocument,
'Template content owner document should be changed');
}, 'Changing of template element\'s node document. ' +
'Test that ownerDocument of an empty template and its content changes');
test(function() {
var doc1 = newHTMLDocument();
doc1.body.innerHTML = '<template id="tmpl"><div>Div content</div> And some more text</template>';
var template = doc1.querySelector('#tmpl');
assert_equals(template.ownerDocument, doc1,
'Wrong template node owner document');
assert_not_equals(template.content.ownerDocument, doc1,
'Wrong template content owner document');
var doc2 = newHTMLDocument();
var template2 = doc2.createElement('template');
doc2.body.appendChild(template);
assert_equals(template.ownerDocument, template2.ownerDocument,
'Template node owner document should be changed');
assert_equals(template.content.ownerDocument, template2.content.ownerDocument,
'Template content owner document should be changed');
assert_equals(template.content.querySelector('div').ownerDocument,
template2.content.ownerDocument,
'Template content descendants owner document should be changed');
}, 'Changing of template element\'s node document. ' +
'Test that ownerDocument of a not empty template and its content changes');
test(function() {
var doc1 = newHTMLDocument();
doc1.body.innerHTML = ''
+ '<template id="tmpl"><div>Div content</div> And some more text'
+ '<template id="tmpl2"><div>Template content</div></template>'
+ '</template>';
var template = doc1.querySelector('#tmpl');
assert_equals(template.ownerDocument, doc1, 'Wrong template node owner document');
assert_not_equals(template.content.ownerDocument, doc1,
'Wrong template content owner document');
var nestedTemplate = template.content.querySelector('#tmpl2');
assert_equals(nestedTemplate.ownerDocument, template.content.ownerDocument,
'Wrong nested template node owner document');
assert_equals(nestedTemplate.content.ownerDocument, template.content.ownerDocument,
'Wrong nested template content owner document');
var doc2 = newHTMLDocument();
var template2 = doc2.createElement('template');
doc2.body.appendChild(template);
assert_equals(template.ownerDocument, template2.ownerDocument,
'Template node owner document should be changed');
assert_equals(template.content.ownerDocument, template2.content.ownerDocument,
'Template content owner document should be changed');
assert_equals(template.content.querySelector('div').ownerDocument,
template2.content.ownerDocument,
'Template content descendants owner document should be changed');
assert_equals(nestedTemplate.ownerDocument,
template2.content.ownerDocument,
'Nested template node owner document should be changed');
assert_equals(nestedTemplate.content.ownerDocument,
template2.content.ownerDocument,
'Nested template content owner document should be changed');
assert_equals(nestedTemplate.content.querySelector('div').ownerDocument,
template2.content.ownerDocument,
'Owner document of the nested template content descendants should be changed');
}, 'Changing of template element\'s node document. ' +
'Test that ownerDocument of nested template and its content changes');
testInIFrame('../resources/template-contents.html', function(context) {
var doc1 = context.iframes[0].contentDocument;
var template = doc1.body.querySelector('template');
var doc2 = newHTMLDocument();
var template2 = doc2.createElement('template');
doc2.body.appendChild(template);
assert_equals(template.ownerDocument, template2.ownerDocument,
'Template node owner document should be changed');
assert_equals(template.content.ownerDocument,
template2.content.ownerDocument,
'Template content owner document should be changed');
assert_equals(template.content.querySelector('div').ownerDocument,
template2.content.ownerDocument,
'Template content descendants owner document should be changed');
}, 'Changing of template element\'s node document. ' +
'Test document loaded from a file');
testInIFrame('../resources/template-contents.html', function(context) {
var doc1 = context.iframes[0].contentDocument;
var doc2 = newHTMLDocument();
var template = doc2.createElement('template');
var div = doc2.createElement('div');
template.content.appendChild(div);
doc1.body.appendChild(template);
assert_not_equals(template.ownerDocument, doc2,
'Template node owner document should be changed');
assert_not_equals(template.content.ownerDocument, doc2,
'Template content owner document should be changed');
assert_not_equals(div.ownerDocument, doc2,
'Template content descendants owner document should be changed');
assert_equals(template.ownerDocument, doc1,
'Template node owner document should be changed');
// doc1 has browsing context so it cannot be template.content.ownerDocument
assert_not_equals(template.content.ownerDocument, doc1,
'Template content owner document should be a new document');
assert_equals(div.ownerDocument, template.content.ownerDocument,
'Template content descendants owner document should be ' +
'template content document owner');
}, 'Changing of template element\'s node document. ' +
'Adobt template element into a document that has a browsing context');
testInIFrame('../resources/template-contents.html', function(context) {
var doc1 = context.iframes[0].contentDocument;
var template = doc1.querySelector('template');
var div = template.content.querySelector('div');
var templateContentOwner = template.content.ownerDocument;
var doc2 = document;
doc2.body.appendChild(template);
assert_not_equals(template.ownerDocument, doc1,
'Template node owner document should be changed');
assert_not_equals(template.content.ownerDocument, templateContentOwner,
'Template content owner document should be changed');
assert_not_equals(div.ownerDocument, templateContentOwner,
'Template content descendants owner document should be changed');
assert_equals(template.ownerDocument, doc2,
'Template node owner document should be changed');
// doc2 has browsing context, so it cannot be template.content.ownerDocument
assert_not_equals(template.content.ownerDocument, doc2,
'Template content owner document should be a new document');
assert_equals(div.ownerDocument, template.content.ownerDocument,
'Template content descendants owner document should be ' +
'template content document owner');
}, 'Changing of template element\'s node document. ' +
'Test the case when both old and new owner documents of template element ' +
'have browsing context');
</script>
</body>
</html>
|