leaflet-ruby 0.3.beta1

Sign up to get free protection for your applications and to get access to all the features.
Files changed (141) hide show
  1. data/CHANGELOG.rdoc +5 -0
  2. data/LICENSE +21 -0
  3. data/README.rdoc +55 -0
  4. data/Rakefile +15 -0
  5. data/leaflet-ruby.gemspec +24 -0
  6. data/lib/leaflet-ruby.rb +18 -0
  7. data/lib/leaflet/CHANGELOG.md +181 -0
  8. data/lib/leaflet/Jakefile.js +65 -0
  9. data/lib/leaflet/LICENSE +22 -0
  10. data/lib/leaflet/README.md +32 -0
  11. data/lib/leaflet/build/build.html +243 -0
  12. data/lib/leaflet/build/build.js +79 -0
  13. data/lib/leaflet/build/deps.js +231 -0
  14. data/lib/leaflet/build/hint.js +30 -0
  15. data/lib/leaflet/build/hintrc.js +44 -0
  16. data/lib/leaflet/debug/control/control-layers.html +47 -0
  17. data/lib/leaflet/debug/control/map-control.html +29 -0
  18. data/lib/leaflet/debug/css/mobile.css +6 -0
  19. data/lib/leaflet/debug/css/screen.css +5 -0
  20. data/lib/leaflet/debug/geojson/geojson-sample.js +53 -0
  21. data/lib/leaflet/debug/geojson/geojson.html +56 -0
  22. data/lib/leaflet/debug/leaflet-include.js +120 -0
  23. data/lib/leaflet/debug/map/canvas.html +46 -0
  24. data/lib/leaflet/debug/map/map-mobile.html +42 -0
  25. data/lib/leaflet/debug/map/map.html +54 -0
  26. data/lib/leaflet/debug/map/max-bounds.html +36 -0
  27. data/lib/leaflet/debug/map/scroll.html +35 -0
  28. data/lib/leaflet/debug/map/wms-marble.html +30 -0
  29. data/lib/leaflet/debug/map/wms.html +37 -0
  30. data/lib/leaflet/debug/vector/editable.html +43 -0
  31. data/lib/leaflet/debug/vector/route.js +1 -0
  32. data/lib/leaflet/debug/vector/vector-bounds.html +69 -0
  33. data/lib/leaflet/debug/vector/vector-canvas.html +92 -0
  34. data/lib/leaflet/debug/vector/vector-mobile.html +38 -0
  35. data/lib/leaflet/debug/vector/vector-simple.html +63 -0
  36. data/lib/leaflet/debug/vector/vector.html +38 -0
  37. data/lib/leaflet/dist/images/layers.png +0 -0
  38. data/lib/leaflet/dist/images/marker-shadow.png +0 -0
  39. data/lib/leaflet/dist/images/marker.png +0 -0
  40. data/lib/leaflet/dist/images/popup-close.png +0 -0
  41. data/lib/leaflet/dist/images/zoom-in.png +0 -0
  42. data/lib/leaflet/dist/images/zoom-out.png +0 -0
  43. data/lib/leaflet/dist/leaflet-src.js +5537 -0
  44. data/lib/leaflet/dist/leaflet.css +323 -0
  45. data/lib/leaflet/dist/leaflet.ie.css +48 -0
  46. data/lib/leaflet/dist/leaflet.js +6 -0
  47. data/lib/leaflet/lib/jasmine/jasmine-html.js +182 -0
  48. data/lib/leaflet/lib/jasmine/jasmine.css +166 -0
  49. data/lib/leaflet/lib/jasmine/jasmine.js +2421 -0
  50. data/lib/leaflet/spec/runner.html +57 -0
  51. data/lib/leaflet/spec/suites/LeafletSpec.js +15 -0
  52. data/lib/leaflet/spec/suites/SpecHelper.js +28 -0
  53. data/lib/leaflet/spec/suites/core/ClassSpec.js +153 -0
  54. data/lib/leaflet/spec/suites/core/EventsSpec.js +110 -0
  55. data/lib/leaflet/spec/suites/core/UtilSpec.js +63 -0
  56. data/lib/leaflet/spec/suites/dom/DomEventSpec.js +102 -0
  57. data/lib/leaflet/spec/suites/dom/DomUtilSpec.js +59 -0
  58. data/lib/leaflet/spec/suites/geo/LatLngBoundsSpec.js +1 -0
  59. data/lib/leaflet/spec/suites/geo/LatLngSpec.js +76 -0
  60. data/lib/leaflet/spec/suites/geo/ProjectionSpec.js +42 -0
  61. data/lib/leaflet/spec/suites/geometry/BoundsSpec.js +53 -0
  62. data/lib/leaflet/spec/suites/geometry/PointSpec.js +45 -0
  63. data/lib/leaflet/spec/suites/geometry/TransformationSpec.js +19 -0
  64. data/lib/leaflet/spec/suites/layer/TileLayerSpec.js +1 -0
  65. data/lib/leaflet/spec/suites/layer/vector/PolylineGeometrySpec.js +35 -0
  66. data/lib/leaflet/spec/suites/map/MapSpec.js +1 -0
  67. data/lib/leaflet/src/Leaflet.js +33 -0
  68. data/lib/leaflet/src/control/Control.Attribution.js +66 -0
  69. data/lib/leaflet/src/control/Control.Layers.js +167 -0
  70. data/lib/leaflet/src/control/Control.Zoom.js +36 -0
  71. data/lib/leaflet/src/control/Control.js +9 -0
  72. data/lib/leaflet/src/core/Browser.js +53 -0
  73. data/lib/leaflet/src/core/Class.js +66 -0
  74. data/lib/leaflet/src/core/Events.js +62 -0
  75. data/lib/leaflet/src/core/Handler.js +29 -0
  76. data/lib/leaflet/src/core/Util.js +108 -0
  77. data/lib/leaflet/src/dom/DomEvent.DoubleTap.js +43 -0
  78. data/lib/leaflet/src/dom/DomEvent.js +154 -0
  79. data/lib/leaflet/src/dom/DomUtil.js +155 -0
  80. data/lib/leaflet/src/dom/Draggable.js +147 -0
  81. data/lib/leaflet/src/dom/transition/Transition.Native.js +102 -0
  82. data/lib/leaflet/src/dom/transition/Transition.Timer.js +126 -0
  83. data/lib/leaflet/src/dom/transition/Transition.js +28 -0
  84. data/lib/leaflet/src/geo/LatLng.js +44 -0
  85. data/lib/leaflet/src/geo/LatLngBounds.js +86 -0
  86. data/lib/leaflet/src/geo/crs/CRS.EPSG3395.js +13 -0
  87. data/lib/leaflet/src/geo/crs/CRS.EPSG3857.js +17 -0
  88. data/lib/leaflet/src/geo/crs/CRS.EPSG4326.js +7 -0
  89. data/lib/leaflet/src/geo/crs/CRS.js +17 -0
  90. data/lib/leaflet/src/geo/projection/Projection.LonLat.js +10 -0
  91. data/lib/leaflet/src/geo/projection/Projection.Mercator.js +51 -0
  92. data/lib/leaflet/src/geo/projection/Projection.SphericalMercator.js +23 -0
  93. data/lib/leaflet/src/geo/projection/Projection.js +5 -0
  94. data/lib/leaflet/src/geometry/Bounds.js +50 -0
  95. data/lib/leaflet/src/geometry/LineUtil.js +194 -0
  96. data/lib/leaflet/src/geometry/Point.js +66 -0
  97. data/lib/leaflet/src/geometry/PolyUtil.js +59 -0
  98. data/lib/leaflet/src/geometry/Transformation.js +31 -0
  99. data/lib/leaflet/src/layer/FeatureGroup.js +40 -0
  100. data/lib/leaflet/src/layer/GeoJSON.js +104 -0
  101. data/lib/leaflet/src/layer/ImageOverlay.js +58 -0
  102. data/lib/leaflet/src/layer/LayerGroup.js +74 -0
  103. data/lib/leaflet/src/layer/Popup.js +179 -0
  104. data/lib/leaflet/src/layer/marker/Icon.js +58 -0
  105. data/lib/leaflet/src/layer/marker/Marker.Drag.js +57 -0
  106. data/lib/leaflet/src/layer/marker/Marker.Popup.js +42 -0
  107. data/lib/leaflet/src/layer/marker/Marker.js +142 -0
  108. data/lib/leaflet/src/layer/tile/TileLayer.Canvas.js +41 -0
  109. data/lib/leaflet/src/layer/tile/TileLayer.WMS.js +47 -0
  110. data/lib/leaflet/src/layer/tile/TileLayer.js +310 -0
  111. data/lib/leaflet/src/layer/vector/Circle.js +68 -0
  112. data/lib/leaflet/src/layer/vector/CircleMarker.js +25 -0
  113. data/lib/leaflet/src/layer/vector/MultiPoly.js +34 -0
  114. data/lib/leaflet/src/layer/vector/Path.Popup.js +24 -0
  115. data/lib/leaflet/src/layer/vector/Path.SVG.js +138 -0
  116. data/lib/leaflet/src/layer/vector/Path.VML.js +93 -0
  117. data/lib/leaflet/src/layer/vector/Path.js +88 -0
  118. data/lib/leaflet/src/layer/vector/Polygon.js +64 -0
  119. data/lib/leaflet/src/layer/vector/Polyline.js +146 -0
  120. data/lib/leaflet/src/layer/vector/canvas/Circle.Canvas.js +18 -0
  121. data/lib/leaflet/src/layer/vector/canvas/Path.Canvas.js +146 -0
  122. data/lib/leaflet/src/layer/vector/canvas/Polygon.Canvas.js +34 -0
  123. data/lib/leaflet/src/layer/vector/canvas/Polyline.Canvas.js +27 -0
  124. data/lib/leaflet/src/map/Map.js +613 -0
  125. data/lib/leaflet/src/map/anim/Map.PanAnimation.js +70 -0
  126. data/lib/leaflet/src/map/anim/Map.ZoomAnimation.js +133 -0
  127. data/lib/leaflet/src/map/ext/Map.Control.js +50 -0
  128. data/lib/leaflet/src/map/ext/Map.Geolocation.js +86 -0
  129. data/lib/leaflet/src/map/ext/Map.Popup.js +20 -0
  130. data/lib/leaflet/src/map/handler/Map.BoxZoom.js +73 -0
  131. data/lib/leaflet/src/map/handler/Map.DoubleClickZoom.js +18 -0
  132. data/lib/leaflet/src/map/handler/Map.Drag.js +81 -0
  133. data/lib/leaflet/src/map/handler/Map.ScrollWheelZoom.js +55 -0
  134. data/lib/leaflet/src/map/handler/Map.TouchZoom.js +93 -0
  135. data/lib/zerista/CRS.Cartesian.js +20 -0
  136. data/lib/zerista/Projection.Identity.js +11 -0
  137. data/lib/zerista/zerista_layer.js +97 -0
  138. data/vendor/assets/javascripts/leaflet.js +139 -0
  139. data/vendor/assets/stylesheets/leaflet.css +1 -0
  140. data/vendor/assets/stylesheets/leaflet.ie.css +1 -0
  141. metadata +185 -0
