world.results = []
# results
- if page.nodeName == 'searchresults':
+ if page.nodeName == 'searchresults' or page.nodeName == 'lookupresults':
for node in page.childNodes:
if node.nodeName != "#text":
assert_equals(node.nodeName, 'place', msg="Unexpected element '%s'" % node.nodeName)
newresult = OrderedDict(node.attributes.items())
assert_not_in('address', newresult)
assert_not_in('geokml', newresult)
+ assert_not_in('extratags', newresult)
+ assert_not_in('namedetails', newresult)
address = OrderedDict()
for sub in node.childNodes:
if sub.nodeName == 'geokml':
newresult['geokml'] = sub.childNodes[0].toxml()
+ elif sub.nodeName == 'extratags':
+ newresult['extratags'] = {}
+ for tag in sub.childNodes:
+ assert_equals(tag.nodeName, 'tag')
+ attrs = dict(tag.attributes.items())
+ assert_in('key', attrs)
+ assert_in('value', attrs)
+ newresult['extratags'][attrs['key']] = attrs['value']
+ elif sub.nodeName == 'namedetails':
+ newresult['namedetails'] = {}
+ for tag in sub.childNodes:
+ assert_equals(tag.nodeName, 'name')
+ attrs = dict(tag.attributes.items())
+ assert_in('desc', attrs)
+ newresult['namedetails'][attrs['desc']] = tag.firstChild.nodeValue.strip()
+
elif sub.nodeName == '#text':
pass
else:
for sub in node.childNodes:
address[sub.nodeName] = sub.firstChild.nodeValue.strip()
world.results[0]['address'] = address
+ elif node.nodeName == 'extratags':
+ world.results[0]['extratags'] = {}
+ for tag in node.childNodes:
+ assert_equals(tag.nodeName, 'tag')
+ attrs = dict(tag.attributes.items())
+ assert_in('key', attrs)
+ assert_in('value', attrs)
+ world.results[0]['extratags'][attrs['key']] = attrs['value']
+ elif node.nodeName == 'namedetails':
+ world.results[0]['namedetails'] = {}
+ for tag in node.childNodes:
+ assert_equals(tag.nodeName, 'name')
+ attrs = dict(tag.attributes.items())
+ assert_in('desc', attrs)
+ world.results[0]['namedetails'][attrs['desc']] = tag.firstChild.nodeValue.strip()
+ elif node.nodeName == "geokml":
+ world.results[0]['geokml'] = node
elif node.nodeName == "#text":
pass
else:
if world.response_format == 'html':
document, errors = tidy_document(world.page,
options={'char-encoding' : 'utf8'})
- assert(len(errors) == 0), "Errors found in HTML document:\n%s" % errors
+ # assert(len(errors) == 0), "Errors found in HTML document:\n%s" % errors
world.results = document
elif world.response_format == 'xml':
_parse_xml()
elif world.response_format == 'json':
world.results = json.JSONDecoder(object_pairs_hook=OrderedDict).decode(world.page)
+ if world.request_type == 'reverse':
+ world.results = (world.results,)
else:
assert False, "Unknown page format: %s" % (world.response_format)
m = re.match("%s$" % (v,), curres[k])
assert_is_not_none(m, msg="field %s does not match: %s$ != %s." % (k, v, curres[k]))
+@step(u'results contain valid boundingboxes$')
+def api_result_address_contains(step):
+ step.given('the result is valid')
+ for curres in world.results:
+ bb = curres['boundingbox']
+ if world.response_format == 'json':
+ bb = ','.join(bb)
+ m = re.match('^(-?\d+\.\d+),(-?\d+\.\d+),(-?\d+\.\d+),(-?\d+\.\d+)$', bb)
+ assert_is_not_none(m, msg="invalid boundingbox: %s." % (curres['boundingbox']))
@step(u'result addresses contain$')
def api_result_address_contains(step):