176 lines
5.5 KiB
C++
176 lines
5.5 KiB
C++
#include "catch.hpp"
|
|
|
|
#include <osmium/builder/attr.hpp>
|
|
#include <osmium/memory/buffer.hpp>
|
|
#include <osmium/osm/metadata_options.hpp>
|
|
#include <osmium/osm/object.hpp>
|
|
|
|
#include <stdexcept>
|
|
|
|
TEST_CASE("Metadata options: default") {
|
|
const osmium::metadata_options m{};
|
|
REQUIRE_FALSE(m.none());
|
|
REQUIRE(m.any());
|
|
REQUIRE(m.all());
|
|
REQUIRE(m.version());
|
|
REQUIRE(m.timestamp());
|
|
REQUIRE(m.changeset());
|
|
REQUIRE(m.uid());
|
|
REQUIRE(m.user());
|
|
}
|
|
|
|
TEST_CASE("Metadata options: false") {
|
|
const osmium::metadata_options m{"false"};
|
|
REQUIRE(m.none());
|
|
REQUIRE_FALSE(m.any());
|
|
REQUIRE_FALSE(m.all());
|
|
REQUIRE_FALSE(m.version());
|
|
REQUIRE_FALSE(m.timestamp());
|
|
REQUIRE_FALSE(m.changeset());
|
|
REQUIRE_FALSE(m.uid());
|
|
REQUIRE_FALSE(m.user());
|
|
}
|
|
|
|
TEST_CASE("Metadata options: none") {
|
|
const osmium::metadata_options m{"none"};
|
|
REQUIRE(m.none());
|
|
REQUIRE_FALSE(m.any());
|
|
REQUIRE_FALSE(m.all());
|
|
REQUIRE_FALSE(m.version());
|
|
REQUIRE_FALSE(m.timestamp());
|
|
REQUIRE_FALSE(m.changeset());
|
|
REQUIRE_FALSE(m.uid());
|
|
REQUIRE_FALSE(m.user());
|
|
}
|
|
|
|
TEST_CASE("Metadata options: true") {
|
|
const osmium::metadata_options m{"true"};
|
|
REQUIRE_FALSE(m.none());
|
|
REQUIRE(m.any());
|
|
REQUIRE(m.all());
|
|
REQUIRE(m.version());
|
|
REQUIRE(m.timestamp());
|
|
REQUIRE(m.changeset());
|
|
REQUIRE(m.uid());
|
|
REQUIRE(m.user());
|
|
}
|
|
|
|
TEST_CASE("Metadata options: all") {
|
|
const osmium::metadata_options m{"all"};
|
|
REQUIRE_FALSE(m.none());
|
|
REQUIRE(m.any());
|
|
REQUIRE(m.all());
|
|
REQUIRE(m.version());
|
|
REQUIRE(m.timestamp());
|
|
REQUIRE(m.changeset());
|
|
REQUIRE(m.uid());
|
|
REQUIRE(m.user());
|
|
}
|
|
|
|
TEST_CASE("Metadata options: version,changeset") {
|
|
const osmium::metadata_options m{"version+changeset"};
|
|
REQUIRE_FALSE(m.none());
|
|
REQUIRE(m.any());
|
|
REQUIRE_FALSE(m.all());
|
|
REQUIRE(m.version());
|
|
REQUIRE_FALSE(m.timestamp());
|
|
REQUIRE(m.changeset());
|
|
REQUIRE_FALSE(m.uid());
|
|
REQUIRE_FALSE(m.user());
|
|
}
|
|
|
|
TEST_CASE("Metadata options: timestamp,uid,user") {
|
|
const osmium::metadata_options m{"timestamp+uid+user"};
|
|
REQUIRE_FALSE(m.none());
|
|
REQUIRE(m.any());
|
|
REQUIRE_FALSE(m.all());
|
|
REQUIRE_FALSE(m.version());
|
|
REQUIRE(m.timestamp());
|
|
REQUIRE_FALSE(m.changeset());
|
|
REQUIRE(m.uid());
|
|
REQUIRE(m.user());
|
|
}
|
|
|
|
TEST_CASE("Metadata options: fail") {
|
|
REQUIRE_THROWS_AS(osmium::metadata_options{"timestamp+foo"}, std::invalid_argument);
|
|
}
|
|
|
|
TEST_CASE("Metdata options: constructor using OSMObject") {
|
|
osmium::memory::Buffer buffer{10UL * 1024UL};
|
|
using namespace osmium::builder::attr; // NOLINT(google-build-using-namespace)
|
|
|
|
SECTION("only version") {
|
|
const osmium::OSMObject& obj = buffer.get<osmium::OSMObject>(osmium::builder::add_node(buffer,
|
|
_id(1),
|
|
_version(2)));
|
|
osmium::metadata_options options = osmium::detect_available_metadata(obj);
|
|
REQUIRE_FALSE(options.user());
|
|
REQUIRE_FALSE(options.uid());
|
|
REQUIRE_FALSE(options.changeset());
|
|
REQUIRE_FALSE(options.timestamp());
|
|
REQUIRE(options.version());
|
|
}
|
|
|
|
SECTION("full") {
|
|
const osmium::OSMObject& obj = buffer.get<osmium::OSMObject>(osmium::builder::add_node(buffer,
|
|
_id(1),
|
|
_version(2),
|
|
_timestamp("2018-01-01T23:00:00Z"),
|
|
_cid(30),
|
|
_uid(8),
|
|
_user("foo")));
|
|
osmium::metadata_options options = osmium::detect_available_metadata(obj);
|
|
REQUIRE(options.all());
|
|
}
|
|
|
|
SECTION("changeset+timestamp+version") {
|
|
const osmium::OSMObject& obj = buffer.get<osmium::OSMObject>(osmium::builder::add_node(buffer,
|
|
_id(1),
|
|
_version(2),
|
|
_timestamp("2018-01-01T23:00:00Z"),
|
|
_cid(30)));
|
|
osmium::metadata_options options = osmium::detect_available_metadata(obj);
|
|
REQUIRE(options.version());
|
|
REQUIRE(options.timestamp());
|
|
REQUIRE(options.changeset());
|
|
REQUIRE_FALSE(options.user());
|
|
REQUIRE_FALSE(options.uid());
|
|
}
|
|
}
|
|
|
|
TEST_CASE("Metdata options: string representation should be valid 'version+changeset'") {
|
|
const osmium::metadata_options options{"version+changeset"};
|
|
REQUIRE(options.to_string() == "version+changeset");
|
|
}
|
|
|
|
TEST_CASE("Metdata options: string representation should be valid 'version+uid+user'") {
|
|
const osmium::metadata_options options{"version+uid+user"};
|
|
REQUIRE(options.to_string() == "version+uid+user");
|
|
}
|
|
|
|
TEST_CASE("Metdata options: string representation should be valid 'version+timestamp'") {
|
|
const osmium::metadata_options options{"version+timestamp"};
|
|
REQUIRE(options.to_string() == "version+timestamp");
|
|
}
|
|
|
|
TEST_CASE("Metdata options: string representation should be valid 'timestamp+version (different order'") {
|
|
const osmium::metadata_options options{"timestamp+version"};
|
|
REQUIRE(options.to_string() == "version+timestamp");
|
|
}
|
|
|
|
TEST_CASE("Metdata options: string representation should be valid 'none'") {
|
|
const osmium::metadata_options options{"none"};
|
|
REQUIRE(options.to_string() == "none");
|
|
}
|
|
|
|
TEST_CASE("Metdata options: string representation should be valid 'all (short)'") {
|
|
const osmium::metadata_options options{"all"};
|
|
REQUIRE(options.to_string() == "all");
|
|
}
|
|
|
|
TEST_CASE("Metdata options: string representation should be valid 'all (long)'") {
|
|
const osmium::metadata_options options{"user+uid+version+timestamp+changeset"};
|
|
REQUIRE(options.to_string() == "all");
|
|
}
|
|
|