@@ -0,0 +1,57 @@
1
+ <!DOCTYPE html>
2
+ <html>
3
+ <head>
4
+ <title>Jasmine Test Runner</title>
5
+ <link rel="stylesheet" type="text/css" href="../lib/jasmine/jasmine.css">
6
+ <script type="text/javascript" src="../lib/jasmine/jasmine.js"></script>
7
+ <script type="text/javascript" src="../lib/jasmine/jasmine-html.js"></script>
8
+
9
+ <!-- source files -->
10
+
11
+ <script type="text/javascript">
12
+ L = 'test'; //to test L#noConflict later
13
+ </script>
14
+
15
+ <script type="text/javascript" src="../debug/leaflet-include.js"></script>
16
+
17
+
18
+ <!-- spec files -->
19
+
20
+ <script type="text/javascript" src="suites/SpecHelper.js"></script>
21
+ <script type="text/javascript" src="suites/LeafletSpec.js"></script>
22
+
23
+ <!-- /core -->
24
+ <script type="text/javascript" src="suites/core/UtilSpec.js"></script>
25
+ <script type="text/javascript" src="suites/core/ClassSpec.js"></script>
26
+ <script type="text/javascript" src="suites/core/EventsSpec.js"></script>
27
+
28
+ <!-- /geometry -->
29
+ <script type="text/javascript" src="suites/geometry/PointSpec.js"></script>
30
+ <script type="text/javascript" src="suites/geometry/BoundsSpec.js"></script>
31
+ <script type="text/javascript" src="suites/geometry/TransformationSpec.js"></script>
32
+
33
+ <!-- /geo -->
34
+ <script type="text/javascript" src="suites/geo/LatLngSpec.js"></script>
35
+ <script type="text/javascript" src="suites/geo/LatLngBoundsSpec.js"></script>
36
+ <script type="text/javascript" src="suites/geo/ProjectionSpec.js"></script>
37
+
38
+ <!-- /dom -->
39
+ <script type="text/javascript" src="suites/dom/DomEventSpec.js"></script>
40
+ <script type="text/javascript" src="suites/dom/DomUtilSpec.js"></script>
41
+
42
+ <!-- /layer -->
43
+ <script type="text/javascript" src="suites/layer/TileLayerSpec.js"></script>
44
+ <script type="text/javascript" src="suites/layer/vector/PolylineGeometrySpec.js"></script>
45
+
46
+ <!-- /map -->
47
+ <script type="text/javascript" src="suites/map/MapSpec.js"></script>
48
+ </head>
49
+ <body>
50
+
51
+ <script type="text/javascript">
52
+ jasmine.getEnv().addReporter(new jasmine.TrivialReporter());
53
+ jasmine.getEnv().execute();
54
+ </script>
55
+
56
+ </body>
57
+ </html>
@@ -0,0 +1,15 @@
1
+ describe('L#noConflict', function() {
2
+ it('should restore the previous L value and return Leaflet namespace', function(){
3
+
4
+ expect(L.VERSION).toBeDefined();
5
+
6
+ var L2 = L.noConflict();
7
+
8
+ expect(L).toEqual('test');
9
+ expect(L2.VERSION).toBeDefined();
10
+
11
+ this.after(function() {
12
+ window.L = L2;
13
+ });
14
+ });
15
+ });
@@ -0,0 +1,28 @@
1
+ function noSpecs() {
2
+ xit('should have specs', function() {
3
+ expect('specs').toBe();
4
+ });
5
+ }
6
+
7
+ if (!Array.prototype.map) {
8
+ Array.prototype.map = function(fun /*, thisp */) {
9
+ "use strict";
10
+
11
+ if (this === void 0 || this === null)
12
+ throw new TypeError();
13
+
14
+ var t = Object(this);
15
+ var len = t.length >>> 0;
16
+ if (typeof fun !== "function")
17
+ throw new TypeError();
18
+
19
+ var res = new Array(len);
20
+ var thisp = arguments[1];
21
+ for (var i = 0; i < len; i++) {
22
+ if (i in t)
23
+ res[i] = fun.call(thisp, t[i], i, t);
24
+ }
25
+
26
+ return res;
27
+ };
28
+ }
@@ -0,0 +1,153 @@
1
+ describe("Class", function() {
2
+
3
+ describe("#extend", function() {
4
+ var Klass,
5
+ constructor,
6
+ method;
7
+
8
+ beforeEach(function() {
9
+ constructor = jasmine.createSpy("Klass constructor");
10
+ method = jasmine.createSpy("Klass#bar method");
11
+
12
+ Klass = L.Class.extend({
13
+ statics: {bla: 1},
14
+ includes: {mixin: true},
15
+
16
+ initialize: constructor,
17
+ foo: 5,
18
+ bar: method
19
+ });
20
+ });
21
+
22
+ it("should create a class with the given constructor & properties", function() {
23
+ var a = new Klass();
24
+
25
+ expect(constructor).toHaveBeenCalled();
26
+ expect(a.foo).toEqual(5);
27
+
28
+ a.bar();
29
+
30
+ expect(method).toHaveBeenCalled();
31
+ });
32
+
33
+ it("should inherit parent classes' constructor & properties", function() {
34
+ var Klass2 = Klass.extend({baz: 2});
35
+
36
+ var b = new Klass2();
37
+
38
+ expect(b instanceof Klass).toBeTruthy();
39
+ expect(b instanceof Klass2).toBeTruthy();
40
+
41
+ expect(constructor).toHaveBeenCalled();
42
+ expect(b.baz).toEqual(2);
43
+
44
+ b.bar();
45
+
46
+ expect(method).toHaveBeenCalled();
47
+ });
48
+
49
+ it("should grant the ability to call parent methods, including constructor", function() {
50
+ var Klass2 = Klass.extend({
51
+ initialize: function() {},
52
+ bar: function() {}
53
+ });
54
+
55
+ var b = new Klass2();
56
+
57
+ expect(constructor).not.toHaveBeenCalled();
58
+ b.constructor.superclass.initialize.call(this);
59
+ expect(constructor).toHaveBeenCalled();
60
+
61
+ b.constructor.superclass.bar.call(this);
62
+ expect(method).toHaveBeenCalled();
63
+ });
64
+
65
+ it("should support static properties", function() {
66
+ expect(Klass.bla).toEqual(1);
67
+ });
68
+
69
+ it("should inherit parent static properties", function() {
70
+ var Klass2 = Klass.extend({});
71
+
72
+ expect(Klass2.bla).toEqual(1);
73
+ });
74
+
75
+ it("should override parent static properties", function() {
76
+ var Klass2 = Klass.extend({statics: {bla: 2}});
77
+
78
+ expect(Klass2.bla).toEqual(2);
79
+ });
80
+
81
+ it("should include the given mixin", function() {
82
+ var a = new Klass();
83
+ expect(a.mixin).toBeTruthy();
84
+ });
85
+
86
+ it("should be able to include multiple mixins", function() {
87
+ var Klass2 = L.Class.extend({
88
+ includes: [{mixin: true}, {mixin2: true}]
89
+ });
90
+ var a = new Klass2();
91
+
92
+ expect(a.mixin).toBeTruthy();
93
+ expect(a.mixin2).toBeTruthy();
94
+ });
95
+
96
+ it("should grant the ability to include the given mixin", function() {
97
+ Klass.include({mixin2: true});
98
+
99
+ var a = new Klass();
100
+ expect(a.mixin2).toBeTruthy();
101
+ });
102
+
103
+ it("should merge options instead of replacing them", function() {
104
+ var KlassWithOptions1 = L.Class.extend({
105
+ options: {
106
+ foo1: 1,
107
+ foo2: 2
108
+ }
109
+ });
110
+ var KlassWithOptions2 = KlassWithOptions1.extend({
111
+ options: {
112
+ foo2: 3,
113
+ foo3: 4
114
+ }
115
+ });
116
+
117
+ var a = new KlassWithOptions2();
118
+
119
+ expect(a.options).toEqual({
120
+ foo1: 1,
121
+ foo2: 3,
122
+ foo3: 4
123
+ });
124
+ });
125
+
126
+ it("should have working superclass access with inheritance level > 2", function() {
127
+ var constructor2 = jasmine.createSpy("Klass2 constructor"),
128
+ constructor3 = jasmine.createSpy("Klass3 constructor");
129
+
130
+ var Klass2 = Klass.extend({
131
+ initialize: function() {
132
+ constructor2();
133
+ expect(Klass2.superclass).toBe(Klass.prototype);
134
+ Klass2.superclass.initialize.apply(this, arguments);
135
+ }
136
+ });
137
+
138
+ var Klass3 = Klass2.extend({
139
+ initialize: function() {
140
+ constructor3();
141
+ expect(Klass3.superclass).toBe(Klass2.prototype);
142
+ Klass3.superclass.initialize.apply(this, arguments);
143
+ }
144
+ });
145
+
146
+ var a = new Klass3();
147
+
148
+ expect(constructor3).toHaveBeenCalled();
149
+ expect(constructor2).toHaveBeenCalled();
150
+ expect(constructor).toHaveBeenCalled();
151
+ });
152
+ });
153
+ });
@@ -0,0 +1,110 @@
1
+ describe('Events', function() {
2
+ var Klass;
3
+
4
+ beforeEach(function() {
5
+ Klass = L.Class.extend({
6
+ includes: L.Mixin.Events
7
+ });
8
+ });
9
+
10
+ describe('#fireEvent', function() {
11
+
12
+ it('should fire all listeners added through #addEventListener', function() {
13
+ var obj = new Klass(),
14
+ spy = jasmine.createSpy(),
15
+ spy2 = jasmine.createSpy(),
16
+ spy3 = jasmine.createSpy();
17
+
18
+ obj.addEventListener('test', spy);
19
+ obj.addEventListener('test', spy2);
20
+ obj.addEventListener('other', spy3);
21
+
22
+ expect(spy).not.toHaveBeenCalled();
23
+ expect(spy2).not.toHaveBeenCalled();
24
+ expect(spy3).not.toHaveBeenCalled();
25
+
26
+ obj.fireEvent('test');
27
+
28
+ expect(spy).toHaveBeenCalled();
29
+ expect(spy2).toHaveBeenCalled();
30
+ expect(spy3).not.toHaveBeenCalled();
31
+ });
32
+
33
+ it('should provide event object to listeners and execute them in the right context', function() {
34
+ var obj = new Klass(),
35
+ obj2 = new Klass(),
36
+ foo = {};
37
+
38
+ function listener1(e) {
39
+ expect(e.type).toEqual('test');
40
+ expect(e.target).toEqual(obj);
41
+ expect(this).toEqual(obj);
42
+ expect(e.bar).toEqual(3);
43
+ };
44
+
45
+ function listener2(e) {
46
+ expect(e.target).toEqual(obj2);
47
+ expect(this).toEqual(foo);
48
+ };
49
+
50
+ obj.addEventListener('test', listener1);
51
+ obj2.addEventListener('test', listener2, foo);
52
+
53
+ obj.fireEvent('test', {bar: 3});
54
+ });
55
+
56
+ it('should not call listeners removed through #removeEventListener', function() {
57
+ var obj = new Klass(),
58
+ spy = jasmine.createSpy();
59
+
60
+ obj.addEventListener('test', spy);
61
+ obj.removeEventListener('test', spy);
62
+
63
+ obj.fireEvent('test');
64
+
65
+ expect(spy).not.toHaveBeenCalled();
66
+ });
67
+ });
68
+
69
+ describe('#on, #off & #fire', function() {
70
+
71
+ it('should work like #addEventListener && #removeEventListener', function() {
72
+ var obj = new Klass(),
73
+ spy = jasmine.createSpy();
74
+
75
+ obj.on('test', spy);
76
+ obj.fire('test');
77
+
78
+ expect(spy).toHaveBeenCalled();
79
+
80
+ obj.off('test', spy);
81
+ obj.fireEvent('test');
82
+
83
+ expect(spy.callCount).toBeLessThan(2);
84
+ });
85
+
86
+ it('should not override existing methods with the same name', function() {
87
+ var spy1 = jasmine.createSpy(),
88
+ spy2 = jasmine.createSpy(),
89
+ spy3 = jasmine.createSpy();
90
+
91
+ var Klass2 = L.Class.extend({
92
+ includes: L.Mixin.Events,
93
+ on: spy1,
94
+ off: spy2,
95
+ fire: spy3
96
+ });
97
+
98
+ var obj = new Klass2();
99
+
100
+ obj.on();
101
+ expect(spy1).toHaveBeenCalled();
102
+
103
+ obj.off();
104
+ expect(spy2).toHaveBeenCalled();
105
+
106
+ obj.fire();
107
+ expect(spy3).toHaveBeenCalled();
108
+ });
109
+ });
110
+ });
@@ -0,0 +1,63 @@
1
+ describe('Util', function() {
2
+
3
+ describe('#extend', function() {
4
+ var a;
5
+
6
+ beforeEach(function() {
7
+ a = {
8
+ foo: 5,
9
+ bar: 'asd'
10
+ };
11
+ });
12
+
13
+ it('should extend the first argument with the properties of the second', function() {
14
+ L.Util.extend(a, {
15
+ bar: 7,
16
+ baz: 3
17
+ });
18
+
19
+ expect(a).toEqual({
20
+ foo: 5,
21
+ bar: 7,
22
+ baz: 3
23
+ });
24
+ });
25
+
26
+ it('should work with more than 2 arguments', function() {
27
+ L.Util.extend(a, {bar: 7}, {baz: 3});
28
+
29
+ expect(a).toEqual({
30
+ foo: 5,
31
+ bar: 7,
32
+ baz: 3
33
+ });
34
+ });
35
+ });
36
+
37
+ describe('#bind', function() {
38
+ it('should return the given function with the given context', function() {
39
+ var fn = function() {
40
+ return this;
41
+ };
42
+
43
+ var fn2 = L.Util.bind(fn, 5);
44
+
45
+ expect(fn2()).toEqual(5);
46
+ });
47
+ });
48
+
49
+ describe('#stamp', function() {
50
+ it('should set a unique id on the given object and return it', function() {
51
+ var a = {},
52
+ id = L.Util.stamp(a);
53
+
54
+ expect(typeof id).toEqual('number');
55
+ expect(L.Util.stamp(a)).toEqual(id);
56
+
57
+ var b = {},
58
+ id2 = L.Util.stamp(b);
59
+
60
+ expect(id2).not.toEqual(id);
61
+ });
62
+ });
63
+ });
@@ -0,0 +1,102 @@
1
+ describe('DomEvent', function() {
2
+ var el;
3
+
4
+ function simulateClick(el) {
5
+ if (document.createEvent) {
6
+ var e = document.createEvent('MouseEvents');
7
+ e.initMouseEvent('click', true, true, window,
8
+ 0, 0, 0, 0, 0, false, false, false, false, 0, null);
9
+ return el.dispatchEvent(e);
10
+ } else if (el.fireEvent) {
11
+ return el.fireEvent('onclick');
12
+ }
13
+ }
14
+
15
+ beforeEach(function() {
16
+ el = document.createElement('div');
17
+ el.style.position = 'absolute';
18
+ el.style.top = el.style.left = '-10000px';
19
+ document.body.appendChild(el);
20
+ });
21
+
22
+ afterEach(function() {
23
+ document.body.removeChild(el);
24
+ });
25
+
26
+ describe('#addListener', function() {
27
+ it('should add a listener and call it on event', function() {
28
+ var listener1 = jasmine.createSpy('listener1'),
29
+ listener2 = jasmine.createSpy('listener2');
30
+
31
+ L.DomEvent.addListener(el, 'click', listener1);
32
+ L.DomEvent.addListener(el, 'click', listener2);
33
+
34
+ simulateClick(el);
35
+
36
+ expect(listener1).toHaveBeenCalled();
37
+ expect(listener2).toHaveBeenCalled();
38
+ });
39
+
40
+ it('should have "this" keyword point to the given context', function() {
41
+ var obj = {foo: 'bar'},
42
+ result;
43
+
44
+ L.DomEvent.addListener(el, 'click', function() {
45
+ result = this;
46
+ }, obj);
47
+
48
+ simulateClick(el);
49
+
50
+ expect(result).toEqual(obj);
51
+ });
52
+
53
+ it('should pass an event object to the listener', function() {
54
+ var type;
55
+
56
+ L.DomEvent.addListener(el, 'click', function(e) {
57
+ type = e && e.type;
58
+ });
59
+ simulateClick(el);
60
+
61
+ expect(type).toEqual('click');
62
+ });
63
+ });
64
+
65
+ describe('#removeListener', function() {
66
+ it('should remove prevously added listener', function() {
67
+ var listener = jasmine.createSpy('listener');
68
+
69
+ L.DomEvent.addListener(el, 'click', listener);
70
+ L.DomEvent.removeListener(el, 'click', listener);
71
+
72
+ simulateClick(el);
73
+
74
+ expect(listener).not.toHaveBeenCalled();
75
+ });
76
+ });
77
+
78
+ describe('#stopPropagation', function() {
79
+ it('should stop propagation of the given event', function() {
80
+ var child = document.createElement('div'),
81
+ listener = jasmine.createSpy('listener');
82
+
83
+ el.appendChild(child);
84
+
85
+ L.DomEvent.addListener(child, 'click', L.DomEvent.stopPropagation);
86
+ L.DomEvent.addListener(el, 'click', listener);
87
+
88
+ simulateClick(child);
89
+
90
+ expect(listener).not.toHaveBeenCalled();
91
+
92
+ el.removeChild(child);
93
+ });
94
+ });
95
+ describe('#preventDefault', function() {
96
+ it('should prevent the default action of event', function() {
97
+ L.DomEvent.addListener(el, 'click', L.DomEvent.preventDefault);
98
+
99
+ expect(simulateClick(el)).toBe(false);
100
+ });
101
+ });
102
+ });