/ext-4.1.0_b3/src/core/test/unit/spec/EventManager.js
https://bitbucket.org/srogerf/javascript · JavaScript · 641 lines · 524 code · 116 blank · 1 comment · 14 complexity · ea23b699462d6880b3063513ee0bc22a MD5 · raw file
- describe("Ext.EventManager", function() {
- var element,
- elementWithId,
- elementWithoutId;
-
- beforeEach(function() {
- // add global variable in whitelist
- addGlobal("id");
- addGlobal("ExtBox1");
- element = document.body;
-
- elementWithId = document.createElement("DIV");
- elementWithId.id = 'element-with-id';
- element.appendChild(elementWithId);
-
- elementWithoutId = document.createElement("DIV");
- element.appendChild(elementWithoutId);
- });
-
- afterEach(function() {
- var el = Ext.get(elementWithId);
- if (el) {
- el.remove();
- }
- el = Ext.get(elementWithoutId);
- if (el) {
- el.remove();
- }
- });
-
- describe("event binding", function() {
- describe("getId", function() {
- describe("if element has an id", function() {
- it("should return element id", function() {
- expect(elementWithId.id).toBe(Ext.EventManager.getId(elementWithId));
- });
- });
-
- describe("if element hasn't an id", function() {
- var id, result;
- beforeEach(function() {
- id = 'nf-42';
- spyOn(Ext, "id").andCallFake(function(dom) {
- return (dom.id = id);
- });
- result = Ext.EventManager.getId(elementWithoutId);
- });
-
- it("should add an id to element with Ext.id", function() {
- expect(elementWithoutId.id).toBe(id);
- });
-
- it("should return the element id", function() {
- expect(result).toBe(id);
- });
-
- it("should add element to Ext.cache", function() {
- expect(Ext.cache[id].el.dom).toBe(elementWithoutId);
- });
- });
-
- describe("document and window", function() {
- describe("document", function() {
- var result;
- beforeEach(function() {
- result = Ext.EventManager.getId(document);
- });
- it("should add document Ext.Element to cache", function() {
- expect(Ext.cache[Ext.documentId].el.dom).toBe(document);
- });
-
- it("should enable skipGarbageCollection flag", function() {
- expect(Ext.cache[Ext.documentId].skipGarbageCollection).toBe(true);
- });
-
- it("should return Ext.documentId", function() {
- expect(result).toBe(Ext.documentId);
- });
- });
-
- describe("window", function() {
- var result;
- beforeEach(function() {
- result = Ext.EventManager.getId(window);
- });
-
- it("should add window Ext.Element to cache", function() {
- expect(Ext.cache[Ext.windowId].el.dom).toBe(window);
- });
-
- it("should enable skipGarbageCollection flag", function() {
- expect(Ext.cache[Ext.windowId].skipGarbageCollection).toBe(true);
- });
-
- it("should return Ext.windowId", function() {
- expect(result).toBe(Ext.windowId);
- });
- });
- });
- });
-
- describe("prepareListenerConfig", function() {
- var config, configWithFn;
-
- beforeEach(function() {
- config = {
- click: Ext.emptyFn,
- scope: fakeScope
- };
-
- configWithFn = {
- click: {
- fn: Ext.emptyFn,
- scope: fakeScope
- }
- };
- spyOn(Ext.EventManager, "removeListener");
- spyOn(Ext.EventManager, "addListener");
- });
-
- describe("if remove", function() {
- describe("with an object like click: function(){}, scope: this", function() {
- it("should call removeListener", function() {
- Ext.EventManager.prepareListenerConfig(element, config, true);
- expect(Ext.EventManager.removeListener).toHaveBeenCalledWith(element, 'click', Ext.emptyFn, fakeScope, config);
- });
- });
-
- describe("with an object like click: {fn: function(){}, scope: this}", function() {
- it("should call removeListener", function() {
- Ext.EventManager.prepareListenerConfig(element, configWithFn, true);
- expect(Ext.EventManager.removeListener).toHaveBeenCalledWith(element, 'click', Ext.emptyFn, fakeScope, configWithFn.click);
- });
- });
- });
-
- describe("if add", function() {
- describe("with an object like click: function(){}, scope: this", function() {
- it("should call addListener", function() {
- Ext.EventManager.prepareListenerConfig(element, config);
- expect(Ext.EventManager.addListener).toHaveBeenCalledWith(element, 'click', Ext.emptyFn, fakeScope, config);
- });
- });
-
- describe("with an object like click: {fn: function(){}, scope: this}", function() {
- it("should call addListener", function() {
- Ext.EventManager.prepareListenerConfig(element, configWithFn);
- expect(Ext.EventManager.addListener).toHaveBeenCalledWith(element, 'click', Ext.emptyFn, fakeScope, configWithFn.click);
- });
- });
- });
- });
-
- describe("addListener", function() {
- describe("if eventName is an object", function() {
- var eventName;
-
- beforeEach(function() {
- eventName = {};
- });
-
- it("should call prepareListenerConfig", function() {
- spyOn(Ext.EventManager, "prepareListenerConfig");
- Ext.EventManager.addListener(element, eventName);
- expect(Ext.EventManager.prepareListenerConfig).toHaveBeenCalledWith(element, eventName);
- });
- });
-
- describe("event firing", function() {
- var config;
-
- beforeEach(function() {
- config = {
- click: {
- fn: jasmine.createSpy(),
- scope: fakeScope
- }
- };
-
- Ext.EventManager.addListener(element, config);
- });
-
- afterEach(function() {
- Ext.EventManager.removeListener(element, config);
- });
-
- it("should call the listener", function() {
- jasmine.fireMouseEvent(element, "click", 1, 1);
-
- expect(config.click.fn).toHaveBeenCalled();
- });
-
- });
-
- describe("options", function() {
- var config;
-
- afterEach(function() {
- Ext.EventManager.removeListener(element, config);
- });
-
- describe("scope", function() {
- it("should call the listener with the correct scope", function() {
- config = {
- click: {
- fn: jasmine.createSpy(),
- scope: fakeScope
- }
- };
-
- Ext.EventManager.addListener(element, config);
- jasmine.fireMouseEvent(element, "click", 1, 1);
- expect(config.click.fn.calls[0].object).toBe(fakeScope);
- });
- });
-
- describe("delegate", function() {
- var child;
- beforeEach(function() {
- config = {
- click: {
- fn: jasmine.createSpy(),
- delegate: ".something",
- scope: fakeScope
- }
- };
-
- child = Ext.get(element).createChild({
- cls: "child"
- }).dom;
- });
-
- afterEach(function() {
- var elChild = Ext.get(child);
- if (elChild) {
- elChild.remove();
- }
- });
-
- describe("if filter found nothing", function() {
- it("should not call the listener", function() {
- Ext.EventManager.addListener(element, config);
- jasmine.fireMouseEvent(child, "click", 1, 1);
-
- expect(config.click.fn).not.toHaveBeenCalled();
- });
- });
-
- describe("if filter found something", function() {
- it("should call the listener", function() {
- Ext.get(child).addCls("something");
- Ext.EventManager.addListener(element, config);
- jasmine.fireMouseEvent(child, "click", 1, 1);
-
- expect(config.click.fn).toHaveBeenCalled();
- });
- });
-
- describe("stopevent", function() {
- var checkbox;
-
- beforeEach(function() {
- config = {
- click: {
- fn: jasmine.createSpy(),
- stopEvent: true,
- scope: fakeScope
- }
- };
-
- checkbox = Ext.get(element).createChild({
- tag: "input",
- type: "checkbox"
- }).dom;
-
- Ext.EventManager.addListener(element, config);
- Ext.EventManager.addListener(checkbox, config);
- if (jasmine.browser.isIE) {
- checkbox.click();
- } else {
- jasmine.fireMouseEvent(checkbox, "click", 1, 1);
- }
- });
-
- afterEach(function() {
- var checkBoxEl = Ext.get(checkbox);
- if (checkBoxEl) {
- checkBoxEl.remove();
- }
- Ext.EventManager.removeListener(checkbox, config);
- });
-
- it("should stop propagation to parent elements", function() {
- expect(config.click.fn.calls.length).toEqual(1);
- });
-
- it("should prevent default browser handling of the event", function() {
- expect(checkbox.checked).toBe(false);
- });
- });
-
- describe("preventDefault", function() {
- var checkbox;
-
- beforeEach(function() {
- config = {
- click: {
- fn: jasmine.createSpy(),
- preventDefault: true,
- scope: fakeScope
- }
- };
-
- checkbox = Ext.get(element).createChild({
- tag: "input",
- type: "checkbox"
- }).dom;
-
- Ext.EventManager.addListener(element, config);
- Ext.EventManager.addListener(checkbox, config);
- if (jasmine.browser.isIE) {
- checkbox.click();
- } else {
- jasmine.fireMouseEvent(checkbox, "click", 1, 1);
- }
- });
-
- afterEach(function() {
- var checkBoxEl = Ext.get(checkbox);
- if (checkBoxEl) {
- checkBoxEl.remove();
- }
- Ext.EventManager.removeListener(checkbox, config);
- });
-
- it("should prevent default browser handling of the event", function() {
- expect(checkbox.checked).toBe(false);
- });
-
- it("should not stop the propagation of the event", function() {
- expect(config.click.fn.calls.length).toEqual(2);
- });
- });
-
- describe("stopPropagation", function() {
- var checkbox;
-
- beforeEach(function() {
- config = {
- click: {
- fn: jasmine.createSpy(),
- stopPropagation: true,
- scope: fakeScope
- }
- };
-
- checkbox = Ext.getBody().createChild({
- tag: "input",
- type: "checkbox"
- }).dom;
-
- Ext.EventManager.addListener(element, config);
- Ext.EventManager.addListener(checkbox, config);
- if (jasmine.browser.isIE) {
- checkbox.click();
- } else {
- jasmine.fireMouseEvent(checkbox, "click", 1, 1);
- }
-
- });
-
- afterEach(function() {
- var checkBoxEl = Ext.get(checkbox);
- if (checkBoxEl) {
- checkBoxEl.remove();
- }
- Ext.EventManager.removeListener(checkbox, config);
- });
-
- it("should stop propagation to parent elements", function() {
- expect(config.click.fn.calls.length).toEqual(1);
- });
-
- it("should not prevent default browser handling of the event", function() {
- expect(checkbox.checked).toBe(true);
- });
- });
-
- describe("normalized", function() {
- var event;
- beforeEach(function() {
- config = {
- click: {
- fn: jasmine.createSpy(),
- normalized: false,
- scope: fakeScope
- }
- };
-
- Ext.EventManager.addListener(element, config);
- event = jasmine.fireMouseEvent(element, "click", 1, 1);
- });
-
- it("should pass a browser event instead of an Ext.EventObject", function() {
- expect(config.click.fn).toHaveBeenCalledWith(event, element, config.click);
- });
- });
-
- describe("delay", function() {
- beforeEach(function() {
- config = {
- click: {
- fn: jasmine.createSpy(),
- delay: 1,
- scope: fakeScope
- }
- };
-
- Ext.EventManager.addListener(element, config);
- });
-
- it("should not call listener before 1 ms", function() {
- jasmine.fireMouseEvent(element, "click", 1, 1);
- expect(config.click.fn).not.toHaveBeenCalled();
- });
-
- it("should call listener after 1 ms", function() {
- runs(function() {
- jasmine.fireMouseEvent(element, "click", 1, 1);
- });
-
- waits(1);
-
- runs(function() {
- expect(config.click.fn).toHaveBeenCalled();
- });
- });
- });
-
- describe("single", function() {
- beforeEach(function() {
- config = {
- click: {
- fn: jasmine.createSpy(),
- single: true,
- scope: fakeScope
- }
- };
-
- Ext.EventManager.addListener(element, config);
- jasmine.fireMouseEvent(element, "click", 1, 1);
- jasmine.fireMouseEvent(element, "click", 1, 1);
- });
-
- it("should call listener only one time", function() {
- expect(config.click.fn.calls.length).toEqual(1);
- });
- });
-
- describe("buffer", function() {
- beforeEach(function() {
- config = {
- click: {
- fn: jasmine.createSpy(),
- buffer: 1,
- scope: fakeScope
- }
- };
-
- Ext.EventManager.addListener(element, config);
- jasmine.fireMouseEvent(element, "click", 1, 1);
- jasmine.fireMouseEvent(element, "click", 1, 1);
- });
-
- it("should call listener only one time", function() {
- waits(1);
- runs(function() {
- expect(config.click.fn.calls.length).toEqual(1);
- });
- });
- });
-
- describe("target", function() {
- var child;
- beforeEach(function() {
- child = Ext.get(element).createChild({
- }).dom;
-
- config = {
- click: {
- fn: jasmine.createSpy(),
- target: element,
- scope: fakeScope
- }
- };
-
- Ext.EventManager.addListener(element, config);
- });
-
- afterEach(function() {
- var childEl = Ext.get(child);
- if (childEl) {
- childEl.remove();
- }
- });
-
- it("should call listener if element event is fired", function() {
- jasmine.fireMouseEvent(element, "click", 1, 1);
- expect(config.click.fn).toHaveBeenCalled();
- });
-
- it("should not call listener if child event is fired (no bubbling)", function() {
- jasmine.fireMouseEvent(child, "click", 1, 1);
- expect(config.click.fn).not.toHaveBeenCalled();
- });
- });
- });
- });
- });
-
- describe("removeListener", function() {
- describe("if eventName is an object", function() {
- it("should call prepareListenerConfig", function() {
- var eventName = {};
- spyOn(Ext.EventManager, "prepareListenerConfig");
- Ext.EventManager.removeListener(element, eventName);
- expect(Ext.EventManager.prepareListenerConfig).toHaveBeenCalledWith(element, eventName, true);
- });
- });
-
- describe("event firing", function() {
- var config;
-
- beforeEach(function() {
- config = {
- click: {
- fn: jasmine.createSpy(),
- scope: fakeScope
- }
- };
-
- Ext.EventManager.addListener(element, config);
- Ext.EventManager.removeListener(element, config);
- });
-
- it("should not call the listener", function() {
- jasmine.fireMouseEvent(element, "click", 1, 1);
-
- expect(config.click.fn).not.toHaveBeenCalled();
- });
- });
- });
-
- describe("removeAll", function() {
- var config;
- beforeEach(function() {
- config = {
- click: {
- fn: jasmine.createSpy(),
- scope: fakeScope
- },
- mouseover: {
- fn: jasmine.createSpy(),
- scope: fakeScope
- }
- };
-
- Ext.EventManager.addListener(element, config);
- Ext.EventManager.removeAll(element, config);
- });
-
- it("should should not call click listener", function() {
- jasmine.fireMouseEvent(element, "click", 1, 1);
-
- expect(config.click.fn).not.toHaveBeenCalled();
- });
-
- it("should not call mouseover listener", function() {
- jasmine.fireMouseEvent(element, "mouseover", 1, 1);
-
- expect(config.mouseover.fn).not.toHaveBeenCalled();
- });
- });
-
- describe("purgeElement", function() {
- var child, config;
-
- beforeEach(function() {
- child = Ext.get(element).createChild({
- cls: "child"
- }).dom;
-
- config = {
- mouseover: {
- fn: jasmine.createSpy(),
- scope: fakeScope
- }
- };
-
- Ext.EventManager.addListener(element, config);
- Ext.EventManager.addListener(child, config);
- Ext.EventManager.purgeElement(element);
- });
-
- afterEach(function() {
- var childEl = Ext.get(child);
- if (childEl) {
- childEl.remove();
- }
- });
-
- it("should remove all listeners from element", function() {
- jasmine.fireMouseEvent(element, "mouseover", 1, 1);
- expect(config.mouseover.fn).not.toHaveBeenCalled();
- });
-
- it("should remove all listeners from element children", function() {
- jasmine.fireMouseEvent(child, "mouseover", 1, 1);
-
- expect(config.mouseover.fn).not.toHaveBeenCalled();
- });
- });
-
- describe("methods alias", function() {
- it("should alias addListener with on", function() {
- expect(Ext.EventManager.on).toBe(Ext.EventManager.addListener);
- });
-
- it("should alias removeListener with un", function() {
- expect(Ext.EventManager.un).toBe(Ext.EventManager.removeListener);
- });
- });
- });
- });