/** * @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('MutationObserver', function() { suite('Shadow Root', function() { var unwrap = ShadowDOMPolyfill.unwrap; test('Make no notifications due to render', function() { var a = document.createElement('a'); a.innerHTML = ''; var sr = a.createShadowRoot(); sr.innerHTML = ''; var observer = new MutationObserver(function() {}); observer.observe(a, { childList: true, attributes: true, characterData: true, subtree: true }); observer.observe(sr, { childList: true, attributes: true, characterData: true, subtree: true }); a.offsetHeight; var records = observer.takeRecords(); assert.equal(records.length, 0); assert.equal(unwrap(a).outerHTML, ''); }); test('Observe ShadowRoot', function() { var a = document.createElement('a'); a.innerHTML = ''; var sr = a.createShadowRoot(); sr.innerHTML = ''; var c = sr.firstChild; var d = c.nextSibling; var content = d.firstChild; var observer = new MutationObserver(function() {}); observer.observe(sr, { childList: true, subtree: true }); a.offsetHeight; var records = observer.takeRecords(); assert.equal(records.length, 0); assert.equal(unwrap(a).outerHTML, ''); var e = document.createElement('e'); e.innerHTML = ''; var f = e.firstChild; var g = f.nextSibling var h = e.lastChild; var observer2 = new MutationObserver(function() {}); observer2.observe(e, { childList: true, subtree: true }); d.insertBefore(g, content); assert.equal(unwrap(a).outerHTML, ''); a.offsetHeight; assert.equal(unwrap(a).outerHTML, ''); records = observer.takeRecords(); assert.equal(records.length, 1); expectMutationRecord(records[0], { type: 'childList', target: d, addedNodes: [g], previousSibling: null, nextSibling: content }); records = observer2.takeRecords(); assert.equal(records.length, 1); expectMutationRecord(records[0], { type: 'childList', target: e, removedNodes: [g], previousSibling: f, nextSibling: h }); }); }); });