X-Git-Url: https://git.openstreetmap.org./rails.git/blobdiff_plain/e7ef10d4289501a04045e01ecf7fe9202c09eb4f..c50e4f50c4fef0b11970202d3c7f95cdc5b620ba:/test/javascripts/osm_test.js diff --git a/test/javascripts/osm_test.js b/test/javascripts/osm_test.js index 51f74fe7a..877af5ad7 100644 --- a/test/javascripts/osm_test.js +++ b/test/javascripts/osm_test.js @@ -1,32 +1,29 @@ //= require jquery -//= require jquery.cookie +//= require js-cookie/dist/js.cookie //= require osm -//= require leaflet +//= require leaflet/dist/leaflet-src //= require leaflet.osm //= require leaflet.map //= require i18n/translations -//= require querystring - -var querystring = require('querystring-component'); describe("OSM", function () { describe(".apiUrl", function () { it("returns a URL for a way", function () { - expect(OSM.apiUrl({type: "way", id: 10})).to.eq("/api/0.6/way/10/full"); + expect(OSM.apiUrl({ type: "way", id: 10 })).to.eq("/api/0.6/way/10/full"); }); it("returns a URL for a node", function () { - expect(OSM.apiUrl({type: "node", id: 10})).to.eq("/api/0.6/node/10"); + expect(OSM.apiUrl({ type: "node", id: 10 })).to.eq("/api/0.6/node/10"); }); it("returns a URL for a specific version", function () { - expect(OSM.apiUrl({type: "node", id: 10, version: 2})).to.eq("/api/0.6/node/10/2"); + expect(OSM.apiUrl({ type: "node", id: 10, version: 2 })).to.eq("/api/0.6/node/10/2"); }); }); describe(".params", function () { it("parses params", function () { - var params = OSM.params("?foo=a&bar=b"); + const params = OSM.params("?foo=a&bar=b"); expect(params).to.have.property("foo", "a"); expect(params).to.have.property("bar", "b"); }); @@ -44,29 +41,29 @@ describe("OSM", function () { }); it("parses marker params", function () { - var params = OSM.mapParams("?mlat=57.6247&mlon=-3.6845"); + const params = OSM.mapParams("?mlat=57.6247&mlon=-3.6845"); expect(params).to.have.property("mlat", 57.6247); expect(params).to.have.property("mlon", -3.6845); expect(params).to.have.property("marker", true); }); it("parses object params", function () { - var params = OSM.mapParams("?node=1"); + let params = OSM.mapParams("?node=1"); expect(params).to.have.property("object"); - expect(params.object).to.eql({type: "node", id: 1}); + expect(params.object).to.eql({ type: "node", id: 1 }); params = OSM.mapParams("?way=1"); expect(params).to.have.property("object"); - expect(params.object).to.eql({type: "way", id: 1}); + expect(params.object).to.eql({ type: "way", id: 1 }); params = OSM.mapParams("?relation=1"); expect(params).to.have.property("object"); - expect(params.object).to.eql({type: "relation", id: 1}); + expect(params.object).to.eql({ type: "relation", id: 1 }); }); it("parses bbox params", function () { - var expected = L.latLngBounds([57.6247, -3.6845], [57.7247, -3.7845]); - var params = OSM.mapParams("?bbox=-3.6845,57.6247,-3.7845,57.7247"); + const expected = L.latLngBounds([57.6247, -3.6845], [57.7247, -3.7845]); + let params = OSM.mapParams("?bbox=-3.6845,57.6247,-3.7845,57.7247"); expect(params).to.have.property("bounds").deep.equal(expected); params = OSM.mapParams("?minlon=-3.6845&minlat=57.6247&maxlon=-3.7845&maxlat=57.7247"); @@ -74,7 +71,7 @@ describe("OSM", function () { }); it("parses mlat/mlon/zoom params", function () { - var params = OSM.mapParams("?mlat=57.6247&mlon=-3.6845"); + let params = OSM.mapParams("?mlat=57.6247&mlon=-3.6845"); expect(params).to.have.property("lat", 57.6247); expect(params).to.have.property("lon", -3.6845); expect(params).to.have.property("zoom", 12); @@ -87,29 +84,29 @@ describe("OSM", function () { it("parses lat/lon/zoom from the hash", function () { document.location.hash = "#map=16/57.6247/-3.6845"; - params = OSM.mapParams("?"); + const params = OSM.mapParams("?"); expect(params).to.have.property("lat", 57.6247); expect(params).to.have.property("lon", -3.6845); expect(params).to.have.property("zoom", 16); }); it("sets lat/lon from OSM.home", function () { - OSM.home = {lat: 57.6247, lon: -3.6845}; - var params = OSM.mapParams("?"); + OSM.home = { lat: 57.6247, lon: -3.6845 }; + const params = OSM.mapParams("?"); expect(params).to.have.property("lat", 57.6247); expect(params).to.have.property("lon", -3.6845); }); it("sets bbox from OSM.location", function () { - OSM.location = {minlon: -3.6845, minlat: 57.6247, maxlon: -3.7845, maxlat: 57.7247}; - var expected = L.latLngBounds([57.6247, -3.6845], [57.7247, -3.7845]); - var params = OSM.mapParams("?"); + OSM.location = { minlon: -3.6845, minlat: 57.6247, maxlon: -3.7845, maxlat: 57.7247 }; + const expected = L.latLngBounds([57.6247, -3.6845], [57.7247, -3.7845]); + const params = OSM.mapParams("?"); expect(params).to.have.property("bounds").deep.equal(expected); }); it("parses params from the _osm_location cookie", function () { document.cookie = "_osm_location=-3.6845|57.6247|5|M"; - var params = OSM.mapParams("?"); + const params = OSM.mapParams("?"); expect(params).to.have.property("lat", 57.6247); expect(params).to.have.property("lon", -3.6845); expect(params).to.have.property("zoom", 5); @@ -117,7 +114,7 @@ describe("OSM", function () { }); it("defaults lat/lon to London", function () { - var params = OSM.mapParams("?"); + let params = OSM.mapParams("?"); expect(params).to.have.property("lat", 51.5); expect(params).to.have.property("lon", -0.1); expect(params).to.have.property("zoom", 5); @@ -129,14 +126,14 @@ describe("OSM", function () { }); it("parses layers param", function () { - var params = OSM.mapParams("?"); + let params = OSM.mapParams("?"); expect(params).to.have.property("layers", ""); document.cookie = "_osm_location=-3.6845|57.6247|5|C"; params = OSM.mapParams("?"); expect(params).to.have.property("layers", "C"); - document.location.hash = "#map=5/57.6247/-3.6845&layers=M" + document.location.hash = "#map=5/57.6247/-3.6845&layers=M"; params = OSM.mapParams("?"); expect(params).to.have.property("layers", "M"); }); @@ -144,106 +141,116 @@ describe("OSM", function () { describe(".parseHash", function () { it("parses lat/lon/zoom params", function () { - var args = OSM.parseHash("#map=5/57.6247/-3.6845&layers=M"); + const args = OSM.parseHash("#map=5/57.6247/-3.6845&layers=M"); expect(args).to.have.property("center").deep.equal(L.latLng(57.6247, -3.6845)); expect(args).to.have.property("zoom", 5); }); it("parses layers params", function () { - var args = OSM.parseHash("#map=5/57.6247/-3.6845&layers=M"); + const args = OSM.parseHash("#map=5/57.6247/-3.6845&layers=M"); expect(args).to.have.property("layers", "M"); }); }); describe(".formatHash", function () { it("formats lat/lon/zoom params", function () { - var args = { center: L.latLng(57.6247, -3.6845), zoom: 9 }; - expect(OSM.formatHash(args)).to.eq("#map=9/57.6247/-3.6845"); + const args = { center: L.latLng(57.6247, -3.6845), zoom: 9 }; + expect(OSM.formatHash(args)).to.eq("#map=9/57.625/-3.685"); }); it("respects zoomPrecision", function () { - var args = { center: L.latLng(57.6247, -3.6845), zoom: 5 }; - expect(OSM.formatHash(args)).to.eq("#map=5/57.625/-3.685"); + let args = { center: L.latLng(57.6247, -3.6845), zoom: 5 }; + expect(OSM.formatHash(args)).to.eq("#map=5/57.62/-3.68"); + args = { center: L.latLng(57.6247, -3.6845), zoom: 9 }; - expect(OSM.formatHash(args)).to.eq("#map=9/57.6247/-3.6845"); + expect(OSM.formatHash(args)).to.eq("#map=9/57.625/-3.685"); + + + args = { center: L.latLng(57.6247, -3.6845), zoom: 12 }; + expect(OSM.formatHash(args)).to.eq("#map=12/57.6247/-3.6845"); }); it("formats layers params", function () { - var args = { center: L.latLng(57.6247, -3.6845), zoom: 9, layers: "C" }; - expect(OSM.formatHash(args)).to.eq("#map=9/57.6247/-3.6845&layers=C"); + const args = { center: L.latLng(57.6247, -3.6845), zoom: 9, layers: "C" }; + expect(OSM.formatHash(args)).to.eq("#map=9/57.625/-3.685&layers=C"); }); it("ignores default layers", function () { - var args = { center: L.latLng(57.6247, -3.6845), zoom: 9, layers: "M" }; - expect(OSM.formatHash(args)).to.eq("#map=9/57.6247/-3.6845"); + const args = { center: L.latLng(57.6247, -3.6845), zoom: 9, layers: "M" }; + expect(OSM.formatHash(args)).to.eq("#map=9/57.625/-3.685"); }); }); - describe(".zoomPrecision", function () { - it("suggests 0 digits for z0-1", function () { - expect(OSM.zoomPrecision(0)).to.eq(0); - expect(OSM.zoomPrecision(1)).to.eq(0); - }); - it("suggests 1 digit for z2", function () { + describe(".zoomPrecision", function () { + it("suggests 1 digit for z0-2", function () { + expect(OSM.zoomPrecision(0)).to.eq(1); + expect(OSM.zoomPrecision(1)).to.eq(1); expect(OSM.zoomPrecision(2)).to.eq(1); }); - it("suggests 2 digits for z3-4", function () { + it("suggests 2 digits for z3-6", function () { expect(OSM.zoomPrecision(3)).to.eq(2); expect(OSM.zoomPrecision(4)).to.eq(2); + expect(OSM.zoomPrecision(5)).to.eq(2); + expect(OSM.zoomPrecision(6)).to.eq(2); }); - it("suggests 3 digits for z5-8", function () { - expect(OSM.zoomPrecision(5)).to.eq(3); - expect(OSM.zoomPrecision(6)).to.eq(3); + it("suggests 3 digits for z7-9", function () { expect(OSM.zoomPrecision(7)).to.eq(3); expect(OSM.zoomPrecision(8)).to.eq(3); + expect(OSM.zoomPrecision(9)).to.eq(3); }); - it("suggests 4 digits for z9-16", function () { - expect(OSM.zoomPrecision(9)).to.eq(4); + it("suggests 4 digits for z10-12", function () { expect(OSM.zoomPrecision(10)).to.eq(4); expect(OSM.zoomPrecision(11)).to.eq(4); expect(OSM.zoomPrecision(12)).to.eq(4); - expect(OSM.zoomPrecision(13)).to.eq(4); - expect(OSM.zoomPrecision(14)).to.eq(4); - expect(OSM.zoomPrecision(15)).to.eq(4); - expect(OSM.zoomPrecision(16)).to.eq(4); }); - it("suggests 5 digits for z17-20", function () { - expect(OSM.zoomPrecision(17)).to.eq(5); - expect(OSM.zoomPrecision(18)).to.eq(5); - expect(OSM.zoomPrecision(19)).to.eq(5); - expect(OSM.zoomPrecision(20)).to.eq(5); + it("suggests 5 digits for z13-16", function () { + expect(OSM.zoomPrecision(13)).to.eq(5); + expect(OSM.zoomPrecision(14)).to.eq(5); + expect(OSM.zoomPrecision(15)).to.eq(5); + expect(OSM.zoomPrecision(16)).to.eq(5); + }); + + it("suggests 6 digits for z17-19", function () { + expect(OSM.zoomPrecision(17)).to.eq(6); + expect(OSM.zoomPrecision(18)).to.eq(6); + expect(OSM.zoomPrecision(19)).to.eq(6); + }); + + it("suggests 7 digits for z20", function () { + expect(OSM.zoomPrecision(20)).to.eq(7); }); }); describe(".locationCookie", function () { it("creates a location cookie value", function () { $("body").html($("
")); - var map = new L.OSM.Map("map", { center: [57.6247, -3.6845], zoom: 9 }); + const map = new L.OSM.Map("map", { center: [57.6247, -3.6845], zoom: 9 }); map.updateLayers(""); - expect(OSM.locationCookie(map)).to.eq("-3.6845|57.6247|9|M"); + expect(OSM.locationCookie(map)).to.eq("-3.685|57.625|9|M"); }); it("respects zoomPrecision", function () { $("body").html($("
")); - var map = new L.OSM.Map("map", { center: [57.6247, -3.6845], zoom: 9 }); + const map = new L.OSM.Map("map", { center: [57.6247, -3.6845], zoom: 9 }); map.updateLayers(""); - expect(OSM.locationCookie(map)).to.eq("-3.6845|57.6247|9|M"); - - map.setZoom(5); - expect(OSM.locationCookie(map)).to.eq("-3.685|57.625|5|M"); + expect(OSM.locationCookie(map)).to.eq("-3.685|57.625|9|M"); + // map.setZoom() doesn't update the zoom level for some reason + // using map._zoom here to update the zoom level manually + map._zoom = 5; + expect(OSM.locationCookie(map)).to.eq("-3.68|57.62|5|M"); }); }); describe(".distance", function () { it("computes distance between points", function () { - var latlng1 = L.latLng(51.76712,-0.00484), - latlng2 = L.latLng(51.7675159, -0.0078329); + const latlng1 = L.latLng(51.76712, -0.00484), + latlng2 = L.latLng(51.7675159, -0.0078329); expect(OSM.distance(latlng1, latlng2)).to.be.closeTo(210.664, 0.005); expect(OSM.distance(latlng2, latlng1)).to.be.closeTo(210.664, 0.005);