From b80bbc1fbe6872b588b6dbb069ea6878fe8634f9 Mon Sep 17 00:00:00 2001 From: Ansis Brammanis Date: Wed, 13 Feb 2013 14:40:37 -0500 Subject: [PATCH] Add tree test --- js/id/core/history.js | 6 ++++-- js/id/core/tree.js | 6 +++++- test/spec/core/tree.js | 10 ++++++++++ 3 files changed, 19 insertions(+), 3 deletions(-) diff --git a/js/id/core/history.js b/js/id/core/history.js index 392c3db40..fea546329 100644 --- a/js/id/core/history.js +++ b/js/id/core/history.js @@ -42,14 +42,16 @@ iD.History = function(context) { merge: function(entities) { - var base = tree.graph(), + + var base = stack[0].graph.base(), newentities = Object.keys(entities).filter(function(i) { - return !base.entities.hasOwnProperty(i) && !base.entities[i]; + return !base.entities[i]; }); for (var i = 0; i < stack.length; i++) { stack[i].graph.rebase(entities); } + tree.rebase(newentities); dispatch.change(); diff --git a/js/id/core/tree.js b/js/id/core/tree.js index d548ec8f3..34b46535f 100644 --- a/js/id/core/tree.js +++ b/js/id/core/tree.js @@ -1,3 +1,5 @@ + + iD.Tree = function(graph) { var rtree = new RTree(), @@ -32,7 +34,9 @@ iD.Tree = function(graph) { rebase: function(entities) { for (var i = 0; i < entities.length; i++) { - insert(graph.entity(entities[i]), true); + if (!graph.hasOwnProperty(entities[i])) { + insert(graph.entity(entities[i]), true); + } } rebased = true; return tree; diff --git a/test/spec/core/tree.js b/test/spec/core/tree.js index 5684ba6a8..39769c40d 100644 --- a/test/spec/core/tree.js +++ b/test/spec/core/tree.js @@ -12,6 +12,16 @@ describe("iD.Tree", function() { tree.rebase(['n']); expect(tree.intersects(iD.geo.Extent([0, 0], [2, 2]), tree.graph())).to.eql([node]); }); + + it("does not insert if entity has a modified version", function() { + var node = iD.Node({ id: 'n', loc: [1, 1]}), + node_ = node.update({ loc: [10, 10]}), + g = tree.graph().replace(node_); + expect(tree.intersects(iD.geo.Extent([9, 9], [11, 11]), g)).to.eql([node_]); + tree.graph().rebase({ 'n': node }); + tree.rebase(['n']); + expect(tree.intersects(iD.geo.Extent([0, 0], [2, 2]), tree.graph())).to.eql([]); + }); }); describe("#intersects", function() {