2 //= require jquery.cookie
5 //= require leaflet.osm
6 //= require leaflet.map
7 //= require i18n/translations
8 //= require querystring
10 var querystring = require('querystring-component');
12 describe("OSM", function () {
13 describe(".apiUrl", function () {
14 it("returns a URL for a way", function () {
15 expect(OSM.apiUrl({type: "way", id: 10})).to.eq("/api/0.6/way/10/full");
18 it("returns a URL for a node", function () {
19 expect(OSM.apiUrl({type: "node", id: 10})).to.eq("/api/0.6/node/10");
22 it("returns a URL for a specific version", function () {
23 expect(OSM.apiUrl({type: "node", id: 10, version: 2})).to.eq("/api/0.6/node/10/2");
27 describe(".params", function () {
28 it("parses params", function () {
29 var params = OSM.params("?foo=a&bar=b");
30 expect(params).to.have.property("foo", "a");
31 expect(params).to.have.property("bar", "b");
35 describe(".mapParams", function () {
36 beforeEach(function () {
39 document.location.hash = "";
40 document.cookie = "_osm_location=; expires=Thu, 01 Jan 1970 00:00:00 GMT";
42 // Test with another cookie set.
43 document.cookie = "_osm_session=deadbeef";
46 it("parses marker params", function () {
47 var params = OSM.mapParams("?mlat=57.6247&mlon=-3.6845");
48 expect(params).to.have.property("mlat", 57.6247);
49 expect(params).to.have.property("mlon", -3.6845);
50 expect(params).to.have.property("marker", true);
53 it("parses object params", function () {
54 var params = OSM.mapParams("?node=1");
55 expect(params).to.have.property("object");
56 expect(params.object).to.eql({type: "node", id: 1});
58 params = OSM.mapParams("?way=1");
59 expect(params).to.have.property("object");
60 expect(params.object).to.eql({type: "way", id: 1});
62 params = OSM.mapParams("?relation=1");
63 expect(params).to.have.property("object");
64 expect(params.object).to.eql({type: "relation", id: 1});
67 it("parses bbox params", function () {
68 var expected = L.latLngBounds([57.6247, -3.6845], [57.7247, -3.7845]);
69 var params = OSM.mapParams("?bbox=-3.6845,57.6247,-3.7845,57.7247");
70 expect(params).to.have.property("bounds").deep.equal(expected);
72 params = OSM.mapParams("?minlon=-3.6845&minlat=57.6247&maxlon=-3.7845&maxlat=57.7247");
73 expect(params).to.have.property("bounds").deep.equal(expected);
76 it("parses lat/lon/zoom params", function () {
77 var params = OSM.mapParams("?lat=57.6247&lon=-3.6845");
78 expect(params).to.have.property("lat", 57.6247);
79 expect(params).to.have.property("lon", -3.6845);
80 expect(params).to.have.property("zoom", 5);
82 params = OSM.mapParams("?lat=57.6247&lon=-3.6845&zoom=10");
83 expect(params).to.have.property("lat", 57.6247);
84 expect(params).to.have.property("lon", -3.6845);
85 expect(params).to.have.property("zoom", 10);
87 params = OSM.mapParams("?mlat=57.6247&mlon=-3.6845");
88 expect(params).to.have.property("lat", 57.6247);
89 expect(params).to.have.property("lon", -3.6845);
90 expect(params).to.have.property("zoom", 12);
92 params = OSM.mapParams("?mlat=57.6247&mlon=-3.6845&zoom=16");
93 expect(params).to.have.property("lat", 57.6247);
94 expect(params).to.have.property("lon", -3.6845);
95 expect(params).to.have.property("zoom", 16);
98 it("parses lat/lon/zoom from the hash", function () {
99 document.location.hash = "#map=16/57.6247/-3.6845";
100 params = OSM.mapParams("?");
101 expect(params).to.have.property("lat", 57.6247);
102 expect(params).to.have.property("lon", -3.6845);
103 expect(params).to.have.property("zoom", 16);
106 it("sets lat/lon from OSM.home", function () {
107 OSM.home = {lat: 57.6247, lon: -3.6845};
108 var params = OSM.mapParams("?");
109 expect(params).to.have.property("lat", 57.6247);
110 expect(params).to.have.property("lon", -3.6845);
113 it("sets bbox from OSM.location", function () {
114 OSM.location = {minlon: -3.6845, minlat: 57.6247, maxlon: -3.7845, maxlat: 57.7247};
115 var expected = L.latLngBounds([57.6247, -3.6845], [57.7247, -3.7845]);
116 var params = OSM.mapParams("?");
117 expect(params).to.have.property("bounds").deep.equal(expected);
120 it("parses params from the _osm_location cookie", function () {
121 document.cookie = "_osm_location=-3.6845|57.6247|5|M";
122 var params = OSM.mapParams("?");
123 expect(params).to.have.property("lat", 57.6247);
124 expect(params).to.have.property("lon", -3.6845);
125 expect(params).to.have.property("zoom", 5);
126 expect(params).to.have.property("layers", "M");
129 it("defaults lat/lon to London", function () {
130 var params = OSM.mapParams("?");
131 expect(params).to.have.property("lat", 51.5);
132 expect(params).to.have.property("lon", -0.1);
133 expect(params).to.have.property("zoom", 5);
135 params = OSM.mapParams("?zoom=10");
136 expect(params).to.have.property("lat", 51.5);
137 expect(params).to.have.property("lon", -0.1);
138 expect(params).to.have.property("zoom", 10);
141 it("parses layers param", function () {
142 var params = OSM.mapParams("?");
143 expect(params).to.have.property("layers", "");
145 document.cookie = "_osm_location=-3.6845|57.6247|5|C";
146 params = OSM.mapParams("?");
147 expect(params).to.have.property("layers", "C");
149 document.location.hash = "#map=5/57.6247/-3.6845&layers=M"
150 params = OSM.mapParams("?");
151 expect(params).to.have.property("layers", "M");
155 describe(".parseHash", function () {
156 it("parses lat/lon/zoom params", function () {
157 var args = OSM.parseHash("#map=5/57.6247/-3.6845&layers=M");
158 expect(args).to.have.property("center").deep.equal(L.latLng(57.6247, -3.6845));
159 expect(args).to.have.property("zoom", 5);
162 it("parses layers params", function () {
163 var args = OSM.parseHash("#map=5/57.6247/-3.6845&layers=M");
164 expect(args).to.have.property("layers", "M");
168 describe(".formatHash", function () {
169 it("formats lat/lon/zoom params", function () {
170 var args = { center: L.latLng(57.6247, -3.6845), zoom: 9 };
171 expect(OSM.formatHash(args)).to.eq("#map=9/57.6247/-3.6845");
174 it("respects zoomPrecision", function () {
175 var args = { center: L.latLng(57.6247, -3.6845), zoom: 5 };
176 expect(OSM.formatHash(args)).to.eq("#map=5/57.625/-3.685");
178 args = { center: L.latLng(57.6247, -3.6845), zoom: 9 };
179 expect(OSM.formatHash(args)).to.eq("#map=9/57.6247/-3.6845");
182 it("formats layers params", function () {
183 var args = { center: L.latLng(57.6247, -3.6845), zoom: 9, layers: "C" };
184 expect(OSM.formatHash(args)).to.eq("#map=9/57.6247/-3.6845&layers=C");
187 it("ignores default layers", function () {
188 var args = { center: L.latLng(57.6247, -3.6845), zoom: 9, layers: "M" };
189 expect(OSM.formatHash(args)).to.eq("#map=9/57.6247/-3.6845");
193 describe(".zoomPrecision", function () {
194 it("suggests 0 digits for z0-1", function () {
195 expect(OSM.zoomPrecision(0)).to.eq(0);
196 expect(OSM.zoomPrecision(1)).to.eq(0);
199 it("suggests 1 digit for z2", function () {
200 expect(OSM.zoomPrecision(2)).to.eq(1);
203 it("suggests 2 digits for z3-4", function () {
204 expect(OSM.zoomPrecision(3)).to.eq(2);
205 expect(OSM.zoomPrecision(4)).to.eq(2);
208 it("suggests 3 digits for z5-8", function () {
209 expect(OSM.zoomPrecision(5)).to.eq(3);
210 expect(OSM.zoomPrecision(6)).to.eq(3);
211 expect(OSM.zoomPrecision(7)).to.eq(3);
212 expect(OSM.zoomPrecision(8)).to.eq(3);
215 it("suggests 4 digits for z9-16", function () {
216 expect(OSM.zoomPrecision(9)).to.eq(4);
217 expect(OSM.zoomPrecision(10)).to.eq(4);
218 expect(OSM.zoomPrecision(11)).to.eq(4);
219 expect(OSM.zoomPrecision(12)).to.eq(4);
220 expect(OSM.zoomPrecision(13)).to.eq(4);
221 expect(OSM.zoomPrecision(14)).to.eq(4);
222 expect(OSM.zoomPrecision(15)).to.eq(4);
223 expect(OSM.zoomPrecision(16)).to.eq(4);
226 it("suggests 5 digits for z17-20", function () {
227 expect(OSM.zoomPrecision(17)).to.eq(5);
228 expect(OSM.zoomPrecision(18)).to.eq(5);
229 expect(OSM.zoomPrecision(19)).to.eq(5);
230 expect(OSM.zoomPrecision(20)).to.eq(5);
234 describe(".locationCookie", function () {
235 it("creates a location cookie value", function () {
236 $("body").html($("<div id='map'>"));
237 var map = new L.OSM.Map("map", { center: [57.6247, -3.6845], zoom: 9 });
238 map.updateLayers("");
239 expect(OSM.locationCookie(map)).to.eq("-3.6845|57.6247|9|M");
242 it("respects zoomPrecision", function () {
243 $("body").html($("<div id='map'>"));
244 var map = new L.OSM.Map("map", { center: [57.6247, -3.6845], zoom: 9 });
245 map.updateLayers("");
246 expect(OSM.locationCookie(map)).to.eq("-3.6845|57.6247|9|M");
249 expect(OSM.locationCookie(map)).to.eq("-3.685|57.625|5|M");