osrm-backend/third_party/libosmium/test/t/io/test_reader.cpp

117 lines
3.3 KiB
C++

#include "catch.hpp"
#include <osmium/handler.hpp>
#include <osmium/io/any_compression.hpp>
#include <osmium/io/xml_input.hpp>
#include <osmium/visitor.hpp>
#include <osmium/memory/buffer.hpp>
struct CountHandler : public osmium::handler::Handler {
int count = 0;
void node(osmium::Node&) {
++count;
}
}; // class CountHandler
TEST_CASE("Reader") {
SECTION("reader can be initialized with file") {
osmium::io::File file("t/io/data.osm");
osmium::io::Reader reader(file);
osmium::handler::Handler handler;
osmium::apply(reader, handler);
}
SECTION("reader can be initialized with string") {
osmium::io::Reader reader("t/io/data.osm");
osmium::handler::Handler handler;
osmium::apply(reader, handler);
}
SECTION("should return invalid buffer after eof") {
osmium::io::File file("t/io/data.osm");
osmium::io::Reader reader(file);
REQUIRE(!reader.eof());
while (osmium::memory::Buffer buffer = reader.read()) {
}
REQUIRE(reader.eof());
// extra read always returns invalid buffer
osmium::memory::Buffer buffer = reader.read();
REQUIRE(!buffer);
}
SECTION("should not hang when apply() is called twice on reader") {
osmium::io::File file("t/io/data.osm");
osmium::io::Reader reader(file);
osmium::handler::Handler handler;
osmium::apply(reader, handler);
osmium::apply(reader, handler);
}
SECTION("should work with a buffer with uncompressed data") {
int fd = osmium::io::detail::open_for_reading("t/io/data.osm");
REQUIRE(fd >= 0);
const size_t buffer_size = 1000;
char buffer[buffer_size];
ssize_t length = ::read(fd, buffer, buffer_size);
REQUIRE(length > 0);
osmium::io::File file(buffer, static_cast<size_t>(length), "osm");
osmium::io::Reader reader(file);
CountHandler handler;
REQUIRE(handler.count == 0);
osmium::apply(reader, handler);
REQUIRE(handler.count == 1);
}
SECTION("should work with a buffer with gzip-compressed data") {
int fd = osmium::io::detail::open_for_reading("t/io/data.osm.gz");
REQUIRE(fd >= 0);
const size_t buffer_size = 1000;
char buffer[buffer_size];
ssize_t length = ::read(fd, buffer, buffer_size);
REQUIRE(length > 0);
osmium::io::File file(buffer, static_cast<size_t>(length), "osm.gz");
osmium::io::Reader reader(file);
CountHandler handler;
REQUIRE(handler.count == 0);
osmium::apply(reader, handler);
REQUIRE(handler.count == 1);
}
SECTION("should work with a buffer with bzip2-compressed data") {
int fd = osmium::io::detail::open_for_reading("t/io/data.osm.bz2");
REQUIRE(fd >= 0);
const size_t buffer_size = 1000;
char buffer[buffer_size];
ssize_t length = ::read(fd, buffer, buffer_size);
REQUIRE(length > 0);
osmium::io::File file(buffer, static_cast<size_t>(length), "osm.bz2");
osmium::io::Reader reader(file);
CountHandler handler;
REQUIRE(handler.count == 0);
osmium::apply(reader, handler);
REQUIRE(handler.count == 1);
}
}