From f41992819d5e6d16b395d96c441b7a1ecc91638e Mon Sep 17 00:00:00 2001 From: Mikhail Pozdnyakov Date: Mon, 20 Apr 2020 15:55:13 +0300 Subject: Add Source.SourceMinimumUpdateInterval unit test --- test/style/source.test.cpp | 49 ++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 49 insertions(+) diff --git a/test/style/source.test.cpp b/test/style/source.test.cpp index 06afd6427f..a77be5523c 100644 --- a/test/style/source.test.cpp +++ b/test/style/source.test.cpp @@ -749,6 +749,7 @@ public: renderable = true; } void setNecessity(TileNecessity necessity) override; + void setMinimumUpdateInterval(Duration) override; bool layerPropertiesUpdated(const Immutable&) override { return true; } std::unique_ptr createRenderData() override { return nullptr; } @@ -760,6 +761,7 @@ private: class FakeTileSource : public RenderTileSetSource { public: MOCK_METHOD1(tileSetNecessity, void(TileNecessity)); + MOCK_METHOD1(tileSetMinimumUpdateInterval, void(Duration)); explicit FakeTileSource(Immutable impl_) : RenderTileSetSource(std::move(impl_)) {} void updateInternal(const Tileset& tileset, @@ -787,6 +789,10 @@ void FakeTile::setNecessity(TileNecessity necessity) { source.tileSetNecessity(necessity); } +void FakeTile::setMinimumUpdateInterval(Duration interval) { + source.tileSetMinimumUpdateInterval(interval); +} + } // namespace TEST(Source, InvisibleSourcesTileNecessity) { @@ -812,6 +818,49 @@ TEST(Source, InvisibleSourcesTileNecessity) { renderSource->update(initialized.baseImpl, layers, true, false, test.tileParameters()); } +TEST(Source, SourceMinimumUpdateInterval) { + SourceTest test; + VectorSource initialized("source", Tileset{{"tiles"}}); + initialized.loadDescription(*test.fileSource); + + FakeTileSource renderTilesetSource{initialized.baseImpl}; + RenderSource* renderSource = &renderTilesetSource; + LineLayer layer("id", "source"); + Immutable layerProperties = + makeMutable(staticImmutableCast(layer.baseImpl)); + std::vector> layers{layerProperties}; + + Duration minimumTileUpdateInterval = initialized.getMinimumTileUpdateInterval(); + auto baseImpl = initialized.baseImpl; + EXPECT_EQ(Duration::zero(), minimumTileUpdateInterval); + EXPECT_CALL(renderTilesetSource, tileSetMinimumUpdateInterval(minimumTileUpdateInterval)).Times(1); + renderSource->update(baseImpl, layers, true, false, test.tileParameters()); + + initialized.setMinimumTileUpdateInterval(Seconds(1)); + EXPECT_NE(baseImpl, initialized.baseImpl) << "Source impl was updated"; + baseImpl = initialized.baseImpl; + + initialized.setMinimumTileUpdateInterval(Seconds(1)); // Set the same interval again. + EXPECT_EQ(baseImpl, initialized.baseImpl) << "Source impl was not updated"; + + minimumTileUpdateInterval = initialized.getMinimumTileUpdateInterval(); + EXPECT_EQ(Seconds(1), minimumTileUpdateInterval); + EXPECT_CALL(renderTilesetSource, tileSetMinimumUpdateInterval(minimumTileUpdateInterval)).Times(1); + renderSource->update(baseImpl, layers, true, false, test.tileParameters()); + + initialized.setMinimumTileUpdateInterval(Seconds(2)); + minimumTileUpdateInterval = initialized.getMinimumTileUpdateInterval(); + EXPECT_EQ(Seconds(2), minimumTileUpdateInterval); + + // No network activity for invisible tiles, and no reason to set the update interval. + EXPECT_CALL(renderTilesetSource, tileSetMinimumUpdateInterval(minimumTileUpdateInterval)).Times(0); + renderSource->update(initialized.baseImpl, layers, false, false, test.tileParameters()); + + // Tiles got visible, set the update interval now. + EXPECT_CALL(renderTilesetSource, tileSetMinimumUpdateInterval(minimumTileUpdateInterval)).Times(1); + renderSource->update(initialized.baseImpl, layers, true, false, test.tileParameters()); +} + TEST(Source, RenderTileSetSourceUpdate) { SourceTest test; -- cgit v1.2.1