forked from hans/Nominatim
make sure PHP and Python reverse code does the same
The only allowable difference is precision of coordinates. Python uses a precision of 7 digits where possible, which corresponds to the precision of OSM data. Also fixes some smaller bugs found by the BDD tests.
This commit is contained in:
@@ -47,15 +47,16 @@ class Field:
|
||||
""" Generic comparator for fields, which looks at the type of the
|
||||
value compared.
|
||||
"""
|
||||
def __init__(self, value):
|
||||
def __init__(self, value, **extra_args):
|
||||
self.value = value
|
||||
self.extra_args = extra_args
|
||||
|
||||
def __eq__(self, other):
|
||||
if isinstance(self.value, float):
|
||||
return math.isclose(self.value, float(other))
|
||||
return math.isclose(self.value, float(other), **self.extra_args)
|
||||
|
||||
if self.value.startswith('^'):
|
||||
return re.fullmatch(self.value, other)
|
||||
return re.fullmatch(self.value, str(other))
|
||||
|
||||
if isinstance(other, dict):
|
||||
return other == eval('{' + self.value + '}')
|
||||
|
||||
@@ -134,8 +134,8 @@ class GenericResponse:
|
||||
lon, lat = context.osm.grid_node(int(value))
|
||||
else:
|
||||
raise RuntimeError("Context needed when using grid coordinates")
|
||||
self.check_row_field(i, 'lat', Field(float(lat)), base=subdict)
|
||||
self.check_row_field(i, 'lon', Field(float(lon)), base=subdict)
|
||||
self.check_row_field(i, 'lat', Field(float(lat), abs_tol=1e-07), base=subdict)
|
||||
self.check_row_field(i, 'lon', Field(float(lon), abs_tol=1e-07), base=subdict)
|
||||
else:
|
||||
self.check_row_field(i, name, Field(value), base=subdict)
|
||||
|
||||
|
||||
@@ -229,7 +229,8 @@ def validate_result_number(context, operator, number):
|
||||
@then(u'a HTTP (?P<status>\d+) is returned')
|
||||
def check_http_return_status(context, status):
|
||||
assert context.response.errorcode == int(status), \
|
||||
f"Return HTTP status is {context.response.errorcode}."
|
||||
f"Return HTTP status is {context.response.errorcode}."\
|
||||
f" Full response:\n{context.response.page}"
|
||||
|
||||
@then(u'the page contents equals "(?P<text>.+)"')
|
||||
def check_page_content_equals(context, text):
|
||||
|
||||
Reference in New Issue
Block a user