diff --git a/src/MagnumPlugins/AnyImageImporter/Test/AnyImageImporterTest.cpp b/src/MagnumPlugins/AnyImageImporter/Test/AnyImageImporterTest.cpp index 2c165ed8f..f2aea15d9 100644 --- a/src/MagnumPlugins/AnyImageImporter/Test/AnyImageImporterTest.cpp +++ b/src/MagnumPlugins/AnyImageImporter/Test/AnyImageImporterTest.cpp @@ -80,6 +80,16 @@ constexpr struct { {"TGA data", TGA_FILE, fileCallback, "openData"} }; +constexpr struct { + const char* name; + const char* filename; + Containers::Optional>(*callback)(const std::string&, InputFileCallbackPolicy, Containers::Array&); + const char* messageFunctionName; +} Load3DData[]{ + {"EXR", EXR_CUBE_FILE, nullptr, "OpenExrImporter"}, + {"EXR data", EXR_CUBE_FILE, fileCallback, "OpenExrImporter"}, +}; + constexpr struct { const char* name; const char* filename; @@ -94,8 +104,6 @@ constexpr struct { {"JPEG2000", "image.jp2", nullptr, "Jpeg2000Importer"}, {"KTX2", "image.ktx2", nullptr, "KtxImporter"}, /** @todo KTX2 data once we have some */ - {"EXR", "image.exr", nullptr, "OpenExrImporter"}, - {"EXR data", "image.exr", fileCallback, "OpenExrImporter"}, {"HDR", "rgb.hdr", nullptr, "HdrImporter"}, {"HDR data", "rgb.hdr", fileCallback, "HdrImporter"}, {"ICO", "pngs.ico", nullptr, "IcoImporter"}, @@ -146,7 +154,8 @@ AnyImageImporterTest::AnyImageImporterTest() { addInstancedTests({&AnyImageImporterTest::load2D}, Containers::arraySize(Load2DData)); - addTests({&AnyImageImporterTest::load3D}); + addInstancedTests({&AnyImageImporterTest::load3D}, + Containers::arraySize(Load3DData)); addInstancedTests({&AnyImageImporterTest::detect}, Containers::arraySize(DetectData)); @@ -195,6 +204,7 @@ void AnyImageImporterTest::load2D() { importer->setFileCallback(data.callback, storage); CORRADE_VERIFY(importer->openFile(data.filename)); + CORRADE_COMPARE(importer->image2DCount(), 1); /* Check only size, as it is good enough proof that it is working */ Containers::Optional image = importer->image2D(0); @@ -206,7 +216,29 @@ void AnyImageImporterTest::load2D() { } void AnyImageImporterTest::load3D() { - CORRADE_SKIP("No file formats supporting 3D images yet."); + auto&& data = Load3DData[testCaseInstanceId()]; + setTestCaseDescription(data.name); + + PluginManager::Manager manager{MAGNUM_PLUGINS_IMPORTER_INSTALL_DIR}; + #ifdef ANYIMAGEIMPORTER_PLUGIN_FILENAME + CORRADE_VERIFY(manager.load(ANYIMAGEIMPORTER_PLUGIN_FILENAME) & PluginManager::LoadState::Loaded); + #endif + + if(manager.loadState("OpenExrImporter") < PluginManager::LoadState::Loaded) + CORRADE_SKIP("OpenExrImporter plugin can't be loaded."); + + Containers::Pointer importer = manager.instantiate("AnyImageImporter"); + + Containers::Array storage; + importer->setFileCallback(data.callback, storage); + + CORRADE_VERIFY(importer->openFile(data.filename)); + CORRADE_COMPARE(importer->image3DCount(), 1); + + /* Check only size, as it is good enough proof that it is working */ + Containers::Optional image = importer->image3D(0); + CORRADE_VERIFY(image); + CORRADE_COMPARE(image->size(), (Vector3i{1, 1, 6})); } void AnyImageImporterTest::detect() { diff --git a/src/MagnumPlugins/AnyImageImporter/Test/CMakeLists.txt b/src/MagnumPlugins/AnyImageImporter/Test/CMakeLists.txt index e70e85c26..daf0d7da3 100644 --- a/src/MagnumPlugins/AnyImageImporter/Test/CMakeLists.txt +++ b/src/MagnumPlugins/AnyImageImporter/Test/CMakeLists.txt @@ -27,10 +27,12 @@ if(CORRADE_TARGET_EMSCRIPTEN OR CORRADE_TARGET_ANDROID) set(TEST_FILE_DIR .) set(TGA_FILE rgb.tga) set(EXR_FILE depth32f-custom-channels.exr) + set(EXR_CUBE_FILE cube.exr) else() set(TEST_FILE_DIR ${CMAKE_CURRENT_SOURCE_DIR}) set(TGA_FILE ${CMAKE_CURRENT_SOURCE_DIR}/rgb.tga) set(EXR_FILE ${CMAKE_CURRENT_SOURCE_DIR}/depth32f-custom-channels.exr) + set(EXR_CUBE_FILE ${CMAKE_CURRENT_SOURCE_DIR}/cube.exr) endif() # CMake before 3.8 has broken $ expressions for iOS (see @@ -53,7 +55,10 @@ file(GENERATE OUTPUT ${CMAKE_CURRENT_BINARY_DIR}/$/configure.h corrade_add_test(AnyImageImporterTest AnyImageImporterTest.cpp LIBRARIES MagnumTrade MagnumDebugTools FILES + # Taken from OpenExrImporter tests depth32f-custom-channels.exr + # Generated by AnyImageConverterTest::propagateConfiguration3D() + cube.exr gray.jpg image.exr image.tiff diff --git a/src/MagnumPlugins/AnyImageImporter/Test/configure.h.cmake b/src/MagnumPlugins/AnyImageImporter/Test/configure.h.cmake index a07bc6682..13de71276 100644 --- a/src/MagnumPlugins/AnyImageImporter/Test/configure.h.cmake +++ b/src/MagnumPlugins/AnyImageImporter/Test/configure.h.cmake @@ -28,6 +28,7 @@ #define TGA_FILE "${TGA_FILE}" #define TEST_FILE_DIR "${TEST_FILE_DIR}" #define EXR_FILE "${EXR_FILE}" +#define EXR_CUBE_FILE "${EXR_CUBE_FILE}" #ifdef CORRADE_TARGET_WINDOWS #ifdef CORRADE_IS_DEBUG_BUILD