mirror of
https://github.com/FoggedLens/iD.git
synced 2026-02-13 17:23:02 +00:00
75 lines
3.3 KiB
JavaScript
75 lines
3.3 KiB
JavaScript
describe("iD.Tree", function() {
|
|
var tree;
|
|
|
|
beforeEach(function() {
|
|
tree = iD.Tree(iD.Graph());
|
|
});
|
|
|
|
describe("#rebase", function() {
|
|
it("adds entities to the tree", function() {
|
|
var node = iD.Node({ id: 'n', loc: [1, 1]});
|
|
tree.graph().rebase({ 'n': node });
|
|
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]), g)).to.eql([]);
|
|
expect(tree.intersects(iD.geo.Extent([0, 0], [11, 11]), g)).to.eql([node_]);
|
|
});
|
|
});
|
|
|
|
describe("#intersects", function() {
|
|
it("excludes entities with missing children, adds them when all are present", function() {
|
|
var way = iD.Way({id: 'w1', nodes: ['n']});
|
|
var g = tree.graph().replace(way);
|
|
expect(tree.intersects(iD.geo.Extent([0, 0], [1, 1]), g)).to.eql([]);
|
|
var node = iD.Node({id: 'n', loc: [0.5, 0.5]});
|
|
g = tree.graph().replace(node);
|
|
expect(tree.intersects(iD.geo.Extent([0, 0], [1, 1]), g)).to.eql([way, node]);
|
|
});
|
|
|
|
it("includes entities that used to have missing children, after rebase added them", function() {
|
|
var base = tree.graph();
|
|
var way = iD.Way({id: 'w1', nodes: ['n']});
|
|
var g = base.replace(way);
|
|
expect(tree.intersects(iD.geo.Extent([0, 0], [1, 1]), g)).to.eql([]);
|
|
var node = iD.Node({id: 'n', loc: [0.5, 0.5]});
|
|
base.rebase({ 'n': node });
|
|
tree.rebase(['n']);
|
|
expect(tree.intersects(iD.geo.Extent([0, 0], [1, 1]), g)).to.eql([way, node]);
|
|
});
|
|
|
|
it("includes entities within extent, excludes those without", function() {
|
|
var n1 = iD.Node({ id: 'n1', loc: [1, 1]});
|
|
var n2 = iD.Node({ id: 'n2', loc: [3, 3]});
|
|
var g = tree.graph().replace(n1).replace(n2);
|
|
expect(tree.intersects(iD.geo.Extent([0, 0], [1.1, 1.1]), g)).to.eql([n1]);
|
|
});
|
|
|
|
it("doesn't include removed entities", function() {
|
|
var n1 = iD.Node({ id: 'n1', loc: [1, 1]});
|
|
var g = tree.graph().replace(n1);
|
|
expect(tree.intersects(iD.geo.Extent([0, 0], [2, 2]), g)).to.eql([n1]);
|
|
g = g.remove(n1);
|
|
expect(tree.intersects(iD.geo.Extent([0, 0], [2, 2]), g)).to.eql([]);
|
|
});
|
|
|
|
it("works with extents with dimensions that are very small", function() {
|
|
var m = 1000 * 1000 * 100;
|
|
var n1 = iD.Node({ id: 'n1', loc: [1, 1]});
|
|
var n2 = iD.Node({ id: 'n2', loc: [1 + 0.1/m, 2]});
|
|
var way = iD.Way({id: 'w1', nodes: ['n1', 'n2']});
|
|
var g = tree.graph().replace(n1).replace(n2).replace(way);
|
|
g = g.remove(way).remove(n1).remove(n2);
|
|
expect(tree.intersects(iD.geo.Extent([0, 0], [3, 3]), g)).to.eql([]);
|
|
});
|
|
});
|
|
});
|