cesium-native/CesiumRasterOverlays/test/TestUrlTemplateRasterOverla...

82 lines
2.7 KiB
C++

#include <CesiumGeospatial/WebMercatorProjection.h>
#include <CesiumNativeTests/SimpleAssetAccessor.h>
#include <CesiumNativeTests/SimpleTaskProcessor.h>
#include <CesiumNativeTests/readFile.h>
#include <CesiumRasterOverlays/ActivatedRasterOverlay.h>
#include <CesiumRasterOverlays/RasterOverlay.h>
#include <CesiumRasterOverlays/RasterOverlayTile.h>
#include <CesiumRasterOverlays/UrlTemplateRasterOverlay.h>
#include <doctest/doctest.h>
#include <filesystem>
using namespace CesiumAsync;
using namespace CesiumGeometry;
using namespace CesiumGeospatial;
using namespace CesiumGltf;
using namespace CesiumUtility;
using namespace CesiumNativeTests;
using namespace CesiumRasterOverlays;
TEST_CASE("UrlTemplateRasterOverlay getTile") {
std::filesystem::path dataDir(CesiumRasterOverlays_TEST_DATA_DIR);
std::vector<std::byte> blackPng = readFile(dataDir / "black.png");
CesiumAsync::AsyncSystem asyncSystem{std::make_shared<SimpleTaskProcessor>()};
auto pAssetAccessor = std::make_shared<SimpleAssetAccessor>(
std::map<std::string, std::shared_ptr<SimpleAssetRequest>>());
pAssetAccessor->mockCompletedRequests.insert(
{"http://example.com/0/0/0.png",
std::make_shared<SimpleAssetRequest>(
"GET",
"http://example.com/0/0/0.png",
HttpHeaders{},
std::make_unique<SimpleAssetResponse>(
uint16_t(200),
"doesn't matter",
HttpHeaders{},
blackPng))});
IntrusivePointer<UrlTemplateRasterOverlay> pOverlay =
new UrlTemplateRasterOverlay(
"Test",
"http://example.com/{x}/{y}/{z}.png");
IntrusivePointer<ActivatedRasterOverlay> pActivated = pOverlay->activate(
RasterOverlayExternals{
pAssetAccessor,
nullptr,
asyncSystem,
nullptr,
spdlog::default_logger()},
Ellipsoid::WGS84);
asyncSystem.dispatchMainThreadTasks();
REQUIRE(pActivated->getTileProvider() != nullptr);
Rectangle rectangle =
GeographicProjection::computeMaximumProjectedRectangle(Ellipsoid::WGS84);
IntrusivePointer<RasterOverlayTile> pTile =
pActivated->getTile(rectangle, glm::dvec2(256));
pActivated->loadTile(*pTile);
while (pTile->getState() != RasterOverlayTile::LoadState::Loaded) {
asyncSystem.dispatchMainThreadTasks();
}
CHECK(pTile->getState() == RasterOverlayTile::LoadState::Loaded);
REQUIRE(pTile->getImage());
const ImageAsset& image = *pTile->getImage();
CHECK(image.width > 0);
CHECK(image.height > 0);
CHECK(image.pixelData.size() > 0);
CHECK(std::all_of(
image.pixelData.begin(),
image.pixelData.end(),
[](std::byte b) { return b == std::byte(0); }));
}