diff --git a/src/MagnumPlugins/AnyImageConverter/AnyImageConverter.cpp b/src/MagnumPlugins/AnyImageConverter/AnyImageConverter.cpp index b378a93fe..60fb64e5c 100644 --- a/src/MagnumPlugins/AnyImageConverter/AnyImageConverter.cpp +++ b/src/MagnumPlugins/AnyImageConverter/AnyImageConverter.cpp @@ -94,7 +94,7 @@ bool AnyImageConverter::doConvertToFile(const ImageView1D& image, const Containe converter->setFlags(flags()); /* Propagate configuration */ - Magnum::Implementation::propagateConfiguration("Trade::AnyImageConverter::convertToFile():", {}, metadata->name(), configuration(), converter->configuration()); + Magnum::Implementation::propagateConfiguration("Trade::AnyImageConverter::convertToFile():", {}, metadata->name(), configuration(), converter->configuration(), !(flags() & ImageConverterFlag::Quiet)); /* Try to convert the file (error output should be printed by the plugin itself) */ @@ -157,7 +157,7 @@ bool AnyImageConverter::doConvertToFile(const ImageView2D& image, const Containe converter->setFlags(flags()); /* Propagate configuration */ - Magnum::Implementation::propagateConfiguration("Trade::AnyImageConverter::convertToFile():", {}, metadata->name(), configuration(), converter->configuration()); + Magnum::Implementation::propagateConfiguration("Trade::AnyImageConverter::convertToFile():", {}, metadata->name(), configuration(), converter->configuration(), !(flags() & ImageConverterFlag::Quiet)); /* Try to convert the file (error output should be printed by the plugin itself) */ @@ -207,7 +207,7 @@ bool AnyImageConverter::doConvertToFile(const ImageView3D& image, const Containe converter->setFlags(flags()); /* Propagate configuration */ - Magnum::Implementation::propagateConfiguration("Trade::AnyImageConverter::convertToFile():", {}, metadata->name(), configuration(), converter->configuration()); + Magnum::Implementation::propagateConfiguration("Trade::AnyImageConverter::convertToFile():", {}, metadata->name(), configuration(), converter->configuration(), !(flags() & ImageConverterFlag::Quiet)); /* Try to convert the file (error output should be printed by the plugin itself) */ @@ -251,7 +251,7 @@ bool AnyImageConverter::doConvertToFile(const CompressedImageView1D& image, cons converter->setFlags(flags()); /* Propagate configuration */ - Magnum::Implementation::propagateConfiguration("Trade::AnyImageConverter::convertToFile():", {}, metadata->name(), configuration(), converter->configuration()); + Magnum::Implementation::propagateConfiguration("Trade::AnyImageConverter::convertToFile():", {}, metadata->name(), configuration(), converter->configuration(), !(flags() & ImageConverterFlag::Quiet)); /* Try to convert the file (error output should be printed by the plugin itself) */ @@ -295,7 +295,7 @@ bool AnyImageConverter::doConvertToFile(const CompressedImageView2D& image, cons converter->setFlags(flags()); /* Propagate configuration */ - Magnum::Implementation::propagateConfiguration("Trade::AnyImageConverter::convertToFile():", {}, metadata->name(), configuration(), converter->configuration()); + Magnum::Implementation::propagateConfiguration("Trade::AnyImageConverter::convertToFile():", {}, metadata->name(), configuration(), converter->configuration(), !(flags() & ImageConverterFlag::Quiet)); /* Try to convert the file (error output should be printed by the plugin itself) */ @@ -339,7 +339,7 @@ bool AnyImageConverter::doConvertToFile(const CompressedImageView3D& image, cons converter->setFlags(flags()); /* Propagate configuration */ - Magnum::Implementation::propagateConfiguration("Trade::AnyImageConverter::convertToFile():", {}, metadata->name(), configuration(), converter->configuration()); + Magnum::Implementation::propagateConfiguration("Trade::AnyImageConverter::convertToFile():", {}, metadata->name(), configuration(), converter->configuration(), !(flags() & ImageConverterFlag::Quiet)); /* Try to convert the file (error output should be printed by the plugin itself) */ @@ -383,7 +383,7 @@ bool AnyImageConverter::doConvertToFile(const Containers::ArrayViewsetFlags(flags()); /* Propagate configuration */ - Magnum::Implementation::propagateConfiguration("Trade::AnyImageConverter::convertToFile():", {}, metadata->name(), configuration(), converter->configuration()); + Magnum::Implementation::propagateConfiguration("Trade::AnyImageConverter::convertToFile():", {}, metadata->name(), configuration(), converter->configuration(), !(flags() & ImageConverterFlag::Quiet)); /* Try to convert the file (error output should be printed by the plugin itself) */ @@ -431,7 +431,7 @@ bool AnyImageConverter::doConvertToFile(const Containers::ArrayViewsetFlags(flags()); /* Propagate configuration */ - Magnum::Implementation::propagateConfiguration("Trade::AnyImageConverter::convertToFile():", {}, metadata->name(), configuration(), converter->configuration()); + Magnum::Implementation::propagateConfiguration("Trade::AnyImageConverter::convertToFile():", {}, metadata->name(), configuration(), converter->configuration(), !(flags() & ImageConverterFlag::Quiet)); /* Try to convert the file (error output should be printed by the plugin itself) */ @@ -479,7 +479,7 @@ bool AnyImageConverter::doConvertToFile(const Containers::ArrayViewsetFlags(flags()); /* Propagate configuration */ - Magnum::Implementation::propagateConfiguration("Trade::AnyImageConverter::convertToFile():", {}, metadata->name(), configuration(), converter->configuration()); + Magnum::Implementation::propagateConfiguration("Trade::AnyImageConverter::convertToFile():", {}, metadata->name(), configuration(), converter->configuration(), !(flags() & ImageConverterFlag::Quiet)); /* Try to convert the file (error output should be printed by the plugin itself) */ @@ -523,7 +523,7 @@ bool AnyImageConverter::doConvertToFile(const Containers::ArrayViewsetFlags(flags()); /* Propagate configuration */ - Magnum::Implementation::propagateConfiguration("Trade::AnyImageConverter::convertToFile():", {}, metadata->name(), configuration(), converter->configuration()); + Magnum::Implementation::propagateConfiguration("Trade::AnyImageConverter::convertToFile():", {}, metadata->name(), configuration(), converter->configuration(), !(flags() & ImageConverterFlag::Quiet)); /* Try to convert the file (error output should be printed by the plugin itself) */ @@ -567,7 +567,7 @@ bool AnyImageConverter::doConvertToFile(const Containers::ArrayViewsetFlags(flags()); /* Propagate configuration */ - Magnum::Implementation::propagateConfiguration("Trade::AnyImageConverter::convertToFile():", {}, metadata->name(), configuration(), converter->configuration()); + Magnum::Implementation::propagateConfiguration("Trade::AnyImageConverter::convertToFile():", {}, metadata->name(), configuration(), converter->configuration(), !(flags() & ImageConverterFlag::Quiet)); /* Try to convert the file (error output should be printed by the plugin itself) */ @@ -611,7 +611,7 @@ bool AnyImageConverter::doConvertToFile(const Containers::ArrayViewsetFlags(flags()); /* Propagate configuration */ - Magnum::Implementation::propagateConfiguration("Trade::AnyImageConverter::convertToFile():", {}, metadata->name(), configuration(), converter->configuration()); + Magnum::Implementation::propagateConfiguration("Trade::AnyImageConverter::convertToFile():", {}, metadata->name(), configuration(), converter->configuration(), !(flags() & ImageConverterFlag::Quiet)); /* Try to convert the file (error output should be printed by the plugin itself) */ diff --git a/src/MagnumPlugins/AnyImageConverter/Test/AnyImageConverterTest.cpp b/src/MagnumPlugins/AnyImageConverter/Test/AnyImageConverterTest.cpp index 0500149cb..fc15a6237 100644 --- a/src/MagnumPlugins/AnyImageConverter/Test/AnyImageConverterTest.cpp +++ b/src/MagnumPlugins/AnyImageConverter/Test/AnyImageConverterTest.cpp @@ -273,6 +273,15 @@ constexpr struct { {"KTX2 uppercase", "FIL~1.KTX2", "KtxImageConverter"} }; +const struct { + const char* name; + ImageConverterFlags flags; + bool quiet; +} PropagateConfigurationUnknownData[]{ + {"", {}, false}, + {"quiet", ImageConverterFlag::Quiet, true} +}; + AnyImageConverterTest::AnyImageConverterTest() { addTests({&AnyImageConverterTest::convert1D, &AnyImageConverterTest::convert2D, @@ -354,29 +363,43 @@ AnyImageConverterTest::AnyImageConverterTest() { &AnyImageConverterTest::propagateConfiguration1D, &AnyImageConverterTest::propagateConfiguration2D, - &AnyImageConverterTest::propagateConfiguration3D, - &AnyImageConverterTest::propagateConfigurationUnknown1D, - &AnyImageConverterTest::propagateConfigurationUnknown2D, - &AnyImageConverterTest::propagateConfigurationUnknown3D, - &AnyImageConverterTest::propagateConfigurationCompressed1D, + &AnyImageConverterTest::propagateConfiguration3D}); + + addInstancedTests({ + &AnyImageConverterTest::propagateConfigurationUnknown1D, + &AnyImageConverterTest::propagateConfigurationUnknown2D, + &AnyImageConverterTest::propagateConfigurationUnknown3D}, + Containers::arraySize(PropagateConfigurationUnknownData)); + + addTests({&AnyImageConverterTest::propagateConfigurationCompressed1D, &AnyImageConverterTest::propagateConfigurationCompressed2D, - &AnyImageConverterTest::propagateConfigurationCompressed3D, - &AnyImageConverterTest::propagateConfigurationCompressedUnknown1D, - &AnyImageConverterTest::propagateConfigurationCompressedUnknown2D, - &AnyImageConverterTest::propagateConfigurationCompressedUnknown3D, + &AnyImageConverterTest::propagateConfigurationCompressed3D}); - &AnyImageConverterTest::propagateConfigurationLevels1D, + addInstancedTests({ + &AnyImageConverterTest::propagateConfigurationCompressedUnknown1D, + &AnyImageConverterTest::propagateConfigurationCompressedUnknown2D, + &AnyImageConverterTest::propagateConfigurationCompressedUnknown3D}, + Containers::arraySize(PropagateConfigurationUnknownData)); + + addTests({&AnyImageConverterTest::propagateConfigurationLevels1D, &AnyImageConverterTest::propagateConfigurationLevels2D, - &AnyImageConverterTest::propagateConfigurationLevels3D, - &AnyImageConverterTest::propagateConfigurationUnknownLevels1D, - &AnyImageConverterTest::propagateConfigurationUnknownLevels2D, - &AnyImageConverterTest::propagateConfigurationUnknownLevels3D, - &AnyImageConverterTest::propagateConfigurationCompressedLevels1D, + &AnyImageConverterTest::propagateConfigurationLevels3D}); + + addInstancedTests({ + &AnyImageConverterTest::propagateConfigurationUnknownLevels1D, + &AnyImageConverterTest::propagateConfigurationUnknownLevels2D, + &AnyImageConverterTest::propagateConfigurationUnknownLevels3D}, + Containers::arraySize(PropagateConfigurationUnknownData)); + + addTests({&AnyImageConverterTest::propagateConfigurationCompressedLevels1D, &AnyImageConverterTest::propagateConfigurationCompressedLevels2D, - &AnyImageConverterTest::propagateConfigurationCompressedLevels3D, - &AnyImageConverterTest::propagateConfigurationCompressedUnknownLevels1D, - &AnyImageConverterTest::propagateConfigurationCompressedUnknownLevels2D, - &AnyImageConverterTest::propagateConfigurationCompressedUnknownLevels3D}); + &AnyImageConverterTest::propagateConfigurationCompressedLevels3D}); + + addInstancedTests({ + &AnyImageConverterTest::propagateConfigurationCompressedUnknownLevels1D, + &AnyImageConverterTest::propagateConfigurationCompressedUnknownLevels2D, + &AnyImageConverterTest::propagateConfigurationCompressedUnknownLevels3D}, + Containers::arraySize(PropagateConfigurationUnknownData)); /* Load the plugin directly from the build tree. Otherwise it's static and already loaded. */ @@ -1306,6 +1329,9 @@ void AnyImageConverterTest::propagateConfiguration3D() { } void AnyImageConverterTest::propagateConfigurationUnknown1D() { + auto&& data = PropagateConfigurationUnknownData[testCaseInstanceId()]; + setTestCaseDescription(data.name); + PluginManager::Manager manager{MAGNUM_PLUGINS_IMAGECONVERTER_INSTALL_DIR}; #ifdef ANYIMAGECONVERTER_PLUGIN_FILENAME CORRADE_VERIFY(manager.load(ANYIMAGECONVERTER_PLUGIN_FILENAME) & PluginManager::LoadState::Loaded); @@ -1317,27 +1343,41 @@ void AnyImageConverterTest::propagateConfigurationUnknown1D() { Containers::Pointer converter = manager.instantiate("AnyImageConverter"); converter->configuration().setValue("noSuchOption", "isHere"); + converter->setFlags(data.flags); std::ostringstream out; Warning redirectWarning{&out}; CORRADE_VERIFY(converter->convertToFile(Image1D, Utility::Path::join(ANYIMAGECONVERTER_TEST_OUTPUT_DIR, "1d.ktx2"))); - CORRADE_COMPARE(out.str(), "Trade::AnyImageConverter::convertToFile(): option noSuchOption not recognized by KtxImageConverter\n"); + if(data.quiet) + CORRADE_COMPARE(out.str(), ""); + else + CORRADE_COMPARE(out.str(), "Trade::AnyImageConverter::convertToFile(): option noSuchOption not recognized by KtxImageConverter\n"); } void AnyImageConverterTest::propagateConfigurationUnknown2D() { + auto&& data = PropagateConfigurationUnknownData[testCaseInstanceId()]; + setTestCaseDescription(data.name); + if(!(_manager.loadState("TgaImageConverter") & PluginManager::LoadState::Loaded)) CORRADE_SKIP("TgaImageConverter plugin not enabled, cannot test"); Containers::Pointer converter = _manager.instantiate("AnyImageConverter"); converter->configuration().setValue("noSuchOption", "isHere"); + converter->setFlags(data.flags); std::ostringstream out; Warning redirectWarning{&out}; CORRADE_VERIFY(converter->convertToFile(Image2D, Utility::Path::join(ANYIMAGECONVERTER_TEST_OUTPUT_DIR, "2d.tga"))); - CORRADE_COMPARE(out.str(), "Trade::AnyImageConverter::convertToFile(): option noSuchOption not recognized by TgaImageConverter\n"); + if(data.quiet) + CORRADE_COMPARE(out.str(), ""); + else + CORRADE_COMPARE(out.str(), "Trade::AnyImageConverter::convertToFile(): option noSuchOption not recognized by TgaImageConverter\n"); } void AnyImageConverterTest::propagateConfigurationUnknown3D() { + auto&& data = PropagateConfigurationUnknownData[testCaseInstanceId()]; + setTestCaseDescription(data.name); + PluginManager::Manager manager{MAGNUM_PLUGINS_IMAGECONVERTER_INSTALL_DIR}; #ifdef ANYIMAGECONVERTER_PLUGIN_FILENAME CORRADE_VERIFY(manager.load(ANYIMAGECONVERTER_PLUGIN_FILENAME) & PluginManager::LoadState::Loaded); @@ -1349,11 +1389,15 @@ void AnyImageConverterTest::propagateConfigurationUnknown3D() { Containers::Pointer converter = manager.instantiate("AnyImageConverter"); converter->configuration().setValue("noSuchOption", "isHere"); + converter->setFlags(data.flags); std::ostringstream out; Warning redirectWarning{&out}; CORRADE_VERIFY(converter->convertToFile(Image3D, Utility::Path::join(ANYIMAGECONVERTER_TEST_OUTPUT_DIR, "3d.ktx2"))); - CORRADE_COMPARE(out.str(), "Trade::AnyImageConverter::convertToFile(): option noSuchOption not recognized by KtxImageConverter\n"); + if(data.quiet) + CORRADE_COMPARE(out.str(), ""); + else + CORRADE_COMPARE(out.str(), "Trade::AnyImageConverter::convertToFile(): option noSuchOption not recognized by KtxImageConverter\n"); } void AnyImageConverterTest::propagateConfigurationCompressed1D() { @@ -1432,6 +1476,9 @@ void AnyImageConverterTest::propagateConfigurationCompressed3D() { } void AnyImageConverterTest::propagateConfigurationCompressedUnknown1D() { + auto&& data = PropagateConfigurationUnknownData[testCaseInstanceId()]; + setTestCaseDescription(data.name); + PluginManager::Manager manager{MAGNUM_PLUGINS_IMAGECONVERTER_INSTALL_DIR}; #ifdef ANYIMAGECONVERTER_PLUGIN_FILENAME CORRADE_VERIFY(manager.load(ANYIMAGECONVERTER_PLUGIN_FILENAME) & PluginManager::LoadState::Loaded); @@ -1443,14 +1490,21 @@ void AnyImageConverterTest::propagateConfigurationCompressedUnknown1D() { Containers::Pointer converter = manager.instantiate("AnyImageConverter"); converter->configuration().setValue("noSuchOption", "isHere"); + converter->setFlags(data.flags); std::ostringstream out; Warning redirectWarning{&out}; CORRADE_VERIFY(converter->convertToFile(CompressedImage1D, Utility::Path::join(ANYIMAGECONVERTER_TEST_OUTPUT_DIR, "compressed-1d.ktx2"))); - CORRADE_COMPARE(out.str(), "Trade::AnyImageConverter::convertToFile(): option noSuchOption not recognized by KtxImageConverter\n"); + if(data.quiet) + CORRADE_COMPARE(out.str(), ""); + else + CORRADE_COMPARE(out.str(), "Trade::AnyImageConverter::convertToFile(): option noSuchOption not recognized by KtxImageConverter\n"); } void AnyImageConverterTest::propagateConfigurationCompressedUnknown2D() { + auto&& data = PropagateConfigurationUnknownData[testCaseInstanceId()]; + setTestCaseDescription(data.name); + PluginManager::Manager manager{MAGNUM_PLUGINS_IMAGECONVERTER_INSTALL_DIR}; #ifdef ANYIMAGECONVERTER_PLUGIN_FILENAME CORRADE_VERIFY(manager.load(ANYIMAGECONVERTER_PLUGIN_FILENAME) & PluginManager::LoadState::Loaded); @@ -1462,14 +1516,21 @@ void AnyImageConverterTest::propagateConfigurationCompressedUnknown2D() { Containers::Pointer converter = manager.instantiate("AnyImageConverter"); converter->configuration().setValue("noSuchOption", "isHere"); + converter->setFlags(data.flags); std::ostringstream out; Warning redirectWarning{&out}; CORRADE_VERIFY(converter->convertToFile(CompressedImage2D, Utility::Path::join(ANYIMAGECONVERTER_TEST_OUTPUT_DIR, "compressed-2d.ktx2"))); - CORRADE_COMPARE(out.str(), "Trade::AnyImageConverter::convertToFile(): option noSuchOption not recognized by KtxImageConverter\n"); + if(data.quiet) + CORRADE_COMPARE(out.str(), ""); + else + CORRADE_COMPARE(out.str(), "Trade::AnyImageConverter::convertToFile(): option noSuchOption not recognized by KtxImageConverter\n"); } void AnyImageConverterTest::propagateConfigurationCompressedUnknown3D() { + auto&& data = PropagateConfigurationUnknownData[testCaseInstanceId()]; + setTestCaseDescription(data.name); + PluginManager::Manager manager{MAGNUM_PLUGINS_IMAGECONVERTER_INSTALL_DIR}; #ifdef ANYIMAGECONVERTER_PLUGIN_FILENAME CORRADE_VERIFY(manager.load(ANYIMAGECONVERTER_PLUGIN_FILENAME) & PluginManager::LoadState::Loaded); @@ -1481,11 +1542,15 @@ void AnyImageConverterTest::propagateConfigurationCompressedUnknown3D() { Containers::Pointer converter = manager.instantiate("AnyImageConverter"); converter->configuration().setValue("noSuchOption", "isHere"); + converter->setFlags(data.flags); std::ostringstream out; Warning redirectWarning{&out}; CORRADE_VERIFY(converter->convertToFile(CompressedImage3D, Utility::Path::join(ANYIMAGECONVERTER_TEST_OUTPUT_DIR, "compressed-3d.ktx2"))); - CORRADE_COMPARE(out.str(), "Trade::AnyImageConverter::convertToFile(): option noSuchOption not recognized by KtxImageConverter\n"); + if(data.quiet) + CORRADE_COMPARE(out.str(), ""); + else + CORRADE_COMPARE(out.str(), "Trade::AnyImageConverter::convertToFile(): option noSuchOption not recognized by KtxImageConverter\n"); } void AnyImageConverterTest::propagateConfigurationLevels1D() { @@ -1570,6 +1635,9 @@ void AnyImageConverterTest::propagateConfigurationLevels3D() { } void AnyImageConverterTest::propagateConfigurationUnknownLevels1D() { + auto&& data = PropagateConfigurationUnknownData[testCaseInstanceId()]; + setTestCaseDescription(data.name); + PluginManager::Manager manager{MAGNUM_PLUGINS_IMAGECONVERTER_INSTALL_DIR}; #ifdef ANYIMAGECONVERTER_PLUGIN_FILENAME CORRADE_VERIFY(manager.load(ANYIMAGECONVERTER_PLUGIN_FILENAME) & PluginManager::LoadState::Loaded); @@ -1581,16 +1649,23 @@ void AnyImageConverterTest::propagateConfigurationUnknownLevels1D() { Containers::Pointer converter = manager.instantiate("AnyImageConverter"); converter->configuration().setValue("noSuchOption", "isHere"); + converter->setFlags(data.flags); std::ostringstream out; Warning redirectWarning{&out}; /* Using the list API even though there's just one image, which should still trigger the correct code path for AnyImageConverter. */ CORRADE_VERIFY(converter->convertToFile({Image1D}, Utility::Path::join(ANYIMAGECONVERTER_TEST_OUTPUT_DIR, "1d.ktx2"))); - CORRADE_COMPARE(out.str(), "Trade::AnyImageConverter::convertToFile(): option noSuchOption not recognized by KtxImageConverter\n"); + if(data.quiet) + CORRADE_COMPARE(out.str(), ""); + else + CORRADE_COMPARE(out.str(), "Trade::AnyImageConverter::convertToFile(): option noSuchOption not recognized by KtxImageConverter\n"); } void AnyImageConverterTest::propagateConfigurationUnknownLevels2D() { + auto&& data = PropagateConfigurationUnknownData[testCaseInstanceId()]; + setTestCaseDescription(data.name); + PluginManager::Manager manager{MAGNUM_PLUGINS_IMAGECONVERTER_INSTALL_DIR}; #ifdef ANYIMAGECONVERTER_PLUGIN_FILENAME CORRADE_VERIFY(manager.load(ANYIMAGECONVERTER_PLUGIN_FILENAME) & PluginManager::LoadState::Loaded); @@ -1602,16 +1677,23 @@ void AnyImageConverterTest::propagateConfigurationUnknownLevels2D() { Containers::Pointer converter = manager.instantiate("AnyImageConverter"); converter->configuration().setValue("noSuchOption", "isHere"); + converter->setFlags(data.flags); std::ostringstream out; Warning redirectWarning{&out}; /* Using the list API even though there's just one image, which should still trigger the correct code path for AnyImageConverter. */ CORRADE_VERIFY(converter->convertToFile({Image2D}, Utility::Path::join(ANYIMAGECONVERTER_TEST_OUTPUT_DIR, "2d.ktx2"))); - CORRADE_COMPARE(out.str(), "Trade::AnyImageConverter::convertToFile(): option noSuchOption not recognized by KtxImageConverter\n"); + if(data.quiet) + CORRADE_COMPARE(out.str(), ""); + else + CORRADE_COMPARE(out.str(), "Trade::AnyImageConverter::convertToFile(): option noSuchOption not recognized by KtxImageConverter\n"); } void AnyImageConverterTest::propagateConfigurationUnknownLevels3D() { + auto&& data = PropagateConfigurationUnknownData[testCaseInstanceId()]; + setTestCaseDescription(data.name); + PluginManager::Manager manager{MAGNUM_PLUGINS_IMAGECONVERTER_INSTALL_DIR}; #ifdef ANYIMAGECONVERTER_PLUGIN_FILENAME CORRADE_VERIFY(manager.load(ANYIMAGECONVERTER_PLUGIN_FILENAME) & PluginManager::LoadState::Loaded); @@ -1623,13 +1705,17 @@ void AnyImageConverterTest::propagateConfigurationUnknownLevels3D() { Containers::Pointer converter = manager.instantiate("AnyImageConverter"); converter->configuration().setValue("noSuchOption", "isHere"); + converter->setFlags(data.flags); std::ostringstream out; Warning redirectWarning{&out}; /* Using the list API even though there's just one image, which should still trigger the correct code path for AnyImageConverter. */ CORRADE_VERIFY(converter->convertToFile({Image3D}, Utility::Path::join(ANYIMAGECONVERTER_TEST_OUTPUT_DIR, "3d.ktx2"))); - CORRADE_COMPARE(out.str(), "Trade::AnyImageConverter::convertToFile(): option noSuchOption not recognized by KtxImageConverter\n"); + if(data.quiet) + CORRADE_COMPARE(out.str(), ""); + else + CORRADE_COMPARE(out.str(), "Trade::AnyImageConverter::convertToFile(): option noSuchOption not recognized by KtxImageConverter\n"); } void AnyImageConverterTest::propagateConfigurationCompressedLevels1D() { @@ -1714,6 +1800,9 @@ void AnyImageConverterTest::propagateConfigurationCompressedLevels3D() { } void AnyImageConverterTest::propagateConfigurationCompressedUnknownLevels1D() { + auto&& data = PropagateConfigurationUnknownData[testCaseInstanceId()]; + setTestCaseDescription(data.name); + PluginManager::Manager manager{MAGNUM_PLUGINS_IMAGECONVERTER_INSTALL_DIR}; #ifdef ANYIMAGECONVERTER_PLUGIN_FILENAME CORRADE_VERIFY(manager.load(ANYIMAGECONVERTER_PLUGIN_FILENAME) & PluginManager::LoadState::Loaded); @@ -1725,16 +1814,23 @@ void AnyImageConverterTest::propagateConfigurationCompressedUnknownLevels1D() { Containers::Pointer converter = manager.instantiate("AnyImageConverter"); converter->configuration().setValue("noSuchOption", "isHere"); + converter->setFlags(data.flags); std::ostringstream out; Warning redirectWarning{&out}; /* Using the list API even though there's just one image, which should still trigger the correct code path for AnyImageConverter. */ CORRADE_VERIFY(converter->convertToFile({CompressedImage1D}, Utility::Path::join(ANYIMAGECONVERTER_TEST_OUTPUT_DIR, "compressed-1d.ktx2"))); - CORRADE_COMPARE(out.str(), "Trade::AnyImageConverter::convertToFile(): option noSuchOption not recognized by KtxImageConverter\n"); + if(data.quiet) + CORRADE_COMPARE(out.str(), ""); + else + CORRADE_COMPARE(out.str(), "Trade::AnyImageConverter::convertToFile(): option noSuchOption not recognized by KtxImageConverter\n"); } void AnyImageConverterTest::propagateConfigurationCompressedUnknownLevels2D() { + auto&& data = PropagateConfigurationUnknownData[testCaseInstanceId()]; + setTestCaseDescription(data.name); + PluginManager::Manager manager{MAGNUM_PLUGINS_IMAGECONVERTER_INSTALL_DIR}; #ifdef ANYIMAGECONVERTER_PLUGIN_FILENAME CORRADE_VERIFY(manager.load(ANYIMAGECONVERTER_PLUGIN_FILENAME) & PluginManager::LoadState::Loaded); @@ -1746,16 +1842,23 @@ void AnyImageConverterTest::propagateConfigurationCompressedUnknownLevels2D() { Containers::Pointer converter = manager.instantiate("AnyImageConverter"); converter->configuration().setValue("noSuchOption", "isHere"); + converter->setFlags(data.flags); std::ostringstream out; Warning redirectWarning{&out}; /* Using the list API even though there's just one image, which should still trigger the correct code path for AnyImageConverter. */ CORRADE_VERIFY(converter->convertToFile({CompressedImage2D}, Utility::Path::join(ANYIMAGECONVERTER_TEST_OUTPUT_DIR, "compressed-2d.ktx2"))); - CORRADE_COMPARE(out.str(), "Trade::AnyImageConverter::convertToFile(): option noSuchOption not recognized by KtxImageConverter\n"); + if(data.quiet) + CORRADE_COMPARE(out.str(), ""); + else + CORRADE_COMPARE(out.str(), "Trade::AnyImageConverter::convertToFile(): option noSuchOption not recognized by KtxImageConverter\n"); } void AnyImageConverterTest::propagateConfigurationCompressedUnknownLevels3D() { + auto&& data = PropagateConfigurationUnknownData[testCaseInstanceId()]; + setTestCaseDescription(data.name); + PluginManager::Manager manager{MAGNUM_PLUGINS_IMAGECONVERTER_INSTALL_DIR}; #ifdef ANYIMAGECONVERTER_PLUGIN_FILENAME CORRADE_VERIFY(manager.load(ANYIMAGECONVERTER_PLUGIN_FILENAME) & PluginManager::LoadState::Loaded); @@ -1767,13 +1870,17 @@ void AnyImageConverterTest::propagateConfigurationCompressedUnknownLevels3D() { Containers::Pointer converter = manager.instantiate("AnyImageConverter"); converter->configuration().setValue("noSuchOption", "isHere"); + converter->setFlags(data.flags); std::ostringstream out; Warning redirectWarning{&out}; /* Using the list API even though there's just one image, which should still trigger the correct code path for AnyImageConverter. */ CORRADE_VERIFY(converter->convertToFile({CompressedImage3D}, Utility::Path::join(ANYIMAGECONVERTER_TEST_OUTPUT_DIR, "compressed-3d.ktx2"))); - CORRADE_COMPARE(out.str(), "Trade::AnyImageConverter::convertToFile(): option noSuchOption not recognized by KtxImageConverter\n"); + if(data.quiet) + CORRADE_COMPARE(out.str(), ""); + else + CORRADE_COMPARE(out.str(), "Trade::AnyImageConverter::convertToFile(): option noSuchOption not recognized by KtxImageConverter\n"); } }}}} diff --git a/src/MagnumPlugins/AnyImageImporter/AnyImageImporter.cpp b/src/MagnumPlugins/AnyImageImporter/AnyImageImporter.cpp index 1e4f535c1..34ab6f309 100644 --- a/src/MagnumPlugins/AnyImageImporter/AnyImageImporter.cpp +++ b/src/MagnumPlugins/AnyImageImporter/AnyImageImporter.cpp @@ -179,7 +179,7 @@ void AnyImageImporter::doOpenFile(const Containers::StringView filename) { if(fileCallback()) importer->setFileCallback(fileCallback(), fileCallbackUserData()); /* Propagate configuration */ - Magnum::Implementation::propagateConfiguration("Trade::AnyImageImporter::openFile():", {}, metadata->name(), configuration(), importer->configuration()); + Magnum::Implementation::propagateConfiguration("Trade::AnyImageImporter::openFile():", {}, metadata->name(), configuration(), importer->configuration(), !(flags() & ImporterFlag::Quiet)); /* Try to open the file (error output should be printed by the plugin itself) */ @@ -306,7 +306,7 @@ void AnyImageImporter::doOpenData(Containers::Array&& data, DataFlags) { importer->setFlags(flags()); /* Propagate configuration */ - Magnum::Implementation::propagateConfiguration("Trade::AnyImageImporter::openData():", {}, metadata->name(), configuration(), importer->configuration()); + Magnum::Implementation::propagateConfiguration("Trade::AnyImageImporter::openData():", {}, metadata->name(), configuration(), importer->configuration(), !(flags() & ImporterFlag::Quiet)); /* Try to open the file (error output should be printed by the plugin itself) */ diff --git a/src/MagnumPlugins/AnyImageImporter/Test/AnyImageImporterTest.cpp b/src/MagnumPlugins/AnyImageImporter/Test/AnyImageImporterTest.cpp index 9409d6faa..eea56e99f 100644 --- a/src/MagnumPlugins/AnyImageImporter/Test/AnyImageImporterTest.cpp +++ b/src/MagnumPlugins/AnyImageImporter/Test/AnyImageImporterTest.cpp @@ -189,6 +189,20 @@ constexpr struct { {"EXR data", "depth32f-custom-channels.exr", true} }; +constexpr struct { + const char* name; + const char* filename; + bool asData; + const char* messageFunctionName; + ImporterFlags flags; + bool quiet; +} PropagateConfigurationUnknownData[]{ + {"", "rgb.tga", false, "openFile", {}, false}, + {"quiet", "rgb.tga", false, "", ImporterFlag::Quiet, true}, + {"data", "rgb.tga", true, "openData", {}, false}, + {"data, quiet", "rgb.tga", true, "openData", ImporterFlag::Quiet, true} +}; + AnyImageImporterTest::AnyImageImporterTest() { addInstancedTests({&AnyImageImporterTest::load1D}, Containers::arraySize(Load1DData)); @@ -220,7 +234,7 @@ AnyImageImporterTest::AnyImageImporterTest() { Containers::arraySize(PropagateConfigurationData)); addInstancedTests({&AnyImageImporterTest::propagateConfigurationUnknown}, - Containers::arraySize(Load2DData)); + Containers::arraySize(PropagateConfigurationUnknownData)); addTests({&AnyImageImporterTest::propagateFileCallback}); @@ -514,7 +528,7 @@ void AnyImageImporterTest::propagateConfiguration() { } void AnyImageImporterTest::propagateConfigurationUnknown() { - auto&& data = Load2DData[testCaseInstanceId()]; + auto&& data = PropagateConfigurationUnknownData[testCaseInstanceId()]; setTestCaseDescription(data.name); if(!(_manager.loadState("TgaImporter") & PluginManager::LoadState::Loaded)) @@ -522,6 +536,7 @@ void AnyImageImporterTest::propagateConfigurationUnknown() { Containers::Pointer importer = _manager.instantiate("AnyImageImporter"); importer->configuration().setValue("noSuchOption", "isHere"); + importer->setFlags(data.flags); std::ostringstream out; Warning redirectWarning{&out}; @@ -530,7 +545,10 @@ void AnyImageImporterTest::propagateConfigurationUnknown() { CORRADE_VERIFY(read); CORRADE_VERIFY(importer->openData(*read)); } else CORRADE_VERIFY(importer->openFile(Utility::Path::join(ANYIMAGEIMPORTER_TEST_DIR, data.filename))); - CORRADE_COMPARE(out.str(), Utility::formatString("Trade::AnyImageImporter::{}(): option noSuchOption not recognized by TgaImporter\n", data.messageFunctionName)); + if(data.quiet) + CORRADE_COMPARE(out.str(), ""); + else + CORRADE_COMPARE(out.str(), Utility::formatString("Trade::AnyImageImporter::{}(): option noSuchOption not recognized by TgaImporter\n", data.messageFunctionName)); } void AnyImageImporterTest::propagateFileCallback() { diff --git a/src/MagnumPlugins/AnySceneConverter/AnySceneConverter.cpp b/src/MagnumPlugins/AnySceneConverter/AnySceneConverter.cpp index d523ff2b9..6d27d1120 100644 --- a/src/MagnumPlugins/AnySceneConverter/AnySceneConverter.cpp +++ b/src/MagnumPlugins/AnySceneConverter/AnySceneConverter.cpp @@ -113,7 +113,7 @@ bool AnySceneConverter::doConvertToFile(const MeshData& mesh, const Containers:: converter->setFlags(flags()); /* Propagate configuration */ - Magnum::Implementation::propagateConfiguration("Trade::AnySceneConverter::convertToFile():", {}, metadata->name(), configuration(), converter->configuration()); + Magnum::Implementation::propagateConfiguration("Trade::AnySceneConverter::convertToFile():", {}, metadata->name(), configuration(), converter->configuration(), !(flags() & SceneConverterFlag::Quiet)); /* Try to convert the file (error output should be printed by the plugin itself) */ @@ -165,7 +165,7 @@ bool AnySceneConverter::doBeginFile(const Containers::StringView filename) { converter->setFlags(flags()); /* Propagate configuration */ - Magnum::Implementation::propagateConfiguration("Trade::AnySceneConverter::beginFile():", {}, metadata->name(), configuration(), converter->configuration()); + Magnum::Implementation::propagateConfiguration("Trade::AnySceneConverter::beginFile():", {}, metadata->name(), configuration(), converter->configuration(), !(flags() & SceneConverterFlag::Quiet)); /* Try to begin the file (error output should be printed by the plugin itself) */ diff --git a/src/MagnumPlugins/AnySceneConverter/Test/AnySceneConverterTest.cpp b/src/MagnumPlugins/AnySceneConverter/Test/AnySceneConverterTest.cpp index 7f2526e30..db4c62edd 100644 --- a/src/MagnumPlugins/AnySceneConverter/Test/AnySceneConverterTest.cpp +++ b/src/MagnumPlugins/AnySceneConverter/Test/AnySceneConverterTest.cpp @@ -92,6 +92,15 @@ constexpr struct { {"Stanford PLY uppercase", "ARMADI~1.PLY", "StanfordSceneConverter"} }; +const struct { + const char* name; + SceneConverterFlags flags; + bool quiet; +} PropagateConfigurationUnknownData[]{ + {"", {}, false}, + {"quiet", SceneConverterFlag::Quiet, true} +}; + AnySceneConverterTest::AnySceneConverterTest() { addTests({&AnySceneConverterTest::convert, &AnySceneConverterTest::convertBeginEnd}); @@ -109,9 +118,12 @@ AnySceneConverterTest::AnySceneConverterTest() { &AnySceneConverterTest::propagateFlagsBeginEnd, &AnySceneConverterTest::propagateConfigurationConvert, - &AnySceneConverterTest::propagateConfigurationBeginEnd, - &AnySceneConverterTest::propagateConfigurationUnknownConvert, - &AnySceneConverterTest::propagateConfigurationUnknownBeginEnd}); + &AnySceneConverterTest::propagateConfigurationBeginEnd}); + + addInstancedTests({ + &AnySceneConverterTest::propagateConfigurationUnknownConvert, + &AnySceneConverterTest::propagateConfigurationUnknownBeginEnd}, + Containers::arraySize(PropagateConfigurationUnknownData)); /* Load the plugin directly from the build tree. Otherwise it's static and already loaded. */ @@ -394,6 +406,9 @@ void AnySceneConverterTest::propagateConfigurationBeginEnd() { } void AnySceneConverterTest::propagateConfigurationUnknownConvert() { + auto&& data = PropagateConfigurationUnknownData[testCaseInstanceId()]; + setTestCaseDescription(data.name); + PluginManager::Manager manager{MAGNUM_PLUGINS_SCENECONVERTER_INSTALL_DIR}; #ifdef ANYSCENECONVERTER_PLUGIN_FILENAME CORRADE_VERIFY(manager.load(ANYSCENECONVERTER_PLUGIN_FILENAME) & PluginManager::LoadState::Loaded); @@ -414,14 +429,21 @@ void AnySceneConverterTest::propagateConfigurationUnknownConvert() { Containers::Pointer converter = manager.instantiate("AnySceneConverter"); converter->configuration().setValue("noSuchOption", "isHere"); + converter->setFlags(data.flags); std::ostringstream out; Warning redirectWarning{&out}; CORRADE_VERIFY(converter->convertToFile(mesh, Utility::Path::join(ANYSCENECONVERTER_TEST_OUTPUT_DIR, "file.ply"))); - CORRADE_COMPARE(out.str(), "Trade::AnySceneConverter::convertToFile(): option noSuchOption not recognized by StanfordSceneConverter\n"); + if(data.quiet) + CORRADE_COMPARE(out.str(), ""); + else + CORRADE_COMPARE(out.str(), "Trade::AnySceneConverter::convertToFile(): option noSuchOption not recognized by StanfordSceneConverter\n"); } void AnySceneConverterTest::propagateConfigurationUnknownBeginEnd() { + auto&& data = PropagateConfigurationUnknownData[testCaseInstanceId()]; + setTestCaseDescription(data.name); + PluginManager::Manager manager{MAGNUM_PLUGINS_SCENECONVERTER_INSTALL_DIR}; #ifdef ANYSCENECONVERTER_PLUGIN_FILENAME CORRADE_VERIFY(manager.load(ANYSCENECONVERTER_PLUGIN_FILENAME) & PluginManager::LoadState::Loaded); @@ -442,6 +464,7 @@ void AnySceneConverterTest::propagateConfigurationUnknownBeginEnd() { Containers::Pointer converter = manager.instantiate("AnySceneConverter"); converter->configuration().setValue("noSuchOption", "isHere"); + converter->setFlags(data.flags); std::ostringstream out; { @@ -450,7 +473,10 @@ void AnySceneConverterTest::propagateConfigurationUnknownBeginEnd() { } CORRADE_VERIFY(converter->add(mesh)); CORRADE_VERIFY(converter->endFile()); - CORRADE_COMPARE(out.str(), "Trade::AnySceneConverter::beginFile(): option noSuchOption not recognized by StanfordSceneConverter\n"); + if(data.quiet) + CORRADE_COMPARE(out.str(), ""); + else + CORRADE_COMPARE(out.str(), "Trade::AnySceneConverter::beginFile(): option noSuchOption not recognized by StanfordSceneConverter\n"); } }}}} diff --git a/src/MagnumPlugins/AnySceneImporter/AnySceneImporter.cpp b/src/MagnumPlugins/AnySceneImporter/AnySceneImporter.cpp index 4b0e7f319..3e565b4c5 100644 --- a/src/MagnumPlugins/AnySceneImporter/AnySceneImporter.cpp +++ b/src/MagnumPlugins/AnySceneImporter/AnySceneImporter.cpp @@ -170,7 +170,7 @@ void AnySceneImporter::doOpenFile(const Containers::StringView filename) { if(fileCallback()) importer->setFileCallback(fileCallback(), fileCallbackUserData()); /* Propagate configuration */ - Magnum::Implementation::propagateConfiguration("Trade::AnySceneImporter::openFile():", {}, metadata->name(), configuration(), importer->configuration()); + Magnum::Implementation::propagateConfiguration("Trade::AnySceneImporter::openFile():", {}, metadata->name(), configuration(), importer->configuration(), !(flags() & ImporterFlag::Quiet)); /* Try to open the file (error output should be printed by the plugin itself) */ diff --git a/src/MagnumPlugins/AnySceneImporter/Test/AnySceneImporterTest.cpp b/src/MagnumPlugins/AnySceneImporter/Test/AnySceneImporterTest.cpp index b63308a45..2eec969d3 100644 --- a/src/MagnumPlugins/AnySceneImporter/Test/AnySceneImporterTest.cpp +++ b/src/MagnumPlugins/AnySceneImporter/Test/AnySceneImporterTest.cpp @@ -101,6 +101,15 @@ constexpr struct { /* Not testing everything, only the most important ones */ }; +const struct { + const char* name; + ImporterFlags flags; + bool quiet; +} PropagateConfigurationUnknownData[]{ + {"", {}, false}, + {"quiet", ImporterFlag::Quiet, true} +}; + AnySceneImporterTest::AnySceneImporterTest() { addInstancedTests({&AnySceneImporterTest::load}, Containers::arraySize(LoadData)); @@ -115,9 +124,12 @@ AnySceneImporterTest::AnySceneImporterTest() { addTests({&AnySceneImporterTest::unknown, &AnySceneImporterTest::propagateFlags, - &AnySceneImporterTest::propagateConfiguration, - &AnySceneImporterTest::propagateConfigurationUnknown, - &AnySceneImporterTest::propagateConfigurationUnknownInEmptySubgroup, + &AnySceneImporterTest::propagateConfiguration}); + + addInstancedTests({&AnySceneImporterTest::propagateConfigurationUnknown}, + Containers::arraySize(PropagateConfigurationUnknownData)); + + addTests({&AnySceneImporterTest::propagateConfigurationUnknownInEmptySubgroup, &AnySceneImporterTest::propagateFileCallback, &AnySceneImporterTest::sceneFieldName, @@ -269,6 +281,9 @@ void AnySceneImporterTest::propagateConfiguration() { } void AnySceneImporterTest::propagateConfigurationUnknown() { + auto&& data = PropagateConfigurationUnknownData[testCaseInstanceId()]; + setTestCaseDescription(data.name); + PluginManager::Manager manager{MAGNUM_PLUGINS_IMPORTER_INSTALL_DIR}; #ifdef ANYSCENEIMPORTER_PLUGIN_FILENAME CORRADE_VERIFY(manager.load(ANYSCENEIMPORTER_PLUGIN_FILENAME) & PluginManager::LoadState::Loaded); @@ -286,11 +301,15 @@ void AnySceneImporterTest::propagateConfigurationUnknown() { importer->configuration().addGroup("postprocess"); importer->configuration().group("postprocess")->setValue("notHere", false); importer->configuration().group("postprocess")->addGroup("feh")->setValue("noHereNotEither", false); + importer->setFlags(data.flags); std::ostringstream out; Warning redirectWarning{&out}; CORRADE_VERIFY(importer->openFile(Utility::Path::join(ANYSCENEIMPORTER_TEST_DIR, "triangle.ply"))); - CORRADE_COMPARE(out.str(), + if(data.quiet) + CORRADE_COMPARE(out.str(), ""); + else + CORRADE_COMPARE(out.str(), "Trade::AnySceneImporter::openFile(): option noSuchOption not recognized by AssimpImporter\n" "Trade::AnySceneImporter::openFile(): option postprocess/notHere not recognized by AssimpImporter\n" "Trade::AnySceneImporter::openFile(): option postprocess/feh/noHereNotEither not recognized by AssimpImporter\n"); diff --git a/src/MagnumPlugins/AnyShaderConverter/AnyConverter.cpp b/src/MagnumPlugins/AnyShaderConverter/AnyConverter.cpp index 00f91ddd1..38166a255 100644 --- a/src/MagnumPlugins/AnyShaderConverter/AnyConverter.cpp +++ b/src/MagnumPlugins/AnyShaderConverter/AnyConverter.cpp @@ -228,7 +228,7 @@ Containers::Pair AnyConverter::doValidateFile(const St converter->setDefinitions(_state->definitionViews); /* Propagate configuration */ - Magnum::Implementation::propagateConfiguration("ShaderTools::AnyConverter::validateFile():", {}, metadata->name(), configuration(), converter->configuration()); + Magnum::Implementation::propagateConfiguration("ShaderTools::AnyConverter::validateFile():", {}, metadata->name(), configuration(), converter->configuration(), !(flags() & ConverterFlag::Quiet)); /* Try to validate the file (error output should be printed by the plugin itself) */ @@ -285,7 +285,7 @@ Containers::Pair AnyConverter::doValidateData(const St converter->setDefinitions(_state->definitionViews); /* Propagate configuration */ - Magnum::Implementation::propagateConfiguration("ShaderTools::AnyConverter::validateData():", {}, metadata->name(), configuration(), converter->configuration()); + Magnum::Implementation::propagateConfiguration("ShaderTools::AnyConverter::validateData():", {}, metadata->name(), configuration(), converter->configuration(), !(flags() & ConverterFlag::Quiet)); /* Try to validate the data (error output should be printed by the plugin itself) */ @@ -369,7 +369,7 @@ bool AnyConverter::doConvertFileToFile(const Stage stage, const Containers::Stri converter->setOptimizationLevel(_state->optimizationLevel); /* Propagate configuration */ - Magnum::Implementation::propagateConfiguration("ShaderTools::AnyConverter::convertFileToFile():", {}, metadata->name(), configuration(), converter->configuration()); + Magnum::Implementation::propagateConfiguration("ShaderTools::AnyConverter::convertFileToFile():", {}, metadata->name(), configuration(), converter->configuration(), !(flags() & ConverterFlag::Quiet)); /* Try to convert the file (error output should be printed by the plugin itself) */ @@ -454,7 +454,7 @@ Containers::Optional> AnyConverter::doConvertFileToData( converter->setOptimizationLevel(_state->optimizationLevel); /* Propagate configuration */ - Magnum::Implementation::propagateConfiguration("ShaderTools::AnyConverter::convertFileToData():", {}, metadata->name(), configuration(), converter->configuration()); + Magnum::Implementation::propagateConfiguration("ShaderTools::AnyConverter::convertFileToData():", {}, metadata->name(), configuration(), converter->configuration(), !(flags() & ConverterFlag::Quiet)); /* Try to convert the file (error output should be printed by the plugin itself) */ @@ -537,7 +537,7 @@ Containers::Optional> AnyConverter::doConvertDataToData( converter->setOptimizationLevel(_state->optimizationLevel); /* Propagate configuration */ - Magnum::Implementation::propagateConfiguration("ShaderTools::AnyConverter::convertDataToData():", {}, metadata->name(), configuration(), converter->configuration()); + Magnum::Implementation::propagateConfiguration("ShaderTools::AnyConverter::convertDataToData():", {}, metadata->name(), configuration(), converter->configuration(), !(flags() & ConverterFlag::Quiet)); /* Try to convert the file (error output should be printed by the plugin itself) */ diff --git a/src/MagnumPlugins/AnyShaderConverter/Test/AnyConverterTest.cpp b/src/MagnumPlugins/AnyShaderConverter/Test/AnyConverterTest.cpp index 17e9a8d02..2948e0e76 100644 --- a/src/MagnumPlugins/AnyShaderConverter/Test/AnyConverterTest.cpp +++ b/src/MagnumPlugins/AnyShaderConverter/Test/AnyConverterTest.cpp @@ -130,6 +130,15 @@ struct AnyConverterTest: TestSuite::Tester { PluginManager::Manager _manager{"nonexistent"}; }; +const struct { + const char* name; + ConverterFlags flags; + bool quiet; +} PropagateConfigurationUnknownData[]{ + {"", {}, false}, + {"quiet", ConverterFlag::Quiet, true} +}; + constexpr struct { const char* name; const char* filename; @@ -163,10 +172,12 @@ AnyConverterTest::AnyConverterTest() { &AnyConverterTest::validateFilePropagateInputVersion, &AnyConverterTest::validateFilePropagateOutputVersion, &AnyConverterTest::validateFilePropagatePreprocess, - &AnyConverterTest::validateFilePropagateConfiguration, - &AnyConverterTest::validateFilePropagateConfigurationUnknown, + &AnyConverterTest::validateFilePropagateConfiguration}); - &AnyConverterTest::validateData, + addInstancedTests({&AnyConverterTest::validateFilePropagateConfigurationUnknown}, + Containers::arraySize(PropagateConfigurationUnknownData)); + + addTests({&AnyConverterTest::validateData, &AnyConverterTest::validateDataPluginLoadFailed, &AnyConverterTest::validateDataNoFormatSet, &AnyConverterTest::validateDataNotSupported, @@ -175,10 +186,12 @@ AnyConverterTest::AnyConverterTest() { &AnyConverterTest::validateDataPropagateInputVersion, &AnyConverterTest::validateDataPropagateOutputVersion, &AnyConverterTest::validateDataPropagatePreprocess, - &AnyConverterTest::validateDataPropagateConfiguration, - &AnyConverterTest::validateDataPropagateConfigurationUnknown, + &AnyConverterTest::validateDataPropagateConfiguration}); + + addInstancedTests({&AnyConverterTest::validateDataPropagateConfigurationUnknown}, + Containers::arraySize(PropagateConfigurationUnknownData)); - &AnyConverterTest::convertFileToFile, + addTests({&AnyConverterTest::convertFileToFile, &AnyConverterTest::convertFileToFilePluginLoadFailed, &AnyConverterTest::convertFileToFileUnknownInput, &AnyConverterTest::convertFileToFileUnknownOutput, @@ -192,10 +205,12 @@ AnyConverterTest::AnyConverterTest() { &AnyConverterTest::convertFileToFilePropagatePreprocess, &AnyConverterTest::convertFileToFilePropagateDebugInfo, &AnyConverterTest::convertFileToFilePropagateOptimization, - &AnyConverterTest::convertFileToFilePropagateConfiguration, - &AnyConverterTest::convertFileToFilePropagateConfigurationUnknown, + &AnyConverterTest::convertFileToFilePropagateConfiguration}); - &AnyConverterTest::convertFileToData, + addInstancedTests({&AnyConverterTest::convertFileToFilePropagateConfigurationUnknown}, + Containers::arraySize(PropagateConfigurationUnknownData)); + + addTests({&AnyConverterTest::convertFileToData, &AnyConverterTest::convertFileToDataPluginLoadFailed, &AnyConverterTest::convertFileToDataUnknown, &AnyConverterTest::convertFileToDataNoFormatSet, @@ -209,10 +224,12 @@ AnyConverterTest::AnyConverterTest() { &AnyConverterTest::convertFileToDataPropagatePreprocess, &AnyConverterTest::convertFileToDataPropagateDebugInfo, &AnyConverterTest::convertFileToDataPropagateOptimization, - &AnyConverterTest::convertFileToDataPropagateConfiguration, - &AnyConverterTest::convertFileToDataPropagateConfigurationUnknown, + &AnyConverterTest::convertFileToDataPropagateConfiguration}); + + addInstancedTests({&AnyConverterTest::convertFileToDataPropagateConfigurationUnknown}, + Containers::arraySize(PropagateConfigurationUnknownData)); - &AnyConverterTest::convertDataToData, + addTests({&AnyConverterTest::convertDataToData, &AnyConverterTest::convertDataToDataPluginLoadFailed, &AnyConverterTest::convertDataToDataNoInputFormatSet, &AnyConverterTest::convertDataToDataNoOutputFormatSet, @@ -226,8 +243,10 @@ AnyConverterTest::AnyConverterTest() { &AnyConverterTest::convertDataToDataPropagatePreprocess, &AnyConverterTest::convertDataToDataPropagateDebugInfo, &AnyConverterTest::convertDataToDataPropagateOptimization, - &AnyConverterTest::convertDataToDataPropagateConfiguration, - &AnyConverterTest::convertDataToDataPropagateConfigurationUnknown}); + &AnyConverterTest::convertDataToDataPropagateConfiguration}); + + addInstancedTests({&AnyConverterTest::convertDataToDataPropagateConfigurationUnknown}, + Containers::arraySize(PropagateConfigurationUnknownData)); addInstancedTests({&AnyConverterTest::detectValidate}, Containers::arraySize(DetectValidateData)); @@ -446,6 +465,9 @@ void AnyConverterTest::validateFilePropagateConfiguration() { } void AnyConverterTest::validateFilePropagateConfigurationUnknown() { + auto&& data = PropagateConfigurationUnknownData[testCaseInstanceId()]; + setTestCaseDescription(data.name); + PluginManager::Manager manager{MAGNUM_PLUGINS_SHADERCONVERTER_INSTALL_DIR}; #ifdef ANYSHADERCONVERTER_PLUGIN_FILENAME CORRADE_VERIFY(manager.load(ANYSHADERCONVERTER_PLUGIN_FILENAME) & PluginManager::LoadState::Loaded); @@ -458,12 +480,16 @@ void AnyConverterTest::validateFilePropagateConfigurationUnknown() { converter->configuration().setValue("noSuchOption", "isHere"); /* So it doesn't warn about anything */ converter->setDefinitions({{"reserved__identifier", "sorry"}}); + converter->setFlags(data.flags); std::ostringstream out; Warning redirectWarning{&out}; CORRADE_COMPARE(converter->validateFile(Stage::Fragment, Utility::Path::join(ANYSHADERCONVERTER_TEST_DIR, "file.glsl")), Containers::pair(true, Containers::String{})); - CORRADE_COMPARE(out.str(), + if(data.quiet) + CORRADE_COMPARE(out.str(), ""); + else + CORRADE_COMPARE(out.str(), "ShaderTools::AnyConverter::validateFile(): option noSuchOption not recognized by GlslangShaderConverter\n"); } @@ -691,6 +717,9 @@ void AnyConverterTest::validateDataPropagateConfiguration() { } void AnyConverterTest::validateDataPropagateConfigurationUnknown() { + auto&& data = PropagateConfigurationUnknownData[testCaseInstanceId()]; + setTestCaseDescription(data.name); + PluginManager::Manager manager{MAGNUM_PLUGINS_SHADERCONVERTER_INSTALL_DIR}; #ifdef ANYSHADERCONVERTER_PLUGIN_FILENAME CORRADE_VERIFY(manager.load(ANYSHADERCONVERTER_PLUGIN_FILENAME) & PluginManager::LoadState::Loaded); @@ -704,15 +733,19 @@ void AnyConverterTest::validateDataPropagateConfigurationUnknown() { converter->configuration().setValue("noSuchOption", "isHere"); /* So it doesn't warn about anything */ converter->setDefinitions({{"reserved__identifier", "sorry"}}); + converter->setFlags(data.flags); - Containers::Optional> data = Utility::Path::read(Utility::Path::join(ANYSHADERCONVERTER_TEST_DIR, "file.glsl")); - CORRADE_VERIFY(data); + Containers::Optional> shaderData = Utility::Path::read(Utility::Path::join(ANYSHADERCONVERTER_TEST_DIR, "file.glsl")); + CORRADE_VERIFY(shaderData); std::ostringstream out; Warning redirectWarning{&out}; - CORRADE_COMPARE(converter->validateData(Stage::Fragment, *data), + CORRADE_COMPARE(converter->validateData(Stage::Fragment, *shaderData), Containers::pair(true, Containers::String{})); - CORRADE_COMPARE(out.str(), + if(data.quiet) + CORRADE_COMPARE(out.str(), ""); + else + CORRADE_COMPARE(out.str(), "ShaderTools::AnyConverter::validateData(): option noSuchOption not recognized by GlslangShaderConverter\n"); } @@ -1052,6 +1085,9 @@ void AnyConverterTest::convertFileToFilePropagateConfiguration() { } void AnyConverterTest::convertFileToFilePropagateConfigurationUnknown() { + auto&& data = PropagateConfigurationUnknownData[testCaseInstanceId()]; + setTestCaseDescription(data.name); + PluginManager::Manager manager{MAGNUM_PLUGINS_SHADERCONVERTER_INSTALL_DIR}; #ifdef ANYSHADERCONVERTER_PLUGIN_FILENAME CORRADE_VERIFY(manager.load(ANYSHADERCONVERTER_PLUGIN_FILENAME) & PluginManager::LoadState::Loaded); @@ -1064,11 +1100,15 @@ void AnyConverterTest::convertFileToFilePropagateConfigurationUnknown() { converter->configuration().setValue("noSuchOption", "isHere"); /* So it doesn't warn about anything */ converter->setDefinitions({{"reserved__identifier", "sorry"}}); + converter->setFlags(data.flags); std::ostringstream out; Warning redirectWarning{&out}; CORRADE_VERIFY(converter->convertFileToFile(Stage::Fragment, Utility::Path::join(ANYSHADERCONVERTER_TEST_DIR, "file.glsl"), Utility::Path::join(ANYSHADERCONVERTER_TEST_OUTPUT_DIR, "file.glsl"))); - CORRADE_COMPARE(out.str(), + if(data.quiet) + CORRADE_COMPARE(out.str(), ""); + else + CORRADE_COMPARE(out.str(), "ShaderTools::AnyConverter::convertFileToFile(): option noSuchOption not recognized by GlslangShaderConverter\n"); } @@ -1417,6 +1457,9 @@ void AnyConverterTest::convertFileToDataPropagateConfiguration() { } void AnyConverterTest::convertFileToDataPropagateConfigurationUnknown() { + auto&& data = PropagateConfigurationUnknownData[testCaseInstanceId()]; + setTestCaseDescription(data.name); + PluginManager::Manager manager{MAGNUM_PLUGINS_SHADERCONVERTER_INSTALL_DIR}; #ifdef ANYSHADERCONVERTER_PLUGIN_FILENAME CORRADE_VERIFY(manager.load(ANYSHADERCONVERTER_PLUGIN_FILENAME) & PluginManager::LoadState::Loaded); @@ -1430,11 +1473,15 @@ void AnyConverterTest::convertFileToDataPropagateConfigurationUnknown() { converter->configuration().setValue("noSuchOption", "isHere"); /* So it doesn't warn about anything */ converter->setDefinitions({{"reserved__identifier", "sorry"}}); + converter->setFlags(data.flags); std::ostringstream out; Warning redirectWarning{&out}; CORRADE_VERIFY(converter->convertFileToData(Stage::Fragment, Utility::Path::join(ANYSHADERCONVERTER_TEST_DIR, "file.glsl"))); - CORRADE_COMPARE(out.str(), + if(data.quiet) + CORRADE_COMPARE(out.str(), ""); + else + CORRADE_COMPARE(out.str(), "ShaderTools::AnyConverter::convertFileToData(): option noSuchOption not recognized by GlslangShaderConverter\n"); } @@ -1822,6 +1869,9 @@ void AnyConverterTest::convertDataToDataPropagateConfiguration() { } void AnyConverterTest::convertDataToDataPropagateConfigurationUnknown() { + auto&& data = PropagateConfigurationUnknownData[testCaseInstanceId()]; + setTestCaseDescription(data.name); + PluginManager::Manager manager{MAGNUM_PLUGINS_SHADERCONVERTER_INSTALL_DIR}; #ifdef ANYSHADERCONVERTER_PLUGIN_FILENAME CORRADE_VERIFY(manager.load(ANYSHADERCONVERTER_PLUGIN_FILENAME) & PluginManager::LoadState::Loaded); @@ -1836,14 +1886,18 @@ void AnyConverterTest::convertDataToDataPropagateConfigurationUnknown() { converter->configuration().setValue("noSuchOption", "isHere"); /* So it doesn't warn about anything */ converter->setDefinitions({{"reserved__identifier", "sorry"}}); + converter->setFlags(data.flags); - Containers::Optional> data = Utility::Path::read(Utility::Path::join(ANYSHADERCONVERTER_TEST_DIR, "file.glsl")); - CORRADE_VERIFY(data); + Containers::Optional> shaderData = Utility::Path::read(Utility::Path::join(ANYSHADERCONVERTER_TEST_DIR, "file.glsl")); + CORRADE_VERIFY(shaderData); std::ostringstream out; Warning redirectWarning{&out}; - CORRADE_VERIFY(converter->convertDataToData(Stage::Fragment, *data)); - CORRADE_COMPARE(out.str(), + CORRADE_VERIFY(converter->convertDataToData(Stage::Fragment, *shaderData)); + if(data.quiet) + CORRADE_COMPARE(out.str(), ""); + else + CORRADE_COMPARE(out.str(), "ShaderTools::AnyConverter::convertDataToData(): option noSuchOption not recognized by GlslangShaderConverter\n"); } diff --git a/src/MagnumPlugins/Implementation/propagateConfiguration.h b/src/MagnumPlugins/Implementation/propagateConfiguration.h index ba56d7946..2ee192e34 100644 --- a/src/MagnumPlugins/Implementation/propagateConfiguration.h +++ b/src/MagnumPlugins/Implementation/propagateConfiguration.h @@ -45,7 +45,7 @@ namespace Magnum { namespace Implementation { /* Used only in plugins where we don't want it to be exported */ namespace { -void propagateConfiguration(const char* warningPrefix, const Containers::String& groupPrefix, const Containers::StringView plugin, const Utility::ConfigurationGroup& src, Utility::ConfigurationGroup& dst, bool warnUnrecognized = true) { +void propagateConfiguration(const char* warningPrefix, const Containers::String& groupPrefix, const Containers::StringView plugin, const Utility::ConfigurationGroup& src, Utility::ConfigurationGroup& dst, bool warnUnrecognized, bool warnUnrecognizedNested) { using namespace Containers::Literals; /* Propagate values */ @@ -65,18 +65,22 @@ void propagateConfiguration(const char* warningPrefix, const Containers::String& customSceneFieldTypes), don't warn about unrecognized values. This logic is repeated for nested subgroups instead of being inherited, meaning that adding a nonexistent subgroup to an empty group will - warn again. */ - bool warnUnrecognizedSubgroup = true; + warn again (unless all warnings are disabled). */ + bool warnUnrecognizedSubgroup = warnUnrecognizedNested; if(!dstGroup) { dstGroup = dst.addGroup(group.first()); } else if(!dstGroup->hasGroups() && !dstGroup->hasValues()) { warnUnrecognizedSubgroup = false; } - propagateConfiguration(warningPrefix, "/"_s.joinWithoutEmptyParts({groupPrefix, group.first()}), plugin, group.second(), *dstGroup, warnUnrecognizedSubgroup); + propagateConfiguration(warningPrefix, "/"_s.joinWithoutEmptyParts({groupPrefix, group.first()}), plugin, group.second(), *dstGroup, warnUnrecognizedSubgroup, warnUnrecognizedNested); } } +void propagateConfiguration(const char* warningPrefix, const Containers::String& groupPrefix, const Containers::StringView plugin, const Utility::ConfigurationGroup& src, Utility::ConfigurationGroup& dst, bool warnUnrecognized = true) { + propagateConfiguration(warningPrefix, groupPrefix, plugin, src, dst, warnUnrecognized, warnUnrecognized); +} + } }}