From 9d9745b378aec1694298232df76a5a740f8bb703 Mon Sep 17 00:00:00 2001 From: Sarah Hoffmann Date: Tue, 24 Feb 2015 22:10:31 +0100 Subject: [PATCH] add more tests for interpolations (mostly updating) --- .../features/db/import/interpolation.feature | 177 ++++----- .../features/db/update/interpolation.feature | 167 ++++++++ tests/scenes/data/parallel-road.wkt | 5 + tests/scenes/data/roads.osm | 373 ++++++++++-------- tests/steps/db_results.py | 33 +- tests/steps/db_setup.py | 4 +- tests/steps/terrain.py | 2 +- 7 files changed, 500 insertions(+), 261 deletions(-) create mode 100644 tests/features/db/update/interpolation.feature create mode 100644 tests/scenes/data/parallel-road.wkt diff --git a/tests/features/db/import/interpolation.feature b/tests/features/db/import/interpolation.feature index ad4bdf85..d70bf18a 100644 --- a/tests/features/db/import/interpolation.feature +++ b/tests/features/db/import/interpolation.feature @@ -14,13 +14,9 @@ Feature: Import of address interpolations | id | nodes | 1 | 1,2 When importing - Then node 1 expands to housenumbers + Then way 1 expands to housenumbers | housenumber | centroid - | 2 | 1,1 | 4 | 1,1.0005 - And node 2 expands to housenumbers - | housenumber | centroid - | 6 | 1,1.001 Scenario: Simple even two point interpolation with zero beginning Given the place nodes @@ -34,15 +30,11 @@ Feature: Import of address interpolations | id | nodes | 1 | 1,2 When importing - Then node 1 expands to housenumbers + Then way 1 expands to housenumbers | housenumber | centroid - | 0 | 1,1 | 2 | 1,1.00025 | 4 | 1,1.0005 | 6 | 1,1.00075 - And node 2 expands to housenumbers - | housenumber | centroid - | 8 | 1,1.001 Scenario: Backwards even two point interpolation Given the place nodes @@ -56,13 +48,9 @@ Feature: Import of address interpolations | id | nodes | 1 | 2,1 When importing - Then node 1 expands to housenumbers - | housenumber | centroid - | 2 | 1,1 - And node 2 expands to housenumbers + Then way 1 expands to housenumbers | housenumber | centroid | 4 | 1,1.0005 - | 6 | 1,1.001 Scenario: Even two point interpolation with odd beginning Given the place nodes @@ -76,14 +64,10 @@ Feature: Import of address interpolations | id | nodes | 1 | 1,2 When importing - Then node 1 expands to housenumbers + Then way 1 expands to housenumbers | housenumber | centroid - | 11 | 1,1 | 12 | 1,1.0002 | 14 | 1,1.0006 - And node 2 expands to housenumbers - | housenumber | centroid - | 16 | 1,1.001 Scenario: Even two point interpolation with odd end Given the place nodes @@ -97,14 +81,10 @@ Feature: Import of address interpolations | id | nodes | 1 | 1,2 When importing - Then node 1 expands to housenumbers + Then way 1 expands to housenumbers | housenumber | centroid - | 10 | 1,1 | 12 | 1,1.0004 | 14 | 1,1.0008 - And node 2 expands to housenumbers - | housenumber | centroid - | 15 | 1,1.001 Scenario: Reverse even two point interpolation with odd beginning Given the place nodes @@ -118,14 +98,10 @@ Feature: Import of address interpolations | id | nodes | 1 | 2,1 When importing - Then node 1 expands to housenumbers - | housenumber | centroid - | 11 | 1,1 - And node 2 expands to housenumbers + Then way 1 expands to housenumbers | housenumber | centroid | 12 | 1,1.0002 | 14 | 1,1.0006 - | 16 | 1,1.001 Scenario: Reverse even two point interpolation with odd end Given the place nodes @@ -139,14 +115,10 @@ Feature: Import of address interpolations | id | nodes | 1 | 2,1 When importing - Then node 1 expands to housenumbers - | housenumber | centroid - | 10 | 1,1 - And node 2 expands to housenumbers + Then way 1 expands to housenumbers | housenumber | centroid | 12 | 1,1.0004 | 14 | 1,1.0008 - | 15 | 1,1.001 Scenario: Simple odd two point interpolation Given the place nodes @@ -160,16 +132,12 @@ Feature: Import of address interpolations | id | nodes | 1 | 1,2 When importing - Then node 1 expands to housenumbers + Then way 1 expands to housenumbers | housenumber | centroid - | 1 | 1,1 | 3 | 1,1.0002 | 5 | 1,1.0004 | 7 | 1,1.0006 | 9 | 1,1.0008 - And node 2 expands to housenumbers - | housenumber | centroid - | 11 | 1,1.001 Scenario: Odd two point interpolation with even beginning Given the place nodes @@ -183,14 +151,10 @@ Feature: Import of address interpolations | id | nodes | 1 | 1,2 When importing - Then node 1 expands to housenumbers + Then way 1 expands to housenumbers | housenumber | centroid - | 2 | 1,1 | 3 | 1,1.0002 | 5 | 1,1.0006 - And node 2 expands to housenumbers - | housenumber | centroid - | 7 | 1,1.001 Scenario: Simple all two point interpolation Given the place nodes @@ -204,13 +168,9 @@ Feature: Import of address interpolations | id | nodes | 1 | 1,2 When importing - Then node 1 expands to housenumbers + Then way 1 expands to housenumbers | housenumber | centroid - | 1 | 1,1 | 2 | 1,1.0005 - And node 2 expands to housenumbers - | housenumber | centroid - | 3 | 1,1.001 Scenario: Simple numbered two point interpolation Given the place nodes @@ -224,13 +184,9 @@ Feature: Import of address interpolations | id | nodes | 1 | 1,2 When importing - Then node 1 expands to housenumbers + Then way 1 expands to housenumbers | housenumber | centroid - | 3 | 1,1 | 6 | 1,1.0005 - And node 2 expands to housenumbers - | housenumber | centroid - | 9 | 1,1.001 Scenario: Even two point interpolation with intermediate empty node Given the place nodes @@ -244,15 +200,11 @@ Feature: Import of address interpolations | id | nodes | 1 | 1,3,2 When importing - Then node 1 expands to housenumbers + Then way 1 expands to housenumbers | housenumber | centroid - | 2 | 1,1 | 4 | 1,1.0005 | 6 | 1,1.001 | 8 | 1.0005,1.001 - And node 2 expands to housenumbers - | housenumber | centroid - | 10 | 1.001,1.001 Scenario: Even two point interpolation with intermediate duplicated empty node @@ -267,15 +219,11 @@ Feature: Import of address interpolations | id | nodes | 1 | 1,3,3,2 When importing - Then node 1 expands to housenumbers + Then way 1 expands to housenumbers | housenumber | centroid - | 2 | 1,1 | 4 | 1,1.0005 | 6 | 1,1.001 | 8 | 1.0005,1.001 - And node 2 expands to housenumbers - | housenumber | centroid - | 10 | 1.001,1.001 Scenario: Simple even three point interpolation Given the place nodes @@ -290,16 +238,9 @@ Feature: Import of address interpolations | id | nodes | 1 | 1,3,2 When importing - Then node 1 expands to housenumbers - | housenumber | centroid - | 2 | 1,1 - Then node 3 expands to housenumbers + Then way 1 expands to housenumbers | housenumber | centroid - | 4 | 1,1.001 | 6 | 1.0005,1.001 - And node 2 expands to housenumbers - | housenumber | centroid - | 8 | 1.001,1.001 Scenario: Even three point interpolation with odd center point Given the place nodes @@ -314,17 +255,10 @@ Feature: Import of address interpolations | id | nodes | 1 | 1,3,2 When importing - Then node 1 expands to housenumbers + Then way 1 expands to housenumbers | housenumber | centroid - | 2 | 1,1 | 4 | 1,1.0004 | 6 | 1,1.0008 - Then node 3 expands to housenumbers - | housenumber | centroid - | 7 | 1,1.001 - And node 2 expands to housenumbers - | housenumber | centroid - | 8 | 1.001,1.001 Scenario: Interpolation on self-intersecting way Given the place nodes @@ -339,17 +273,9 @@ Feature: Import of address interpolations | id | nodes | 1 | 1,2,3,2 When importing - Then node 1 expands to housenumbers + Then way 1 expands to housenumbers | housenumber | centroid - | 2 | 0,0 | 4 | 0,0.0005 - Then node 2 expands to housenumbers - | housenumber | centroid - | 6 | 0,0.001 - | 8 | 0,0.0015 - Then node 3 expands to housenumbers - | housenumber | centroid - | 10 | 0,0.002 | 8 | 0,0.0015 Scenario: Interpolation on self-intersecting way II @@ -364,12 +290,73 @@ Feature: Import of address interpolations | id | nodes | 1 | 1,2,3,2 When importing - Then node 1 expands to housenumbers + Then way 1 expands to housenumbers | housenumber | centroid - | 2 | 0,0 | 4 | 0,0.0005 - Then node 2 expands to housenumbers - | housenumber | centroid - | 6 | 0,0.001 + + + Scenario: addr:street on interpolation way + Given the scene parallel-road + And the place nodes + | osm_id | class | type | housenumber | geometry + | 1 | place | house | 2 | :n-middle-w + | 2 | place | house | 6 | :n-middle-e + | 3 | place | house | 12 | :n-middle-w + | 4 | place | house | 16 | :n-middle-e + And the place ways + | osm_id | class | type | housenumber | street | geometry + | 10 | place | houses | even | | :w-middle + | 11 | place | houses | even | Cloud Street | :w-middle + And the place ways + | osm_id | class | type | name | geometry + | 2 | highway | tertiary | 'name' : 'Sun Way' | :w-north + | 3 | highway | tertiary | 'name' : 'Cloud Street' | :w-south + And the ways + | id | nodes + | 10 | 1,100,101,102,2 + | 11 | 3,200,201,202,4 + When importing + Then table placex contains + | object | parent_place_id + | N1 | W2 + | N2 | W2 + | N3 | W3 + | N4 | W3 + | W10 | W2 + | W11 | W3 + And way 10 expands exactly to housenumbers 4 + And way 11 expands exactly to housenumbers 14 + + Scenario: addr:street on housenumber way + Given the scene parallel-road + And the place nodes + | osm_id | class | type | housenumber | street | geometry + | 1 | place | house | 2 | | :n-middle-w + | 2 | place | house | 6 | | :n-middle-e + | 3 | place | house | 12 | Cloud Street | :n-middle-w + | 4 | place | house | 16 | Cloud Street | :n-middle-e + And the place ways + | osm_id | class | type | housenumber | geometry + | 10 | place | houses | even | :w-middle + | 11 | place | houses | even | :w-middle + And the place ways + | osm_id | class | type | name | geometry + | 2 | highway | tertiary | 'name' : 'Sun Way' | :w-north + | 3 | highway | tertiary | 'name' : 'Cloud Street' | :w-south + And the ways + | id | nodes + | 10 | 1,100,101,102,2 + | 11 | 3,200,201,202,4 + When importing + Then table placex contains + | object | parent_place_id + | N1 | W2 + | N2 | W2 + | N3 | W3 + | N4 | W3 + | W10 | W2 + | W11 | W3 + And way 10 expands exactly to housenumbers 4 + And way 11 expands exactly to housenumbers 14 diff --git a/tests/features/db/update/interpolation.feature b/tests/features/db/update/interpolation.feature new file mode 100644 index 00000000..bfc93b12 --- /dev/null +++ b/tests/features/db/update/interpolation.feature @@ -0,0 +1,167 @@ +@DB +Feature: Update of address interpolations + Test the interpolated address are updated correctly + + Scenario: addr:street added to interpolation + Given the scene parallel-road + And the place nodes + | osm_id | class | type | housenumber | geometry + | 1 | place | house | 2 | :n-middle-w + | 2 | place | house | 6 | :n-middle-e + And the place ways + | osm_id | class | type | housenumber | geometry + | 10 | place | houses | even | :w-middle + And the place ways + | osm_id | class | type | name | geometry + | 2 | highway | unclassified | 'name' : 'Sun Way' | :w-north + | 3 | highway | unclassified | 'name' : 'Cloud Street' | :w-south + And the ways + | id | nodes + | 10 | 1,100,101,102,2 + When importing + Then table placex contains + | object | parent_place_id + | N1 | W2 + | N2 | W2 + | W10 | W2 + And way 10 expands exactly to housenumbers 4 + When updating place ways + | osm_id | class | type | housenumber | street | geometry + | 10 | place | houses | even | Cloud Street | :w-middle + Then way 10 expands exactly to housenumbers 4 + And table placex contains + | object | parent_place_id + | N1 | W3 + | N2 | W3 + | W10 | W3 + + @Fail + Scenario: addr:street added to housenumbers + Given the scene parallel-road + And the place nodes + | osm_id | class | type | housenumber | geometry + | 1 | place | house | 2 | :n-middle-w + | 2 | place | house | 6 | :n-middle-e + And the place ways + | osm_id | class | type | housenumber | geometry + | 10 | place | houses | even | :w-middle + And the place ways + | osm_id | class | type | name | geometry + | 2 | highway | unclassified | 'name' : 'Sun Way' | :w-north + | 3 | highway | unclassified | 'name' : 'Cloud Street' | :w-south + And the ways + | id | nodes + | 10 | 1,100,101,102,2 + When importing + Then table placex contains + | object | parent_place_id + | N1 | W2 + | N2 | W2 + | W10 | W2 + And way 10 expands exactly to housenumbers 4 + When updating place nodes + | osm_id | class | type | street | housenumber | geometry + | 1 | place | house | Cloud Street| 2 | :n-middle-w + | 2 | place | house | Cloud Street| 6 | :n-middle-e + Then way 10 expands exactly to housenumbers 4 + And table placex contains + | object | parent_place_id + | N1 | W3 + | N2 | W3 + | W10 | W3 + + + Scenario: interpolation tag removed + Given the scene parallel-road + And the place nodes + | osm_id | class | type | housenumber | geometry + | 1 | place | house | 2 | :n-middle-w + | 2 | place | house | 6 | :n-middle-e + And the place ways + | osm_id | class | type | housenumber | geometry + | 10 | place | houses | even | :w-middle + And the place ways + | osm_id | class | type | name | geometry + | 2 | highway | unclassified | 'name' : 'Sun Way' | :w-north + | 3 | highway | unclassified | 'name' : 'Cloud Street' | :w-south + And the ways + | id | nodes + | 10 | 1,100,101,102,2 + When importing + Then table placex contains + | object | parent_place_id + | N1 | W2 + | N2 | W2 + | W10 | W2 + And way 10 expands exactly to housenumbers 4 + When marking for delete W10 + Then way 10 expands to no housenumbers + And table placex contains + | object | parent_place_id + | N1 | W2 + | N2 | W2 + + + Scenario: referenced road added + Given the scene parallel-road + And the place nodes + | osm_id | class | type | housenumber | geometry + | 1 | place | house | 2 | :n-middle-w + | 2 | place | house | 6 | :n-middle-e + And the place ways + | osm_id | class | type | housenumber | street | geometry + | 10 | place | houses | even | Cloud Street| :w-middle + And the place ways + | osm_id | class | type | name | geometry + | 2 | highway | unclassified | 'name' : 'Sun Way' | :w-north + And the ways + | id | nodes + | 10 | 1,100,101,102,2 + When importing + Then table placex contains + | object | parent_place_id + | N1 | W2 + | N2 | W2 + | W10 | W2 + And way 10 expands exactly to housenumbers 4 + When updating place ways + | osm_id | class | type | name | geometry + | 3 | highway | unclassified | 'name' : 'Cloud Street' | :w-south + Then way 10 expands exactly to housenumbers 4 + And table placex contains + | object | parent_place_id + | N1 | W3 + | N2 | W3 + | W10 | W3 + + + Scenario: referenced road deleted + Given the scene parallel-road + And the place nodes + | osm_id | class | type | housenumber | geometry + | 1 | place | house | 2 | :n-middle-w + | 2 | place | house | 6 | :n-middle-e + And the place ways + | osm_id | class | type | housenumber | street | geometry + | 10 | place | houses | even | Cloud Street| :w-middle + And the place ways + | osm_id | class | type | name | geometry + | 2 | highway | unclassified | 'name' : 'Sun Way' | :w-north + | 3 | highway | unclassified | 'name' : 'Cloud Street' | :w-south + And the ways + | id | nodes + | 10 | 1,100,101,102,2 + When importing + Then table placex contains + | object | parent_place_id + | N1 | W3 + | N2 | W3 + | W10 | W3 + And way 10 expands exactly to housenumbers 4 + When marking for delete W3 + Then way 10 expands exactly to housenumbers 4 + And table placex contains + | object | parent_place_id + | N1 | W2 + | N2 | W2 + | W10 | W2 diff --git a/tests/scenes/data/parallel-road.wkt b/tests/scenes/data/parallel-road.wkt new file mode 100644 index 00000000..355af300 --- /dev/null +++ b/tests/scenes/data/parallel-road.wkt @@ -0,0 +1,5 @@ +n-middle-w | POINT(1.0065316 2.0003381) +n-middle-e | POINT(1.007236 2.0003408) +w-south | LINESTRING(1.0065324 2.0001892,1.006676 2.0002786,1.0068195 2.0002786,1.0069171 2.0002515,1.0070417 2.0001892,1.0072422 2.000173) +w-middle | LINESTRING(1.0065316 2.0003381,1.006686 2.0004248,1.0069 2.0004167,1.007236 2.0003408) +w-north | LINESTRING(1.0065397 2.000418,1.0066833 2.0005074,1.0068269 2.0005074,1.0069244 2.0004803,1.007049 2.000418,1.0072495 2.0004018) diff --git a/tests/scenes/data/roads.osm b/tests/scenes/data/roads.osm index b642fa62..ed7cd62a 100644 --- a/tests/scenes/data/roads.osm +++ b/tests/scenes/data/roads.osm @@ -1,294 +1,347 @@ - + - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + - - + + - + - - + + - + - - + + - - - - - - + + + + + + - - + + - + - + - + - + - + - - - - - - - - + + + + + + + + - + - + - + - + - + - + - + - + - + - + - + - - - - - - - - - - + + + + + + + + + + - + - + - + + + + + + + + + + + + + + + + + + + + + + + + + + - - - - + + + + - - - - - - - + + + + + + + - - - - - - + + + + + + - - - - - - + + + + + + - - - - - + + - + + + + - - - - + + + + - - - - - - - + + + + + + + - - - - - - - - + + + + + + + + - - - + + + - - - - - - - + + + + + + + - - - - - + + + + + - - - - + + + + - - - - + + + + - - - - + + + + - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/tests/steps/db_results.py b/tests/steps/db_results.py index 2566418e..c3ac9445 100644 --- a/tests/steps/db_results.py +++ b/tests/steps/db_results.py @@ -119,10 +119,10 @@ def check_search_name_content(step): else: raise Exception("Cannot handle field %s in search_name table" % (k, )) -@step(u'node (\d+) expands to housenumbers') +@step(u'way (\d+) expands to housenumbers') def check_interpolated_housenumbers(step, nodeid): """Check that the exact set of housenumbers has been entered in - placex for the given source node. Expected are tow columns: + placex for the given source node. Expected are two columns: housenumber and centroid """ numbers = {} @@ -132,7 +132,8 @@ def check_interpolated_housenumbers(step, nodeid): cur = world.conn.cursor(cursor_factory=psycopg2.extras.DictCursor) cur.execute("""SELECT DISTINCT housenumber, ST_X(centroid) as clat, ST_Y(centroid) as clon - FROM placex WHERE osm_type = 'N' and osm_id = %s""", + FROM placex WHERE osm_type = 'W' and osm_id = %s + and class = 'place' and type = 'address'""", (int(nodeid),)) assert_equals(len(numbers), cur.rowcount) for r in cur: @@ -140,6 +141,32 @@ def check_interpolated_housenumbers(step, nodeid): world.match_geometry((r['clat'], r['clon']), numbers[r["housenumber"]]) del numbers[r["housenumber"]] +@step(u'way (\d+) expands exactly to housenumbers ([0-9,]*)') +def check_interpolated_housenumber_list(step, nodeid, numberlist): + """ Checks that the interpolated house numbers corresponds + to the given list. + """ + expected = numberlist.split(','); + cur = world.conn.cursor() + cur.execute("""SELECT housenumber FROM placex + WHERE osm_type = 'W' and osm_id = %s + and class = 'place' and type = 'address'""", (int(nodeid),)) + for r in cur: + assert_in(r[0], expected, "Unexpected house number %s for node %s." % (r[0], nodeid)) + expected.remove(r[0]) + assert_equals(0, len(expected), "Missing house numbers for way %s: %s" % (nodeid, expected)) + +@step(u'way (\d+) expands to no housenumbers') +def check_no_interpolated_housenumber_list(step, nodeid): + """ Checks that the interpolated house numbers corresponds + to the given list. + """ + cur = world.conn.cursor() + cur.execute("""SELECT housenumber FROM placex + WHERE osm_type = 'W' and osm_id = %s + and class = 'place' and type = 'address'""", (int(nodeid),)) + res = [r[0] for r in cur] + assert_equals(0, len(res), "Unexpected house numbers for way %s: %s" % (nodeid, res)) @step(u'table search_name has no entry for (.*)') def check_placex_missing(step, osmid): diff --git a/tests/steps/db_setup.py b/tests/steps/db_setup.py index 7d1ea8d3..14f17756 100644 --- a/tests/steps/db_setup.py +++ b/tests/steps/db_setup.py @@ -213,8 +213,8 @@ def import_database(step): world.run_nominatim_script('setup', 'create-functions', 'create-partition-functions') cur = world.conn.cursor() cur.execute("""insert into placex (osm_type, osm_id, class, type, name, admin_level, - housenumber, street, addr_place, isin, postcode, country_code, extratags, - geometry) select * from place""") + housenumber, street, addr_place, isin, postcode, country_code, extratags, + geometry) select * from place""") world.conn.commit() world.run_nominatim_script('setup', 'index', 'index-noanalyse') #world.db_dump_table('placex') diff --git a/tests/steps/terrain.py b/tests/steps/terrain.py index 746485ac..e9561d1a 100644 --- a/tests/steps/terrain.py +++ b/tests/steps/terrain.py @@ -94,7 +94,7 @@ def get_placeid(oid): q = 'SELECT place_id FROM placex where osm_type = %s and osm_id = %s and class = %s' params = (osmtype, osmid, cls) cur.execute(q, params) - assert_equals (cur.rowcount, 1) + assert_equals(cur.rowcount, 1, "%d rows found for place %s" % (cur.rowcount, oid)) return cur.fetchone()[0] -- 2.39.5