UNPKG

five-bells-visualization

Version:
505 lines (452 loc) 20.5 kB
<!doctype html> <!-- 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 --> <html> <head> <title>core-resizable tests</title> <meta name="viewport" content="width=device-width, initial-scale=1.0, maximum-scale=1.0"> <script src="../../webcomponentsjs/webcomponents.js"></script> <script src="../../web-component-tester/browser.js"></script> <link rel="import" href="../core-resizable.html"> <link rel="import" href="test-elements.html"> </head> <body fit> <!-- Notes on Polyfill compatibility in tests: - Test elements loaded via imports, to ensure load order correctness w.r.t. Polymer.mixin being availbale - Resize notifications and asserts are done asynchronously, since there are timing differences w.r.t. when detached callbacks occur --> <polymer-element name='test-element' noscript> <template> <!-- Normal CoreResizer parent with child CoreResizables --> <core-resizer-parent id="parent"> <core-resizable id="child1a"></core-resizable> <div> <core-resizable id="child1b"></core-resizable> </div> <core-resizable-in-shadow id="shadow1c"></core-resizable-in-shadow> <div> <core-resizable-in-shadow id="shadow1d"></core-resizable-in-shadow> </div> </core-resizer-parent> <!-- CoreResizer parent using shouldNotify, with child CoreResizables --> <core-resizer-parent-filtered id="parentFiltered"> <core-resizable id="child2a"></core-resizable> <div> <core-resizable id="child2b"></core-resizable> </div> <core-resizable-in-shadow id="shadow2c"></core-resizable-in-shadow> <div> <core-resizable-in-shadow id="shadow2d"></core-resizable-in-shadow> </div> </core-resizer-parent-filtered> <!-- CoreResizer using resizerIsPeer:true, with peer CoreResizables --> <div> <core-resizable id="child3a"></core-resizable> <div> <core-resizable id="child3b"></core-resizable> </div> <core-resizer-peer id="peer"></core-resizer-peer> <core-resizable-in-shadow id="shadow3c"></core-resizable-in-shadow> <div> <core-resizable-in-shadow id="shadow3d"></core-resizable-in-shadow> </div> </div> <!-- CoreResizer using resizerIsPeer:true and shouldNotify, with peer CoreResizables --> <div> <core-resizable id="child4a"></core-resizable> <div> <core-resizable id="child4b"></core-resizable> </div> <core-resizer-peer-filtered id="peerFiltered"></core-resizer-peer-filtered> <core-resizable-in-shadow id="shadow4c"></core-resizable-in-shadow> <div> <core-resizable-in-shadow id="shadow4d"></core-resizable-in-shadow> </div> </div> <!-- Nested CoreResizers --> <core-resizer-parent id="parentTop"> <core-resizer-parent id="parentNested"> <core-resizable id="child5a"></core-resizable> <core-resizer-peer id="peerNested"></core-resizer-peer> <div> <core-resizable-in-shadow id="shadow5b"></core-resizable-in-shadow> </div> </core-resizer-parent> </core-resizer-parent> </template> </polymer-element> <test-element></test-element> <script> document.addEventListener('polymer-ready', function() { var testEl = document.querySelector('test-element'); var registered = []; var notifyPending = []; var registerResizeHandler = function(el, expectNotification) { registered.push(el); if (expectNotification !== false) { notifyPending.push(el); } el.resizeHandler = function() { var idx = notifyPending.indexOf(this); if (idx < 0) { debugger; } assert(idx >= 0, 'resize notified to unexpected resizable ' + this.localName + '#' + this.id); notifyPending.splice(idx, 1); }.bind(el); }; var unregisterResizeHandlers = function() { registered.forEach(function(r) { r.resizeHandler = null; }); registered = []; notifyPending = []; }; suite('core-resizer-parent', function() { test('notify resizables from window', function(done) { registerResizeHandler(testEl.$.parent); registerResizeHandler(testEl.$.child1a); registerResizeHandler(testEl.$.child1b); registerResizeHandler(testEl.$.shadow1c.$.resizable); registerResizeHandler(testEl.$.shadow1d.$.resizable); setTimeout(function() { window.dispatchEvent(new CustomEvent('resize', { bubbles: false })); assert(notifyPending.length === 0, 'all resizables were not notified'); unregisterResizeHandlers(); done(); }); }); test('notify resizables from parent', function(done) { registerResizeHandler(testEl.$.parent); registerResizeHandler(testEl.$.child1a); registerResizeHandler(testEl.$.child1b); registerResizeHandler(testEl.$.shadow1c.$.resizable); registerResizeHandler(testEl.$.shadow1d.$.resizable); setTimeout(function() { testEl.$.parent.notifyResize(); assert(notifyPending.length === 0, 'all resizables were not notified'); unregisterResizeHandlers(); done(); }); }); test('detach resizables then notify parent', function(done) { registerResizeHandler(testEl.$.parent); registerResizeHandler(testEl.$.child1a, false); registerResizeHandler(testEl.$.child1b); registerResizeHandler(testEl.$.shadow1c.$.resizable, false); registerResizeHandler(testEl.$.shadow1d.$.resizable); testEl.$.child1a.remove(); testEl.$.shadow1c.remove(); setTimeout(function() { testEl.$.parent.notifyResize(); assert(notifyPending.length === 0, 'all resizables were not notified'); unregisterResizeHandlers(); done(); }); }); test('detach parent then notify window', function(done) { registerResizeHandler(testEl.$.parent, false); registerResizeHandler(testEl.$.child1a, false); registerResizeHandler(testEl.$.child1b, false); registerResizeHandler(testEl.$.shadow1c.$.resizable, false); registerResizeHandler(testEl.$.shadow1d.$.resizable, false); testEl.$.parent.remove(); setTimeout(function() { window.dispatchEvent(new CustomEvent('resize', { bubbles: false })); assert(notifyPending.length === 0, 'all resizables were not notified'); unregisterResizeHandlers(); done(); }); }); }); suite('core-resizer-parent-filtered', function() { test('notify resizables from window', function(done) { registerResizeHandler(testEl.$.parentFiltered); registerResizeHandler(testEl.$.child2a); registerResizeHandler(testEl.$.child2b, false); registerResizeHandler(testEl.$.shadow2c.$.resizable, false); registerResizeHandler(testEl.$.shadow2d.$.resizable, false); testEl.$.parentFiltered.active = testEl.$.child2a; setTimeout(function() { window.dispatchEvent(new CustomEvent('resize', { bubbles: false })); assert(notifyPending.length === 0, 'all resizables were not notified'); unregisterResizeHandlers(); done(); }); }); test('notify resizables from parent', function(done) { registerResizeHandler(testEl.$.parentFiltered); registerResizeHandler(testEl.$.child2a); registerResizeHandler(testEl.$.child2b, false); registerResizeHandler(testEl.$.shadow2c.$.resizable, false); registerResizeHandler(testEl.$.shadow2d.$.resizable, false); testEl.$.parentFiltered.active = testEl.$.child2a; setTimeout(function() { testEl.$.parentFiltered.notifyResize(); assert(notifyPending.length === 0, 'all resizables were not notified'); unregisterResizeHandlers(); done(); }); }); test('detach resizables then notify parent', function(done) { registerResizeHandler(testEl.$.parentFiltered); registerResizeHandler(testEl.$.child2a, false); registerResizeHandler(testEl.$.child2b, false); registerResizeHandler(testEl.$.shadow2c.$.resizable, false); registerResizeHandler(testEl.$.shadow2d.$.resizable); testEl.$.child2a.remove(); testEl.$.shadow2c.remove(); testEl.$.parentFiltered.active = testEl.$.shadow2d.$.resizable; setTimeout(function() { testEl.$.parentFiltered.notifyResize(); assert(notifyPending.length === 0, 'all resizables were not notified'); unregisterResizeHandlers(); done(); }); }); test('detach parent then notify window', function(done) { registerResizeHandler(testEl.$.parentFiltered, false); registerResizeHandler(testEl.$.child2a, false); registerResizeHandler(testEl.$.child2b, false); registerResizeHandler(testEl.$.shadow2c.$.resizable, false); registerResizeHandler(testEl.$.shadow2d.$.resizable, false); testEl.$.parentFiltered.remove(); testEl.$.parentFiltered.active = testEl.$.shadow2d.$.resizable; setTimeout(function() { window.dispatchEvent(new CustomEvent('resize', { bubbles: false })); assert(notifyPending.length === 0, 'all resizables were not notified'); unregisterResizeHandlers(); done(); }); }); }); suite('core-resizer-peer', function() { test('notify resizables from window', function(done) { registerResizeHandler(testEl.$.peer); registerResizeHandler(testEl.$.child3a); registerResizeHandler(testEl.$.child3b); registerResizeHandler(testEl.$.shadow3c.$.resizable); registerResizeHandler(testEl.$.shadow3d.$.resizable); setTimeout(function() { window.dispatchEvent(new CustomEvent('resize', { bubbles: false })); assert(notifyPending.length === 0, 'all resizables were not notified'); unregisterResizeHandlers(); done(); }); }); test('notify resizables from peer', function(done) { registerResizeHandler(testEl.$.peer); registerResizeHandler(testEl.$.child3a); registerResizeHandler(testEl.$.child3b); registerResizeHandler(testEl.$.shadow3c.$.resizable); registerResizeHandler(testEl.$.shadow3d.$.resizable); setTimeout(function() { testEl.$.peer.notifyResize(); assert(notifyPending.length === 0, 'all resizables were not notified'); unregisterResizeHandlers(); done(); }); }); test('detach resizables then notify', function(done) { registerResizeHandler(testEl.$.peer); registerResizeHandler(testEl.$.child3a, false); registerResizeHandler(testEl.$.child3b); registerResizeHandler(testEl.$.shadow3c.$.resizable, false); registerResizeHandler(testEl.$.shadow3d.$.resizable); testEl.$.child3a.remove(); testEl.$.shadow3c.remove(); setTimeout(function() { testEl.$.peer.notifyResize(); assert(notifyPending.length === 0, 'all resizables were not notified'); unregisterResizeHandlers(); done(); }); }); test('detach peer then notify', function(done) { registerResizeHandler(testEl.$.peer); registerResizeHandler(testEl.$.child3a, false); registerResizeHandler(testEl.$.child3b); registerResizeHandler(testEl.$.shadow3c.$.resizable, false); registerResizeHandler(testEl.$.shadow3d.$.resizable); testEl.$.peer.remove(); setTimeout(function() { testEl.$.peer.notifyResize(); assert(notifyPending.length === 0, 'all resizables were not notified'); unregisterResizeHandlers(); done(); }); }); }); suite('core-resizer-peer-filtered', function(done) { test('notify resizables from window', function(done) { registerResizeHandler(testEl.$.peerFiltered); registerResizeHandler(testEl.$.child4a); registerResizeHandler(testEl.$.child4b, false); registerResizeHandler(testEl.$.shadow4c.$.resizable, false); registerResizeHandler(testEl.$.shadow4d.$.resizable, false); testEl.$.peerFiltered.active = testEl.$.child4a; setTimeout(function() { window.dispatchEvent(new CustomEvent('resize', { bubbles: false })); assert(notifyPending.length === 0, 'all resizables were not notified'); unregisterResizeHandlers(); done(); }); }); test('notify resizables from peer', function(done) { registerResizeHandler(testEl.$.peerFiltered); registerResizeHandler(testEl.$.child4a); registerResizeHandler(testEl.$.child4b, false); registerResizeHandler(testEl.$.shadow4c.$.resizable, false); registerResizeHandler(testEl.$.shadow4d.$.resizable, false); testEl.$.peerFiltered.active = testEl.$.child4a; setTimeout(function() { testEl.$.peerFiltered.notifyResize(); assert(notifyPending.length === 0, 'all resizables were not notified'); unregisterResizeHandlers(); done(); }); }); test('detach resizables then notify parent', function(done) { registerResizeHandler(testEl.$.peerFiltered); registerResizeHandler(testEl.$.child4a, false); registerResizeHandler(testEl.$.child4b, false); registerResizeHandler(testEl.$.shadow4c.$.resizable, false); registerResizeHandler(testEl.$.shadow4d.$.resizable); testEl.$.child4a.remove(); testEl.$.shadow4c.remove(); testEl.$.peerFiltered.active = testEl.$.shadow4d.$.resizable; setTimeout(function() { testEl.$.peerFiltered.notifyResize(); assert(notifyPending.length === 0, 'all resizables were not notified'); unregisterResizeHandlers(); done(); }); }); test('detach peer then notify window', function(done) { registerResizeHandler(testEl.$.peerFiltered, false); registerResizeHandler(testEl.$.child4a, false); registerResizeHandler(testEl.$.child4b, false); registerResizeHandler(testEl.$.shadow4c.$.resizable, false); registerResizeHandler(testEl.$.shadow4d.$.resizable, false); testEl.$.peerFiltered.remove(); testEl.$.peerFiltered.active = testEl.$.shadow4d.$.resizable; setTimeout(function() { window.dispatchEvent(new CustomEvent('resize', { bubbles: false })); assert(notifyPending.length === 0, 'all resizables were not notified'); unregisterResizeHandlers(); done(); }); }); }); suite('core-resizer-nested', function() { test('notify resizables from window', function(done) { registerResizeHandler(testEl.$.parentTop); registerResizeHandler(testEl.$.parentNested); registerResizeHandler(testEl.$.peerNested); registerResizeHandler(testEl.$.child5a); registerResizeHandler(testEl.$.shadow5b.$.resizable); setTimeout(function() { window.dispatchEvent(new CustomEvent('resize', { bubbles: false })); assert(notifyPending.length === 0, 'all resizables were not notified'); unregisterResizeHandlers(); done(); }); }); test('notify resizables from top parent', function(done) { registerResizeHandler(testEl.$.parentTop); registerResizeHandler(testEl.$.parentNested); registerResizeHandler(testEl.$.peerNested); registerResizeHandler(testEl.$.child5a); registerResizeHandler(testEl.$.shadow5b.$.resizable); setTimeout(function() { testEl.$.parentTop.notifyResize(); assert(notifyPending.length === 0, 'all resizables were not notified'); unregisterResizeHandlers(); done(); }); }); test('notify resizables from nested parent', function(done) { registerResizeHandler(testEl.$.parentTop, false); registerResizeHandler(testEl.$.parentNested); registerResizeHandler(testEl.$.peerNested); registerResizeHandler(testEl.$.child5a); registerResizeHandler(testEl.$.shadow5b.$.resizable); setTimeout(function() { testEl.$.parentNested.notifyResize(); assert(notifyPending.length === 0, 'all resizables were not notified'); unregisterResizeHandlers(); done(); }); }); test('notify resizables from nested peer', function(done) { registerResizeHandler(testEl.$.parentTop, false); registerResizeHandler(testEl.$.parentNested, false); registerResizeHandler(testEl.$.peerNested); registerResizeHandler(testEl.$.child5a); registerResizeHandler(testEl.$.shadow5b.$.resizable); setTimeout(function() { testEl.$.peerNested.notifyResize(); assert(notifyPending.length === 0, 'all resizables were not notified'); unregisterResizeHandlers(); done(); }); }); // Known limitation: peers of detached `resizerIsPeer` won't be notified // by parent resizers; ROI on that bookkeeping not considered high enough test('detach peer then notify', function(done) { registerResizeHandler(testEl.$.parentTop); registerResizeHandler(testEl.$.parentNested); registerResizeHandler(testEl.$.peerNested, false); registerResizeHandler(testEl.$.child5a, false); registerResizeHandler(testEl.$.shadow5b.$.resizable, false); testEl.$.peerNested.remove(); setTimeout(function() { window.dispatchEvent(new CustomEvent('resize', { bubbles: false })); assert(notifyPending.length === 0, 'all resizables were not notified'); unregisterResizeHandlers(); done(); }); }); test('detach resizables then notify', function(done) { registerResizeHandler(testEl.$.parentTop); registerResizeHandler(testEl.$.parentNested); registerResizeHandler(testEl.$.peerNested, false); // removed in above test registerResizeHandler(testEl.$.child5a, false); registerResizeHandler(testEl.$.shadow5b.$.resizable, false); testEl.$.child5a.remove(); testEl.$.shadow5b.remove(); setTimeout(function() { window.dispatchEvent(new CustomEvent('resize', { bubbles: false })); assert(notifyPending.length === 0, 'all resizables were not notified'); unregisterResizeHandlers(); done(); }); }); test('detach top parent then notify', function(done) { registerResizeHandler(testEl.$.parentTop, false); registerResizeHandler(testEl.$.parentNested, false); registerResizeHandler(testEl.$.peerNested, false); registerResizeHandler(testEl.$.child5a, false); registerResizeHandler(testEl.$.shadow5b.$.resizable, false); testEl.$.parentTop.remove(); setTimeout(function() { window.dispatchEvent(new CustomEvent('resize', { bubbles: false })); assert(notifyPending.length === 0, 'all resizables were not notified'); unregisterResizeHandlers(); done(); }); }); }); }); </script> </body> </html>