template-owner-document.html (7722B)
1 <!DOCTYPE html> 2 <html> 3 <head> 4 <title>HTML Templates: ownerDocument property of the element in template</title> 5 <meta name="timeout" content="long"> 6 <meta name="author" title="Sergey G. Grekhov" href="mailto:sgrekhov@unipro.ru"> 7 <meta name="author" title="Aleksei Yu. Semenov" href="mailto:a.semenov@unipro.ru"> 8 <meta name="assert" content="ownerDocument property of the element appended to template must be set to the template contents owner of the ownerDocument of the template element"> 9 <link rel="help" href="http://www.w3.org/TR/2013/WD-html-templates-20130214/#creating-an-element-for-a-token"> 10 <script src="/resources/testharness.js"></script> 11 <script src="/resources/testharnessreport.js"></script> 12 <script src="/html/resources/common.js"></script> 13 </head> 14 <body> 15 <div id="log"></div> 16 <script type="text/javascript"> 17 18 19 test(function () { 20 var doc = newHTMLDocument(); 21 doc.body.innerHTML = '<div><template id="tmpl1"><div id="div">DIV</div></template></div>'; 22 23 var template = doc.querySelector('#tmpl1'); 24 25 var div = template.content.querySelector('#div'); 26 27 assert_equals(div.ownerDocument, template.content.ownerDocument, 28 'Wrong ownerDocument of the element in template'); 29 30 }, 'Test ownerDocument property of the element in a template. ' 31 + 'Current DOCUMENT has no browsing context. Test template element inside the div'); 32 33 34 35 test(function () { 36 var doc = newHTMLDocument(); 37 doc.body.innerHTML = '<template id="tmpl1"><div id="div">DIV</div></template>'; 38 39 var template = doc.querySelector('#tmpl1'); 40 41 var div = template.content.querySelector('#div'); 42 43 assert_equals(div.ownerDocument, template.content.ownerDocument, 44 'Wrong ownerDocument of the element in template'); 45 46 }, 'Test ownerDocument property of the element in a template. ' 47 + 'Current DOCUMENT has no browsing context. Test template element ' 48 + 'in the root of the body'); 49 50 51 52 test(function () { 53 var doc = newHTMLDocument(); 54 doc.head.innerHTML = '<template id="tmpl1"><div id="div">DIV</div></template>'; 55 56 var template = doc.querySelector('#tmpl1'); 57 58 var div = template.content.querySelector('#div'); 59 60 assert_equals(div.ownerDocument, template.content.ownerDocument, 61 'Wrong ownerDocument of the element in template'); 62 63 }, 'Test ownerDocument property of the element in a template. ' 64 + 'Current DOCUMENT has no browsing context. Test template element ' 65 + 'in the root of the head'); 66 67 68 69 test(function () { 70 var doc = newHTMLDocument(); 71 doc.body.innerHTML = '<template id="tmpl1">' 72 + '<template id="tmpl2"><div id="div">DIV</div></template></template>'; 73 74 var template = doc.querySelector('#tmpl1'); 75 76 var nestedTemplate = template.content.querySelector('#tmpl2'); 77 78 assert_equals(nestedTemplate.ownerDocument, template.content.ownerDocument, 79 'Wrong nested template owner document'); 80 81 var div = nestedTemplate.content.querySelector('#div'); 82 83 assert_equals(div.ownerDocument, nestedTemplate.content.ownerDocument, 84 'Wrong div ownerDocument'); 85 86 }, 'Test ownerDocument property of the element in a nested template'); 87 88 89 90 testInIFrame('/html/semantics/scripting-1/the-template-element/resources/template-contents.html', function(context) { 91 var doc = context.iframes[0].contentDocument; 92 93 var template = doc.querySelector('template'); 94 95 var div = template.content.querySelector('div'); 96 97 assert_equals(div.ownerDocument, template.content.ownerDocument, 98 'Wrong ownerDocument of the element in template'); 99 100 }, 'Test ownerDocument property of the element in a template. ' 101 + 'Load HTML document from a file, current DOCUMENT has browsing context'); 102 103 104 105 testInIFrame('/html/semantics/scripting-1/the-template-element/resources/template-contents-nested.html', function(context) { 106 var doc = context.iframes[0].contentDocument; 107 108 var template = doc.querySelector('template'); 109 110 var nestedTemplate = template.content.querySelector('template'); 111 112 assert_equals(nestedTemplate.ownerDocument, template.content.ownerDocument, 113 'Wrong nested template owner document'); 114 115 var div = nestedTemplate.content.querySelector('div'); 116 117 assert_equals(div.ownerDocument, nestedTemplate.content.ownerDocument, 118 'Wrong div ownerDocument'); 119 120 }, 'Test ownerDocument property of the element in a nested template. ' 121 + 'Load HTML document from a file, current DOCUMENT has browsing context'); 122 123 124 125 testInIFrame('/html/semantics/scripting-1/the-template-element/resources/two-templates.html', function(context) { 126 var doc = context.iframes[0].contentDocument; 127 128 var template1 = doc.querySelector('#template1'); 129 var div1 = template1.content.querySelector('div'); 130 var template2 = doc.querySelector('#template2'); 131 var div2 = template2.content.querySelector('div'); 132 133 assert_equals(div1.ownerDocument, template1.content.ownerDocument, 134 'Wrong ownerDocument of the element in template'); 135 assert_equals(div2.ownerDocument, template2.content.ownerDocument, 136 'Wrong ownerDocument of the element in template'); 137 assert_equals(div1.ownerDocument, div2.ownerDocument, 138 'Different elements in the same document should share the same template contents owner'); 139 140 }, 'Test ownerDocument property of two elements in a template. ' 141 + 'Load HTML document from a file, current DOCUMENT has browsing context'); 142 143 144 var parameters = []; 145 146 HTML5_ELEMENTS.forEach(function(value) { 147 if (value !== 'body' && value !== 'html' && value !== 'head' && value !== 'frameset') { 148 149 var doc = newHTMLDocument(); 150 151 if (isVoidElement(value)) { 152 doc.body.innerHTML = '<template><' + value + '/></template>'; 153 } else { 154 doc.body.innerHTML = '<template><' + value + '></' + value + '></template>'; 155 } 156 157 var template = doc.querySelector('template'); 158 var element = template.content.querySelector(value); 159 160 doc.body.appendChild(template); 161 162 parameters.push([ 163 'Test ownerDocument for the element ' + value + ' in the template', 164 element, 165 template 166 ]); 167 } 168 }); 169 170 function compare_owners(element, template) { 171 assert_equals(element.ownerDocument, template.content.ownerDocument) 172 } 173 174 // Test ownerDocument property of all HTML5 elements in a template. 175 // Current DOCUMENT has no browsing context. 176 generate_tests(compare_owners, parameters); 177 178 var context = newContext(); 179 parameters = []; 180 181 try { 182 183 HTML5_ELEMENTS.forEach(function(value) { 184 185 if (value !== 'body' && value !== 'html' && value !== 'head' && value !== 'frameset') { 186 187 var doc = newRenderedHTMLDocument(context); 188 189 if (isVoidElement(value)) { 190 doc.body.innerHTML = '<template><' + value + '/></template>'; 191 } else { 192 doc.body.innerHTML = '<template><' + value + '></' + value + '></template>'; 193 } 194 195 var template = doc.querySelector('template'); 196 var element = template.content.querySelector(value); 197 198 doc.body.appendChild(template); 199 200 parameters.push([ 201 'Test ownerDocument for the element ' + value + ' in the template. ' 202 + 'Document has browsing context', 203 element, 204 template 205 ]); 206 } 207 }); 208 generate_tests(compare_owners, parameters, 209 'Test ownerDocument property of all HTML5 elements in a template. ' 210 + 'Current DOCUMENT has browsing context.'); 211 212 } finally { 213 try { 214 cleanContext(context); 215 } catch (e) { 216 //do nothing 217 } 218 } 219 220 </script> 221 </body> 222 </html>