Installed leaflet in extlib
[mediagoblin.git] / extlib / leaflet / spec / suites / core / EventsSpec.js
diff --git a/extlib/leaflet/spec/suites/core/EventsSpec.js b/extlib/leaflet/spec/suites/core/EventsSpec.js
new file mode 100644 (file)
index 0000000..be14386
--- /dev/null
@@ -0,0 +1,110 @@
+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