#include #include #include #include #include #include #include #include #include #include #include #include #include using namespace mbgl; class RasterDEMTileTest { public: util::SimpleIdentity uniqueID; std::shared_ptr fileSource = std::make_shared(); TransformState transformState; util::RunLoop loop; AnnotationManager annotationManager{style}; std::shared_ptr imageManager = std::make_shared(); std::shared_ptr glyphManager = std::make_shared(); gfx::DynamicTextureAtlasPtr dynamicTextureAtlas; Tileset tileset{{"https://example.com"}, {0, 22}, "none"}; TileParameters tileParameters; style::Style style; RasterDEMTileTest() : tileParameters{.pixelRatio = 1.0, .debugOptions = MapDebugOptions(), .transformState = transformState, .fileSource = fileSource, .mode = MapMode::Continuous, .annotationManager = annotationManager.makeWeakPtr(), .imageManager = imageManager, .glyphManager = glyphManager, .prefetchZoomDelta = 0, .threadPool = {Scheduler::GetBackground(), uniqueID}, .dynamicTextureAtlas = dynamicTextureAtlas}, style{fileSource, 1, tileParameters.threadPool} {} }; TEST(RasterDEMTile, setError) { RasterDEMTileTest test; RasterDEMTile tile(OverscaledTileID(0, 0, 0), "testSource", test.tileParameters, test.tileset); tile.setError(std::make_exception_ptr(std::runtime_error("test"))); EXPECT_FALSE(tile.isRenderable()); EXPECT_TRUE(tile.isLoaded()); EXPECT_TRUE(tile.isComplete()); } TEST(RasterDEMTile, onError) { RasterDEMTileTest test; RasterDEMTile tile(OverscaledTileID(0, 0, 0), "testSource", test.tileParameters, test.tileset); tile.onError(std::make_exception_ptr(std::runtime_error("test")), 0); EXPECT_FALSE(tile.isRenderable()); EXPECT_TRUE(tile.isLoaded()); EXPECT_TRUE(tile.isComplete()); } TEST(RasterDEMTile, onParsed) { RasterDEMTileTest test; RasterDEMTile tile(OverscaledTileID(0, 0, 0), "testSource", test.tileParameters, test.tileset); tile.onParsed(std::make_unique(PremultipliedImage({16, 16}), Tileset::RasterEncoding::Mapbox), 0); EXPECT_TRUE(tile.isRenderable()); EXPECT_TRUE(tile.isLoaded()); EXPECT_TRUE(tile.isComplete()); // Make sure that once we've had a renderable tile and then receive // erroneous data, we retain the previously rendered data and keep the tile // renderable. tile.setError(std::make_exception_ptr(std::runtime_error("Connection offline"))); EXPECT_TRUE(tile.isRenderable()); EXPECT_TRUE(tile.isLoaded()); EXPECT_TRUE(tile.isComplete()); // Then simulate a parsing failure and make sure that we keep it renderable // in this situation as well. tile.onError(std::make_exception_ptr(std::runtime_error("Parse error")), 0); ASSERT_TRUE(tile.isRenderable()); EXPECT_TRUE(tile.isLoaded()); EXPECT_TRUE(tile.isComplete()); } TEST(RasterDEMTile, onParsedEmpty) { RasterDEMTileTest test; RasterDEMTile tile(OverscaledTileID(0, 0, 0), "testSource", test.tileParameters, test.tileset); tile.onParsed(nullptr, 0); EXPECT_FALSE(tile.isRenderable()); EXPECT_TRUE(tile.isLoaded()); EXPECT_TRUE(tile.isComplete()); }