map-machine/tests/test_osm_reader.py
2022-07-18 23:31:23 +03:00

120 lines
2.9 KiB
Python

"""Test OSM XML parsing."""
import numpy as np
from map_machine.osm.osm_reader import (
OSMData,
OSMNode,
OSMRelation,
OSMWay,
parse_levels,
)
__author__ = "Sergey Vartanov"
__email__ = "me@enzet.ru"
def test_node() -> None:
"""Test OSM node parsing from XML."""
osm_data: OSMData = OSMData()
osm_data.parse_osm_text(
"""<?xml version="1.0"?>
<osm>
<node id="42" lon="5" lat="10" />
</osm>"""
)
assert 42 in osm_data.nodes
node: OSMNode = osm_data.nodes[42]
assert node.id_ == 42
assert np.allclose(node.coordinates, np.array([10, 5]))
def test_node_with_tag() -> None:
"""Test OSM node parsing from XML."""
osm_data: OSMData = OSMData()
osm_data.parse_osm_text(
"""<?xml version="1.0"?>
<osm>
<node id="42" lon="5" lat="10">
<tag k="key" v="value" />
</node>
</osm>"""
)
assert 42 in osm_data.nodes
node: OSMNode = osm_data.nodes[42]
assert node.id_ == 42
assert np.allclose(node.coordinates, np.array([10, 5]))
assert node.tags["key"] == "value"
def test_way() -> None:
"""Test OSM way parsing from XML."""
osm_data: OSMData = OSMData()
osm_data.parse_osm_text(
"""<?xml version="1.0"?>
<osm>
<way id="42" />
</osm>"""
)
assert 42 in osm_data.ways
way: OSMWay = osm_data.ways[42]
assert way.id_ == 42
def test_nodes() -> None:
"""Test OSM node parsing from XML."""
osm_data: OSMData = OSMData()
osm_data.parse_osm_text(
"""<?xml version="1.0"?>
<osm>
<node id="1" lon="5" lat="10" />
<way id="2">
<nd ref="1" />
<tag k="key" v="value" />
</way>
</osm>"""
)
way: OSMWay = osm_data.ways[2]
assert len(way.nodes) == 1
assert way.nodes[0].id_ == 1
assert way.tags["key"] == "value"
def test_relation() -> None:
"""Test OSM node parsing from XML."""
osm_data: OSMData = OSMData()
osm_data.parse_osm_text(
"""<?xml version="1.0"?>
<osm>
<node id="1" lon="5" lat="10" />
<way id="2">
<nd ref="1" />
</way>
<relation id="3">
<member type="way" ref="2" role="outer" />
<tag k="key" v="value" />
</relation>
</osm>"""
)
assert 3 in osm_data.relations
relation: OSMRelation = osm_data.relations[3]
assert relation.id_ == 3
assert relation.tags["key"] == "value"
assert len(relation.members) == 1
assert relation.members[0].type_ == "way"
assert relation.members[0].ref == 2
def test_parse_levels() -> None:
"""Test level parsing."""
assert parse_levels("1") == [1]
assert parse_levels("-1") == [-1]
assert parse_levels("1.5") == [1.5]
assert parse_levels("1,5") == [1.5]
def test_parse_levels_list() -> None:
"""Test list of levels parsing."""
assert parse_levels("0;1") == [0, 1]
assert parse_levels("0;2") == [0, 2]
assert parse_levels("0;2.5") == [0, 2.5]
assert parse_levels("0;2,5") == [0, 2.5]