diff --git a/test/spec/hash.js b/test/spec/hash.js index ccf7989eb..64945683d 100644 --- a/test/spec/hash.js +++ b/test/spec/hash.js @@ -1,97 +1,97 @@ describe("hash", function () { - var hash, map; + var hash, map; - beforeEach(function () { - hash = iD.Hash(); - map = { - on: function () { return map; }, - off: function () { return map; }, - zoom: function () { return arguments.length ? map : 0; }, - center: function () { return arguments.length ? map : [0, 0] } - }; - }); - - afterEach(function () { - hash.map(null); - location.hash = ""; - }); - - describe("#map()", function () { - it("gets and sets map", function () { - expect(hash.map(map)).to.equal(hash); - expect(hash.map()).to.equal(map); + beforeEach(function () { + hash = iD.Hash(); + map = { + on: function () { return map; }, + off: function () { return map; }, + zoom: function () { return arguments.length ? map : 0; }, + center: function () { return arguments.length ? map : [0, 0] } + }; }); - it("sets hadHash if location.hash is present", function () { - location.hash = "?map=20.00/38.87952/-77.02405"; - hash.map(map); - expect(hash.hadHash).to.be.true; + afterEach(function () { + hash.map(null); + location.hash = ""; }); - it("zooms map to requested level", function () { - location.hash = "?map=20.00/38.87952/-77.02405"; - sinon.spy(map, 'zoom'); - hash.map(map); - expect(map.zoom).to.have.been.calledWith(20.0); + describe("#map()", function () { + it("gets and sets map", function () { + expect(hash.map(map)).to.equal(hash); + expect(hash.map()).to.equal(map); + }); + + it("sets hadHash if location.hash is present", function () { + location.hash = "?map=20.00/38.87952/-77.02405"; + hash.map(map); + expect(hash.hadHash).to.be.true; + }); + + it("zooms map to requested level", function () { + location.hash = "?map=20.00/38.87952/-77.02405"; + sinon.spy(map, 'zoom'); + hash.map(map); + expect(map.zoom).to.have.been.calledWith(20.0); + }); + + it("centers map at requested coordinates", function () { + location.hash = "?map=20.00/38.87952/-77.02405"; + sinon.spy(map, 'center'); + hash.map(map); + expect(map.center).to.have.been.calledWith([-77.02405, 38.87952]); + }); + + it("binds the map's move event", function () { + sinon.spy(map, 'on'); + hash.map(map); + expect(map.on).to.have.been.calledWith('move', sinon.match.instanceOf(Function)); + }); + + it("unbinds the map's move event", function () { + sinon.spy(map, 'on'); + sinon.spy(map, 'off'); + hash.map(map); + hash.map(null); + expect(map.off).to.have.been.calledWith('move', map.on.firstCall.args[1]); + }); }); - it("centers map at requested coordinates", function () { - location.hash = "?map=20.00/38.87952/-77.02405"; - sinon.spy(map, 'center'); - hash.map(map); - expect(map.center).to.have.been.calledWith([-77.02405, 38.87952]); + describe("on window hashchange events", function () { + beforeEach(function () { + hash.map(map); + }); + + function onhashchange(fn) { + d3.select(window).one("hashchange", fn); + } + + it("zooms map to requested level", function (done) { + onhashchange(function () { + expect(map.zoom).to.have.been.calledWith(20.0); + done(); + }); + + sinon.spy(map, 'zoom'); + location.hash = "#?map=20.00/38.87952/-77.02405"; + }); + + it("centers map at requested coordinates", function (done) { + onhashchange(function () { + expect(map.center).to.have.been.calledWith([-77.02405, 38.87952]); + done(); + }); + + sinon.spy(map, 'center'); + location.hash = "#?map=20.00/38.87952/-77.02405"; + }); }); - it("binds the map's move event", function () { - sinon.spy(map, 'on'); - hash.map(map); - expect(map.on).to.have.been.calledWith('move', sinon.match.instanceOf(Function)); + describe("on map move events", function () { + it("stores the current zoom and coordinates in location.hash", function () { + sinon.stub(map, 'on').yields(); + hash.map(map); + expect(location.hash).to.equal("#?map=0.00/0/0"); + }); }); - - it("unbinds the map's move event", function () { - sinon.spy(map, 'on'); - sinon.spy(map, 'off'); - hash.map(map); - hash.map(null); - expect(map.off).to.have.been.calledWith('move', map.on.firstCall.args[1]); - }); - }); - - describe("on window hashchange events", function () { - beforeEach(function() { - hash.map(map); - }); - - function onhashchange(fn) { - d3.select(window).one("hashchange", fn); - } - - it("zooms map to requested level", function (done) { - onhashchange(function () { - expect(map.zoom).to.have.been.calledWith(20.0); - done(); - }); - - sinon.spy(map, 'zoom'); - location.hash = "#?map=20.00/38.87952/-77.02405"; - }); - - it("centers map at requested coordinates", function (done) { - onhashchange(function () { - expect(map.center).to.have.been.calledWith([-77.02405, 38.87952]); - done(); - }); - - sinon.spy(map, 'center'); - location.hash = "#?map=20.00/38.87952/-77.02405"; - }); - }); - - describe("on map move events", function () { - it("stores the current zoom and coordinates in location.hash", function () { - sinon.stub(map, 'on').yields(); - hash.map(map); - expect(location.hash).to.equal("#?map=0.00/0/0"); - }); - }); });