Skip to content

Commit

Permalink
Added test for dom event module
Browse files Browse the repository at this point in the history
  • Loading branch information
otakustay committed Mar 29, 2013
1 parent b1756fb commit e1b0324
Show file tree
Hide file tree
Showing 2 changed files with 142 additions and 1 deletion.
141 changes: 141 additions & 0 deletions test/controlHelper.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,141 @@
define(function() {
var helper = require('esui/controlHelper');

function dispatchEvent(element, type) {
var event = document.createEvent('Event');
event.initEvent(type);
element.dispatchEvent(event);
}

describe('controlHelper', function () {
it('should be an object', function () {
expect(helper).toBeOfType('object');
});

describe('dom event module', function () {
it('should have a `addDOMEvent` method', function () {
expect(helper.addDOMEvent).toBeOfType('function');
});

it('should have a `removeDOMEvent` method', function () {
expect(helper.addDOMEvent).toBeOfType('function');
});

it('should have a `clearDOMEvents` method', function () {
expect(helper.addDOMEvent).toBeOfType('function');
});

describe('`addDOMEvent` method', function () {
it('should add an event to DOM element', function () {
var control = {};
var element = document.createElement('div');
var handler = jasmine.createSpy();

helper.addDOMEvent(control, element, 'click', handler);
dispatchEvent(element, 'click');
expect(handler).toHaveBeenCalled();
});

it('should call all event listeners when dom event is fired', function () {
var control = {};
var element = document.createElement('div');
var handlerA = jasmine.createSpy();
var handlerB = jasmine.createSpy();

helper.addDOMEvent(control, element, 'click', handlerA);
helper.addDOMEvent(control, element, 'click', handlerB);
dispatchEvent(element, 'click');
expect(handlerA).toHaveBeenCalled();
expect(handlerB).toHaveBeenCalled();
});

it('should call event listeners with attach order', function () {
var control = {};
var element = document.createElement('div');
var queue = [];
function handlerA() { queue.push('a'); }
function handlerB() { queue.push('b'); }

helper.addDOMEvent(control, element, 'click', handlerA);
helper.addDOMEvent(control, element, 'click', handlerB);
dispatchEvent(element, 'click');
expect(queue.join('')).toBe('ab');
});
});

describe('`removeDOMEvent` method', function () {
it('should remove an attached event listener', function () {
var control = {};
var element = document.createElement('div');
var handler = jasmine.createSpy();

helper.addDOMEvent(control, element, 'click', handler);
helper.removeDOMEvent(control, element, 'click', handler);
dispatchEvent(element, 'click');
expect(handler).not.toHaveBeenCalled();
});

it('should remove all event listeners if `handler` argument is omitted', function () {
var control = {};
var element = document.createElement('div');
var handlerA = jasmine.createSpy();
var handlerB = jasmine.createSpy();

helper.addDOMEvent(control, element, 'click', handlerA);
helper.addDOMEvent(control, element, 'click', handlerB);
helper.removeDOMEvent(control, element, 'click');
dispatchEvent(element, 'click');
expect(handlerA).not.toHaveBeenCalled();
expect(handlerB).not.toHaveBeenCalled();
});

it('should be ok if removing event handler is not already attached', function () {
var control = {};
var element = document.createElement('div');
var handler = jasmine.createSpy();
expect(function() { helper.removeDOMEvent(control, element, 'click', handler) }).not.toThrow();
});

it('should be ok to remove an certain type of event if no event listeners are attached', function () {
var control = {};
var element = document.createElement('div');
expect(function() { helper.removeDOMEvent(control, element, 'click') }).not.toThrow();
});
});

describe('`clearDOMEvents` method', function () {
it('should remove all events from a given element', function () {
var control = {};
var element = document.createElement('div');
var handlerA = jasmine.createSpy();
var handlerB = jasmine.createSpy();
var handlerC = jasmine.createSpy();
helper.addDOMEvent(control, element, 'click', handlerA);
helper.addDOMEvent(control, element, 'click', handlerB);
helper.addDOMEvent(control, element, 'mousedown', handlerC);
helper.clearDOMEvents(control, element);
dispatchEvent(element, 'click');
dispatchEvent(element, 'mousedown');
expect(handlerA).not.toHaveBeenCalled();
expect(handlerB).not.toHaveBeenCalled();
expect(handlerC).not.toHaveBeenCalled();
});

it('should remove all events from all elements if `element` argument is omitted', function () {
var control = {};
var elementA = document.createElement('div');
var elementB = document.createElement('div');
var handlerA = jasmine.createSpy();
var handlerB = jasmine.createSpy();
helper.addDOMEvent(control, elementA, 'click', handlerA);
helper.addDOMEvent(control, elementB, 'click', handlerB);
helper.clearDOMEvents(control);
dispatchEvent(elementA, 'click');
dispatchEvent(elementB, 'click');
expect(handlerA).not.toHaveBeenCalled();
expect(handlerB).not.toHaveBeenCalled();
});
});
});
});
});
2 changes: 1 addition & 1 deletion test/run.htm
Original file line number Diff line number Diff line change
Expand Up @@ -26,7 +26,7 @@
<script>
var container = document.getElementById('container');
var suits = [
'esui', 'Control', 'Label', 'Panel'
'esui', 'controlHelper', 'Control', 'Label', 'Panel'
];
require(
suits,
Expand Down

0 comments on commit e1b0324

Please sign in to comment.