OLD | NEW |
(Empty) | |
| 1 <!DOCTYPE html> |
| 2 <html> |
| 3 <head> |
| 4 <title>HTML Templates: When node's document changes its owner document should be
changed</title> |
| 5 <meta name="author" title="Sergey G. Grekhov" href="mailto:sgrekhov@unipro.ru"> |
| 6 <meta name="author" title="Aleksei Yu. Semenov" href="mailto:a.semenov@unipro.ru
"> |
| 7 <meta name="assert" content="When a template element's node document changes, th
e template element's content DocumentFragment must be adopted into the new node
document's template contents owner document"> |
| 8 <link rel="help" href="http://www.w3.org/TR/2013/WD-html-templates-20130214/#tem
plate-element"> |
| 9 <script src="../../../../../../../resources/testharness.js"></script> |
| 10 <script src="../../../../../../../resources/testharnessreport.js"></script> |
| 11 <script src='../testcommon.js'></script> |
| 12 <link rel="stylesheet" href="../../../../../../../resources/testharness.css"> |
| 13 </head> |
| 14 <body> |
| 15 <div id="log"></div> |
| 16 <script type="text/javascript"> |
| 17 |
| 18 |
| 19 test(function() { |
| 20 var doc1 = newHTMLDocument(); |
| 21 var template = doc1.createElement('template'); |
| 22 |
| 23 assert_equals(template.ownerDocument, doc1, 'Wrong template node owner docum
ent'); |
| 24 assert_not_equals(template.content.ownerDocument, doc1, |
| 25 'Wrong template content owner document'); |
| 26 |
| 27 var doc2 = newHTMLDocument(); |
| 28 var template2 = doc2.createElement('template'); |
| 29 doc2.body.appendChild(template); |
| 30 |
| 31 assert_equals(template.ownerDocument, template2.ownerDocument, |
| 32 'Template node owner document should be changed'); |
| 33 assert_equals(template.content.ownerDocument, template2.content.ownerDocumen
t, |
| 34 'Template content owner document should be changed'); |
| 35 |
| 36 }, 'Changing of template element\'s node document. ' + |
| 37 'Test that ownerDocument of an empty template and its content changes'); |
| 38 |
| 39 |
| 40 test(function() { |
| 41 var doc1 = newHTMLDocument(); |
| 42 doc1.body.innerHTML = '<template id="tmpl"><div>Div content</div> And some m
ore text</template>'; |
| 43 |
| 44 var template = doc1.querySelector('#tmpl'); |
| 45 |
| 46 assert_equals(template.ownerDocument, doc1, |
| 47 'Wrong template node owner document'); |
| 48 assert_not_equals(template.content.ownerDocument, doc1, |
| 49 'Wrong template content owner document'); |
| 50 |
| 51 var doc2 = newHTMLDocument(); |
| 52 var template2 = doc2.createElement('template'); |
| 53 doc2.body.appendChild(template); |
| 54 |
| 55 assert_equals(template.ownerDocument, template2.ownerDocument, |
| 56 'Template node owner document should be changed'); |
| 57 assert_equals(template.content.ownerDocument, template2.content.ownerDocumen
t, |
| 58 'Template content owner document should be changed'); |
| 59 |
| 60 assert_equals(template.content.querySelector('div').ownerDocument, |
| 61 template2.content.ownerDocument, |
| 62 'Template content descendants owner document should be changed'); |
| 63 |
| 64 }, 'Changing of template element\'s node document. ' + |
| 65 'Test that ownerDocument of a not empty template and its content changes'); |
| 66 |
| 67 |
| 68 test(function() { |
| 69 var doc1 = newHTMLDocument(); |
| 70 doc1.body.innerHTML = '' |
| 71 + '<template id="tmpl"><div>Div content</div> And some more text' |
| 72 + '<template id="tmpl2"><div>Template content</div></template>' |
| 73 + '</template>'; |
| 74 |
| 75 var template = doc1.querySelector('#tmpl'); |
| 76 |
| 77 assert_equals(template.ownerDocument, doc1, 'Wrong template node owner docum
ent'); |
| 78 assert_not_equals(template.content.ownerDocument, doc1, |
| 79 'Wrong template content owner document'); |
| 80 |
| 81 var nestedTemplate = template.content.querySelector('#tmpl2'); |
| 82 |
| 83 assert_equals(nestedTemplate.ownerDocument, template.content.ownerDocument, |
| 84 'Wrong nested template node owner document'); |
| 85 assert_equals(nestedTemplate.content.ownerDocument, template.content.ownerDo
cument, |
| 86 'Wrong nested template content owner document'); |
| 87 |
| 88 var doc2 = newHTMLDocument(); |
| 89 var template2 = doc2.createElement('template'); |
| 90 doc2.body.appendChild(template); |
| 91 |
| 92 assert_equals(template.ownerDocument, template2.ownerDocument, |
| 93 'Template node owner document should be changed'); |
| 94 assert_equals(template.content.ownerDocument, template2.content.ownerDocumen
t, |
| 95 'Template content owner document should be changed'); |
| 96 assert_equals(template.content.querySelector('div').ownerDocument, |
| 97 template2.content.ownerDocument, |
| 98 'Template content descendants owner document should be changed'); |
| 99 |
| 100 assert_equals(nestedTemplate.ownerDocument, |
| 101 template2.content.ownerDocument, |
| 102 'Nested template node owner document should be changed'); |
| 103 assert_equals(nestedTemplate.content.ownerDocument, |
| 104 template2.content.ownerDocument, |
| 105 'Nested template content owner document should be changed'); |
| 106 assert_equals(nestedTemplate.content.querySelector('div').ownerDocument, |
| 107 template2.content.ownerDocument, |
| 108 'Owner document of the nested template content descendants should be
changed'); |
| 109 |
| 110 }, 'Changing of template element\'s node document. ' + |
| 111 'Test that ownerDocument of nested template and its content changes'); |
| 112 |
| 113 |
| 114 testInIFrame('../resources/template-contents.html', function(context) { |
| 115 var doc1 = context.iframes[0].contentDocument; |
| 116 |
| 117 var template = doc1.body.querySelector('template'); |
| 118 |
| 119 var doc2 = newHTMLDocument(); |
| 120 var template2 = doc2.createElement('template'); |
| 121 doc2.body.appendChild(template); |
| 122 |
| 123 assert_equals(template.ownerDocument, template2.ownerDocument, |
| 124 'Template node owner document should be changed'); |
| 125 assert_equals(template.content.ownerDocument, |
| 126 template2.content.ownerDocument, |
| 127 'Template content owner document should be changed'); |
| 128 assert_equals(template.content.querySelector('div').ownerDocument, |
| 129 template2.content.ownerDocument, |
| 130 'Template content descendants owner document should be changed'); |
| 131 |
| 132 }, 'Changing of template element\'s node document. ' + |
| 133 'Test document loaded from a file'); |
| 134 |
| 135 |
| 136 testInIFrame('../resources/template-contents.html', function(context) { |
| 137 var doc1 = context.iframes[0].contentDocument; |
| 138 |
| 139 var doc2 = newHTMLDocument(); |
| 140 var template = doc2.createElement('template'); |
| 141 var div = doc2.createElement('div'); |
| 142 template.content.appendChild(div); |
| 143 |
| 144 doc1.body.appendChild(template); |
| 145 |
| 146 assert_not_equals(template.ownerDocument, doc2, |
| 147 'Template node owner document should be changed'); |
| 148 assert_not_equals(template.content.ownerDocument, doc2, |
| 149 'Template content owner document should be changed'); |
| 150 assert_not_equals(div.ownerDocument, doc2, |
| 151 'Template content descendants owner document should be changed'); |
| 152 |
| 153 assert_equals(template.ownerDocument, doc1, |
| 154 'Template node owner document should be changed'); |
| 155 // doc1 has browsing context so it cannot be template.content.ownerDocument |
| 156 assert_not_equals(template.content.ownerDocument, doc1, |
| 157 'Template content owner document should be a new document'); |
| 158 assert_equals(div.ownerDocument, template.content.ownerDocument, |
| 159 'Template content descendants owner document should be ' + |
| 160 'template content document owner'); |
| 161 |
| 162 }, 'Changing of template element\'s node document. ' + |
| 163 'Adobt template element into a document that has a browsing context'); |
| 164 |
| 165 |
| 166 testInIFrame('../resources/template-contents.html', function(context) { |
| 167 var doc1 = context.iframes[0].contentDocument; |
| 168 |
| 169 var template = doc1.querySelector('template'); |
| 170 var div = template.content.querySelector('div'); |
| 171 var templateContentOwner = template.content.ownerDocument; |
| 172 |
| 173 var doc2 = document; |
| 174 |
| 175 doc2.body.appendChild(template); |
| 176 |
| 177 |
| 178 assert_not_equals(template.ownerDocument, doc1, |
| 179 'Template node owner document should be changed'); |
| 180 assert_not_equals(template.content.ownerDocument, templateContentOwner, |
| 181 'Template content owner document should be changed'); |
| 182 assert_not_equals(div.ownerDocument, templateContentOwner, |
| 183 'Template content descendants owner document should be changed'); |
| 184 |
| 185 assert_equals(template.ownerDocument, doc2, |
| 186 'Template node owner document should be changed'); |
| 187 // doc2 has browsing context, so it cannot be template.content.ownerDocument |
| 188 assert_not_equals(template.content.ownerDocument, doc2, |
| 189 'Template content owner document should be a new document'); |
| 190 assert_equals(div.ownerDocument, template.content.ownerDocument, |
| 191 'Template content descendants owner document should be ' + |
| 192 'template content document owner'); |
| 193 |
| 194 }, 'Changing of template element\'s node document. ' + |
| 195 'Test the case when both old and new owner documents of template element ' + |
| 196 'have browsing context'); |
| 197 |
| 198 </script> |
| 199 </body> |
| 200 </html> |
OLD | NEW |