Comparing version 1.0.0 to 1.1.0
@@ -72,13 +72,2 @@ (function e(t,n,r){function s(o,u){if(!n[o]){if(!t[o]){var a=typeof require=="function"&&require;if(!u&&a)return a(o,!0);if(i)return i(o,!0);var f=new Error("Cannot find module '"+o+"'");throw f.code="MODULE_NOT_FOUND",f}var l=n[o]={exports:{}};t[o][0].call(l.exports,function(e){var n=t[o][1][e];return s(n?n:e)},l,l.exports,e,t,n,r)}return n[o].exports}var i=typeof require=="function"&&require;for(var o=0;o<r.length;o++)s(r[o]);return s})({1:[function(require,module,exports){ | ||
function mergeInto(destObj, srcObj) { | ||
for (var key in srcObj) { | ||
if (!srcObj.hasOwnProperty(key)) { continue; } // ignore inherited properties | ||
destObj[key] = srcObj[key]; | ||
} | ||
return destObj; | ||
} | ||
function parseParams(targetElement, eventProperties, configCallback) { | ||
@@ -102,8 +91,3 @@ if (typeof eventProperties === 'function') { | ||
function customizeEvent(event, eventProperties, configCallback, isPrimaryEvent) { | ||
// copy eventProperties into event | ||
if (eventProperties) { | ||
mergeInto(event, eventProperties); | ||
} | ||
function customizeEvent(event, configCallback, isPrimaryEvent) { | ||
if (configCallback) { | ||
@@ -124,6 +108,6 @@ // call configCallback only for the primary event if the callback takes less than two arguments | ||
eventNames.forEach(function(eventName) { | ||
var event = eventFactory.createEvent(eventName, dataTransfer); | ||
var event = eventFactory.createEvent(eventName, eventProperties, dataTransfer); | ||
var isPrimaryEvent = eventName === primaryEventName; | ||
customizeEvent(event, eventProperties, configCallback, isPrimaryEvent); | ||
customizeEvent(event, configCallback, isPrimaryEvent); | ||
@@ -155,11 +139,22 @@ targetElement.dispatchEvent(event); | ||
DragDropAction.prototype.dragOver = function(overElement, eventProperties, configCallback) { | ||
var params = parseParams(overElement, eventProperties, configCallback) | ||
, events = ['mousemove', 'mouseover', 'dragover']; | ||
createAndDispatchEvents(params.targetElement, events, 'drag', this.lastDataTransfer, params.eventProperties, params.configCallback); | ||
return this; | ||
}; | ||
DragDropAction.prototype.drop = function(targetElement, eventProperties, configCallback) { | ||
var params = parseParams(targetElement, eventProperties, configCallback); | ||
var events = ['mouseup', 'drop']; | ||
var eventsOnDropTarget = ['mousemove', 'mouseup', 'drop']; | ||
var eventsOnDragSource = ['dragend']; | ||
createAndDispatchEvents(params.targetElement, events, 'drop', this.lastDataTransfer, params.eventProperties, params.configCallback); | ||
createAndDispatchEvents(params.targetElement, eventsOnDropTarget, 'drop', this.lastDataTransfer, params.eventProperties, params.configCallback); | ||
if (this.lastDragSource) { | ||
// trigger dragend event on last drag source element | ||
createAndDispatchEvents(this.lastDragSource, ['dragend'], 'drop', this.lastDataTransfer, params.eventProperties, params.configCallback); | ||
createAndDispatchEvents(this.lastDragSource, eventsOnDragSource, 'drop', this.lastDataTransfer, params.eventProperties, params.configCallback); | ||
} | ||
@@ -176,11 +171,74 @@ | ||
var dataTransferEvents = ['drag', 'dragstart', 'dragend', 'drop']; | ||
var dataTransferEvents = ['drag', 'dragstart', 'dragover', 'dragend', 'drop']; | ||
function mergeInto(destObj, srcObj) { | ||
for (var key in srcObj) { | ||
if (!srcObj.hasOwnProperty(key)) { continue; } // ignore inherited properties | ||
destObj[key] = srcObj[key]; | ||
} | ||
return destObj; | ||
} | ||
function createModernEvent(eventName, eventType, eventProperties) { | ||
if (eventType === 'DragEvent') { eventType = 'CustomEvent'; } // Firefox fix (since FF does not allow us to override dataTransfer) | ||
var constructor = window[eventType]; | ||
var options = { view: window, bubbles: true, cancelable: true }; | ||
mergeInto(options, eventProperties); | ||
var event = new constructor(eventName, options); | ||
mergeInto(event, eventProperties); | ||
return event; | ||
} | ||
function createLegacyEvent(eventName, eventType, eventProperties) { | ||
var event; | ||
switch (eventType) { | ||
case 'MouseEvent': | ||
event = document.createEvent('MouseEvent'); | ||
event.initEvent(eventName, true, true); | ||
break; | ||
default: | ||
event = document.createEvent('CustomEvent'); | ||
event.initCustomEvent(eventName, true, true, 0); | ||
} | ||
// copy eventProperties into event | ||
if (eventProperties) { | ||
mergeInto(event, eventProperties); | ||
} | ||
return event; | ||
} | ||
function createEvent(eventName, eventType, eventProperties) { | ||
try { | ||
return createModernEvent(eventName, eventType, eventProperties); | ||
} catch (error) { | ||
return createLegacyEvent(eventName, eventType, eventProperties); | ||
} | ||
} | ||
var EventFactory = { | ||
createEvent: function(eventName, dataTransfer) { | ||
var event = document.createEvent('CustomEvent'); | ||
createEvent: function(eventName, eventProperties, dataTransfer) { | ||
var eventType = 'CustomEvent'; | ||
event.initCustomEvent(eventName, true, true, 0); | ||
if (eventName.match(/^mouse/)) { | ||
eventType = 'MouseEvent'; | ||
} | ||
var event = createEvent(eventName, eventType, eventProperties); | ||
if (dataTransferEvents.indexOf(eventName) > -1) { | ||
@@ -210,2 +268,5 @@ event.dataTransfer = dataTransfer || new DataTransfer(); | ||
}, | ||
dragOver: function(targetElement, eventProperties, configCallback) { | ||
return call(new DragDropAction(), 'dragOver', arguments); | ||
}, | ||
drop: function(targetElement, eventProperties, configCallback) { | ||
@@ -212,0 +273,0 @@ return call(new DragDropAction(), 'drop', arguments); |
@@ -1,1 +0,1 @@ | ||
!function t(r,e,n){function a(i,s){if(!e[i]){if(!r[i]){var f="function"==typeof require&&require;if(!s&&f)return f(i,!0);if(o)return o(i,!0);var c=new Error("Cannot find module '"+i+"'");throw c.code="MODULE_NOT_FOUND",c}var u=e[i]={exports:{}};r[i][0].call(u.exports,function(t){var e=r[i][1][t];return a(e?e:t)},u,u.exports,t,r,e,n)}return e[i].exports}for(var o="function"==typeof require&&require,i=0;i<n.length;i++)a(n[i]);return a}({1:[function(t){var r=t("./src/index.js");"function"==typeof define&&define("dragMock",function(){return r}),window.dragMock=r},{"./src/index.js":5}],2:[function(t,r){function e(t,r){var e=t.indexOf(r);e>=0&&t.splice(e,1)}var n=function(){this.dataByFormat={},this.dropEffect="none",this.effectAllowed="all",this.files=[],this.types=[]};n.prototype.clearData=function(t){t?(delete this.dataByFormat[t],e(this.types,t)):(this.dataByFormat={},this.types=[])},n.prototype.getData=function(t){return this.dataByFormat[t]},n.prototype.setData=function(t,r){return this.dataByFormat[t]=r,this.types.indexOf(t)<0&&this.types.push(t),!0},n.prototype.setDragImage=function(){},r.exports=n},{}],3:[function(t,r){function e(){}function n(t,r){for(var e in r)r.hasOwnProperty(e)&&(t[e]=r[e]);return t}function a(t,r,n){if("function"==typeof r&&(n=r,r=null),!t||"object"!=typeof t)throw new Error("Expected first parameter to be a targetElement. Instead got: "+t);return{targetElement:t,eventProperties:r||{},configCallback:n||e}}function o(t,r,e,a){r&&n(t,r),e&&(e.length<2?a&&e(t):e(t,t.type))}function i(t,r,e,n,a,i){r.forEach(function(r){var f=s.createEvent(r,n),c=r===e;o(f,a,i,c),t.dispatchEvent(f)})}var s=t("./eventFactory"),f=t("./DataTransfer"),c=function(){this.lastDragSource=null,this.lastDataTransfer=null};c.prototype.dragStart=function(t,r,e){var n=a(t,r,e),o=["mousedown","dragstart","drag"],s=new f;return i(n.targetElement,o,"drag",s,n.eventProperties,n.configCallback),this.lastDragSource=t,this.lastDataTransfer=s,this},c.prototype.drop=function(t,r,e){var n=a(t,r,e),o=["mouseup","drop"];return i(n.targetElement,o,"drop",this.lastDataTransfer,n.eventProperties,n.configCallback),this.lastDragSource&&i(this.lastDragSource,["dragend"],"drop",this.lastDataTransfer,n.eventProperties,n.configCallback),this},r.exports=c},{"./DataTransfer":2,"./eventFactory":4}],4:[function(t,r){var e=t("./DataTransfer"),n=["drag","dragstart","dragend","drop"],a={createEvent:function(t,r){var a=document.createEvent("CustomEvent");return a.initCustomEvent(t,!0,!0,0),n.indexOf(t)>-1&&(a.dataTransfer=r||new e),a}};r.exports=a},{"./DataTransfer":2}],5:[function(t,r){function e(t,r,e){return t[r].apply(t,e)}var n=t("./DragDropAction"),a={dragStart:function(){return e(new n,"dragStart",arguments)},drop:function(){return e(new n,"drop",arguments)},DataTransfer:t("./DataTransfer"),DragDropAction:t("./DragDropAction"),eventFactory:t("./eventFactory")};r.exports=a},{"./DataTransfer":2,"./DragDropAction":3,"./eventFactory":4}]},{},[1]); | ||
!function t(r,e,n){function a(i,s){if(!e[i]){if(!r[i]){var u="function"==typeof require&&require;if(!s&&u)return u(i,!0);if(o)return o(i,!0);var c=new Error("Cannot find module '"+i+"'");throw c.code="MODULE_NOT_FOUND",c}var f=e[i]={exports:{}};r[i][0].call(f.exports,function(t){var e=r[i][1][t];return a(e?e:t)},f,f.exports,t,r,e,n)}return e[i].exports}for(var o="function"==typeof require&&require,i=0;i<n.length;i++)a(n[i]);return a}({1:[function(t){var r=t("./src/index.js");"function"==typeof define&&define("dragMock",function(){return r}),window.dragMock=r},{"./src/index.js":5}],2:[function(t,r){function e(t,r){var e=t.indexOf(r);e>=0&&t.splice(e,1)}var n=function(){this.dataByFormat={},this.dropEffect="none",this.effectAllowed="all",this.files=[],this.types=[]};n.prototype.clearData=function(t){t?(delete this.dataByFormat[t],e(this.types,t)):(this.dataByFormat={},this.types=[])},n.prototype.getData=function(t){return this.dataByFormat[t]},n.prototype.setData=function(t,r){return this.dataByFormat[t]=r,this.types.indexOf(t)<0&&this.types.push(t),!0},n.prototype.setDragImage=function(){},r.exports=n},{}],3:[function(t,r){function e(){}function n(t,r,n){if("function"==typeof r&&(n=r,r=null),!t||"object"!=typeof t)throw new Error("Expected first parameter to be a targetElement. Instead got: "+t);return{targetElement:t,eventProperties:r||{},configCallback:n||e}}function a(t,r,e){r&&(r.length<2?e&&r(t):r(t,t.type))}function o(t,r,e,n,o,s){r.forEach(function(r){var u=i.createEvent(r,o,n),c=r===e;a(u,s,c),t.dispatchEvent(u)})}var i=t("./eventFactory"),s=t("./DataTransfer"),u=function(){this.lastDragSource=null,this.lastDataTransfer=null};u.prototype.dragStart=function(t,r,e){var a=n(t,r,e),i=["mousedown","dragstart","drag"],u=new s;return o(a.targetElement,i,"drag",u,a.eventProperties,a.configCallback),this.lastDragSource=t,this.lastDataTransfer=u,this},u.prototype.dragOver=function(t,r,e){var a=n(t,r,e),i=["mousemove","mouseover","dragover"];return o(a.targetElement,i,"drag",this.lastDataTransfer,a.eventProperties,a.configCallback),this},u.prototype.drop=function(t,r,e){var a=n(t,r,e),i=["mousemove","mouseup","drop"],s=["dragend"];return o(a.targetElement,i,"drop",this.lastDataTransfer,a.eventProperties,a.configCallback),this.lastDragSource&&o(this.lastDragSource,s,"drop",this.lastDataTransfer,a.eventProperties,a.configCallback),this},r.exports=u},{"./DataTransfer":2,"./eventFactory":4}],4:[function(t,r){function e(t,r){for(var e in r)r.hasOwnProperty(e)&&(t[e]=r[e]);return t}function n(t,r,n){"DragEvent"===r&&(r="CustomEvent");var a=window[r],o={view:window,bubbles:!0,cancelable:!0};e(o,n);var i=new a(t,o);return e(i,n),i}function a(t,r,n){var a;switch(r){case"MouseEvent":a=document.createEvent("MouseEvent"),a.initEvent(t,!0,!0);break;default:a=document.createEvent("CustomEvent"),a.initCustomEvent(t,!0,!0,0)}return n&&e(a,n),a}function o(t,r,e){try{return n(t,r,e)}catch(o){return a(t,r,e)}}var i=t("./DataTransfer"),s=["drag","dragstart","dragover","dragend","drop"],u={createEvent:function(t,r,e){var n="CustomEvent";t.match(/^mouse/)&&(n="MouseEvent");var a=o(t,n,r);return s.indexOf(t)>-1&&(a.dataTransfer=e||new i),a}};r.exports=u},{"./DataTransfer":2}],5:[function(t,r){function e(t,r,e){return t[r].apply(t,e)}var n=t("./DragDropAction"),a={dragStart:function(){return e(new n,"dragStart",arguments)},dragOver:function(){return e(new n,"dragOver",arguments)},drop:function(){return e(new n,"drop",arguments)},DataTransfer:t("./DataTransfer"),DragDropAction:t("./DragDropAction"),eventFactory:t("./eventFactory")};r.exports=a},{"./DataTransfer":2,"./DragDropAction":3,"./eventFactory":4}]},{},[1]); |
@@ -12,3 +12,3 @@ | ||
['dragStart', 'drop'].forEach(function(methodName) { | ||
['dragStart', 'dragOver', 'drop'].forEach(function(methodName) { | ||
DragMockClientActionBridge.prototype[methodName] = function() { | ||
@@ -58,17 +58,15 @@ var self = this; | ||
function extendWebdriverPrototype(webdriverPrototype) { | ||
webdriverPrototype.dragStart = function() { | ||
var clientAction = new DragMockClientActionBridge(this, nextClientActionId++); | ||
function createActionAndCallMethod(methodName) { | ||
return function() { | ||
var clientAction = new DragMockClientActionBridge(this, nextClientActionId++); | ||
clientAction.dragStart.apply(clientAction, arguments); | ||
clientAction[methodName].apply(clientAction, arguments); | ||
return clientAction; | ||
}; | ||
return clientAction; | ||
}; | ||
} | ||
webdriverPrototype.drop = function() { | ||
var clientAction = new DragMockClientActionBridge(this, nextClientActionId++); | ||
clientAction.drop.apply(clientAction, arguments); | ||
return clientAction; | ||
}; | ||
webdriverPrototype.dragStart = createActionAndCallMethod('dragStart'); | ||
webdriverPrototype.dragOver = createActionAndCallMethod('dragOver'); | ||
webdriverPrototype.drop = createActionAndCallMethod('drop'); | ||
} | ||
@@ -75,0 +73,0 @@ |
{ | ||
"name": "drag-mock", | ||
"version": "1.0.0", | ||
"version": "1.1.0", | ||
"description": "Trigger HTML5 drag & drop events for testing", | ||
@@ -5,0 +5,0 @@ "main": "index.js", |
@@ -60,7 +60,9 @@ # drag-mock | ||
```javascript | ||
var dragSource = document.querySelector('.draggable'); | ||
var dropTarget = document.querySelector('.drop-target'); | ||
var dragSource = document.querySelector('.draggable'); | ||
var dropTarget = document.querySelector('.drop-target'); | ||
var hoverRegion = document.querySelector('.hover-region'); | ||
dragMock | ||
.dragStart(dragSource) | ||
.dragOver(hoverRegion) | ||
.drop(dropTarget); | ||
@@ -99,2 +101,3 @@ ``` | ||
## Testing | ||
@@ -124,7 +127,63 @@ | ||
The following events are provided with a fake (but fully functional) dataTransfer object: | ||
`drag`, `dragstart`, `dragend`, `drop` | ||
`drag`, `dragstart`, `dragover`, `dragend`, `drop` | ||
## webdriver.io integration | ||
If you are running Selenium tests using webdriver.io and you need drag & drop functionality beyond Selenium's dragAndDrop() | ||
you can easily integrate drag-mock into webdriver: | ||
```javascript | ||
var dragMock = require('drag-mock'); | ||
var webdriverio = require('webdriverio'); | ||
var webdriver = webdriverio.remote({ desiredCapabilities: { browserName: 'chrome' } }).init(); | ||
// set up webdriver.dragStart(), webdriver.dragOver() and webdriver.drop() | ||
dragMock.extendWebdriver(webdriver); | ||
// load the drag-mock library into the browser context | ||
dragMock.loadLibrary(webdriver); | ||
// drag and drop | ||
webdriver | ||
.dragStart('#my-drag-source', { clientX: 200, clientY: 300 }) | ||
.drop('#drop-zone', function(error) { | ||
if (error) { | ||
console.error(error); | ||
} | ||
}); | ||
``` | ||
## webdriver.io integration | ||
If you are running Selenium tests using webdriver.io and you need drag & drop functionality beyond Selenium's dragAndDrop() | ||
you can easily integrate drag-mock into webdriver: | ||
```javascript | ||
var dragMock = require('drag-mock'); | ||
var webdriverio = require('webdriverio'); | ||
var webdriver = webdriverio.remote({ desiredCapabilities: { browserName: 'chrome' } }).init(); | ||
// set up webdriver.dragStart() and webdriver.drop() | ||
dragMock.extendWebdriver(webdriver); | ||
// load the drag-mock library into the browser context | ||
dragMock.loadLibrary(webdriver); | ||
// drag and drop | ||
webdriver | ||
.dragStart('#my-drag-source', { clientX: 200, clientY: 300 }) | ||
.drop('#drop-zone', function(error) { | ||
if (error) { | ||
console.error(error); | ||
} | ||
}); | ||
``` | ||
## License | ||
This software is licensed under the terms of the MIT license. See LICENSE for details. |
@@ -9,13 +9,2 @@ | ||
function mergeInto(destObj, srcObj) { | ||
for (var key in srcObj) { | ||
if (!srcObj.hasOwnProperty(key)) { continue; } // ignore inherited properties | ||
destObj[key] = srcObj[key]; | ||
} | ||
return destObj; | ||
} | ||
function parseParams(targetElement, eventProperties, configCallback) { | ||
@@ -39,8 +28,3 @@ if (typeof eventProperties === 'function') { | ||
function customizeEvent(event, eventProperties, configCallback, isPrimaryEvent) { | ||
// copy eventProperties into event | ||
if (eventProperties) { | ||
mergeInto(event, eventProperties); | ||
} | ||
function customizeEvent(event, configCallback, isPrimaryEvent) { | ||
if (configCallback) { | ||
@@ -61,6 +45,6 @@ // call configCallback only for the primary event if the callback takes less than two arguments | ||
eventNames.forEach(function(eventName) { | ||
var event = eventFactory.createEvent(eventName, dataTransfer); | ||
var event = eventFactory.createEvent(eventName, eventProperties, dataTransfer); | ||
var isPrimaryEvent = eventName === primaryEventName; | ||
customizeEvent(event, eventProperties, configCallback, isPrimaryEvent); | ||
customizeEvent(event, configCallback, isPrimaryEvent); | ||
@@ -92,11 +76,22 @@ targetElement.dispatchEvent(event); | ||
DragDropAction.prototype.dragOver = function(overElement, eventProperties, configCallback) { | ||
var params = parseParams(overElement, eventProperties, configCallback) | ||
, events = ['mousemove', 'mouseover', 'dragover']; | ||
createAndDispatchEvents(params.targetElement, events, 'drag', this.lastDataTransfer, params.eventProperties, params.configCallback); | ||
return this; | ||
}; | ||
DragDropAction.prototype.drop = function(targetElement, eventProperties, configCallback) { | ||
var params = parseParams(targetElement, eventProperties, configCallback); | ||
var events = ['mouseup', 'drop']; | ||
var eventsOnDropTarget = ['mousemove', 'mouseup', 'drop']; | ||
var eventsOnDragSource = ['dragend']; | ||
createAndDispatchEvents(params.targetElement, events, 'drop', this.lastDataTransfer, params.eventProperties, params.configCallback); | ||
createAndDispatchEvents(params.targetElement, eventsOnDropTarget, 'drop', this.lastDataTransfer, params.eventProperties, params.configCallback); | ||
if (this.lastDragSource) { | ||
// trigger dragend event on last drag source element | ||
createAndDispatchEvents(this.lastDragSource, ['dragend'], 'drop', this.lastDataTransfer, params.eventProperties, params.configCallback); | ||
createAndDispatchEvents(this.lastDragSource, eventsOnDragSource, 'drop', this.lastDataTransfer, params.eventProperties, params.configCallback); | ||
} | ||
@@ -103,0 +98,0 @@ |
var DataTransfer = require('./DataTransfer'); | ||
var dataTransferEvents = ['drag', 'dragstart', 'dragend', 'drop']; | ||
var dataTransferEvents = ['drag', 'dragstart', 'dragover', 'dragend', 'drop']; | ||
function mergeInto(destObj, srcObj) { | ||
for (var key in srcObj) { | ||
if (!srcObj.hasOwnProperty(key)) { continue; } // ignore inherited properties | ||
destObj[key] = srcObj[key]; | ||
} | ||
return destObj; | ||
} | ||
function createModernEvent(eventName, eventType, eventProperties) { | ||
if (eventType === 'DragEvent') { eventType = 'CustomEvent'; } // Firefox fix (since FF does not allow us to override dataTransfer) | ||
var constructor = window[eventType]; | ||
var options = { view: window, bubbles: true, cancelable: true }; | ||
mergeInto(options, eventProperties); | ||
var event = new constructor(eventName, options); | ||
mergeInto(event, eventProperties); | ||
return event; | ||
} | ||
function createLegacyEvent(eventName, eventType, eventProperties) { | ||
var event; | ||
switch (eventType) { | ||
case 'MouseEvent': | ||
event = document.createEvent('MouseEvent'); | ||
event.initEvent(eventName, true, true); | ||
break; | ||
default: | ||
event = document.createEvent('CustomEvent'); | ||
event.initCustomEvent(eventName, true, true, 0); | ||
} | ||
// copy eventProperties into event | ||
if (eventProperties) { | ||
mergeInto(event, eventProperties); | ||
} | ||
return event; | ||
} | ||
function createEvent(eventName, eventType, eventProperties) { | ||
try { | ||
return createModernEvent(eventName, eventType, eventProperties); | ||
} catch (error) { | ||
return createLegacyEvent(eventName, eventType, eventProperties); | ||
} | ||
} | ||
var EventFactory = { | ||
createEvent: function(eventName, dataTransfer) { | ||
var event = document.createEvent('CustomEvent'); | ||
createEvent: function(eventName, eventProperties, dataTransfer) { | ||
var eventType = 'CustomEvent'; | ||
event.initCustomEvent(eventName, true, true, 0); | ||
if (eventName.match(/^mouse/)) { | ||
eventType = 'MouseEvent'; | ||
} | ||
var event = createEvent(eventName, eventType, eventProperties); | ||
if (dataTransferEvents.indexOf(eventName) > -1) { | ||
@@ -14,0 +77,0 @@ event.dataTransfer = dataTransfer || new DataTransfer(); |
@@ -14,2 +14,5 @@ | ||
}, | ||
dragOver: function(targetElement, eventProperties, configCallback) { | ||
return call(new DragDropAction(), 'dragOver', arguments); | ||
}, | ||
drop: function(targetElement, eventProperties, configCallback) { | ||
@@ -16,0 +19,0 @@ return call(new DragDropAction(), 'drop', arguments); |
@@ -1,4 +0,4 @@ | ||
'use strict'; | ||
(function() { | ||
'use strict'; | ||
(function() { | ||
var DataTransfer = dragMock.DataTransfer; | ||
@@ -5,0 +5,0 @@ |
@@ -1,4 +0,4 @@ | ||
'use strict'; | ||
(function() { | ||
'use strict'; | ||
(function() { | ||
var DragDropAction = dragMock.DragDropAction; | ||
@@ -10,56 +10,4 @@ | ||
function expectEvents(domElement, eventNames, done, onEachEvent) { | ||
var eventTriggered = {} | ||
, eventListeners = {} | ||
, doneCalled = false; | ||
describe('DragDropAction', function() { | ||
function allEventsTriggered() { | ||
var allTriggered = true; | ||
eventNames.forEach(function(eventName) { | ||
if (!eventTriggered[eventName]) { allTriggered = false; } | ||
}); | ||
return allTriggered; | ||
} | ||
function cleanUp() { | ||
eventNames.forEach(function(eventName) { | ||
domElement.removeEventListener(eventName, eventListeners[eventName]); | ||
}); | ||
} | ||
var timeOut = setTimeout(function() { | ||
if (!doneCalled) { | ||
var untriggeredEvents = []; | ||
eventNames.forEach(function(eventName) { | ||
if (!eventTriggered[eventName]) { untriggeredEvents.push(eventName); } | ||
}); | ||
cleanUp(); | ||
expect().fail('The following events have not been triggered: ' + untriggeredEvents.join(', ')); | ||
} | ||
}, 1500); | ||
eventNames.forEach(function(eventName) { | ||
eventTriggered[eventName] = false; | ||
domElement.addEventListener(eventName, eventListeners[eventName] = function(event) { | ||
eventTriggered[eventName] = true; | ||
if (onEachEvent) { onEachEvent(event, domElement); } | ||
if (allEventsTriggered() && !doneCalled) { | ||
doneCalled = true; | ||
clearTimeout(timeOut); | ||
cleanUp(); | ||
done(); | ||
} | ||
}); | ||
}); | ||
} | ||
describe('DragDropAction', function() { | ||
var action; | ||
@@ -77,2 +25,3 @@ | ||
describe('dragStart method', function() { | ||
@@ -85,3 +34,3 @@ | ||
it('creates expected events', function(done) { | ||
expectEvents(elementA, ['mousedown', 'dragstart', 'drag'], done); | ||
EventHelper.expectEvents(elementA, ['mousedown', 'dragstart', 'drag'], done); | ||
@@ -92,3 +41,3 @@ action.dragStart(elementA); | ||
it('creates events with given properties', function(done) { | ||
expectEvents(elementA, ['mousedown', 'dragstart', 'drag'], done, function(event) { | ||
EventHelper.expectEvents(elementA, ['mousedown', 'dragstart', 'drag'], done, function(event) { | ||
expect(event.hello).to.equal('world'); | ||
@@ -102,3 +51,3 @@ expect(event.foo).to.equal('bar'); | ||
it('customizes events using a custom callback', function(done) { | ||
expectEvents(elementA, ['mousedown', 'dragstart', 'drag'], done, function(event) { | ||
EventHelper.expectEvents(elementA, ['mousedown', 'dragstart', 'drag'], done, function(event) { | ||
expect(event.hello).to.equal('world'); | ||
@@ -139,3 +88,3 @@ expect(event.foo).to.equal('bar'); | ||
it('customizes events with given properties and using a custom callback', function(done) { | ||
expectEvents(elementA, ['mousedown', 'dragstart', 'drag'], done, function(event) { | ||
EventHelper.expectEvents(elementA, ['mousedown', 'dragstart', 'drag'], done, function(event) { | ||
expect(event.hello).to.equal('world'); | ||
@@ -152,6 +101,18 @@ expect(event.foo).to.equal('bar'); | ||
describe('dragOver method', function() { | ||
it('creates expected events (without prior call to dragStart())', function(done) { | ||
EventHelper.expectEvents(elementA, ['mousemove', 'mouseover', 'dragover'], done); | ||
action.dragOver(elementA); | ||
}); | ||
}); | ||
describe('drop method', function() { | ||
it('creates expected events (without prior call to dragStart())', function(done) { | ||
expectEvents(elementA, ['mouseup', 'drop'], done); | ||
EventHelper.expectEvents(elementA, ['mousemove', 'mouseup', 'drop'], done); | ||
@@ -162,3 +123,3 @@ action.drop(elementA); | ||
it('triggers a dragEnd event on the drag source', function(done) { | ||
expectEvents(elementA, ['dragend'], done); | ||
EventHelper.expectEvents(elementA, ['dragend'], done); | ||
@@ -165,0 +126,0 @@ action.dragStart(elementA).drop(elementB); |
@@ -1,4 +0,4 @@ | ||
'use strict'; | ||
(function() { | ||
'use strict'; | ||
(function() { | ||
describe('drag-mock', function() { | ||
@@ -5,0 +5,0 @@ |
@@ -1,4 +0,4 @@ | ||
'use strict'; | ||
(function() { | ||
'use strict'; | ||
(function() { | ||
var eventFactory = dragMock.eventFactory | ||
@@ -27,3 +27,3 @@ , DataTransfer = dragMock.DataTransfer; | ||
it('createEvent method produces events with dataTransfer objects', function() { | ||
['drag', 'dragstart', 'dragend', 'drop'].forEach(function(eventName) { | ||
['drag', 'dragstart', 'dragover', 'dragend', 'drop'].forEach(function(eventName) { | ||
var event = eventFactory.createEvent(eventName); | ||
@@ -36,3 +36,3 @@ expect(event.dataTransfer).to.be.a(DataTransfer); | ||
var dragEvent = eventFactory.createEvent('drag'); | ||
var dropEvent = eventFactory.createEvent('drop', dragEvent.dataTransfer); | ||
var dropEvent = eventFactory.createEvent('drop', {}, dragEvent.dataTransfer); | ||
@@ -39,0 +39,0 @@ expect(dropEvent.dataTransfer).to.equal(dragEvent.dataTransfer); |
@@ -73,2 +73,3 @@ 'use strict'; | ||
expect(webdriver.dragStart).to.be.a('function'); | ||
expect(webdriver.dragOver).to.be.a('function'); | ||
expect(webdriver.drop).to.be.a('function'); | ||
@@ -75,0 +76,0 @@ }); |
Sorry, the diff of this file is not supported yet
Major refactor
Supply chain riskPackage has recently undergone a major refactor. It may be unstable or indicate significant internal changes. Use caution when updating to versions that include significant changes.
Found 1 instance in 1 package
44603
22
843
187
0