From 6cbc37ecda13d14cc78a66160ef506e32c28bbd7 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Vladim=C3=ADr=20Vondru=C5=A1?= Date: Fri, 18 Feb 2022 12:35:44 +0100 Subject: [PATCH] AnyImageImporter: don't abuse file callbacks to test data opening. It doesn't make the test any simpler, easier to understand or less error prone, on the contrary. And it would stop testing the intended code path once file callbacks are implemented inside the importer. --- .../Test/AnyImageImporterTest.cpp | 132 +++++++++--------- 1 file changed, 64 insertions(+), 68 deletions(-) diff --git a/src/MagnumPlugins/AnyImageImporter/Test/AnyImageImporterTest.cpp b/src/MagnumPlugins/AnyImageImporter/Test/AnyImageImporterTest.cpp index cfa26ac80..8bc519809 100644 --- a/src/MagnumPlugins/AnyImageImporter/Test/AnyImageImporterTest.cpp +++ b/src/MagnumPlugins/AnyImageImporter/Test/AnyImageImporterTest.cpp @@ -65,68 +65,63 @@ struct AnyImageImporterTest: TestSuite::Tester { PluginManager::Manager _manager{"nonexistent"}; }; -Containers::Optional> fileCallback(const std::string& filename, InputFileCallbackPolicy, Containers::Array& storage) { - storage = Utility::Directory::read(filename); - return Containers::ArrayView{storage}; -} - constexpr struct { const char* name; const char* filename; - Containers::Optional>(*callback)(const std::string&, InputFileCallbackPolicy, Containers::Array&); + bool asData; const char* messageFunctionName; } Load1DData[]{ - {"KTX2", KTX_1D_FILE, nullptr, "KtxImporter"}, - {"KTX2 data", KTX_1D_FILE, fileCallback, "KtxImporter"}, + {"KTX2", KTX_1D_FILE, false, "KtxImporter"}, + {"KTX2 data", KTX_1D_FILE, true, "KtxImporter"}, }; constexpr struct { const char* name; const char* filename; - Containers::Optional>(*callback)(const std::string&, InputFileCallbackPolicy, Containers::Array&); + bool asData; const char* messageFunctionName; } Load2DData[]{ - {"TGA", TGA_FILE, nullptr, "openFile"}, - {"TGA data", TGA_FILE, fileCallback, "openData"} + {"TGA", TGA_FILE, false, "openFile"}, + {"TGA data", TGA_FILE, true, "openData"} }; constexpr struct { const char* name; const char* filename; - Containers::Optional>(*callback)(const std::string&, InputFileCallbackPolicy, Containers::Array&); + bool asData; const char* messageFunctionName; } Load3DData[]{ - {"KTX2", KTX_3D_FILE, nullptr, "KtxImporter"}, - {"KTX2 data", KTX_3D_FILE, fileCallback, "KtxImporter"}, + {"KTX2", KTX_3D_FILE, false, "KtxImporter"}, + {"KTX2 data", KTX_3D_FILE, true, "KtxImporter"}, }; constexpr struct { const char* name; const char* filename; - Containers::Optional>(*callback)(const std::string&, InputFileCallbackPolicy, Containers::Array&); + bool asData; const char* plugin; } DetectData[]{ - {"PNG", "rgb.png", nullptr, "PngImporter"}, - {"PNG data", "rgb.png", fileCallback, "PngImporter"}, - {"JPEG", "gray.jpg", nullptr, "JpegImporter"}, - {"JPEG data", "gray.jpg", fileCallback, "JpegImporter"}, - {"JPEG uppercase", "uppercase.JPG", nullptr, "JpegImporter"}, - {"JPEG2000", "image.jp2", nullptr, "Jpeg2000Importer"}, - {"KTX2", "image.ktx2", nullptr, "KtxImporter"}, + {"PNG", "rgb.png", false, "PngImporter"}, + {"PNG data", "rgb.png", true, "PngImporter"}, + {"JPEG", "gray.jpg", false, "JpegImporter"}, + {"JPEG data", "gray.jpg", true, "JpegImporter"}, + {"JPEG uppercase", "uppercase.JPG", false, "JpegImporter"}, + {"JPEG2000", "image.jp2", false, "Jpeg2000Importer"}, + {"KTX2", "image.ktx2", false, "KtxImporter"}, /** @todo KTX2 data once we have some */ - {"HDR", "rgb.hdr", nullptr, "HdrImporter"}, - {"HDR data", "rgb.hdr", fileCallback, "HdrImporter"}, - {"ICO", "pngs.ico", nullptr, "IcoImporter"}, - {"DDS", "rgba_dxt1.dds", nullptr, "DdsImporter"}, - {"DDS data", "rgba_dxt1.dds", fileCallback, "DdsImporter"}, - {"BMP", "rgb.bmp", nullptr, "BmpImporter"}, - {"BMP data", "rgb.bmp", fileCallback, "BmpImporter"}, - {"GIF", "image.gif", nullptr, "GifImporter"}, - {"PSD", "image.psd", nullptr, "PsdImporter"}, - {"TIFF", "image.tiff", nullptr, "TiffImporter"}, - {"TIFF data", "image.tiff", fileCallback, "TiffImporter"}, - {"Basis", "rgb.basis", nullptr, "BasisImporter"}, - {"Basis data", "rgb.basis", fileCallback, "BasisImporter"} + {"HDR", "rgb.hdr", false, "HdrImporter"}, + {"HDR data", "rgb.hdr", true, "HdrImporter"}, + {"ICO", "pngs.ico", false, "IcoImporter"}, + {"DDS", "rgba_dxt1.dds", false, "DdsImporter"}, + {"DDS data", "rgba_dxt1.dds", true, "DdsImporter"}, + {"BMP", "rgb.bmp", false, "BmpImporter"}, + {"BMP data", "rgb.bmp", true, "BmpImporter"}, + {"GIF", "image.gif", false, "GifImporter"}, + {"PSD", "image.psd", false, "PsdImporter"}, + {"TIFF", "image.tiff", false, "TiffImporter"}, + {"TIFF data", "image.tiff", true, "TiffImporter"}, + {"Basis", "rgb.basis", false, "BasisImporter"}, + {"Basis data", "rgb.basis", true, "BasisImporter"} /* Not testing everything, just the most important ones */ }; @@ -152,10 +147,10 @@ const struct { constexpr struct { const char* name; const char* filename; - Containers::Optional>(*callback)(const std::string&, InputFileCallbackPolicy, Containers::Array&); + bool asData; } PropagateConfigurationData[]{ - {"EXR", EXR_FILE, nullptr}, - {"EXR data", EXR_FILE, fileCallback} + {"EXR", EXR_FILE, false}, + {"EXR data", EXR_FILE, true} }; AnyImageImporterTest::AnyImageImporterTest() { @@ -213,10 +208,10 @@ void AnyImageImporterTest::load1D() { Containers::Pointer importer = manager.instantiate("AnyImageImporter"); - Containers::Array storage; - importer->setFileCallback(data.callback, storage); - - CORRADE_VERIFY(importer->openFile(data.filename)); + if(data.asData) + CORRADE_VERIFY(importer->openData(Utility::Directory::read(data.filename))); + else + CORRADE_VERIFY(importer->openFile(data.filename)); CORRADE_COMPARE(importer->image1DCount(), 1); /* Check only size, as it is good enough proof that it is working */ @@ -234,10 +229,10 @@ void AnyImageImporterTest::load2D() { Containers::Pointer importer = _manager.instantiate("AnyImageImporter"); - Containers::Array storage; - importer->setFileCallback(data.callback, storage); - - CORRADE_VERIFY(importer->openFile(data.filename)); + if(data.asData) + CORRADE_VERIFY(importer->openData(Utility::Directory::read(data.filename))); + else + CORRADE_VERIFY(importer->openFile(data.filename)); CORRADE_COMPARE(importer->image2DCount(), 1); /* Check only size, as it is good enough proof that it is working */ @@ -264,10 +259,10 @@ void AnyImageImporterTest::load3D() { Containers::Pointer importer = manager.instantiate("AnyImageImporter"); - Containers::Array storage; - importer->setFileCallback(data.callback, storage); - - CORRADE_VERIFY(importer->openFile(data.filename)); + if(data.asData) + CORRADE_VERIFY(importer->openData(Utility::Directory::read(data.filename))); + else + CORRADE_VERIFY(importer->openFile(data.filename)); CORRADE_COMPARE(importer->image3DCount(), 1); /* Check only size, as it is good enough proof that it is working */ @@ -281,20 +276,21 @@ void AnyImageImporterTest::detect() { setTestCaseDescription(data.name); Containers::Pointer importer = _manager.instantiate("AnyImageImporter"); - - Containers::Array storage; - importer->setFileCallback(data.callback, storage); + const std::string filename = Utility::Directory::join(TEST_FILE_DIR, data.filename); std::ostringstream out; Error redirectError{&out}; - CORRADE_VERIFY(!importer->openFile(Utility::Directory::join(TEST_FILE_DIR, data.filename))); + if(data.asData) + CORRADE_VERIFY(!importer->openData(Utility::Directory::read(filename))); + else + CORRADE_VERIFY(!importer->openFile(filename)); /* Can't use raw string literals in macros on GCC 4.8 */ #ifndef CORRADE_PLUGINMANAGER_NO_DYNAMIC_PLUGIN_SUPPORT CORRADE_COMPARE(out.str(), Utility::formatString( -"PluginManager::Manager::load(): plugin {0} is not static and was not found in nonexistent\nTrade::AnyImageImporter::{1}(): cannot load the {0} plugin\n", data.plugin, data.callback ? "openData" : "openFile")); +"PluginManager::Manager::load(): plugin {0} is not static and was not found in nonexistent\nTrade::AnyImageImporter::{1}(): cannot load the {0} plugin\n", data.plugin, data.asData ? "openData" : "openFile")); #else CORRADE_COMPARE(out.str(), Utility::formatString( -"PluginManager::Manager::load(): plugin {0} was not found\nTrade::AnyImageImporter::{1}(): cannot load the {0} plugin\n", data.plugin, data.callback ? "openData" : "openFile")); +"PluginManager::Manager::load(): plugin {0} was not found\nTrade::AnyImageImporter::{1}(): cannot load the {0} plugin\n", data.plugin, data.asData ? "openData" : "openFile")); #endif } @@ -341,13 +337,13 @@ void AnyImageImporterTest::propagateFlags() { Containers::Pointer importer = _manager.instantiate("AnyImageImporter"); importer->setFlags(ImporterFlag::Verbose); - Containers::Array storage; - importer->setFileCallback(data.callback, storage); - std::ostringstream out; { Debug redirectOutput{&out}; - CORRADE_VERIFY(importer->openFile(data.filename)); + if(data.asData) + CORRADE_VERIFY(importer->openData(Utility::Directory::read(data.filename))); + else + CORRADE_VERIFY(importer->openFile(data.filename)); CORRADE_VERIFY(importer->image2D(0)); } CORRADE_COMPARE(out.str(), Utility::formatString( @@ -373,10 +369,10 @@ void AnyImageImporterTest::propagateConfiguration() { importer->configuration().setValue("layer", "left"); importer->configuration().setValue("depth", "height"); - Containers::Array storage; - importer->setFileCallback(data.callback, storage); - CORRADE_VERIFY(importer->openFile(data.filename)); - + if(data.asData) + CORRADE_VERIFY(importer->openData(Utility::Directory::read(data.filename))); + else + CORRADE_VERIFY(importer->openFile(data.filename)); Containers::Optional image = importer->image2D(0); CORRADE_VERIFY(image); @@ -400,12 +396,12 @@ void AnyImageImporterTest::propagateConfigurationUnknown() { Containers::Pointer importer = _manager.instantiate("AnyImageImporter"); importer->configuration().setValue("noSuchOption", "isHere"); - Containers::Array storage; - importer->setFileCallback(data.callback, storage); - std::ostringstream out; Warning redirectWarning{&out}; - CORRADE_VERIFY(importer->openFile(data.filename)); + if(data.asData) + CORRADE_VERIFY(importer->openData(Utility::Directory::read(data.filename))); + else + CORRADE_VERIFY(importer->openFile(data.filename)); CORRADE_COMPARE(out.str(), Utility::formatString("Trade::AnyImageImporter::{}(): option noSuchOption not recognized by TgaImporter\n", data.messageFunctionName)); }