| <!DOCTYPE html> |
| <meta name="author" title="Takayoshi Kochi" href="mailto:kochi@chromium.org"> |
| <script src="/resources/testharness.js"></script> |
| <script src="/resources/testharnessreport.js"></script> |
| <div id=log></div> |
| <div id="parent"> |
| <template id="tmpl"><span>Happy Templating!</span></template> |
| </div> |
| <script> |
| test(() => { |
| var parent = document.getElementById('parent'); |
| var tmpl = document.getElementById('tmpl'); |
| |
| assert_equals(tmpl.innerHTML, '<span>Happy Templating!</span>'); |
| var span = tmpl.content.querySelector('span'); |
| |
| // Hierarchy checks at various combinations. |
| assert_throws_dom('HierarchyRequestError', () => { |
| tmpl.content.appendChild(parent); |
| }, 'Template content should throw if any of ancestor is being appended.'); |
| assert_throws_dom('HierarchyRequestError', () => { |
| tmpl.content.appendChild(tmpl); |
| }, 'Template content should throw if its host is being appended.'); |
| assert_throws_dom('HierarchyRequestError', () => { |
| span.appendChild(parent); |
| }, 'Template content child should throw if any of ancestor is being appended.'); |
| assert_throws_dom('HierarchyRequestError', () => { |
| span.appendChild(tmpl); |
| }, 'Template content child should throw template\'s host is being appended.'); |
| }, "Template content should throw when its ancestor is being appended."); |
| |
| test(() => { |
| var parent = document.getElementById('parent'); |
| var tmpl = document.getElementById('tmpl'); |
| |
| assert_equals(tmpl.innerHTML, '<span>Happy Templating!</span>'); |
| var span = tmpl.content.querySelector('span'); |
| |
| var tmpl_doc = tmpl.content.ownerDocument; |
| assert_equals(tmpl.ownerDocument, document); |
| assert_not_equals(tmpl_doc, document); |
| |
| var new_doc = document.implementation.createHTMLDocument(); |
| assert_not_equals(new_doc, document); |
| assert_not_equals(new_doc, tmpl_doc); |
| |
| // Try moving tmpl.content to new_doc and check the results. |
| const tmplContentNodeDocument = tmpl.content.ownerDocument; |
| const tmplContentAdoptResult = new_doc.adoptNode(tmpl.content); |
| assert_equals(tmpl.content, tmplContentAdoptResult); |
| assert_equals(tmpl.ownerDocument, document); |
| assert_equals(tmpl.content.ownerDocument, tmplContentNodeDocument); |
| |
| // Hierarchy checks at various combinations. |
| assert_throws_dom('HierarchyRequestError', () => { |
| tmpl.content.appendChild(parent); |
| }, 'Template content should throw if any of ancestor is being appended.'); |
| assert_throws_dom('HierarchyRequestError', () => { |
| tmpl.content.appendChild(tmpl); |
| }, 'Template content should throw if its host is being appended.'); |
| assert_throws_dom('HierarchyRequestError', () => { |
| span.appendChild(parent); |
| }, 'Template content child should throw if any of ancestor is being appended.'); |
| assert_throws_dom('HierarchyRequestError', () => { |
| span.appendChild(tmpl); |
| }, 'Template content child should throw template\'s host is being appended.'); |
| |
| // Sanity check: template.content before and after move. |
| var tmpl_content_reference = tmpl.content; |
| assert_equals(tmpl.content.firstChild, span, |
| '<span> should be kept until it is removed, even after ' + |
| 'adopted to another document.'); |
| new_doc.body.appendChild(tmpl.content); |
| assert_equals(tmpl.content.firstChild, null, |
| '<span> should be removed from template content.'); |
| assert_equals(tmpl_content_reference, tmpl.content, |
| 'template.content should be identical before and after ' + |
| 'moving its children.'); |
| }, 'Template content should throw exception when its ancestor in ' + |
| 'a different document but connected via host is being append.'); |
| </script> |