UNPKG

spincycle

Version:

A reactive message router and object manager that lets clients subscribe to object property changes on the server

336 lines (271 loc) 10.9 kB
<!doctype html> <!-- @license Copyright (c) 2015 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>paper-ripple-behavior</title> <script src="../../webcomponentsjs/webcomponents-lite.js"></script> <script src="../../web-component-tester/browser.js"></script> <script src="../../iron-test-helpers/mock-interactions.js"></script> <link rel="import" href="../../polymer/polymer.html"> <link rel="import" href="../../iron-behaviors/iron-button-state.html"> <link rel="import" href="../paper-ripple-behavior.html"> <link rel="import" href="shadowed-ripple.html"> </head> <body> <dom-module id="test-ripple"> <template> </template> <script> HTMLImports.whenReady(function() { Polymer({ is: 'test-ripple', behaviors: [ Polymer.IronButtonState, Polymer.IronControlState, Polymer.PaperRippleBehavior ] }); }); </script> </dom-module> <test-fixture id="basic"> <template> <test-ripple></test-ripple> </template> </test-fixture> <test-fixture id="ShadowBasic"> <template> <sd-ripple></sd-ripple> </template> </test-fixture> <test-fixture id="ShadowText"> <template> <sd-ripple>Howdy!</sd-ripple> </template> </test-fixture> <test-fixture id="ShadowElement"> <template> <sd-ripple> <div id="source">source!</div> </sd-ripple> </template> </test-fixture> <script> suite('PaperRippleBehavior', function() { var ripple; setup(function() { ripple = fixture('basic'); }); test('no ripple at startup', function() { assert.isFalse(ripple.hasRipple()); }); test('calling getRipple returns ripple', function() { assert.ok(ripple.getRipple()); }); test('focus generates ripple', function() { MockInteractions.focus(ripple); assert.ok(ripple.hasRipple()); }); test('down generates ripple', function() { MockInteractions.down(ripple); assert.ok(ripple.hasRipple()); MockInteractions.up(ripple); }); suite('Correct Targeting', function() { function assertInteractionCausesRipple(host, node, expected, msg) { var ripple = host.getRipple(); Polymer.dom.flush(); MockInteractions.down(node); assert.equal(ripple.ripples.length > 0, expected, msg); MockInteractions.up(node); } function assertInteractionAtLocationCausesRipple(host, node, location, expected, msg) { var ripple = host.getRipple(); Polymer.dom.flush(); MockInteractions.down(node, location); assert.equal(ripple.ripples.length > 0, expected, msg); MockInteractions.up(node); } suite('basic', function() { suite('container = host', function() { setup(function() { ripple = fixture('ShadowBasic'); }); test('tap host', function() { assertInteractionCausesRipple(ripple, ripple, true, 'ripple'); }); test('tap #wrapper', function() { assertInteractionCausesRipple(ripple, ripple.$.wrapper, true, '#wrapper'); }); test('tap #separate', function() { assertInteractionCausesRipple(ripple, ripple.$.separate, true, '#separate') }); }); suite('container = wrapper', function() { setup(function() { ripple = fixture('ShadowBasic'); ripple._rippleContainer = ripple.$.wrapper; }); test('tap host', function() { assertInteractionCausesRipple(ripple, ripple, false, 'ripple'); }); test('tap #wrapper', function() { assertInteractionCausesRipple(ripple, ripple.$.wrapper, true, '#wrapper'); }); test('tap #separate', function() { assertInteractionCausesRipple(ripple, ripple.$.separate, false, '#separate') }); }); suite('container = separate', function(done) { setup(function() { ripple = fixture('ShadowBasic'); ripple._rippleContainer = ripple.$.separate; }); test('tap host', function() { assertInteractionCausesRipple(ripple, ripple, false, 'ripple'); }); test('tap wrapper', function() { assertInteractionCausesRipple(ripple, ripple.$.wrapper, false, '#wrapper'); }); test('tap separate', function() { assertInteractionCausesRipple(ripple, ripple.$.separate, true, '#separate') }); }); }); suite('distributed text', function() { var textLocation; function getTextLocation(ripple) { // build a Range to get the BCR of a given text node var r = document.createRange(); r.selectNode(Polymer.dom(ripple.$.content).getDistributedNodes()[0]); return MockInteractions.middleOfNode(r); } suite('container = host', function() { setup(function() { ripple = fixture('ShadowText'); textLocation = getTextLocation(ripple); }); test('tap host', function() { assertInteractionCausesRipple(ripple, ripple, true, 'ripple'); }); test('tap wrapper', function() { assertInteractionCausesRipple(ripple, ripple.$.wrapper, true, '#wrapper'); }); test('tap separate', function() { assertInteractionCausesRipple(ripple, ripple.$.separate, true, '#separate') }); test('tap text', function() { assertInteractionAtLocationCausesRipple(ripple, ripple.$.wrapper, textLocation, true, 'text'); }); }); suite('container = wrapper', function() { setup(function() { ripple = fixture('ShadowText'); ripple._rippleContainer = ripple.$.wrapper; textLocation = getTextLocation(ripple); }); test('tap host', function() { assertInteractionCausesRipple(ripple, ripple, false, 'ripple'); }); test('tap wrapper', function() { assertInteractionCausesRipple(ripple, ripple.$.wrapper, true, '#wrapper'); }); test('tap separate', function() { assertInteractionCausesRipple(ripple, ripple.$.separate, false, '#separate') }); test('tap text', function() { assertInteractionAtLocationCausesRipple(ripple, ripple.$.wrapper, textLocation, true, 'text'); }); }); suite('container = separate', function() { setup(function() { ripple = fixture('ShadowText'); ripple._rippleContainer = ripple.$.separate; textLocation = getTextLocation(ripple); }); test('tap host', function() { assertInteractionCausesRipple(ripple, ripple, false, 'ripple'); }); test('tap wrapper', function() { assertInteractionCausesRipple(ripple, ripple.$.wrapper, false, '#wrapper'); }); test('tap separate', function() { assertInteractionCausesRipple(ripple, ripple.$.separate, true, '#separate') }); test('tap text', function() { assertInteractionAtLocationCausesRipple(ripple, ripple.$.wrapper, textLocation, false, 'text'); }); }); }); suite('distributed element', function() { var source; suite('container = host', function() { setup(function() { ripple = fixture('ShadowElement'); source = Polymer.dom(ripple).querySelector('#source'); }); test('tap host', function() { assertInteractionCausesRipple(ripple, ripple, true, 'ripple'); }); test('tap wrapper', function() { assertInteractionCausesRipple(ripple, ripple.$.wrapper, true, '#wrapper'); }); test('tap separate', function() { assertInteractionCausesRipple(ripple, ripple.$.separate, true, '#separate') }); test('tap source', function() { assertInteractionCausesRipple(ripple, source, true, '#source'); }); }); suite('container = wrapper', function() { setup(function() { ripple = fixture('ShadowElement'); ripple._rippleContainer = ripple.$.wrapper; source = Polymer.dom(ripple).querySelector('#source'); }); test('tap host', function() { assertInteractionCausesRipple(ripple, ripple, false, 'ripple'); }); test('tap wrapper', function() { assertInteractionCausesRipple(ripple, ripple.$.wrapper, true, '#wrapper'); }); test('tap separate', function() { assertInteractionCausesRipple(ripple, ripple.$.separate, false, '#separate') }); test('tap source', function() { assertInteractionCausesRipple(ripple, source, true, '#source'); }); }); suite('container = separate', function() { setup(function() { ripple = fixture('ShadowElement'); ripple._rippleContainer = ripple.$.separate; source = Polymer.dom(ripple).querySelector('#source'); }); test('tap host', function() { assertInteractionCausesRipple(ripple, ripple, false, 'ripple'); }); test('tap wrapper', function() { assertInteractionCausesRipple(ripple, ripple.$.wrapper, false, '#wrapper'); }); test('tap separate', function() { assertInteractionCausesRipple(ripple, ripple.$.separate, true, '#separate') }); test('tap source', function() { assertInteractionCausesRipple(ripple, source, false, '#source'); }); }); }); }); }); </script> </body> </html>