/** * @license * Copyright (c) 2014 The Polymer Project Authors. All rights reserved. * This code may only be used under the BSD style license found at http://polymer.github.io/LICENSE.txt * The complete set of authors may be found at http://polymer.github.io/AUTHORS.txt * The complete set of contributors may be found at http://polymer.github.io/CONTRIBUTORS.txt * Code distributed by Google as part of the polymer project is also * subject to an additional IP rights grant found at http://polymer.github.io/PATENTS.txt */ suite('HTML Template Element', function() { test('content', function() { var div = document.createElement('div'); div.innerHTML = ''; var template = div.firstChild; var content = template.content; assert.isNull(template.firstChild); assert.equal(content.childNodes.length, 2); assert.equal(content.firstChild.tagName, 'A'); assert.equal(content.lastChild.tagName, 'B'); }); test('document', function() { var div = document.createElement('div'); div.innerHTML = ''; var templateA = div.firstChild; var templateB= div.lastChild; var contentA = templateA.content; var contentB = templateB.content; assert.notEqual(templateA.ownerDocument, contentB.ownerDocument); assert.equal(contentA.ownerDocument, contentB.ownerDocument); }); test('get innerHTML', function() { var div = document.createElement('div'); div.innerHTML = ''; var template = div.firstChild; assert.equal(template.innerHTML, ''); assert.equal(div.innerHTML, ''); }); test('get outerHTML', function() { var div = document.createElement('div'); div.innerHTML = ''; var template = div.firstChild; assert.equal(template.outerHTML, ''); assert.equal(div.outerHTML, '
'); }); test('set innerHTML', function() { var div = document.createElement('div'); div.innerHTML = ''; var template = div.firstChild; template.innerHTML = 'ce'; assert.equal(template.innerHTML, 'ce'); expectStructure(template, { parentNode: div }) var content = template.content; var c = content.firstChild; var d = c.nextSibling; var e = d.nextSibling; assert.equal(c.textContent, 'c'); assert.equal(d.tagName, 'D'); assert.equal(e.textContent, 'e'); expectStructure(content, { firstChild: c, lastChild: e }); expectStructure(c, { parentNode: content, nextSibling: d }); expectStructure(d, { parentNode: content, previousSibling: c, nextSibling: e }); expectStructure(e, { parentNode: content, previousSibling: d }); }); test('Mutation events', function() { var div = document.createElement('div'); div.innerHTML = ''; var count = 0; function handleEvent(e) { count++; } div.addEventListener('DOMAttrModified', handleEvent, true); div.addEventListener('DOMAttributeNameChanged', handleEvent, true); div.addEventListener('DOMCharacterDataModified', handleEvent, true); div.addEventListener('DOMElementNameChanged', handleEvent, true); div.addEventListener('DOMNodeInserted', handleEvent, true); div.addEventListener('DOMNodeInsertedIntoDocument', handleEvent, true); div.addEventListener('DOMNodeRemoved', handleEvent, true); div.addEventListener('DOMNodeRemovedFromDocument', handleEvent, true); div.addEventListener('DOMSubtreeModified', handleEvent, true); var template = div.firstChild; assert.instanceOf(template.content, DocumentFragment); assert.instanceOf(template.content.firstChild, Text); assert.instanceOf(template.content.firstElementChild, HTMLAnchorElement); assert.equal(count, 0); }); test('cloneNode', function() { var div = document.createElement('div'); div.innerHTML = ''; var template = div.firstChild; var clone = template.cloneNode(true); assert.equal(clone.outerHTML, ''); clone = div.cloneNode(true); assert.equal(clone.outerHTML, '
'); }); test('importNode', function() { var doc2 = document.implementation.createHTMLDocument(''); var div = doc2.createElement('div'); div.innerHTML = ''; var template = div.firstChild; var clone = document.importNode(template, true); assert.equal(clone.outerHTML, ''); clone = document.importNode(div, true); assert.equal(clone.outerHTML, '
'); }); test('instanceOf', function() { assert.instanceOf(document.createElement('template'), HTMLTemplateElement); }); test('constructor', function() { assert.equal(HTMLTemplateElement, document.createElement('template').constructor); }); });