jsaction
Version:
Google's event delegation library
241 lines (210 loc) • 6.24 kB
JavaScript
// Copyright 2012 Google Inc. All Rights Reserved.
// Author: ruilopes@google.com (Rui do Nascimento Dias Lopes)
/** @suppress {extraProvide} */
goog.provide('jsaction.replayEventTest');
goog.setTestOnly('jsaction.replayEventTest');
goog.require('goog.testing.jsunit');
goog.require('jsaction.EventType');
goog.require('jsaction.replayEvent');
var mockEvent = {
type: 'click',
detail: 1,
screenX: 0,
screenY: 0,
clientX: 0,
clientY: 0,
ctrlKey: false,
altKey: false,
shiftKey: false,
metaKey: false,
button: 0,
relatedTarget: null,
timeStamp: 1234
};
function createEventArrayForTypes(eventTypes) {
var events = [];
for (var i = 0; i < eventTypes.length; ++i) {
events.push({'type': eventTypes[i]});
}
return events;
}
function testIsUiEvent() {
var uiEventTypes = [
jsaction.EventType.BLUR,
jsaction.EventType.FOCUS,
jsaction.EventType.FOCUSIN,
jsaction.EventType.FOCUSOUT,
jsaction.EventType.SCROLL
];
var uiEvents = createEventArrayForTypes(uiEventTypes);
for (var i = 0; i < uiEvents.length; ++i) {
assertTrue(jsaction.isUiEvent_(uiEvents[i].type));
}
assertFalse(jsaction.isUiEvent_(
{'type': jsaction.EventType.KEYUP}));
}
function testIsKeyboardEvent() {
var keyboardEventTypes = [
jsaction.EventType.KEYPRESS,
jsaction.EventType.KEYDOWN,
jsaction.EventType.KEYUP
];
var keyboardEvents = createEventArrayForTypes(keyboardEventTypes);
for (var i = 0; i < keyboardEvents.length; ++i) {
assertTrue(jsaction.isKeyboardEvent_(keyboardEvents[i].type));
}
assertFalse(jsaction.isKeyboardEvent_(jsaction.EventType.MOUSEDOWN));
}
function testIsMouseEvent() {
var mouseEventTypes = [
jsaction.EventType.CLICK,
jsaction.EventType.DBLCLICK,
jsaction.EventType.MOUSEDOWN,
jsaction.EventType.MOUSEOVER,
jsaction.EventType.MOUSEOUT,
jsaction.EventType.MOUSEMOVE
];
var mouseEvents = createEventArrayForTypes(mouseEventTypes);
for (var i = 0; i < mouseEvents.length; ++i) {
assertTrue(jsaction.isMouseEvent_(mouseEvents[i].type));
}
assertFalse(jsaction.isMouseEvent_(
{'type': jsaction.EventType.KEYUP}));
}
function testCreateUiEvent() {
var event = {
'type': jsaction.EventType.BLUR,
'bubbles': false,
'cancelable': false,
'view' : window,
'detail': 0,
'relatedTarget': null,
'timeStamp': 1234
};
var nativeEvent = jsaction.createUiEvent(event);
assertEquals(event.type, nativeEvent.type);
assertEquals(event.bubbles, nativeEvent.bubbles);
assertEquals(event.cancelable, nativeEvent.cancelable);
assertEquals(event.view, nativeEvent.view);
assertEquals(event.detail, nativeEvent.detail);
assertEquals(event.relatedTarget, nativeEvent.relatedTarget);
assertEquals(event.timeStamp, nativeEvent.originalTimestamp);
}
function testCreateKeyboardModifiersList() {
assertEquals('Alt Control Meta Shift',
jsaction.createKeyboardModifiersList_(true, true, true, true));
assertEquals('',
jsaction.createKeyboardModifiersList_(false, false, false, false));
assertEquals('Alt',
jsaction.createKeyboardModifiersList_(true, false, false, false));
assertEquals('Meta',
jsaction.createKeyboardModifiersList_(false, false, true, false));
}
function testCreateKeyboardEvent() {
var event = {
'type': jsaction.EventType.KEYPRESS,
'charCode': 13,
'keyCode': 13,
'location': 0,
'modifiers': '',
'repeat': false,
'locale': '',
'ctrlKey': false,
'altKey': false,
'shiftKey': false,
'metaKey': false,
'timeStamp': 1234
};
var nativeEvent = jsaction.createKeyboardEvent(event);
assertEquals(event.keyCode, nativeEvent.keyCode);
assertEquals(event.type, nativeEvent.type);
assertEquals(event.timeStamp, nativeEvent.originalTimestamp);
}
function testCreateMouseEvent() {
var event = {
'type': jsaction.EventType.MOUSEDOWN,
'detail': 0,
'screenX': 0,
'screenY': 0,
'clientX': 0,
'clientY': 0,
'ctrlKey': false,
'altKey': false,
'shiftKey': false,
'metaKey': false,
'button': 0,
'relatedTarget': null,
'timeStamp': 1234
};
var nativeEvent = jsaction.createMouseEvent(event);
assertEquals(event.type, nativeEvent.type);
assertEquals(event.timeStamp, nativeEvent.originalTimestamp);
}
function testCreateGenericEvent() {
var event = {
'type': jsaction.EventType.UNLOAD,
'timeStamp': 1234
};
var nativeEvent = jsaction.createGenericEvent_(event);
assertEquals(event.type, nativeEvent.type);
assertEquals(event.timeStamp, nativeEvent.originalTimestamp);
}
function testCreateEvent() {
var event = {
'type': jsaction.EventType.MOUSEDOWN,
'detail': 0,
'screenX': 0,
'screenY': 0,
'clientX': 0,
'clientY': 0,
'ctrlKey': false,
'altKey': false,
'shiftKey': false,
'metaKey': false,
'button': 0,
'relatedTarget': null,
'timeStamp': 1234
};
var nativeEvent = jsaction.createEvent(event);
assertEquals(event.type, nativeEvent.type);
assertEquals(event.timeStamp, nativeEvent.originalTimestamp);
}
function testTriggerEventWithDispatchEvent() {
var dispatchEventCalled = false;
var eventPassed = {'type': 'FOOBAR'};
var elem = {};
elem.dispatchEvent = function(event) {
dispatchEventCalled = true;
assertEquals(eventPassed, event);
return false;
};
assertFalse(jsaction.triggerEvent(elem, eventPassed));
assertTrue(dispatchEventCalled);
}
function testTriggerEventWithFireEvent() {
var fireEventCalled = false;
var eventPassed = {'type': 'FOOBAR'};
var elem = {};
elem.fireEvent = function(eventType, event) {
fireEventCalled = true;
assertEquals('onFOOBAR', eventType);
assertEquals(eventPassed, event);
return false;
};
assertFalse(jsaction.triggerEvent(elem, eventPassed));
assertTrue(fireEventCalled);
}
function testReplayEvent() {
var onclickCalled = false;
document.body.onclick = function() {
onclickCalled = true;
};
var event = jsaction.createEvent(mockEvent);
eventInfo = {
'event': event,
'targetElement': document.body
};
jsaction.replayEvent(eventInfo);
assertTrue(onclickCalled);
document.body.onclick = null;
}