1 #include "catch.hpp" 2 3 #include <osmium/builder/attr.hpp> 4 #include <osmium/memory/buffer.hpp> 5 #include <osmium/osm/metadata_options.hpp> 6 #include <osmium/osm/object.hpp> 7 8 #include <stdexcept> 9 10 TEST_CASE("Metadata options: default") { 11 const osmium::metadata_options m{}; 12 REQUIRE_FALSE(m.none()); 13 REQUIRE(m.any()); 14 REQUIRE(m.all()); 15 REQUIRE(m.version()); 16 REQUIRE(m.timestamp()); 17 REQUIRE(m.changeset()); 18 REQUIRE(m.uid()); 19 REQUIRE(m.user()); 20 } 21 22 TEST_CASE("Metadata options: false") { 23 const osmium::metadata_options m{"false"}; 24 REQUIRE(m.none()); 25 REQUIRE_FALSE(m.any()); 26 REQUIRE_FALSE(m.all()); 27 REQUIRE_FALSE(m.version()); 28 REQUIRE_FALSE(m.timestamp()); 29 REQUIRE_FALSE(m.changeset()); 30 REQUIRE_FALSE(m.uid()); 31 REQUIRE_FALSE(m.user()); 32 } 33 34 TEST_CASE("Metadata options: none") { 35 const osmium::metadata_options m{"none"}; 36 REQUIRE(m.none()); 37 REQUIRE_FALSE(m.any()); 38 REQUIRE_FALSE(m.all()); 39 REQUIRE_FALSE(m.version()); 40 REQUIRE_FALSE(m.timestamp()); 41 REQUIRE_FALSE(m.changeset()); 42 REQUIRE_FALSE(m.uid()); 43 REQUIRE_FALSE(m.user()); 44 } 45 46 TEST_CASE("Metadata options: true") { 47 const osmium::metadata_options m{"true"}; 48 REQUIRE_FALSE(m.none()); 49 REQUIRE(m.any()); 50 REQUIRE(m.all()); 51 REQUIRE(m.version()); 52 REQUIRE(m.timestamp()); 53 REQUIRE(m.changeset()); 54 REQUIRE(m.uid()); 55 REQUIRE(m.user()); 56 } 57 58 TEST_CASE("Metadata options: all") { 59 const osmium::metadata_options m{"all"}; 60 REQUIRE_FALSE(m.none()); 61 REQUIRE(m.any()); 62 REQUIRE(m.all()); 63 REQUIRE(m.version()); 64 REQUIRE(m.timestamp()); 65 REQUIRE(m.changeset()); 66 REQUIRE(m.uid()); 67 REQUIRE(m.user()); 68 } 69 70 TEST_CASE("Metadata options: version,changeset") { 71 const osmium::metadata_options m{"version+changeset"}; 72 REQUIRE_FALSE(m.none()); 73 REQUIRE(m.any()); 74 REQUIRE_FALSE(m.all()); 75 REQUIRE(m.version()); 76 REQUIRE_FALSE(m.timestamp()); 77 REQUIRE(m.changeset()); 78 REQUIRE_FALSE(m.uid()); 79 REQUIRE_FALSE(m.user()); 80 } 81 82 TEST_CASE("Metadata options: timestamp,uid,user") { 83 const osmium::metadata_options m{"timestamp+uid+user"}; 84 REQUIRE_FALSE(m.none()); 85 REQUIRE(m.any()); 86 REQUIRE_FALSE(m.all()); 87 REQUIRE_FALSE(m.version()); 88 REQUIRE(m.timestamp()); 89 REQUIRE_FALSE(m.changeset()); 90 REQUIRE(m.uid()); 91 REQUIRE(m.user()); 92 } 93 94 TEST_CASE("Metadata options: fail") { 95 REQUIRE_THROWS_AS(osmium::metadata_options{"timestamp+foo"}, std::invalid_argument); 96 } 97 98 TEST_CASE("Metdata options: constructor using OSMObject") { 99 osmium::memory::Buffer buffer{10UL * 1024UL}; 100 using namespace osmium::builder::attr; // NOLINT(google-build-using-namespace) 101 102 SECTION("only version") { 103 const osmium::OSMObject& obj = buffer.get<osmium::OSMObject>(osmium::builder::add_node(buffer, 104 _id(1), 105 _version(2))); 106 osmium::metadata_options options = osmium::detect_available_metadata(obj); 107 REQUIRE_FALSE(options.user()); 108 REQUIRE_FALSE(options.uid()); 109 REQUIRE_FALSE(options.changeset()); 110 REQUIRE_FALSE(options.timestamp()); 111 REQUIRE(options.version()); 112 } 113 114 SECTION("full") { 115 const osmium::OSMObject& obj = buffer.get<osmium::OSMObject>(osmium::builder::add_node(buffer, 116 _id(1), 117 _version(2), 118 _timestamp("2018-01-01T23:00:00Z"), 119 _cid(30), 120 _uid(8), 121 _user("foo"))); 122 osmium::metadata_options options = osmium::detect_available_metadata(obj); 123 REQUIRE(options.all()); 124 } 125 126 SECTION("changeset+timestamp+version") { 127 const osmium::OSMObject& obj = buffer.get<osmium::OSMObject>(osmium::builder::add_node(buffer, 128 _id(1), 129 _version(2), 130 _timestamp("2018-01-01T23:00:00Z"), 131 _cid(30))); 132 osmium::metadata_options options = osmium::detect_available_metadata(obj); 133 REQUIRE(options.version()); 134 REQUIRE(options.timestamp()); 135 REQUIRE(options.changeset()); 136 REQUIRE_FALSE(options.user()); 137 REQUIRE_FALSE(options.uid()); 138 } 139 } 140 141 TEST_CASE("Metdata options: string representation should be valid 'version+changeset'") { 142 const osmium::metadata_options options{"version+changeset"}; 143 REQUIRE(options.to_string() == "version+changeset"); 144 } 145 146 TEST_CASE("Metdata options: string representation should be valid 'version+uid+user'") { 147 const osmium::metadata_options options{"version+uid+user"}; 148 REQUIRE(options.to_string() == "version+uid+user"); 149 } 150 151 TEST_CASE("Metdata options: string representation should be valid 'version+timestamp'") { 152 const osmium::metadata_options options{"version+timestamp"}; 153 REQUIRE(options.to_string() == "version+timestamp"); 154 } 155 156 TEST_CASE("Metdata options: string representation should be valid 'timestamp+version (different order'") { 157 const osmium::metadata_options options{"timestamp+version"}; 158 REQUIRE(options.to_string() == "version+timestamp"); 159 } 160 161 TEST_CASE("Metdata options: string representation should be valid 'none'") { 162 const osmium::metadata_options options{"none"}; 163 REQUIRE(options.to_string() == "none"); 164 } 165 166 TEST_CASE("Metdata options: string representation should be valid 'all (short)'") { 167 const osmium::metadata_options options{"all"}; 168 REQUIRE(options.to_string() == "all"); 169 } 170 171 TEST_CASE("Metdata options: string representation should be valid 'all (long)'") { 172 const osmium::metadata_options options{"user+uid+version+timestamp+changeset"}; 173 REQUIRE(options.to_string() == "all"); 174 } 175 176