def test_update_remove_way(self): self.update_data("r2 v2 Mw2@") self.has_changes("test_changeset", ['M1']) self.table_equals("test", [ { 'id' : 1, 'nodes' : [1, 2, 3], 'rels' : [1], 'geom': Line(1, 2, 3) }, { 'id' : 2, 'nodes' : [3, 4, 5], 'rels' : [1, 2], 'geom': Line(3, 4, 5) } ])
def test_update_delete_relation(self): self.update_data("r2 v2 dD") self.has_changes("test_changeset", ['M1', 'M2']) self.table_equals("test", [ { 'id' : 1, 'nodes' : [1, 2, 3], 'rels' : [1], 'geom': Line(1, 2, 3) }, { 'id' : 2, 'nodes' : [3, 4, 5], 'rels' : [1], 'geom': Line(3, 4, 5) } ])
def test_update_remove_node_from_way(self): self.update_data("w2 v2 Nn3,n4") self.has_changes("test_changeset", ['M2']) self.table_equals("test", [ { 'id' : 1, 'nodes' : [1, 2, 3], 'rels' : [1], 'geom' : Line(1, 2, 3) }, { 'id' : 2, 'nodes' : [3, 4], 'rels' : [1], 'geom' : Line(3, 4) } ])
def test_update_way_tags_only(self): self.update_data("w1 v2 Tfoo=bar Nn1,n2,n3") self.has_changes("test_changeset", []) self.table_equals("test", [ { 'id' : 1, 'nodes' : [1, 2, 3], 'rels' : [1], 'geom' : Line(1, 2, 3) }, { 'id' : 2, 'nodes' : [3, 4, 5], 'rels' : [1], 'geom' : Line(3, 4, 5) } ])
def test_update_add_relation(self): self.update_data("r20 Mw1@") self.has_changes("test_changeset", ['M1']) self.table_equals("test", [ { 'id' : 1, 'nodes' : [1, 2, 3], 'rels' : [1, 2, 20], 'geom': Line(1, 2, 3) }, { 'id' : 2, 'nodes' : [3, 4, 5], 'rels' : [1, 2], 'geom': Line(3, 4, 5) } ])
def test_update_add_node_to_way(self): self.update_data("w1 v2 Nn1,n10,n2,n3") self.has_changes("test_changeset", ['M1']) self.table_equals("test", [ { 'id' : 1, 'nodes' : [1, 10, 2, 3], 'rels' : [1], 'geom' : Line(1, 10, 2, 3) }, { 'id' : 2, 'nodes' : [3, 4, 5], 'rels' : [1], 'geom' : Line(3, 4, 5) } ])
def test_update_move_node(self): self.update_data("n3 x1.0 y2.0") self.has_changes("test_changeset", ['M1', 'M2']) self.table_equals("test", [ { 'id' : 1, 'nodes' : [1, 2, 3], 'rels' : [1], 'geom' : Line(1, 2, (1.0, 2.0)) }, { 'id' : 2, 'nodes' : [3, 4, 5], 'rels' : [1], 'geom' : Line((1.0, 2.0), 4, 5) } ])
def test_create_single(self): self.import_data("""\ w1 Nn1,n3 w2 Nn3,n5 r1 Mw1@,w2@ """, self.nodes) self.table_equals("test", [ { 'id' : 1, 'nodes' : [1, 3], 'rels' : [1], 'geom' : Line(1, 3) }, { 'id' : 2, 'nodes' : [3, 5], 'rels' : [1], 'geom' : Line(3, 5) } ])
def test_create_rel_without_way(self): self.import_data("""\ w1 Nn1,n2,n3 w2 Nn3,n4,n5 r1 Mw1@,w2@,w3@ """, self.nodes) self.table_equals("test", [ { 'id' : 1, 'nodes' : [1, 2, 3], 'rels' : [1], 'geom': Line(1, 2, 3) }, { 'id' : 2, 'nodes' : [3, 4, 5], 'rels' : [1], 'geom': Line(3, 4 ,5) } ])
def test_create_one_point_way(self): self.import_data("""\ w1 Nn1,n3 w2 Nn5,n5 r1 Mw1@,w2@ """, self.nodes) self.table_equals("test", [ { 'id' : 1, 'nodes' : [1, 3], 'rels' : [1], 'geom' : Line(1, 3) }, { 'id' : 2, 'nodes' : [5, 5], 'rels' : [1], 'geom' : Line(5, 5) } ])
def test_update_add_way(self): self.update_data("""\ w3 v1 Nn10,n11 r1 v2 Mw1@,w3@,w2@ """) self.has_changes("test_changeset", ['A3']) self.table_equals("test", [ { 'id' : 1, 'nodes' : [1, 2, 3], 'rels' : [1, 2], 'geom': Line(1, 2, 3) }, { 'id' : 2, 'nodes' : [3, 4, 5], 'rels' : [1, 2], 'geom': Line(3, 4, 5) }, { 'id' : 3, 'nodes' : [10, 11], 'rels' : [1], 'geom': Line(10, 11) } ])
def test_create_overlapping_rels(self): self.import_data("""\ w1 Nn1,n2,n3 w2 Nn3,n4,n5 w3 Nn10,n11 r1 Mw1@,w2@ r2 Mw2@,w3@ """, self.nodes) self.table_equals("test", [ { 'id': 1, 'nodes': [1, 2, 3], 'rels': [1], 'geom': Line(1, 2, 3) }, { 'id': 2, 'nodes': [3, 4, 5], 'rels': [1, 2], 'geom': Line(3, 4, 5) }, { 'id': 3, 'nodes': [10, 11], 'rels': [2], 'geom': Line(10, 11) } ])
def test_create_way_with_duplicate_node(self): self.import_data("""\ w1 Nn1,n2,n2,n4,n5 r1 Mw1@ """, self.nodes) self.table_equals("test", [ { 'id': 1, 'nodes': [1, 2, 2, 4, 5], 'rels': [1], 'geom': Line(1, 2, 2, 4, 5) } ])
def test_update_add_node(self): self.import_data(self.baseimport, self.nodes) self.update_data("""w101 v2 Tname=first Nn1,n2,n3""") self.has_changes("test_changeset", ['M101']) self.table_equals("test", [ self.expect_w103, { 'id': 101, 'tags': { 'name': 'first' }, 'nodes': [1, 2, 3], 'geom': Line(1, 2, 3) } ])
def test_update_add_way(self): self.import_data(self.baseimport, self.nodes) self.update_data("""w3 Tx=y Nn101,n103""") self.has_changes("test_changeset", ['A3']) self.table_equals("test", [ self.expect_w101, self.expect_w103, { 'id': 3, 'tags': { 'x': 'y' }, 'nodes': [101, 103], 'geom': Line(101, 103) } ])
def test_move_node(self): self.import_data(self.baseimport, self.nodes) self.update_data("""n2 v2 x0.9 y2.1""") self.has_changes("test_changeset", ['M101']) self.table_equals("test", [ self.expect_w103, { 'id': 101, 'tags': { 'name': 'first' }, 'nodes': [1, 2], 'geom': Line(1, (0.9, 2.1)) } ])
def test_move_node(self): self.import_data("""\ n1 x23.0 y-3.0 n2 x23.001 y-3.43 w1 Tref=1 Nn1,n2 """) self.update_data("n2 x23.002 y-3.43") self.has_changes("test_changeset", ['A2', 'D1']) self.table_equals("test", ({ 'tags': { 'ref': '1' }, 'nodes': [1, 2], 'ways': [1], 'geom': Line((23.0, -3.0), (23.002, -3.43)) }, ))
def R(nodes, ways, **kargs): return make_db_line(Any(), nodes=nodes, ways=ways, geom=Line(*nodes), **kargs)
def is_unchanged(self): self.has_changes("test_changeset", []) self.table_equals("test", [ { 'id': 1, 'nodes': [1, 2, 3], 'rels': [1, 2], 'geom': Line(1, 2, 3) }, { 'id': 2, 'nodes': [3, 4, 5], 'rels': [1, 2], 'geom': Line(3, 4, 5) } ])
def test_update_shorten_way_to_one_node(self): self.update_data("w2 v2 Nn3") self.has_changes("test_changeset", ['D2']) self.table_equals("test", [ { 'id' : 1, 'nodes' : [1, 2, 3], 'rels' : [1], 'geom' : Line(1, 2, 3) } ])
class TestPlainWayTableUnchanged(TableTestFixture): nodes = { 1: (1.0, 2.1), 2: (1.0, 2.2), 3: (1.0, 2.3), 34: (0.9, 2.1), 36: (1.2, 2.5), 101: (4.5, -34.1), 103: (4.51, -34.111) } baseimport = """\ w101 Tname=first Nn1,n2 w103 Tname=second Nn34,n1,n36 """ expect_w101 = { 'id': 101, 'tags': { 'name': 'first' }, 'nodes': [1, 2], 'geom': Line(1, 2) } expect_w103 = { 'id': 103, 'tags': { 'name': 'second' }, 'nodes': [34, 1, 36], 'geom': Line(34, 1, 36) } def create_tables(self, db): return [PlainWayTable(db.metadata, "test", db.osmdata.way, db.osmdata)] def test_create(self): self.import_data(self.baseimport, self.nodes) self.table_equals("test", [self.expect_w101, self.expect_w103]) def test_update_add_way(self): self.import_data(self.baseimport, self.nodes) self.update_data("""w3 Tx=y Nn101,n103""") self.has_changes("test_changeset", ['A3']) self.table_equals("test", [ self.expect_w101, self.expect_w103, { 'id': 3, 'tags': { 'x': 'y' }, 'nodes': [101, 103], 'geom': Line(101, 103) } ]) def test_update_delete_way(self): self.import_data(self.baseimport, self.nodes) self.update_data("""w101 v2 dD""") self.has_changes("test_changeset", ['D101']) self.table_equals("test", [self.expect_w103]) def test_update_change_tags(self): self.import_data(self.baseimport, self.nodes) self.update_data("""w101 v2 Tname=new Nn1,n2""") self.has_changes("test_changeset", ['M101']) new_w101 = dict(self.expect_w101) new_w101.update({'tags': {"name": "new"}}) self.table_equals("test", [new_w101, self.expect_w103]) def test_update_add_node(self): self.import_data(self.baseimport, self.nodes) self.update_data("""w101 v2 Tname=first Nn1,n2,n3""") self.has_changes("test_changeset", ['M101']) self.table_equals("test", [ self.expect_w103, { 'id': 101, 'tags': { 'name': 'first' }, 'nodes': [1, 2, 3], 'geom': Line(1, 2, 3) } ]) def test_delete_node_invalidate_way(self): self.import_data(self.baseimport, self.nodes) self.update_data("""w101 v2 Tname=first Nn1""") self.has_changes("test_changeset", ['D101']) self.table_equals("test", [self.expect_w103]) def test_move_node(self): self.import_data(self.baseimport, self.nodes) self.update_data("""n2 v2 x0.9 y2.1""") self.has_changes("test_changeset", ['M101']) self.table_equals("test", [ self.expect_w103, { 'id': 101, 'tags': { 'name': 'first' }, 'nodes': [1, 2], 'geom': Line(1, (0.9, 2.1)) } ])