| 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);
|
|
|