diff --git a/src/MagnumPlugins/AnyImageImporter/Test/1d.ktx2 b/src/MagnumPlugins/AnyImageConverter/Test/1d.ktx2 similarity index 100% rename from src/MagnumPlugins/AnyImageImporter/Test/1d.ktx2 rename to src/MagnumPlugins/AnyImageConverter/Test/1d.ktx2 diff --git a/src/MagnumPlugins/AnyImageImporter/Test/3d.ktx2 b/src/MagnumPlugins/AnyImageConverter/Test/3d.ktx2 similarity index 100% rename from src/MagnumPlugins/AnyImageImporter/Test/3d.ktx2 rename to src/MagnumPlugins/AnyImageConverter/Test/3d.ktx2 diff --git a/src/MagnumPlugins/AnyImageConverter/Test/AnyImageConverterTest.cpp b/src/MagnumPlugins/AnyImageConverter/Test/AnyImageConverterTest.cpp index fc15a6237..e23ca88b9 100644 --- a/src/MagnumPlugins/AnyImageConverter/Test/AnyImageConverterTest.cpp +++ b/src/MagnumPlugins/AnyImageConverter/Test/AnyImageConverterTest.cpp @@ -467,9 +467,8 @@ void AnyImageConverterTest::convert1D() { Containers::Pointer converter = manager.instantiate("AnyImageConverter"); CORRADE_VERIFY(converter->convertToFile(Image1D, filename)); /* Compare to an expected output to ensure we actually saved the file - including the metadata. This also doubles as a generator for the 1d.ktx2 - file that AnyImageImporterTest uses. */ - CORRADE_COMPARE_AS(filename, Utility::Path::join(ANYIMAGEIMPORTER_TEST_DIR, "1d.ktx2"), TestSuite::Compare::File); + including the metadata */ + CORRADE_COMPARE_AS(filename, Utility::Path::join(ANYIMAGECONVERTER_TEST_DIR, "1d.ktx2"), TestSuite::Compare::File); } void AnyImageConverterTest::convert2D() { @@ -503,9 +502,8 @@ void AnyImageConverterTest::convert3D() { Containers::Pointer converter = manager.instantiate("AnyImageConverter"); CORRADE_VERIFY(converter->convertToFile(Image3D, filename)); /* Compare to an expected output to ensure we actually saved the file - including the metadata. This also doubles as a generator for the - 3d.exr file that AnyImageImporterTest uses. */ - CORRADE_COMPARE_AS(filename, Utility::Path::join(ANYIMAGEIMPORTER_TEST_DIR, "3d.ktx2"), TestSuite::Compare::File); + including the metadata */ + CORRADE_COMPARE_AS(filename, Utility::Path::join(ANYIMAGECONVERTER_TEST_DIR, "3d.ktx2"), TestSuite::Compare::File); } void AnyImageConverterTest::convertCompressed1D() { diff --git a/src/MagnumPlugins/AnyImageConverter/Test/CMakeLists.txt b/src/MagnumPlugins/AnyImageConverter/Test/CMakeLists.txt index 34f416f36..01ae36c5a 100644 --- a/src/MagnumPlugins/AnyImageConverter/Test/CMakeLists.txt +++ b/src/MagnumPlugins/AnyImageConverter/Test/CMakeLists.txt @@ -33,9 +33,11 @@ set(THREADS_PREFER_PTHREAD_FLAG TRUE) find_package(Threads REQUIRED) if(CORRADE_TARGET_EMSCRIPTEN OR CORRADE_TARGET_ANDROID) + set(ANYIMAGECONVERTER_TEST_DIR ".") set(ANYIMAGECONVERTER_TEST_OUTPUT_DIR "write") set(ANYIMAGEIMPORTER_TEST_DIR .) else() + set(ANYIMAGECONVERTER_TEST_DIR ${CMAKE_CURRENT_SOURCE_DIR}) set(ANYIMAGECONVERTER_TEST_OUTPUT_DIR ${CMAKE_CURRENT_BINARY_DIR}) set(ANYIMAGEIMPORTER_TEST_DIR ${PROJECT_SOURCE_DIR}/src/MagnumPlugins/AnyImageImporter/Test) endif() @@ -61,8 +63,8 @@ corrade_add_test(AnyImageConverterTest AnyImageConverterTest.cpp # now Threads::Threads FILES - ${PROJECT_SOURCE_DIR}/src/MagnumPlugins/AnyImageImporter/Test/1d.ktx2 - ${PROJECT_SOURCE_DIR}/src/MagnumPlugins/AnyImageImporter/Test/3d.ktx2 + 1d.ktx2 + 3d.ktx2 ${PROJECT_SOURCE_DIR}/src/MagnumPlugins/AnyImageImporter/Test/depth32f-custom-channels.exr) target_include_directories(AnyImageConverterTest PRIVATE ${CMAKE_CURRENT_BINARY_DIR}/$) if(MAGNUM_ANYIMAGECONVERTER_BUILD_STATIC) diff --git a/src/MagnumPlugins/AnyImageConverter/Test/configure.h.cmake b/src/MagnumPlugins/AnyImageConverter/Test/configure.h.cmake index 2abda2282..d80d33ad3 100644 --- a/src/MagnumPlugins/AnyImageConverter/Test/configure.h.cmake +++ b/src/MagnumPlugins/AnyImageConverter/Test/configure.h.cmake @@ -25,6 +25,7 @@ #cmakedefine ANYIMAGECONVERTER_PLUGIN_FILENAME "${ANYIMAGECONVERTER_PLUGIN_FILENAME}" #cmakedefine TGAIMAGECONVERTER_PLUGIN_FILENAME "${TGAIMAGECONVERTER_PLUGIN_FILENAME}" +#define ANYIMAGECONVERTER_TEST_DIR "${ANYIMAGECONVERTER_TEST_DIR}" #define ANYIMAGECONVERTER_TEST_OUTPUT_DIR "${ANYIMAGECONVERTER_TEST_OUTPUT_DIR}" #define ANYIMAGEIMPORTER_TEST_DIR "${ANYIMAGEIMPORTER_TEST_DIR}" diff --git a/src/MagnumPlugins/AnyImageImporter/Test/1d-mipmaps.ktx2 b/src/MagnumPlugins/AnyImageImporter/Test/1d-mipmaps.ktx2 new file mode 100644 index 000000000..9a978ebc0 Binary files /dev/null and b/src/MagnumPlugins/AnyImageImporter/Test/1d-mipmaps.ktx2 differ diff --git a/src/MagnumPlugins/AnyImageImporter/Test/2d-mipmaps-and-layers.ktx2 b/src/MagnumPlugins/AnyImageImporter/Test/2d-mipmaps-and-layers.ktx2 new file mode 100644 index 000000000..c5dbd3211 Binary files /dev/null and b/src/MagnumPlugins/AnyImageImporter/Test/2d-mipmaps-and-layers.ktx2 differ diff --git a/src/MagnumPlugins/AnyImageImporter/Test/2d-mipmaps.ktx2 b/src/MagnumPlugins/AnyImageImporter/Test/2d-mipmaps.ktx2 new file mode 100644 index 000000000..84d8c866c Binary files /dev/null and b/src/MagnumPlugins/AnyImageImporter/Test/2d-mipmaps.ktx2 differ diff --git a/src/MagnumPlugins/AnyImageImporter/Test/AnyImageImporterTest.cpp b/src/MagnumPlugins/AnyImageImporter/Test/AnyImageImporterTest.cpp index eea56e99f..06b6deb0b 100644 --- a/src/MagnumPlugins/AnyImageImporter/Test/AnyImageImporterTest.cpp +++ b/src/MagnumPlugins/AnyImageImporter/Test/AnyImageImporterTest.cpp @@ -47,9 +47,7 @@ namespace Magnum { namespace Trade { namespace Test { namespace { struct AnyImageImporterTest: TestSuite::Tester { explicit AnyImageImporterTest(); - void load1D(); - void load2D(); - void load3D(); + void load(); void detect(); void ktxBasisFallbackFile(); @@ -66,6 +64,13 @@ struct AnyImageImporterTest: TestSuite::Tester { plugins have configuration subgroups as well */ void propagateFileCallback(); + void images1D(); + void images2D(); + void images3D(); + void imageLevels1D(); + void imageLevels2D(); + void imageLevels3D(); + /* Explicitly forbid system-wide plugin dependencies */ PluginManager::Manager _manager{"nonexistent"}; }; @@ -75,31 +80,11 @@ constexpr struct { const char* filename; bool asData; const char* messageFunctionName; -} Load1DData[]{ - {"KTX2", "1d.ktx2", false, "KtxImporter"}, - {"KTX2 data", "1d.ktx2", true, "KtxImporter"}, -}; - -constexpr struct { - const char* name; - const char* filename; - bool asData; - const char* messageFunctionName; -} Load2DData[]{ +} LoadData[]{ {"TGA", "rgb.tga", false, "openFile"}, {"TGA data", "rgb.tga", true, "openData"} }; -constexpr struct { - const char* name; - const char* filename; - bool asData; - const char* messageFunctionName; -} Load3DData[]{ - {"KTX2", "3d.ktx2", false, "KtxImporter"}, - {"KTX2 data", "3d.ktx2", true, "KtxImporter"}, -}; - constexpr struct { const char* name; const char* filename; @@ -204,14 +189,8 @@ constexpr struct { }; AnyImageImporterTest::AnyImageImporterTest() { - addInstancedTests({&AnyImageImporterTest::load1D}, - Containers::arraySize(Load1DData)); - - addInstancedTests({&AnyImageImporterTest::load2D}, - Containers::arraySize(Load2DData)); - - addInstancedTests({&AnyImageImporterTest::load3D}, - Containers::arraySize(Load3DData)); + addInstancedTests({&AnyImageImporterTest::load}, + Containers::arraySize(LoadData)); addInstancedTests({&AnyImageImporterTest::detect}, Containers::arraySize(DetectData)); @@ -228,7 +207,7 @@ AnyImageImporterTest::AnyImageImporterTest() { addTests({&AnyImageImporterTest::emptyData}); addInstancedTests({&AnyImageImporterTest::propagateFlags}, - Containers::arraySize(Load2DData)); + Containers::arraySize(LoadData)); addInstancedTests({&AnyImageImporterTest::propagateConfiguration}, Containers::arraySize(PropagateConfigurationData)); @@ -236,7 +215,14 @@ AnyImageImporterTest::AnyImageImporterTest() { addInstancedTests({&AnyImageImporterTest::propagateConfigurationUnknown}, Containers::arraySize(PropagateConfigurationUnknownData)); - addTests({&AnyImageImporterTest::propagateFileCallback}); + addTests({&AnyImageImporterTest::propagateFileCallback, + + &AnyImageImporterTest::images1D, + &AnyImageImporterTest::images2D, + &AnyImageImporterTest::images3D, + &AnyImageImporterTest::imageLevels1D, + &AnyImageImporterTest::imageLevels2D, + &AnyImageImporterTest::imageLevels3D}); /* Load the plugin directly from the build tree. Otherwise it's static and already loaded. */ @@ -249,36 +235,8 @@ AnyImageImporterTest::AnyImageImporterTest() { #endif } -void AnyImageImporterTest::load1D() { - auto&& data = Load1DData[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 - - /* Catch also ABI and interface mismatch errors */ - if(!(manager.load("KtxImporter") & PluginManager::LoadState::Loaded)) - CORRADE_SKIP("KtxImporter plugin can't be loaded."); - - Containers::Pointer importer = manager.instantiate("AnyImageImporter"); - - if(data.asData) { - Containers::Optional> read = Utility::Path::read(Utility::Path::join(ANYIMAGEIMPORTER_TEST_DIR, data.filename)); - CORRADE_VERIFY(read); - CORRADE_VERIFY(importer->openData(*read)); - } else CORRADE_VERIFY(importer->openFile(Utility::Path::join(ANYIMAGEIMPORTER_TEST_DIR, data.filename))); - CORRADE_COMPARE(importer->image1DCount(), 1); - - /* Check only size, as it is good enough proof that it is working */ - Containers::Optional image = importer->image1D(0); - CORRADE_VERIFY(image); - CORRADE_COMPARE(image->size(), 2); -} - -void AnyImageImporterTest::load2D() { - auto&& data = Load2DData[testCaseInstanceId()]; +void AnyImageImporterTest::load() { + auto&& data = LoadData[testCaseInstanceId()]; setTestCaseDescription(data.name); if(!(_manager.loadState("TgaImporter") & PluginManager::LoadState::Loaded)) @@ -302,34 +260,6 @@ void AnyImageImporterTest::load2D() { CORRADE_VERIFY(!importer->isOpened()); } -void AnyImageImporterTest::load3D() { - 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 - - /* Catch also ABI and interface mismatch errors */ - if(!(manager.load("KtxImporter") & PluginManager::LoadState::Loaded)) - CORRADE_SKIP("KtxImporter plugin can't be loaded."); - - Containers::Pointer importer = manager.instantiate("AnyImageImporter"); - - if(data.asData) { - Containers::Optional> read = Utility::Path::read(Utility::Path::join(ANYIMAGEIMPORTER_TEST_DIR, data.filename)); - CORRADE_VERIFY(read); - CORRADE_VERIFY(importer->openData(*read)); - } else CORRADE_VERIFY(importer->openFile(Utility::Path::join(ANYIMAGEIMPORTER_TEST_DIR, 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{2, 3, 2})); -} - void AnyImageImporterTest::detect() { auto&& data = DetectData[testCaseInstanceId()]; setTestCaseDescription(data.name); @@ -467,7 +397,7 @@ void AnyImageImporterTest::emptyData() { } void AnyImageImporterTest::propagateFlags() { - auto&& data = Load2DData[testCaseInstanceId()]; + auto&& data = LoadData[testCaseInstanceId()]; setTestCaseDescription(data.name); if(!(_manager.loadState("TgaImporter") & PluginManager::LoadState::Loaded)) @@ -579,6 +509,130 @@ void AnyImageImporterTest::propagateFileCallback() { CORRADE_VERIFY(!importer->isOpened()); } +void AnyImageImporterTest::images1D() { + PluginManager::Manager manager{MAGNUM_PLUGINS_IMPORTER_INSTALL_DIR}; + #ifdef ANYIMAGEIMPORTER_PLUGIN_FILENAME + CORRADE_VERIFY(manager.load(ANYIMAGEIMPORTER_PLUGIN_FILENAME) & PluginManager::LoadState::Loaded); + #endif + + /* Catch also ABI and interface mismatch errors */ + if(!(manager.load("KtxImporter") & PluginManager::LoadState::Loaded)) + CORRADE_SKIP("KtxImporter plugin can't be loaded."); + + Containers::Pointer importer = manager.instantiate("AnyImageImporter"); + CORRADE_VERIFY(importer->openFile(Utility::Path::join(ANYIMAGEIMPORTER_TEST_DIR, "1d-mipmaps.ktx2"))); + CORRADE_COMPARE(importer->image1DCount(), 1); + CORRADE_COMPARE(importer->image2DCount(), 0); + CORRADE_COMPARE(importer->image3DCount(), 0); + + /* Check only size, as it is good enough proof that it is working */ + Containers::Optional image = importer->image1D(0); + CORRADE_VERIFY(image); + CORRADE_COMPARE(image->size(), 4); +} + +void AnyImageImporterTest::images2D() { + if(!(_manager.loadState("TgaImporter") & PluginManager::LoadState::Loaded)) + CORRADE_SKIP("TgaImporter plugin not enabled, cannot test"); + + Containers::Pointer importer = _manager.instantiate("AnyImageImporter"); + + CORRADE_VERIFY(importer->openFile(Utility::Path::join(ANYIMAGEIMPORTER_TEST_DIR, "rgb.tga"))); + CORRADE_COMPARE(importer->image1DCount(), 0); + CORRADE_COMPARE(importer->image2DCount(), 1); + CORRADE_COMPARE(importer->image3DCount(), 0); + + /* Check only size, as it is good enough proof that it is working */ + Containers::Optional image = importer->image2D(0); + CORRADE_VERIFY(image); + CORRADE_COMPARE(image->size(), (Vector2i{3, 2})); +} + +void AnyImageImporterTest::images3D() { + PluginManager::Manager manager{MAGNUM_PLUGINS_IMPORTER_INSTALL_DIR}; + #ifdef ANYIMAGEIMPORTER_PLUGIN_FILENAME + CORRADE_VERIFY(manager.load(ANYIMAGEIMPORTER_PLUGIN_FILENAME) & PluginManager::LoadState::Loaded); + #endif + + /* Catch also ABI and interface mismatch errors */ + if(!(manager.load("KtxImporter") & PluginManager::LoadState::Loaded)) + CORRADE_SKIP("KtxImporter plugin can't be loaded."); + + Containers::Pointer importer = manager.instantiate("AnyImageImporter"); + CORRADE_VERIFY(importer->openFile(Utility::Path::join(ANYIMAGEIMPORTER_TEST_DIR, "2d-mipmaps-and-layers.ktx2"))); + CORRADE_COMPARE(importer->image1DCount(), 0); + CORRADE_COMPARE(importer->image2DCount(), 0); + 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{4, 3, 3})); +} + +void AnyImageImporterTest::imageLevels1D() { + PluginManager::Manager manager{MAGNUM_PLUGINS_IMPORTER_INSTALL_DIR}; + #ifdef ANYIMAGEIMPORTER_PLUGIN_FILENAME + CORRADE_VERIFY(manager.load(ANYIMAGEIMPORTER_PLUGIN_FILENAME) & PluginManager::LoadState::Loaded); + #endif + + /* Catch also ABI and interface mismatch errors */ + if(!(manager.load("KtxImporter") & PluginManager::LoadState::Loaded)) + CORRADE_SKIP("KtxImporter plugin can't be loaded."); + + Containers::Pointer importer = manager.instantiate("AnyImageImporter"); + CORRADE_VERIFY(importer->openFile(Utility::Path::join(ANYIMAGEIMPORTER_TEST_DIR, "1d-mipmaps.ktx2"))); + CORRADE_COMPARE(importer->image1DCount(), 1); + CORRADE_COMPARE(importer->image1DLevelCount(0), 3); + + /* Check only size, as it is good enough proof that it is working */ + Containers::Optional image = importer->image1D(0, 1); + CORRADE_VERIFY(image); + CORRADE_COMPARE(image->size(), 2); +} + +void AnyImageImporterTest::imageLevels2D() { + PluginManager::Manager manager{MAGNUM_PLUGINS_IMPORTER_INSTALL_DIR}; + #ifdef ANYIMAGEIMPORTER_PLUGIN_FILENAME + CORRADE_VERIFY(manager.load(ANYIMAGEIMPORTER_PLUGIN_FILENAME) & PluginManager::LoadState::Loaded); + #endif + + /* Catch also ABI and interface mismatch errors */ + if(!(manager.load("KtxImporter") & PluginManager::LoadState::Loaded)) + CORRADE_SKIP("KtxImporter plugin can't be loaded."); + + Containers::Pointer importer = manager.instantiate("AnyImageImporter"); + CORRADE_VERIFY(importer->openFile(Utility::Path::join(ANYIMAGEIMPORTER_TEST_DIR, "2d-mipmaps.ktx2"))); + CORRADE_COMPARE(importer->image2DCount(), 1); + CORRADE_COMPARE(importer->image2DLevelCount(0), 3); + + /* Check only size, as it is good enough proof that it is working */ + Containers::Optional image = importer->image2D(0, 1); + CORRADE_VERIFY(image); + CORRADE_COMPARE(image->size(), (Vector2i{2, 1})); +} + +void AnyImageImporterTest::imageLevels3D() { + PluginManager::Manager manager{MAGNUM_PLUGINS_IMPORTER_INSTALL_DIR}; + #ifdef ANYIMAGEIMPORTER_PLUGIN_FILENAME + CORRADE_VERIFY(manager.load(ANYIMAGEIMPORTER_PLUGIN_FILENAME) & PluginManager::LoadState::Loaded); + #endif + + /* Catch also ABI and interface mismatch errors */ + if(!(manager.load("KtxImporter") & PluginManager::LoadState::Loaded)) + CORRADE_SKIP("KtxImporter plugin can't be loaded."); + + Containers::Pointer importer = manager.instantiate("AnyImageImporter"); + CORRADE_VERIFY(importer->openFile(Utility::Path::join(ANYIMAGEIMPORTER_TEST_DIR, "2d-mipmaps-and-layers.ktx2"))); + CORRADE_COMPARE(importer->image3DCount(), 1); + CORRADE_COMPARE(importer->image3DLevelCount(0), 3); + + /* Check only size, as it is good enough proof that it is working */ + Containers::Optional image = importer->image3D(0, 1); + CORRADE_VERIFY(image); + CORRADE_COMPARE(image->size(), (Vector3i{2, 1, 3})); +} + }}}} CORRADE_TEST_MAIN(Magnum::Trade::Test::AnyImageImporterTest) diff --git a/src/MagnumPlugins/AnyImageImporter/Test/CMakeLists.txt b/src/MagnumPlugins/AnyImageImporter/Test/CMakeLists.txt index a5aa3a79e..d64e9ee69 100644 --- a/src/MagnumPlugins/AnyImageImporter/Test/CMakeLists.txt +++ b/src/MagnumPlugins/AnyImageImporter/Test/CMakeLists.txt @@ -53,9 +53,10 @@ corrade_add_test(AnyImageImporterTest AnyImageImporterTest.cpp 8x8.astc # Generated by AnyImageConverterTest::propagateConfiguration2D() depth32f-custom-channels.exr - # Generated by AnyImageConverterTest::convert{1D,3D}() - 1d.ktx2 - 3d.ktx2 + # From KtxImporter test data + 1d-mipmaps.ktx2 + 2d-mipmaps.ktx2 + 2d-mipmaps-and-layers.ktx2 # rgb.ktx2 from BasisImporter test data (in magnum-plugins), renamed basis.ktx2 gray.jpg