| Index: third_party/polymer/v1_0/components-chromium/iron-test-helpers/mock-interactions.js
|
| diff --git a/third_party/polymer/v1_0/components-chromium/iron-test-helpers/mock-interactions.js b/third_party/polymer/v1_0/components-chromium/iron-test-helpers/mock-interactions.js
|
| index 10e46a48974d246a18f14d3fa71a32494079737c..d74f518a962062a45232063cfa850f770fd16283 100644
|
| --- a/third_party/polymer/v1_0/components-chromium/iron-test-helpers/mock-interactions.js
|
| +++ b/third_party/polymer/v1_0/components-chromium/iron-test-helpers/mock-interactions.js
|
| @@ -19,6 +19,11 @@
|
| return has;
|
| })();
|
|
|
| + /*
|
| + * Returns the (x,y) coordinates representing the middle of a node.
|
| + *
|
| + * @param {HTMLElement} node An element.
|
| + */
|
| function middleOfNode(node) {
|
| var bcr = node.getBoundingClientRect();
|
| return {
|
| @@ -27,6 +32,11 @@
|
| };
|
| }
|
|
|
| + /*
|
| + * Returns the (x,y) coordinates representing the top left corner of a node.
|
| + *
|
| + * @param {HTMLElement} node An element.
|
| + */
|
| function topLeftOfNode(node) {
|
| var bcr = node.getBoundingClientRect();
|
| return {
|
| @@ -35,6 +45,14 @@
|
| };
|
| }
|
|
|
| + /*
|
| + * Fires a mouse event on a specific node, at a given set of coordinates.
|
| + * This event bubbles and is cancellable.
|
| + *
|
| + * @param {String} type The type of mouse event (such as 'tap' or 'down').
|
| + * @param {Object} xy The (x,y) coordinates the mouse event should be fired from.
|
| + * @param {HTMLElement} node The node to fire the event on.
|
| + */
|
| function makeEvent(type, xy, node) {
|
| var props = {
|
| bubbles: true,
|
| @@ -67,11 +85,16 @@
|
| node.dispatchEvent(e);
|
| }
|
|
|
| - function down(node, xy) {
|
| - xy = xy || middleOfNode(node);
|
| - makeEvent('down', xy, node);
|
| - }
|
| -
|
| + /*
|
| + * Simulates a mouse move action by firing a `move` mouse event on a
|
| + * specific node, between a set of coordinates.
|
| + *
|
| + * @param {HTMLElement} node The node to fire the event on.
|
| + * @param {Object} fromXY The (x,y) coordinates the dragging should start from.
|
| + * @param {Object} toXY The (x,y) coordinates the dragging should end at.
|
| + * @param {Object} steps Optional. The numbers of steps in the move motion.
|
| + * If not specified, the default is 5.
|
| + */
|
| function move(node, fromXY, toXY, steps) {
|
| steps = steps || 5;
|
| var dx = Math.round((fromXY.x - toXY.x) / steps);
|
| @@ -91,11 +114,80 @@
|
| }, node);
|
| }
|
|
|
| + /*
|
| + * Simulates a mouse dragging action originating in the middle of a specific node.
|
| + *
|
| + * @param {HTMLElement} target The node to fire the event on.
|
| + * @param {Number} dx The horizontal displacement.
|
| + * @param {Object} dy The vertical displacement
|
| + * @param {Object} steps Optional. The numbers of steps in the dragging motion.
|
| + * If not specified, the default is 5.
|
| + */
|
| + 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);
|
| + }
|
| +
|
| + /*
|
| + * Fires a `down` mouse event on a specific node, at a given set of coordinates.
|
| + * This event bubbles and is cancellable. If the (x,y) coordinates are
|
| + * not specified, the middle of the node will be used instead.
|
| + *
|
| + * @param {HTMLElement} node The node to fire the event on.
|
| + * @param {Object} xy Optional. The (x,y) coordinates the mouse event should be fired from.
|
| + */
|
| + function down(node, xy) {
|
| + xy = xy || middleOfNode(node);
|
| + makeEvent('down', xy, node);
|
| + }
|
| +
|
| + /*
|
| + * Fires an `up` mouse event on a specific node, at a given set of coordinates.
|
| + * This event bubbles and is cancellable. If the (x,y) coordinates are
|
| + * not specified, the middle of the node will be used instead.
|
| + *
|
| + * @param {HTMLElement} node The node to fire the event on.
|
| + * @param {Object} xy Optional. The (x,y) coordinates the mouse event should be fired from.
|
| + */
|
| function up(node, xy) {
|
| xy = xy || middleOfNode(node);
|
| makeEvent('up', xy, node);
|
| }
|
|
|
| + /*
|
| + * Simulates a complete mouse click by firing a `down` mouse event, followed
|
| + * by an asynchronous `up` and `tap` events on a specific node. Calls the
|
| + *`callback` after the `tap` event is fired.
|
| + *
|
| + * @param {HTMLElement} target The node to fire the event on.
|
| + * @param {Object} callback Optional. The function to be called after the action ends.
|
| + */
|
| + function downAndUp(target, callback) {
|
| + down(target);
|
| + Polymer.Base.async(function() {
|
| + up(target);
|
| + tap(target);
|
| +
|
| + callback && callback();
|
| + });
|
| + }
|
| +
|
| + /*
|
| + * Fires a 'tap' mouse event on a specific node. This respects the pointer-events
|
| + * set on the node, and will not fire on disabled nodes.
|
| + *
|
| + * @param {HTMLElement} node The node to fire the event on.
|
| + * @param {Object} xy Optional. The (x,y) coordinates the mouse event should be fired from.
|
| + */
|
| function tap(node) {
|
| // Respect nodes that are disabled in the UI.
|
| if (window.getComputedStyle(node)['pointer-events'] === 'none')
|
| @@ -106,6 +198,11 @@
|
| makeEvent('tap', xy, node);
|
| }
|
|
|
| + /*
|
| + * Focuses a node by firing a `focus` event. This event does not bubble.
|
| + *
|
| + * @param {HTMLElement} target The node to fire the event on.
|
| + */
|
| function focus(target) {
|
| Polymer.Base.fire('focus', {}, {
|
| bubbles: false,
|
| @@ -113,6 +210,11 @@
|
| });
|
| }
|
|
|
| + /*
|
| + * Blurs a node by firing a `blur` event. This event does not bubble.
|
| + *
|
| + * @param {HTMLElement} target The node to fire the event on.
|
| + */
|
| function blur(target) {
|
| Polymer.Base.fire('blur', {}, {
|
| bubbles: false,
|
| @@ -120,31 +222,15 @@
|
| });
|
| }
|
|
|
| - 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) {
|
| + /*
|
| + * Returns a keyboard event. This event bubbles and is cancellable.
|
| + *
|
| + * @param {String} type The type of keyboard event (such as 'keyup' or 'keydown').
|
| + * @param {Number} keyCode The keyCode for the event.
|
| + * @param {?String|[String]} modifiers The key modifiers for the event.
|
| + * Accepted values are shift, ctrl, alt, meta.
|
| + */
|
| + function keyboardEventFor(type, keyCode, modifiers) {
|
| var event = new CustomEvent(type, {
|
| bubbles: true,
|
| cancelable: true
|
| @@ -153,32 +239,87 @@
|
| event.keyCode = keyCode;
|
| event.code = keyCode;
|
|
|
| + modifiers = modifiers || [];
|
| + if (typeof modifiers === 'string') {
|
| + modifiers = [modifiers];
|
| + }
|
| + event.shiftKey = modifiers.indexOf('shift') !== -1;
|
| + event.altKey = modifiers.indexOf('alt') !== -1;
|
| + event.ctrlKey = modifiers.indexOf('ctrl') !== -1;
|
| + event.metaKey = modifiers.indexOf('meta') !== -1;
|
| +
|
| return event;
|
| }
|
|
|
| - function keyEventOn(target, type, keyCode) {
|
| - target.dispatchEvent(keyboardEventFor(type, keyCode));
|
| + /*
|
| + * Fires a keyboard event on a specific node. This event bubbles and is cancellable.
|
| + *
|
| + * @param {HTMLElement} target The node to fire the event on.
|
| + * @param {String} type The type of keyboard event (such as 'keyup' or 'keydown').
|
| + * @param {Number} keyCode The keyCode for the event.
|
| + * @param {?String|[String]} modifiers The key modifiers for the event.
|
| + * Accepted values are shift, ctrl, alt, meta.
|
| + */
|
| + function keyEventOn(target, type, keyCode, modifiers) {
|
| + target.dispatchEvent(keyboardEventFor(type, keyCode, modifiers));
|
| }
|
|
|
| - function keyDownOn(target, keyCode) {
|
| - keyEventOn(target, 'keydown', keyCode);
|
| + /*
|
| + * Fires a 'keydown' event on a specific node. This event bubbles and is cancellable.
|
| + *
|
| + * @param {HTMLElement} target The node to fire the event on.
|
| + * @param {Number} keyCode The keyCode for the event.
|
| + * @param {?String|[String]} modifiers The key modifiers for the event.
|
| + * Accepted values are shift, ctrl, alt, meta.
|
| + */
|
| + function keyDownOn(target, keyCode, modifiers) {
|
| + keyEventOn(target, 'keydown', keyCode, modifiers);
|
| }
|
|
|
| - function keyUpOn(target, keyCode) {
|
| - keyEventOn(target, 'keyup', keyCode);
|
| + /*
|
| + * Fires a 'keyup' event on a specific node. This event bubbles and is cancellable.
|
| + *
|
| + * @param {HTMLElement} target The node to fire the event on.
|
| + * @param {Number} keyCode The keyCode for the event.
|
| + * @param {?String|[String]} modifiers The key modifiers for the event.
|
| + * Accepted values are shift, ctrl, alt, meta.
|
| + */
|
| + function keyUpOn(target, keyCode, modifiers) {
|
| + keyEventOn(target, 'keyup', keyCode, modifiers);
|
| }
|
|
|
| - function pressAndReleaseKeyOn(target, keyCode) {
|
| - keyDownOn(target, keyCode);
|
| + /*
|
| + * Simulates a complete key press by firing a `keydown` keyboard event, followed
|
| + * by an asynchronous `keyup` event on a specific node.
|
| + *
|
| + * @param {HTMLElement} target The node to fire the event on.
|
| + * @param {Number} keyCode The keyCode for the event.
|
| + * @param {?String|[String]} modifiers The key modifiers for the event.
|
| + * Accepted values are shift, ctrl, alt, meta.
|
| + */
|
| + function pressAndReleaseKeyOn(target, keyCode, modifiers) {
|
| + keyDownOn(target, keyCode, modifiers);
|
| Polymer.Base.async(function() {
|
| - keyUpOn(target, keyCode);
|
| + keyUpOn(target, keyCode, modifiers);
|
| }, 1);
|
| }
|
|
|
| + /*
|
| + * Simulates a complete 'enter' key press by firing a `keydown` keyboard event,
|
| + * followed by an asynchronous `keyup` event on a specific node.
|
| + *
|
| + * @param {HTMLElement} target The node to fire the event on.
|
| + */
|
| function pressEnter(target) {
|
| pressAndReleaseKeyOn(target, 13);
|
| }
|
|
|
| + /*
|
| + * Simulates a complete 'space' key press by firing a `keydown` keyboard event,
|
| + * followed by an asynchronous `keyup` event on a specific node.
|
| + *
|
| + * @param {HTMLElement} target The node to fire the event on.
|
| + */
|
| function pressSpace(target) {
|
| pressAndReleaseKeyOn(target, 32);
|
| }
|
| @@ -196,6 +337,7 @@
|
| pressSpace: pressSpace,
|
| keyDownOn: keyDownOn,
|
| keyUpOn: keyUpOn,
|
| + keyEventOn: keyEventOn,
|
| middleOfNode: middleOfNode,
|
| topLeftOfNode: topLeftOfNode
|
| };
|
|
|