--- /dev/null
+describe('Events', function() {\r
+ var Klass;\r
+ \r
+ beforeEach(function() {\r
+ Klass = L.Class.extend({\r
+ includes: L.Mixin.Events\r
+ });\r
+ });\r
+ \r
+ describe('#fireEvent', function() {\r
+ \r
+ it('should fire all listeners added through #addEventListener', function() {\r
+ var obj = new Klass(),\r
+ spy = jasmine.createSpy(),\r
+ spy2 = jasmine.createSpy(),\r
+ spy3 = jasmine.createSpy();\r
+ \r
+ obj.addEventListener('test', spy);\r
+ obj.addEventListener('test', spy2);\r
+ obj.addEventListener('other', spy3);\r
+ \r
+ expect(spy).not.toHaveBeenCalled();\r
+ expect(spy2).not.toHaveBeenCalled();\r
+ expect(spy3).not.toHaveBeenCalled();\r
+ \r
+ obj.fireEvent('test');\r
+ \r
+ expect(spy).toHaveBeenCalled();\r
+ expect(spy2).toHaveBeenCalled();\r
+ expect(spy3).not.toHaveBeenCalled();\r
+ });\r
+\r
+ it('should provide event object to listeners and execute them in the right context', function() {\r
+ var obj = new Klass(),\r
+ obj2 = new Klass(),\r
+ foo = {};\r
+ \r
+ function listener1(e) {\r
+ expect(e.type).toEqual('test');\r
+ expect(e.target).toEqual(obj);\r
+ expect(this).toEqual(obj);\r
+ expect(e.bar).toEqual(3);\r
+ };\r
+ \r
+ function listener2(e) {\r
+ expect(e.target).toEqual(obj2);\r
+ expect(this).toEqual(foo);\r
+ };\r
+ \r
+ obj.addEventListener('test', listener1);\r
+ obj2.addEventListener('test', listener2, foo);\r
+ \r
+ obj.fireEvent('test', {bar: 3});\r
+ });\r
+ \r
+ it('should not call listeners removed through #removeEventListener', function() {\r
+ var obj = new Klass(),\r
+ spy = jasmine.createSpy();\r
+ \r
+ obj.addEventListener('test', spy);\r
+ obj.removeEventListener('test', spy);\r
+ \r
+ obj.fireEvent('test');\r
+ \r
+ expect(spy).not.toHaveBeenCalled();\r
+ });\r
+ });\r
+ \r
+ describe('#on, #off & #fire', function() {\r
+ \r
+ it('should work like #addEventListener && #removeEventListener', function() {\r
+ var obj = new Klass(),\r
+ spy = jasmine.createSpy();\r
+ \r
+ obj.on('test', spy);\r
+ obj.fire('test');\r
+ \r
+ expect(spy).toHaveBeenCalled();\r
+ \r
+ obj.off('test', spy);\r
+ obj.fireEvent('test');\r
+ \r
+ expect(spy.callCount).toBeLessThan(2);\r
+ });\r
+ \r
+ it('should not override existing methods with the same name', function() {\r
+ var spy1 = jasmine.createSpy(),\r
+ spy2 = jasmine.createSpy(),\r
+ spy3 = jasmine.createSpy();\r
+ \r
+ var Klass2 = L.Class.extend({\r
+ includes: L.Mixin.Events,\r
+ on: spy1,\r
+ off: spy2,\r
+ fire: spy3\r
+ });\r
+ \r
+ var obj = new Klass2();\r
+ \r
+ obj.on();\r
+ expect(spy1).toHaveBeenCalled();\r
+ \r
+ obj.off();\r
+ expect(spy2).toHaveBeenCalled();\r
+ \r
+ obj.fire();\r
+ expect(spy3).toHaveBeenCalled();\r
+ });\r
+ });\r
+});
\ No newline at end of file