Index: third_party/polymer/v0_8/components/iron-test-helpers/mock-interactions.js |
diff --git a/third_party/polymer/v0_8/components/iron-test-helpers/mock-interactions.js b/third_party/polymer/v0_8/components/iron-test-helpers/mock-interactions.js |
new file mode 100644 |
index 0000000000000000000000000000000000000000..887b9bee1aa7663f50e45b02955a8d757aad8519 |
--- /dev/null |
+++ b/third_party/polymer/v0_8/components/iron-test-helpers/mock-interactions.js |
@@ -0,0 +1,177 @@ |
+/** |
+ * @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 |
+ */ |
+ |
+(function(global) { |
+ 'use strict'; |
+ |
+ var HAS_NEW_MOUSE = (function() { |
+ var has = false; |
+ try { |
+ has = Boolean(new MouseEvent('x')); |
+ } catch (_) {} |
+ return has; |
+ })(); |
+ |
+ function middleOfNode(node) { |
+ var bcr = node.getBoundingClientRect(); |
+ return { |
+ y: bcr.top + (bcr.height / 2), |
+ x: bcr.left + (bcr.width / 2) |
+ }; |
+ } |
+ |
+ function topLeftOfNode(node) { |
+ var bcr = node.getBoundingClientRect(); |
+ return { |
+ y: bcr.top, |
+ x: bcr.left |
+ }; |
+ } |
+ |
+ function makeEvent(type, xy, node) { |
+ var props = { |
+ bubbles: true, |
+ cancelable: true, |
+ clientX: xy.x, |
+ clientY: xy.y |
+ }; |
+ var e; |
+ var mousetype = type === 'tap' ? 'click' : 'mouse' + type; |
+ if (HAS_NEW_MOUSE) { |
+ e = new MouseEvent(mousetype, props); |
+ } else { |
+ e = document.createEvent('MouseEvent'); |
+ e.initMouseEvent(mousetype, props.bubbles, props.cancelable, null, null, 0, 0, |
+ props.clientX, props.clientY, false, false, false, false, 0, null); |
+ } |
+ node.dispatchEvent(e); |
+ } |
+ |
+ function down(node, xy) { |
+ xy = xy || middleOfNode(node); |
+ makeEvent('down', xy, node); |
+ } |
+ |
+ function move(node, fromXY, toXY, steps) { |
+ steps = steps || 5; |
+ var dx = Math.round((fromXY.x - toXY.x) / steps); |
+ var dy = Math.round((fromXY.y - toXY.y) / steps); |
+ var xy = { |
+ x: fromXY.x, |
+ y: fromXY.y |
+ }; |
+ for (var i = steps; i > 0; i--) { |
+ makeEvent('move', xy, node); |
+ xy.x += dx; |
+ xy.y += dy; |
+ } |
+ makeEvent('move', { |
+ x: toXY.x, |
+ y: toXY.y |
+ }, node); |
+ } |
+ |
+ function up(node, xy) { |
+ xy = xy || middleOfNode(node); |
+ makeEvent('up', xy, node); |
+ } |
+ |
+ function tap(node) { |
+ var xy = middleOfNode(node); |
+ down(node, xy); |
+ up(node, xy); |
+ makeEvent('tap', xy, node); |
+ } |
+ |
+ function focus(target) { |
+ Polymer.Base.fire.call(target, 'focus'); |
+ } |
+ |
+ function blur(target) { |
+ Polymer.Base.fire.call(target, 'blur'); |
+ } |
+ |
+ function downAndUp(target, callback) { |
+ down(target); |
+ Polymer.Base.async(function() { |
+ up(target); |
+ tap(target); |
+ |
+ callback && callback(); |
+ }); |
+ } |
+ |
+ function track(target, dx, dy, steps) { |
+ dx = dx | 0; |
+ dy = dy | 0; |
+ steps = steps || 5; |
+ down(target); |
+ var xy = middleOfNode(target); |
+ var xy2 = { |
+ x: xy.x + dx, |
+ y: xy.y + dy |
+ }; |
+ move(target, xy, xy2, steps); |
+ up(target, xy2); |
+ } |
+ |
+ function keyboardEventFor(type, keyCode) { |
+ var event = new CustomEvent(type); |
+ |
+ event.keyCode = keyCode; |
+ event.code = keyCode; |
+ |
+ return event; |
+ } |
+ |
+ function keyEventOn(target, type, keyCode) { |
+ target.dispatchEvent(keyboardEventFor(type, keyCode)); |
+ } |
+ |
+ function keyDownOn(target, keyCode) { |
+ keyEventOn(target, 'keydown', keyCode); |
+ } |
+ |
+ function keyUpOn(target, keyCode) { |
+ keyEventOn(target, 'keyup', keyCode); |
+ } |
+ |
+ function pressAndReleaseKeyOn(target, keyCode) { |
+ keyDownOn(target, keyCode); |
+ Polymer.Base.async(function() { |
+ keyUpOn(target, keyCode); |
+ }, 1); |
+ } |
+ |
+ function pressEnter(target) { |
+ pressAndReleaseKeyOn(target, 13); |
+ } |
+ |
+ function pressSpace(target) { |
+ pressAndReleaseKeyOn(target, 32); |
+ } |
+ |
+ global.MockInteractions = { |
+ focus: focus, |
+ blur: blur, |
+ down: down, |
+ up: up, |
+ downAndUp: downAndUp, |
+ tap: tap, |
+ track: track, |
+ pressAndReleaseKeyOn: pressAndReleaseKeyOn, |
+ pressEnter: pressEnter, |
+ pressSpace: pressSpace, |
+ keyDownOn: keyDownOn, |
+ keyUpOn: keyUpOn, |
+ middleOfNode: middleOfNode, |
+ topLeftOfNode: topLeftOfNode |
+ }; |
+})(this); |