3 #include "gtest/gtest.h"
8 TEST(OsmFile, readWrite) {
11 file.nodes.emplace(std::make_pair(-1,
Node{-1, {{
"key",
"value"}, {
"key2",
"value2"}}, {12.3456789, 0001.2345678000, 9.0123}}));
12 file.nodes.emplace(std::make_pair(-2,
Node{-2, {}, {45.6789, 12.3, 4.5}}));
13 file.nodes.emplace(std::make_pair(-3,
Node{-3, {}, {67.8, 9.10, 11.0}}));
14 file.ways.emplace(std::make_pair(-4,
Way{-4, {{
"wayKey",
"wayValue"}}, {&
file.nodes.at(-1), &
file.nodes.at(-2)}}));
15 file.ways.emplace(std::make_pair(-5,
Way{-5, {{
"wayKey",
"wayValue"}}, {&
file.nodes.at(-2), &
file.nodes.at(-3)}}));
16 file.relations.emplace(std::make_pair(-6,
Relation{-6,{{
"relKey",
"relValue"}},{{
"outer", &
file.ways.at(-4)}, {
"outer", &
file.ways.at(-5)}, {
"node", &
file.nodes.at(-2)}}}));
19 auto file2 =
read(*doc);
21 EXPECT_EQ(file2.relations,
file.relations);
22 EXPECT_EQ(file2.ways,
file.ways);
23 EXPECT_EQ(file2,
file);
25 const auto osmNode = doc->first_child();
26 const auto upload_attribute = osmNode.attributes().begin()->next_attribute();
27 EXPECT_EQ(std::string(upload_attribute.name()),
"upload");
28 EXPECT_EQ(std::string(upload_attribute.value()),
"false");
30 EXPECT_DOUBLE_EQ(file2.nodes.at(-1).point.lat, 12.3456789);
31 EXPECT_DOUBLE_EQ(file2.nodes.at(-1).point.lon, 1.2345678);
32 EXPECT_DOUBLE_EQ(file2.nodes.at(-1).point.ele, 9.0123);
33 EXPECT_DOUBLE_EQ(file2.nodes.at(-2).point.lat, 45.6789);
34 EXPECT_DOUBLE_EQ(file2.nodes.at(-2).point.lon, 12.3);
35 EXPECT_DOUBLE_EQ(file2.nodes.at(-2).point.ele, 4.5);
36 EXPECT_DOUBLE_EQ(file2.nodes.at(-3).point.lat, 67.8);
37 EXPECT_DOUBLE_EQ(file2.nodes.at(-3).point.lon, 9.10);
38 EXPECT_DOUBLE_EQ(file2.nodes.at(-3).point.ele, 11.0);
41 TEST(OsmFile, readWriteJSON) {
44 file.nodes.emplace(std::make_pair(-1,
Node{-1, {{
"key",
"value"}, {
"key2",
"value2"}}, {12.3456789, 0001.2345678000, 9.0123}}));
45 file.nodes.emplace(std::make_pair(-2,
Node{-2, {}, {45.6789, 12.3, 4.5}}));
46 file.nodes.emplace(std::make_pair(-3,
Node{-3, {}, {67.8, 9.10, 11.0}}));
47 file.ways.emplace(std::make_pair(-4,
Way{-4, {{
"wayKey",
"wayValue"}}, {&
file.nodes.at(-1), &
file.nodes.at(-2)}}));
48 file.ways.emplace(std::make_pair(-5,
Way{-5, {{
"wayKey",
"wayValue"}}, {&
file.nodes.at(-2), &
file.nodes.at(-3)}}));
49 file.relations.emplace(std::make_pair(-6,
Relation{-6,{{
"relKey",
"relValue"}},{{
"outer", &
file.ways.at(-4)}, {
"outer", &
file.ways.at(-5)}, {
"node", &
file.nodes.at(-2)}}}));
51 auto doc =
write(
file, { {
"josm_upload",
"true"}, {
"josm_format_elevation",
"true"} });
52 auto file2 =
read(*doc);
54 EXPECT_EQ(file2.relations,
file.relations);
55 EXPECT_EQ(file2.ways,
file.ways);
56 EXPECT_EQ(file2,
file);
58 const auto osmNode = doc->first_child();
59 const auto upload_attribute = osmNode.attributes().begin()->next_attribute();
60 EXPECT_EQ(std::string(upload_attribute.name()),
"upload");
61 EXPECT_EQ(std::string(upload_attribute.value()),
"true");
63 EXPECT_DOUBLE_EQ(file2.nodes.at(-1).point.lat, 12.3456789);
64 EXPECT_DOUBLE_EQ(file2.nodes.at(-1).point.lon, 1.2345678);
65 EXPECT_DOUBLE_EQ(file2.nodes.at(-1).point.ele, 9.01);
66 EXPECT_DOUBLE_EQ(file2.nodes.at(-2).point.lat, 45.6789);
67 EXPECT_DOUBLE_EQ(file2.nodes.at(-2).point.lon, 12.3);
68 EXPECT_DOUBLE_EQ(file2.nodes.at(-2).point.ele, 4.5);
69 EXPECT_DOUBLE_EQ(file2.nodes.at(-3).point.lat, 67.8);
70 EXPECT_DOUBLE_EQ(file2.nodes.at(-3).point.lon, 9.10);
71 EXPECT_DOUBLE_EQ(file2.nodes.at(-3).point.ele, 11.0);
74 TEST(OsmFile, readEmptyFile) {
75 pugi::xml_document doc;
79 EXPECT_TRUE(errors.empty());
82 TEST(OsmFile, readFileWithoutMapData) {
83 pugi::xml_document doc;
84 doc.load_string(
"<osm></osm>");
87 EXPECT_TRUE(errors.empty());
90 TEST(OsmFile, readFileWithIncompleteMapData) {
91 pugi::xml_document doc;
92 doc.load_string(R
"(<osm><way id="1"><nd ref="2"/></way><node/></osm>)");
95 EXPECT_FALSE(errors.empty());
98 TEST(OsmFile, readMapWithIncompleteRoles) {
99 pugi::xml_document doc;
100 doc.load_string(R
"(<osm>
101 <node id="1" lat="1" lon="1"/>
106 <tag k="type" v="lanelet"/>
107 <member type="way" ref="2" role="left"/>
108 <member type="way" ref="1" role="right"/>
111 <tag k="type" v="regulatory_element"/>
112 <member type="way" ref="1" role="somerole"/>
113 <member type="way" ref="2" role="nonexisting"/>
114 <member type="relation" ref="3" role="nonexisting"/>
115 <member type="relation" ref="4" role="nonexisting"/>
116 <member type="relation" ref="1" role="somerole2"/>
117 <member type="way" ref="1" role="somerole3"/>
122 EXPECT_FALSE(errors.empty());
123 EXPECT_EQ(
file.nodes.size(), 1UL);
124 EXPECT_EQ(
file.ways.size(), 1UL);
125 ASSERT_EQ(
file.relations.size(), 2UL);
126 ASSERT_NE(
file.relations.find(2),
file.relations.end());
127 EXPECT_EQ(
file.relations[1].members.size(), 1UL);
128 EXPECT_EQ(
file.relations[2].members.size(), 3UL);
129 auto& members =
file.relations[2].members;
130 EXPECT_EQ(members[0].first,
"somerole");
131 EXPECT_EQ(members[0].second->id, 1L);
132 EXPECT_EQ(members[1].first,
"somerole2");
133 EXPECT_EQ(members[2].first,
"somerole3");