#include #include #include using namespace mbgl; using namespace mbgl::style; struct TestLayerImpl : style::Layer::Impl { TestLayerImpl(std::string layerID, std::string sourceID) : Impl(std::move(layerID), std::move(sourceID)) {} bool hasLayoutDifference(const Layer::Impl&) const override { return false; } void stringifyLayout(rapidjson::Writer&) const override {} DECLARE_LAYER_TYPE_INFO; }; const LayerTypeInfo* TestLayerImpl::staticTypeInfo() noexcept { const static LayerTypeInfo typeInfo{"test", LayerTypeInfo::Source::NotRequired, LayerTypeInfo::Pass3D::NotRequired, LayerTypeInfo::Layout::NotRequired, LayerTypeInfo::FadingTiles::NotRequired, LayerTypeInfo::CrossTileIndex::NotRequired, LayerTypeInfo::TileKind::NotRequired}; return &typeInfo; } TEST(StyleDiff, Empty) { auto a = makeMutable>(); auto b = makeMutable>(); auto diff = diffLayers(Immutable>(std::move(a)), Immutable>(std::move(b))); ASSERT_TRUE(diff.added.empty()); ASSERT_TRUE(diff.removed.empty()); ASSERT_TRUE(diff.changed.empty()); } TEST(StyleDiff, Add) { auto l1 = Immutable(makeMutable("id-1", "src-1")); auto l2 = Immutable(makeMutable("id-2", "src-2")); auto a = makeMutable>(); a->push_back(l1); auto b = makeMutable>(); b->push_back(l1); b->push_back(l2); auto diff = diffLayers(Immutable>(std::move(a)), Immutable>(std::move(b))); ASSERT_EQ(1, diff.added.size()); ASSERT_EQ(0, diff.removed.size()); ASSERT_EQ(0, diff.changed.size()); } TEST(StyleDiff, Remove) { auto l1 = Immutable(makeMutable("id-1", "src-1")); auto l2 = Immutable(makeMutable("id-2", "src-2")); auto a = makeMutable>(); a->push_back(l1); a->push_back(l2); auto b = makeMutable>(); b->push_back(l1); auto diff = diffLayers(Immutable>(std::move(a)), Immutable>(std::move(b))); ASSERT_EQ(0, diff.added.size()); ASSERT_EQ(1, diff.removed.size()); ASSERT_EQ(0, diff.changed.size()); } // Different identical instances show up as changed TEST(StyleDiff, Compare) { auto a = makeMutable>(); a->push_back(makeMutable("id-1", "src-1")); a->push_back(makeMutable("id-2", "src-2")); auto b = makeMutable>(); b->push_back(makeMutable("id-1", "src-1")); b->push_back(makeMutable("id-2", "src-2")); auto diff = diffLayers(Immutable>(std::move(a)), Immutable>(std::move(b))); ASSERT_EQ(0, diff.added.size()); ASSERT_EQ(0, diff.removed.size()); ASSERT_EQ(2, diff.changed.size()); } // Order change shows up as add and remove TEST(StyleDiff, Order) { auto l1 = Immutable(makeMutable("id-1", "src-1")); auto l2 = Immutable(makeMutable("id-2", "src-2")); auto a = makeMutable>(); a->push_back(l1); a->push_back(l2); auto b = makeMutable>(); b->push_back(l2); b->push_back(l1); auto diff = diffLayers(Immutable>(std::move(a)), Immutable>(std::move(b))); ASSERT_EQ(1, diff.added.size()); ASSERT_EQ(1, diff.removed.size()); ASSERT_EQ(0, diff.changed.size()); }