Use std::variant with OfflineRegionDefinition (#2482)

This commit is contained in:
Bart Louwers
2024-06-11 16:45:09 +02:00
committed by GitHub
parent d82f722a68
commit 8c743d2467
8 changed files with 127 additions and 92 deletions

View File

@@ -9,8 +9,10 @@
#include <mbgl/util/string.hpp>
#include <mbgl/storage/sqlite3.hpp>
#include <mbgl/util/variant.hpp>
#include <thread>
#include <random>
#include <variant>
using namespace std::literals::string_literals;
using namespace mbgl;
@@ -437,16 +439,18 @@ TEST(OfflineDatabase, CreateRegion) {
EXPECT_EQ(0u, log.uncheckedCount());
region->getDefinition().match(
[&](OfflineTilePyramidRegionDefinition& def) {
EXPECT_EQ(definition.styleURL, def.styleURL);
EXPECT_EQ(definition.bounds, def.bounds);
EXPECT_EQ(definition.minZoom, def.minZoom);
EXPECT_EQ(definition.maxZoom, def.maxZoom);
EXPECT_EQ(definition.pixelRatio, def.pixelRatio);
EXPECT_EQ(definition.includeIdeographs, def.includeIdeographs);
},
[](auto&) { EXPECT_FALSE(false); });
std::visit(overloaded{[&](OfflineTilePyramidRegionDefinition& def) {
EXPECT_EQ(definition.styleURL, def.styleURL);
EXPECT_EQ(definition.bounds, def.bounds);
EXPECT_EQ(definition.minZoom, def.minZoom);
EXPECT_EQ(definition.maxZoom, def.maxZoom);
EXPECT_EQ(definition.pixelRatio, def.pixelRatio);
EXPECT_EQ(definition.includeIdeographs, def.includeIdeographs);
},
[](auto&) {
EXPECT_FALSE(false);
}},
region->getDefinition());
EXPECT_EQ(metadata, region->getMetadata());
}
@@ -481,16 +485,18 @@ TEST(OfflineDatabase, ListRegions) {
ASSERT_EQ(1u, regions.size());
EXPECT_EQ(region->getID(), regions.at(0).getID());
regions.at(0).getDefinition().match(
[&](OfflineTilePyramidRegionDefinition& def) {
EXPECT_EQ(definition.styleURL, def.styleURL);
EXPECT_EQ(definition.bounds, def.bounds);
EXPECT_EQ(definition.minZoom, def.minZoom);
EXPECT_EQ(definition.maxZoom, def.maxZoom);
EXPECT_EQ(definition.pixelRatio, def.pixelRatio);
EXPECT_EQ(definition.includeIdeographs, def.includeIdeographs);
},
[&](auto&) { EXPECT_FALSE(false); });
std::visit(overloaded{[&](OfflineTilePyramidRegionDefinition& def) {
EXPECT_EQ(definition.styleURL, def.styleURL);
EXPECT_EQ(definition.bounds, def.bounds);
EXPECT_EQ(definition.minZoom, def.minZoom);
EXPECT_EQ(definition.maxZoom, def.maxZoom);
EXPECT_EQ(definition.pixelRatio, def.pixelRatio);
EXPECT_EQ(definition.includeIdeographs, def.includeIdeographs);
},
[&](auto&) {
EXPECT_FALSE(false);
}},
regions.at(0).getDefinition());
EXPECT_EQ(metadata, regions.at(0).getMetadata());
EXPECT_EQ(0u, log.uncheckedCount());
@@ -506,17 +512,20 @@ TEST(OfflineDatabase, GetRegionDefinition) {
EXPECT_EQ(0u, log.uncheckedCount());
auto region = db.createRegion(definition, metadata);
db.getRegionDefinition(region->getID())
->match(
[&](OfflineTilePyramidRegionDefinition& result) {
EXPECT_EQ(definition.styleURL, result.styleURL);
EXPECT_EQ(definition.bounds, result.bounds);
EXPECT_EQ(definition.minZoom, result.minZoom);
EXPECT_EQ(definition.maxZoom, result.maxZoom);
EXPECT_EQ(definition.pixelRatio, result.pixelRatio);
EXPECT_EQ(definition.includeIdeographs, result.includeIdeographs);
},
[&](auto&) { EXPECT_FALSE(false); });
auto regionDefinition = db.getRegionDefinition(region->getID()).value();
std::visit(overloaded{[&](OfflineTilePyramidRegionDefinition& result) {
EXPECT_EQ(definition.styleURL, result.styleURL);
EXPECT_EQ(definition.bounds, result.bounds);
EXPECT_EQ(definition.minZoom, result.minZoom);
EXPECT_EQ(definition.maxZoom, result.maxZoom);
EXPECT_EQ(definition.pixelRatio, result.pixelRatio);
EXPECT_EQ(definition.includeIdeographs, result.includeIdeographs);
},
[&](auto&) {
EXPECT_FALSE(false);
}},
regionDefinition);
}
// Disabled due to flakiness: https://github.com/mapbox/mapbox-gl-native/issues/14966
@@ -1016,10 +1025,12 @@ TEST(OfflineDatabase, CreateRegionInfiniteMaxZoom) {
EXPECT_EQ(0u, log.uncheckedCount());
region->getDefinition().match([&](auto& def) {
EXPECT_EQ(0, def.minZoom);
EXPECT_EQ(INFINITY, def.maxZoom);
});
std::visit(
[&](auto& def) {
EXPECT_EQ(0, def.minZoom);
EXPECT_EQ(INFINITY, def.maxZoom);
},
region->getDefinition());
}
#ifndef __QT__ // Qt doesn't support concurrent access to the same database.