Browse Source

Any*{Importer,Converter}: respect Flag::Quiet in config propagation.

Turns out the AnyShaderConverter didn't respect it either, although the
flag was already present in the interface.
pull/617/head
Vladimír Vondruš 3 years ago
parent
commit
6e187518b0
  1. 24
      src/MagnumPlugins/AnyImageConverter/AnyImageConverter.cpp
  2. 169
      src/MagnumPlugins/AnyImageConverter/Test/AnyImageConverterTest.cpp
  3. 4
      src/MagnumPlugins/AnyImageImporter/AnyImageImporter.cpp
  4. 24
      src/MagnumPlugins/AnyImageImporter/Test/AnyImageImporterTest.cpp
  5. 4
      src/MagnumPlugins/AnySceneConverter/AnySceneConverter.cpp
  6. 36
      src/MagnumPlugins/AnySceneConverter/Test/AnySceneConverterTest.cpp
  7. 2
      src/MagnumPlugins/AnySceneImporter/AnySceneImporter.cpp
  8. 27
      src/MagnumPlugins/AnySceneImporter/Test/AnySceneImporterTest.cpp
  9. 10
      src/MagnumPlugins/AnyShaderConverter/AnyConverter.cpp
  10. 104
      src/MagnumPlugins/AnyShaderConverter/Test/AnyConverterTest.cpp
  11. 12
      src/MagnumPlugins/Implementation/propagateConfiguration.h

24
src/MagnumPlugins/AnyImageConverter/AnyImageConverter.cpp

@ -94,7 +94,7 @@ bool AnyImageConverter::doConvertToFile(const ImageView1D& image, const Containe
converter->setFlags(flags()); converter->setFlags(flags());
/* Propagate configuration */ /* 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 /* Try to convert the file (error output should be printed by the plugin
itself) */ itself) */
@ -157,7 +157,7 @@ bool AnyImageConverter::doConvertToFile(const ImageView2D& image, const Containe
converter->setFlags(flags()); converter->setFlags(flags());
/* Propagate configuration */ /* 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 /* Try to convert the file (error output should be printed by the plugin
itself) */ itself) */
@ -207,7 +207,7 @@ bool AnyImageConverter::doConvertToFile(const ImageView3D& image, const Containe
converter->setFlags(flags()); converter->setFlags(flags());
/* Propagate configuration */ /* 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 /* Try to convert the file (error output should be printed by the plugin
itself) */ itself) */
@ -251,7 +251,7 @@ bool AnyImageConverter::doConvertToFile(const CompressedImageView1D& image, cons
converter->setFlags(flags()); converter->setFlags(flags());
/* Propagate configuration */ /* 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 /* Try to convert the file (error output should be printed by the plugin
itself) */ itself) */
@ -295,7 +295,7 @@ bool AnyImageConverter::doConvertToFile(const CompressedImageView2D& image, cons
converter->setFlags(flags()); converter->setFlags(flags());
/* Propagate configuration */ /* 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 /* Try to convert the file (error output should be printed by the plugin
itself) */ itself) */
@ -339,7 +339,7 @@ bool AnyImageConverter::doConvertToFile(const CompressedImageView3D& image, cons
converter->setFlags(flags()); converter->setFlags(flags());
/* Propagate configuration */ /* 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 /* Try to convert the file (error output should be printed by the plugin
itself) */ itself) */
@ -383,7 +383,7 @@ bool AnyImageConverter::doConvertToFile(const Containers::ArrayView<const ImageV
converter->setFlags(flags()); converter->setFlags(flags());
/* Propagate configuration */ /* 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 /* Try to convert the file (error output should be printed by the plugin
itself) */ itself) */
@ -431,7 +431,7 @@ bool AnyImageConverter::doConvertToFile(const Containers::ArrayView<const ImageV
converter->setFlags(flags()); converter->setFlags(flags());
/* Propagate configuration */ /* 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 /* Try to convert the file (error output should be printed by the plugin
itself) */ itself) */
@ -479,7 +479,7 @@ bool AnyImageConverter::doConvertToFile(const Containers::ArrayView<const ImageV
converter->setFlags(flags()); converter->setFlags(flags());
/* Propagate configuration */ /* 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 /* Try to convert the file (error output should be printed by the plugin
itself) */ itself) */
@ -523,7 +523,7 @@ bool AnyImageConverter::doConvertToFile(const Containers::ArrayView<const Compre
converter->setFlags(flags()); converter->setFlags(flags());
/* Propagate configuration */ /* 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 /* Try to convert the file (error output should be printed by the plugin
itself) */ itself) */
@ -567,7 +567,7 @@ bool AnyImageConverter::doConvertToFile(const Containers::ArrayView<const Compre
converter->setFlags(flags()); converter->setFlags(flags());
/* Propagate configuration */ /* 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 /* Try to convert the file (error output should be printed by the plugin
itself) */ itself) */
@ -611,7 +611,7 @@ bool AnyImageConverter::doConvertToFile(const Containers::ArrayView<const Compre
converter->setFlags(flags()); converter->setFlags(flags());
/* Propagate configuration */ /* 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 /* Try to convert the file (error output should be printed by the plugin
itself) */ itself) */

169
src/MagnumPlugins/AnyImageConverter/Test/AnyImageConverterTest.cpp

@ -273,6 +273,15 @@ constexpr struct {
{"KTX2 uppercase", "FIL~1.KTX2", "KtxImageConverter"} {"KTX2 uppercase", "FIL~1.KTX2", "KtxImageConverter"}
}; };
const struct {
const char* name;
ImageConverterFlags flags;
bool quiet;
} PropagateConfigurationUnknownData[]{
{"", {}, false},
{"quiet", ImageConverterFlag::Quiet, true}
};
AnyImageConverterTest::AnyImageConverterTest() { AnyImageConverterTest::AnyImageConverterTest() {
addTests({&AnyImageConverterTest::convert1D, addTests({&AnyImageConverterTest::convert1D,
&AnyImageConverterTest::convert2D, &AnyImageConverterTest::convert2D,
@ -354,29 +363,43 @@ AnyImageConverterTest::AnyImageConverterTest() {
&AnyImageConverterTest::propagateConfiguration1D, &AnyImageConverterTest::propagateConfiguration1D,
&AnyImageConverterTest::propagateConfiguration2D, &AnyImageConverterTest::propagateConfiguration2D,
&AnyImageConverterTest::propagateConfiguration3D, &AnyImageConverterTest::propagateConfiguration3D});
&AnyImageConverterTest::propagateConfigurationUnknown1D,
&AnyImageConverterTest::propagateConfigurationUnknown2D, addInstancedTests({
&AnyImageConverterTest::propagateConfigurationUnknown3D, &AnyImageConverterTest::propagateConfigurationUnknown1D,
&AnyImageConverterTest::propagateConfigurationCompressed1D, &AnyImageConverterTest::propagateConfigurationUnknown2D,
&AnyImageConverterTest::propagateConfigurationUnknown3D},
Containers::arraySize(PropagateConfigurationUnknownData));
addTests({&AnyImageConverterTest::propagateConfigurationCompressed1D,
&AnyImageConverterTest::propagateConfigurationCompressed2D, &AnyImageConverterTest::propagateConfigurationCompressed2D,
&AnyImageConverterTest::propagateConfigurationCompressed3D, &AnyImageConverterTest::propagateConfigurationCompressed3D});
&AnyImageConverterTest::propagateConfigurationCompressedUnknown1D,
&AnyImageConverterTest::propagateConfigurationCompressedUnknown2D,
&AnyImageConverterTest::propagateConfigurationCompressedUnknown3D,
&AnyImageConverterTest::propagateConfigurationLevels1D, addInstancedTests({
&AnyImageConverterTest::propagateConfigurationCompressedUnknown1D,
&AnyImageConverterTest::propagateConfigurationCompressedUnknown2D,
&AnyImageConverterTest::propagateConfigurationCompressedUnknown3D},
Containers::arraySize(PropagateConfigurationUnknownData));
addTests({&AnyImageConverterTest::propagateConfigurationLevels1D,
&AnyImageConverterTest::propagateConfigurationLevels2D, &AnyImageConverterTest::propagateConfigurationLevels2D,
&AnyImageConverterTest::propagateConfigurationLevels3D, &AnyImageConverterTest::propagateConfigurationLevels3D});
&AnyImageConverterTest::propagateConfigurationUnknownLevels1D,
&AnyImageConverterTest::propagateConfigurationUnknownLevels2D, addInstancedTests({
&AnyImageConverterTest::propagateConfigurationUnknownLevels3D, &AnyImageConverterTest::propagateConfigurationUnknownLevels1D,
&AnyImageConverterTest::propagateConfigurationCompressedLevels1D, &AnyImageConverterTest::propagateConfigurationUnknownLevels2D,
&AnyImageConverterTest::propagateConfigurationUnknownLevels3D},
Containers::arraySize(PropagateConfigurationUnknownData));
addTests({&AnyImageConverterTest::propagateConfigurationCompressedLevels1D,
&AnyImageConverterTest::propagateConfigurationCompressedLevels2D, &AnyImageConverterTest::propagateConfigurationCompressedLevels2D,
&AnyImageConverterTest::propagateConfigurationCompressedLevels3D, &AnyImageConverterTest::propagateConfigurationCompressedLevels3D});
&AnyImageConverterTest::propagateConfigurationCompressedUnknownLevels1D,
&AnyImageConverterTest::propagateConfigurationCompressedUnknownLevels2D, addInstancedTests({
&AnyImageConverterTest::propagateConfigurationCompressedUnknownLevels3D}); &AnyImageConverterTest::propagateConfigurationCompressedUnknownLevels1D,
&AnyImageConverterTest::propagateConfigurationCompressedUnknownLevels2D,
&AnyImageConverterTest::propagateConfigurationCompressedUnknownLevels3D},
Containers::arraySize(PropagateConfigurationUnknownData));
/* Load the plugin directly from the build tree. Otherwise it's static and /* Load the plugin directly from the build tree. Otherwise it's static and
already loaded. */ already loaded. */
@ -1306,6 +1329,9 @@ void AnyImageConverterTest::propagateConfiguration3D() {
} }
void AnyImageConverterTest::propagateConfigurationUnknown1D() { void AnyImageConverterTest::propagateConfigurationUnknown1D() {
auto&& data = PropagateConfigurationUnknownData[testCaseInstanceId()];
setTestCaseDescription(data.name);
PluginManager::Manager<AbstractImageConverter> manager{MAGNUM_PLUGINS_IMAGECONVERTER_INSTALL_DIR}; PluginManager::Manager<AbstractImageConverter> manager{MAGNUM_PLUGINS_IMAGECONVERTER_INSTALL_DIR};
#ifdef ANYIMAGECONVERTER_PLUGIN_FILENAME #ifdef ANYIMAGECONVERTER_PLUGIN_FILENAME
CORRADE_VERIFY(manager.load(ANYIMAGECONVERTER_PLUGIN_FILENAME) & PluginManager::LoadState::Loaded); CORRADE_VERIFY(manager.load(ANYIMAGECONVERTER_PLUGIN_FILENAME) & PluginManager::LoadState::Loaded);
@ -1317,27 +1343,41 @@ void AnyImageConverterTest::propagateConfigurationUnknown1D() {
Containers::Pointer<AbstractImageConverter> converter = manager.instantiate("AnyImageConverter"); Containers::Pointer<AbstractImageConverter> converter = manager.instantiate("AnyImageConverter");
converter->configuration().setValue("noSuchOption", "isHere"); converter->configuration().setValue("noSuchOption", "isHere");
converter->setFlags(data.flags);
std::ostringstream out; std::ostringstream out;
Warning redirectWarning{&out}; Warning redirectWarning{&out};
CORRADE_VERIFY(converter->convertToFile(Image1D, Utility::Path::join(ANYIMAGECONVERTER_TEST_OUTPUT_DIR, "1d.ktx2"))); 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() { void AnyImageConverterTest::propagateConfigurationUnknown2D() {
auto&& data = PropagateConfigurationUnknownData[testCaseInstanceId()];
setTestCaseDescription(data.name);
if(!(_manager.loadState("TgaImageConverter") & PluginManager::LoadState::Loaded)) if(!(_manager.loadState("TgaImageConverter") & PluginManager::LoadState::Loaded))
CORRADE_SKIP("TgaImageConverter plugin not enabled, cannot test"); CORRADE_SKIP("TgaImageConverter plugin not enabled, cannot test");
Containers::Pointer<AbstractImageConverter> converter = _manager.instantiate("AnyImageConverter"); Containers::Pointer<AbstractImageConverter> converter = _manager.instantiate("AnyImageConverter");
converter->configuration().setValue("noSuchOption", "isHere"); converter->configuration().setValue("noSuchOption", "isHere");
converter->setFlags(data.flags);
std::ostringstream out; std::ostringstream out;
Warning redirectWarning{&out}; Warning redirectWarning{&out};
CORRADE_VERIFY(converter->convertToFile(Image2D, Utility::Path::join(ANYIMAGECONVERTER_TEST_OUTPUT_DIR, "2d.tga"))); 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() { void AnyImageConverterTest::propagateConfigurationUnknown3D() {
auto&& data = PropagateConfigurationUnknownData[testCaseInstanceId()];
setTestCaseDescription(data.name);
PluginManager::Manager<AbstractImageConverter> manager{MAGNUM_PLUGINS_IMAGECONVERTER_INSTALL_DIR}; PluginManager::Manager<AbstractImageConverter> manager{MAGNUM_PLUGINS_IMAGECONVERTER_INSTALL_DIR};
#ifdef ANYIMAGECONVERTER_PLUGIN_FILENAME #ifdef ANYIMAGECONVERTER_PLUGIN_FILENAME
CORRADE_VERIFY(manager.load(ANYIMAGECONVERTER_PLUGIN_FILENAME) & PluginManager::LoadState::Loaded); CORRADE_VERIFY(manager.load(ANYIMAGECONVERTER_PLUGIN_FILENAME) & PluginManager::LoadState::Loaded);
@ -1349,11 +1389,15 @@ void AnyImageConverterTest::propagateConfigurationUnknown3D() {
Containers::Pointer<AbstractImageConverter> converter = manager.instantiate("AnyImageConverter"); Containers::Pointer<AbstractImageConverter> converter = manager.instantiate("AnyImageConverter");
converter->configuration().setValue("noSuchOption", "isHere"); converter->configuration().setValue("noSuchOption", "isHere");
converter->setFlags(data.flags);
std::ostringstream out; std::ostringstream out;
Warning redirectWarning{&out}; Warning redirectWarning{&out};
CORRADE_VERIFY(converter->convertToFile(Image3D, Utility::Path::join(ANYIMAGECONVERTER_TEST_OUTPUT_DIR, "3d.ktx2"))); 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() { void AnyImageConverterTest::propagateConfigurationCompressed1D() {
@ -1432,6 +1476,9 @@ void AnyImageConverterTest::propagateConfigurationCompressed3D() {
} }
void AnyImageConverterTest::propagateConfigurationCompressedUnknown1D() { void AnyImageConverterTest::propagateConfigurationCompressedUnknown1D() {
auto&& data = PropagateConfigurationUnknownData[testCaseInstanceId()];
setTestCaseDescription(data.name);
PluginManager::Manager<AbstractImageConverter> manager{MAGNUM_PLUGINS_IMAGECONVERTER_INSTALL_DIR}; PluginManager::Manager<AbstractImageConverter> manager{MAGNUM_PLUGINS_IMAGECONVERTER_INSTALL_DIR};
#ifdef ANYIMAGECONVERTER_PLUGIN_FILENAME #ifdef ANYIMAGECONVERTER_PLUGIN_FILENAME
CORRADE_VERIFY(manager.load(ANYIMAGECONVERTER_PLUGIN_FILENAME) & PluginManager::LoadState::Loaded); CORRADE_VERIFY(manager.load(ANYIMAGECONVERTER_PLUGIN_FILENAME) & PluginManager::LoadState::Loaded);
@ -1443,14 +1490,21 @@ void AnyImageConverterTest::propagateConfigurationCompressedUnknown1D() {
Containers::Pointer<AbstractImageConverter> converter = manager.instantiate("AnyImageConverter"); Containers::Pointer<AbstractImageConverter> converter = manager.instantiate("AnyImageConverter");
converter->configuration().setValue("noSuchOption", "isHere"); converter->configuration().setValue("noSuchOption", "isHere");
converter->setFlags(data.flags);
std::ostringstream out; std::ostringstream out;
Warning redirectWarning{&out}; Warning redirectWarning{&out};
CORRADE_VERIFY(converter->convertToFile(CompressedImage1D, Utility::Path::join(ANYIMAGECONVERTER_TEST_OUTPUT_DIR, "compressed-1d.ktx2"))); 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() { void AnyImageConverterTest::propagateConfigurationCompressedUnknown2D() {
auto&& data = PropagateConfigurationUnknownData[testCaseInstanceId()];
setTestCaseDescription(data.name);
PluginManager::Manager<AbstractImageConverter> manager{MAGNUM_PLUGINS_IMAGECONVERTER_INSTALL_DIR}; PluginManager::Manager<AbstractImageConverter> manager{MAGNUM_PLUGINS_IMAGECONVERTER_INSTALL_DIR};
#ifdef ANYIMAGECONVERTER_PLUGIN_FILENAME #ifdef ANYIMAGECONVERTER_PLUGIN_FILENAME
CORRADE_VERIFY(manager.load(ANYIMAGECONVERTER_PLUGIN_FILENAME) & PluginManager::LoadState::Loaded); CORRADE_VERIFY(manager.load(ANYIMAGECONVERTER_PLUGIN_FILENAME) & PluginManager::LoadState::Loaded);
@ -1462,14 +1516,21 @@ void AnyImageConverterTest::propagateConfigurationCompressedUnknown2D() {
Containers::Pointer<AbstractImageConverter> converter = manager.instantiate("AnyImageConverter"); Containers::Pointer<AbstractImageConverter> converter = manager.instantiate("AnyImageConverter");
converter->configuration().setValue("noSuchOption", "isHere"); converter->configuration().setValue("noSuchOption", "isHere");
converter->setFlags(data.flags);
std::ostringstream out; std::ostringstream out;
Warning redirectWarning{&out}; Warning redirectWarning{&out};
CORRADE_VERIFY(converter->convertToFile(CompressedImage2D, Utility::Path::join(ANYIMAGECONVERTER_TEST_OUTPUT_DIR, "compressed-2d.ktx2"))); 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() { void AnyImageConverterTest::propagateConfigurationCompressedUnknown3D() {
auto&& data = PropagateConfigurationUnknownData[testCaseInstanceId()];
setTestCaseDescription(data.name);
PluginManager::Manager<AbstractImageConverter> manager{MAGNUM_PLUGINS_IMAGECONVERTER_INSTALL_DIR}; PluginManager::Manager<AbstractImageConverter> manager{MAGNUM_PLUGINS_IMAGECONVERTER_INSTALL_DIR};
#ifdef ANYIMAGECONVERTER_PLUGIN_FILENAME #ifdef ANYIMAGECONVERTER_PLUGIN_FILENAME
CORRADE_VERIFY(manager.load(ANYIMAGECONVERTER_PLUGIN_FILENAME) & PluginManager::LoadState::Loaded); CORRADE_VERIFY(manager.load(ANYIMAGECONVERTER_PLUGIN_FILENAME) & PluginManager::LoadState::Loaded);
@ -1481,11 +1542,15 @@ void AnyImageConverterTest::propagateConfigurationCompressedUnknown3D() {
Containers::Pointer<AbstractImageConverter> converter = manager.instantiate("AnyImageConverter"); Containers::Pointer<AbstractImageConverter> converter = manager.instantiate("AnyImageConverter");
converter->configuration().setValue("noSuchOption", "isHere"); converter->configuration().setValue("noSuchOption", "isHere");
converter->setFlags(data.flags);
std::ostringstream out; std::ostringstream out;
Warning redirectWarning{&out}; Warning redirectWarning{&out};
CORRADE_VERIFY(converter->convertToFile(CompressedImage3D, Utility::Path::join(ANYIMAGECONVERTER_TEST_OUTPUT_DIR, "compressed-3d.ktx2"))); 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() { void AnyImageConverterTest::propagateConfigurationLevels1D() {
@ -1570,6 +1635,9 @@ void AnyImageConverterTest::propagateConfigurationLevels3D() {
} }
void AnyImageConverterTest::propagateConfigurationUnknownLevels1D() { void AnyImageConverterTest::propagateConfigurationUnknownLevels1D() {
auto&& data = PropagateConfigurationUnknownData[testCaseInstanceId()];
setTestCaseDescription(data.name);
PluginManager::Manager<AbstractImageConverter> manager{MAGNUM_PLUGINS_IMAGECONVERTER_INSTALL_DIR}; PluginManager::Manager<AbstractImageConverter> manager{MAGNUM_PLUGINS_IMAGECONVERTER_INSTALL_DIR};
#ifdef ANYIMAGECONVERTER_PLUGIN_FILENAME #ifdef ANYIMAGECONVERTER_PLUGIN_FILENAME
CORRADE_VERIFY(manager.load(ANYIMAGECONVERTER_PLUGIN_FILENAME) & PluginManager::LoadState::Loaded); CORRADE_VERIFY(manager.load(ANYIMAGECONVERTER_PLUGIN_FILENAME) & PluginManager::LoadState::Loaded);
@ -1581,16 +1649,23 @@ void AnyImageConverterTest::propagateConfigurationUnknownLevels1D() {
Containers::Pointer<AbstractImageConverter> converter = manager.instantiate("AnyImageConverter"); Containers::Pointer<AbstractImageConverter> converter = manager.instantiate("AnyImageConverter");
converter->configuration().setValue("noSuchOption", "isHere"); converter->configuration().setValue("noSuchOption", "isHere");
converter->setFlags(data.flags);
std::ostringstream out; std::ostringstream out;
Warning redirectWarning{&out}; Warning redirectWarning{&out};
/* Using the list API even though there's just one image, which should /* Using the list API even though there's just one image, which should
still trigger the correct code path for AnyImageConverter. */ still trigger the correct code path for AnyImageConverter. */
CORRADE_VERIFY(converter->convertToFile({Image1D}, Utility::Path::join(ANYIMAGECONVERTER_TEST_OUTPUT_DIR, "1d.ktx2"))); 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() { void AnyImageConverterTest::propagateConfigurationUnknownLevels2D() {
auto&& data = PropagateConfigurationUnknownData[testCaseInstanceId()];
setTestCaseDescription(data.name);
PluginManager::Manager<AbstractImageConverter> manager{MAGNUM_PLUGINS_IMAGECONVERTER_INSTALL_DIR}; PluginManager::Manager<AbstractImageConverter> manager{MAGNUM_PLUGINS_IMAGECONVERTER_INSTALL_DIR};
#ifdef ANYIMAGECONVERTER_PLUGIN_FILENAME #ifdef ANYIMAGECONVERTER_PLUGIN_FILENAME
CORRADE_VERIFY(manager.load(ANYIMAGECONVERTER_PLUGIN_FILENAME) & PluginManager::LoadState::Loaded); CORRADE_VERIFY(manager.load(ANYIMAGECONVERTER_PLUGIN_FILENAME) & PluginManager::LoadState::Loaded);
@ -1602,16 +1677,23 @@ void AnyImageConverterTest::propagateConfigurationUnknownLevels2D() {
Containers::Pointer<AbstractImageConverter> converter = manager.instantiate("AnyImageConverter"); Containers::Pointer<AbstractImageConverter> converter = manager.instantiate("AnyImageConverter");
converter->configuration().setValue("noSuchOption", "isHere"); converter->configuration().setValue("noSuchOption", "isHere");
converter->setFlags(data.flags);
std::ostringstream out; std::ostringstream out;
Warning redirectWarning{&out}; Warning redirectWarning{&out};
/* Using the list API even though there's just one image, which should /* Using the list API even though there's just one image, which should
still trigger the correct code path for AnyImageConverter. */ still trigger the correct code path for AnyImageConverter. */
CORRADE_VERIFY(converter->convertToFile({Image2D}, Utility::Path::join(ANYIMAGECONVERTER_TEST_OUTPUT_DIR, "2d.ktx2"))); 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() { void AnyImageConverterTest::propagateConfigurationUnknownLevels3D() {
auto&& data = PropagateConfigurationUnknownData[testCaseInstanceId()];
setTestCaseDescription(data.name);
PluginManager::Manager<AbstractImageConverter> manager{MAGNUM_PLUGINS_IMAGECONVERTER_INSTALL_DIR}; PluginManager::Manager<AbstractImageConverter> manager{MAGNUM_PLUGINS_IMAGECONVERTER_INSTALL_DIR};
#ifdef ANYIMAGECONVERTER_PLUGIN_FILENAME #ifdef ANYIMAGECONVERTER_PLUGIN_FILENAME
CORRADE_VERIFY(manager.load(ANYIMAGECONVERTER_PLUGIN_FILENAME) & PluginManager::LoadState::Loaded); CORRADE_VERIFY(manager.load(ANYIMAGECONVERTER_PLUGIN_FILENAME) & PluginManager::LoadState::Loaded);
@ -1623,13 +1705,17 @@ void AnyImageConverterTest::propagateConfigurationUnknownLevels3D() {
Containers::Pointer<AbstractImageConverter> converter = manager.instantiate("AnyImageConverter"); Containers::Pointer<AbstractImageConverter> converter = manager.instantiate("AnyImageConverter");
converter->configuration().setValue("noSuchOption", "isHere"); converter->configuration().setValue("noSuchOption", "isHere");
converter->setFlags(data.flags);
std::ostringstream out; std::ostringstream out;
Warning redirectWarning{&out}; Warning redirectWarning{&out};
/* Using the list API even though there's just one image, which should /* Using the list API even though there's just one image, which should
still trigger the correct code path for AnyImageConverter. */ still trigger the correct code path for AnyImageConverter. */
CORRADE_VERIFY(converter->convertToFile({Image3D}, Utility::Path::join(ANYIMAGECONVERTER_TEST_OUTPUT_DIR, "3d.ktx2"))); 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() { void AnyImageConverterTest::propagateConfigurationCompressedLevels1D() {
@ -1714,6 +1800,9 @@ void AnyImageConverterTest::propagateConfigurationCompressedLevels3D() {
} }
void AnyImageConverterTest::propagateConfigurationCompressedUnknownLevels1D() { void AnyImageConverterTest::propagateConfigurationCompressedUnknownLevels1D() {
auto&& data = PropagateConfigurationUnknownData[testCaseInstanceId()];
setTestCaseDescription(data.name);
PluginManager::Manager<AbstractImageConverter> manager{MAGNUM_PLUGINS_IMAGECONVERTER_INSTALL_DIR}; PluginManager::Manager<AbstractImageConverter> manager{MAGNUM_PLUGINS_IMAGECONVERTER_INSTALL_DIR};
#ifdef ANYIMAGECONVERTER_PLUGIN_FILENAME #ifdef ANYIMAGECONVERTER_PLUGIN_FILENAME
CORRADE_VERIFY(manager.load(ANYIMAGECONVERTER_PLUGIN_FILENAME) & PluginManager::LoadState::Loaded); CORRADE_VERIFY(manager.load(ANYIMAGECONVERTER_PLUGIN_FILENAME) & PluginManager::LoadState::Loaded);
@ -1725,16 +1814,23 @@ void AnyImageConverterTest::propagateConfigurationCompressedUnknownLevels1D() {
Containers::Pointer<AbstractImageConverter> converter = manager.instantiate("AnyImageConverter"); Containers::Pointer<AbstractImageConverter> converter = manager.instantiate("AnyImageConverter");
converter->configuration().setValue("noSuchOption", "isHere"); converter->configuration().setValue("noSuchOption", "isHere");
converter->setFlags(data.flags);
std::ostringstream out; std::ostringstream out;
Warning redirectWarning{&out}; Warning redirectWarning{&out};
/* Using the list API even though there's just one image, which should /* Using the list API even though there's just one image, which should
still trigger the correct code path for AnyImageConverter. */ still trigger the correct code path for AnyImageConverter. */
CORRADE_VERIFY(converter->convertToFile({CompressedImage1D}, Utility::Path::join(ANYIMAGECONVERTER_TEST_OUTPUT_DIR, "compressed-1d.ktx2"))); 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() { void AnyImageConverterTest::propagateConfigurationCompressedUnknownLevels2D() {
auto&& data = PropagateConfigurationUnknownData[testCaseInstanceId()];
setTestCaseDescription(data.name);
PluginManager::Manager<AbstractImageConverter> manager{MAGNUM_PLUGINS_IMAGECONVERTER_INSTALL_DIR}; PluginManager::Manager<AbstractImageConverter> manager{MAGNUM_PLUGINS_IMAGECONVERTER_INSTALL_DIR};
#ifdef ANYIMAGECONVERTER_PLUGIN_FILENAME #ifdef ANYIMAGECONVERTER_PLUGIN_FILENAME
CORRADE_VERIFY(manager.load(ANYIMAGECONVERTER_PLUGIN_FILENAME) & PluginManager::LoadState::Loaded); CORRADE_VERIFY(manager.load(ANYIMAGECONVERTER_PLUGIN_FILENAME) & PluginManager::LoadState::Loaded);
@ -1746,16 +1842,23 @@ void AnyImageConverterTest::propagateConfigurationCompressedUnknownLevels2D() {
Containers::Pointer<AbstractImageConverter> converter = manager.instantiate("AnyImageConverter"); Containers::Pointer<AbstractImageConverter> converter = manager.instantiate("AnyImageConverter");
converter->configuration().setValue("noSuchOption", "isHere"); converter->configuration().setValue("noSuchOption", "isHere");
converter->setFlags(data.flags);
std::ostringstream out; std::ostringstream out;
Warning redirectWarning{&out}; Warning redirectWarning{&out};
/* Using the list API even though there's just one image, which should /* Using the list API even though there's just one image, which should
still trigger the correct code path for AnyImageConverter. */ still trigger the correct code path for AnyImageConverter. */
CORRADE_VERIFY(converter->convertToFile({CompressedImage2D}, Utility::Path::join(ANYIMAGECONVERTER_TEST_OUTPUT_DIR, "compressed-2d.ktx2"))); 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() { void AnyImageConverterTest::propagateConfigurationCompressedUnknownLevels3D() {
auto&& data = PropagateConfigurationUnknownData[testCaseInstanceId()];
setTestCaseDescription(data.name);
PluginManager::Manager<AbstractImageConverter> manager{MAGNUM_PLUGINS_IMAGECONVERTER_INSTALL_DIR}; PluginManager::Manager<AbstractImageConverter> manager{MAGNUM_PLUGINS_IMAGECONVERTER_INSTALL_DIR};
#ifdef ANYIMAGECONVERTER_PLUGIN_FILENAME #ifdef ANYIMAGECONVERTER_PLUGIN_FILENAME
CORRADE_VERIFY(manager.load(ANYIMAGECONVERTER_PLUGIN_FILENAME) & PluginManager::LoadState::Loaded); CORRADE_VERIFY(manager.load(ANYIMAGECONVERTER_PLUGIN_FILENAME) & PluginManager::LoadState::Loaded);
@ -1767,13 +1870,17 @@ void AnyImageConverterTest::propagateConfigurationCompressedUnknownLevels3D() {
Containers::Pointer<AbstractImageConverter> converter = manager.instantiate("AnyImageConverter"); Containers::Pointer<AbstractImageConverter> converter = manager.instantiate("AnyImageConverter");
converter->configuration().setValue("noSuchOption", "isHere"); converter->configuration().setValue("noSuchOption", "isHere");
converter->setFlags(data.flags);
std::ostringstream out; std::ostringstream out;
Warning redirectWarning{&out}; Warning redirectWarning{&out};
/* Using the list API even though there's just one image, which should /* Using the list API even though there's just one image, which should
still trigger the correct code path for AnyImageConverter. */ still trigger the correct code path for AnyImageConverter. */
CORRADE_VERIFY(converter->convertToFile({CompressedImage3D}, Utility::Path::join(ANYIMAGECONVERTER_TEST_OUTPUT_DIR, "compressed-3d.ktx2"))); 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");
} }
}}}} }}}}

4
src/MagnumPlugins/AnyImageImporter/AnyImageImporter.cpp

@ -179,7 +179,7 @@ void AnyImageImporter::doOpenFile(const Containers::StringView filename) {
if(fileCallback()) importer->setFileCallback(fileCallback(), fileCallbackUserData()); if(fileCallback()) importer->setFileCallback(fileCallback(), fileCallbackUserData());
/* Propagate configuration */ /* 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 /* Try to open the file (error output should be printed by the plugin
itself) */ itself) */
@ -306,7 +306,7 @@ void AnyImageImporter::doOpenData(Containers::Array<char>&& data, DataFlags) {
importer->setFlags(flags()); importer->setFlags(flags());
/* Propagate configuration */ /* 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 /* Try to open the file (error output should be printed by the plugin
itself) */ itself) */

24
src/MagnumPlugins/AnyImageImporter/Test/AnyImageImporterTest.cpp

@ -189,6 +189,20 @@ constexpr struct {
{"EXR data", "depth32f-custom-channels.exr", true} {"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() { AnyImageImporterTest::AnyImageImporterTest() {
addInstancedTests({&AnyImageImporterTest::load1D}, addInstancedTests({&AnyImageImporterTest::load1D},
Containers::arraySize(Load1DData)); Containers::arraySize(Load1DData));
@ -220,7 +234,7 @@ AnyImageImporterTest::AnyImageImporterTest() {
Containers::arraySize(PropagateConfigurationData)); Containers::arraySize(PropagateConfigurationData));
addInstancedTests({&AnyImageImporterTest::propagateConfigurationUnknown}, addInstancedTests({&AnyImageImporterTest::propagateConfigurationUnknown},
Containers::arraySize(Load2DData)); Containers::arraySize(PropagateConfigurationUnknownData));
addTests({&AnyImageImporterTest::propagateFileCallback}); addTests({&AnyImageImporterTest::propagateFileCallback});
@ -514,7 +528,7 @@ void AnyImageImporterTest::propagateConfiguration() {
} }
void AnyImageImporterTest::propagateConfigurationUnknown() { void AnyImageImporterTest::propagateConfigurationUnknown() {
auto&& data = Load2DData[testCaseInstanceId()]; auto&& data = PropagateConfigurationUnknownData[testCaseInstanceId()];
setTestCaseDescription(data.name); setTestCaseDescription(data.name);
if(!(_manager.loadState("TgaImporter") & PluginManager::LoadState::Loaded)) if(!(_manager.loadState("TgaImporter") & PluginManager::LoadState::Loaded))
@ -522,6 +536,7 @@ void AnyImageImporterTest::propagateConfigurationUnknown() {
Containers::Pointer<AbstractImporter> importer = _manager.instantiate("AnyImageImporter"); Containers::Pointer<AbstractImporter> importer = _manager.instantiate("AnyImageImporter");
importer->configuration().setValue("noSuchOption", "isHere"); importer->configuration().setValue("noSuchOption", "isHere");
importer->setFlags(data.flags);
std::ostringstream out; std::ostringstream out;
Warning redirectWarning{&out}; Warning redirectWarning{&out};
@ -530,7 +545,10 @@ void AnyImageImporterTest::propagateConfigurationUnknown() {
CORRADE_VERIFY(read); CORRADE_VERIFY(read);
CORRADE_VERIFY(importer->openData(*read)); CORRADE_VERIFY(importer->openData(*read));
} else CORRADE_VERIFY(importer->openFile(Utility::Path::join(ANYIMAGEIMPORTER_TEST_DIR, data.filename))); } 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() { void AnyImageImporterTest::propagateFileCallback() {

4
src/MagnumPlugins/AnySceneConverter/AnySceneConverter.cpp

@ -113,7 +113,7 @@ bool AnySceneConverter::doConvertToFile(const MeshData& mesh, const Containers::
converter->setFlags(flags()); converter->setFlags(flags());
/* Propagate configuration */ /* 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 /* Try to convert the file (error output should be printed by the plugin
itself) */ itself) */
@ -165,7 +165,7 @@ bool AnySceneConverter::doBeginFile(const Containers::StringView filename) {
converter->setFlags(flags()); converter->setFlags(flags());
/* Propagate configuration */ /* 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 /* Try to begin the file (error output should be printed by the plugin
itself) */ itself) */

36
src/MagnumPlugins/AnySceneConverter/Test/AnySceneConverterTest.cpp

@ -92,6 +92,15 @@ constexpr struct {
{"Stanford PLY uppercase", "ARMADI~1.PLY", "StanfordSceneConverter"} {"Stanford PLY uppercase", "ARMADI~1.PLY", "StanfordSceneConverter"}
}; };
const struct {
const char* name;
SceneConverterFlags flags;
bool quiet;
} PropagateConfigurationUnknownData[]{
{"", {}, false},
{"quiet", SceneConverterFlag::Quiet, true}
};
AnySceneConverterTest::AnySceneConverterTest() { AnySceneConverterTest::AnySceneConverterTest() {
addTests({&AnySceneConverterTest::convert, addTests({&AnySceneConverterTest::convert,
&AnySceneConverterTest::convertBeginEnd}); &AnySceneConverterTest::convertBeginEnd});
@ -109,9 +118,12 @@ AnySceneConverterTest::AnySceneConverterTest() {
&AnySceneConverterTest::propagateFlagsBeginEnd, &AnySceneConverterTest::propagateFlagsBeginEnd,
&AnySceneConverterTest::propagateConfigurationConvert, &AnySceneConverterTest::propagateConfigurationConvert,
&AnySceneConverterTest::propagateConfigurationBeginEnd, &AnySceneConverterTest::propagateConfigurationBeginEnd});
&AnySceneConverterTest::propagateConfigurationUnknownConvert,
&AnySceneConverterTest::propagateConfigurationUnknownBeginEnd}); addInstancedTests({
&AnySceneConverterTest::propagateConfigurationUnknownConvert,
&AnySceneConverterTest::propagateConfigurationUnknownBeginEnd},
Containers::arraySize(PropagateConfigurationUnknownData));
/* Load the plugin directly from the build tree. Otherwise it's static and /* Load the plugin directly from the build tree. Otherwise it's static and
already loaded. */ already loaded. */
@ -394,6 +406,9 @@ void AnySceneConverterTest::propagateConfigurationBeginEnd() {
} }
void AnySceneConverterTest::propagateConfigurationUnknownConvert() { void AnySceneConverterTest::propagateConfigurationUnknownConvert() {
auto&& data = PropagateConfigurationUnknownData[testCaseInstanceId()];
setTestCaseDescription(data.name);
PluginManager::Manager<AbstractSceneConverter> manager{MAGNUM_PLUGINS_SCENECONVERTER_INSTALL_DIR}; PluginManager::Manager<AbstractSceneConverter> manager{MAGNUM_PLUGINS_SCENECONVERTER_INSTALL_DIR};
#ifdef ANYSCENECONVERTER_PLUGIN_FILENAME #ifdef ANYSCENECONVERTER_PLUGIN_FILENAME
CORRADE_VERIFY(manager.load(ANYSCENECONVERTER_PLUGIN_FILENAME) & PluginManager::LoadState::Loaded); CORRADE_VERIFY(manager.load(ANYSCENECONVERTER_PLUGIN_FILENAME) & PluginManager::LoadState::Loaded);
@ -414,14 +429,21 @@ void AnySceneConverterTest::propagateConfigurationUnknownConvert() {
Containers::Pointer<AbstractSceneConverter> converter = manager.instantiate("AnySceneConverter"); Containers::Pointer<AbstractSceneConverter> converter = manager.instantiate("AnySceneConverter");
converter->configuration().setValue("noSuchOption", "isHere"); converter->configuration().setValue("noSuchOption", "isHere");
converter->setFlags(data.flags);
std::ostringstream out; std::ostringstream out;
Warning redirectWarning{&out}; Warning redirectWarning{&out};
CORRADE_VERIFY(converter->convertToFile(mesh, Utility::Path::join(ANYSCENECONVERTER_TEST_OUTPUT_DIR, "file.ply"))); 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() { void AnySceneConverterTest::propagateConfigurationUnknownBeginEnd() {
auto&& data = PropagateConfigurationUnknownData[testCaseInstanceId()];
setTestCaseDescription(data.name);
PluginManager::Manager<AbstractSceneConverter> manager{MAGNUM_PLUGINS_SCENECONVERTER_INSTALL_DIR}; PluginManager::Manager<AbstractSceneConverter> manager{MAGNUM_PLUGINS_SCENECONVERTER_INSTALL_DIR};
#ifdef ANYSCENECONVERTER_PLUGIN_FILENAME #ifdef ANYSCENECONVERTER_PLUGIN_FILENAME
CORRADE_VERIFY(manager.load(ANYSCENECONVERTER_PLUGIN_FILENAME) & PluginManager::LoadState::Loaded); CORRADE_VERIFY(manager.load(ANYSCENECONVERTER_PLUGIN_FILENAME) & PluginManager::LoadState::Loaded);
@ -442,6 +464,7 @@ void AnySceneConverterTest::propagateConfigurationUnknownBeginEnd() {
Containers::Pointer<AbstractSceneConverter> converter = manager.instantiate("AnySceneConverter"); Containers::Pointer<AbstractSceneConverter> converter = manager.instantiate("AnySceneConverter");
converter->configuration().setValue("noSuchOption", "isHere"); converter->configuration().setValue("noSuchOption", "isHere");
converter->setFlags(data.flags);
std::ostringstream out; std::ostringstream out;
{ {
@ -450,7 +473,10 @@ void AnySceneConverterTest::propagateConfigurationUnknownBeginEnd() {
} }
CORRADE_VERIFY(converter->add(mesh)); CORRADE_VERIFY(converter->add(mesh));
CORRADE_VERIFY(converter->endFile()); 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");
} }
}}}} }}}}

2
src/MagnumPlugins/AnySceneImporter/AnySceneImporter.cpp

@ -170,7 +170,7 @@ void AnySceneImporter::doOpenFile(const Containers::StringView filename) {
if(fileCallback()) importer->setFileCallback(fileCallback(), fileCallbackUserData()); if(fileCallback()) importer->setFileCallback(fileCallback(), fileCallbackUserData());
/* Propagate configuration */ /* 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 /* Try to open the file (error output should be printed by the plugin
itself) */ itself) */

27
src/MagnumPlugins/AnySceneImporter/Test/AnySceneImporterTest.cpp

@ -101,6 +101,15 @@ constexpr struct {
/* Not testing everything, only the most important ones */ /* 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() { AnySceneImporterTest::AnySceneImporterTest() {
addInstancedTests({&AnySceneImporterTest::load}, addInstancedTests({&AnySceneImporterTest::load},
Containers::arraySize(LoadData)); Containers::arraySize(LoadData));
@ -115,9 +124,12 @@ AnySceneImporterTest::AnySceneImporterTest() {
addTests({&AnySceneImporterTest::unknown, addTests({&AnySceneImporterTest::unknown,
&AnySceneImporterTest::propagateFlags, &AnySceneImporterTest::propagateFlags,
&AnySceneImporterTest::propagateConfiguration, &AnySceneImporterTest::propagateConfiguration});
&AnySceneImporterTest::propagateConfigurationUnknown,
&AnySceneImporterTest::propagateConfigurationUnknownInEmptySubgroup, addInstancedTests({&AnySceneImporterTest::propagateConfigurationUnknown},
Containers::arraySize(PropagateConfigurationUnknownData));
addTests({&AnySceneImporterTest::propagateConfigurationUnknownInEmptySubgroup,
&AnySceneImporterTest::propagateFileCallback, &AnySceneImporterTest::propagateFileCallback,
&AnySceneImporterTest::sceneFieldName, &AnySceneImporterTest::sceneFieldName,
@ -269,6 +281,9 @@ void AnySceneImporterTest::propagateConfiguration() {
} }
void AnySceneImporterTest::propagateConfigurationUnknown() { void AnySceneImporterTest::propagateConfigurationUnknown() {
auto&& data = PropagateConfigurationUnknownData[testCaseInstanceId()];
setTestCaseDescription(data.name);
PluginManager::Manager<AbstractImporter> manager{MAGNUM_PLUGINS_IMPORTER_INSTALL_DIR}; PluginManager::Manager<AbstractImporter> manager{MAGNUM_PLUGINS_IMPORTER_INSTALL_DIR};
#ifdef ANYSCENEIMPORTER_PLUGIN_FILENAME #ifdef ANYSCENEIMPORTER_PLUGIN_FILENAME
CORRADE_VERIFY(manager.load(ANYSCENEIMPORTER_PLUGIN_FILENAME) & PluginManager::LoadState::Loaded); CORRADE_VERIFY(manager.load(ANYSCENEIMPORTER_PLUGIN_FILENAME) & PluginManager::LoadState::Loaded);
@ -286,11 +301,15 @@ void AnySceneImporterTest::propagateConfigurationUnknown() {
importer->configuration().addGroup("postprocess"); importer->configuration().addGroup("postprocess");
importer->configuration().group("postprocess")->setValue("notHere", false); importer->configuration().group("postprocess")->setValue("notHere", false);
importer->configuration().group("postprocess")->addGroup("feh")->setValue("noHereNotEither", false); importer->configuration().group("postprocess")->addGroup("feh")->setValue("noHereNotEither", false);
importer->setFlags(data.flags);
std::ostringstream out; std::ostringstream out;
Warning redirectWarning{&out}; Warning redirectWarning{&out};
CORRADE_VERIFY(importer->openFile(Utility::Path::join(ANYSCENEIMPORTER_TEST_DIR, "triangle.ply"))); 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 noSuchOption not recognized by AssimpImporter\n"
"Trade::AnySceneImporter::openFile(): option postprocess/notHere 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"); "Trade::AnySceneImporter::openFile(): option postprocess/feh/noHereNotEither not recognized by AssimpImporter\n");

10
src/MagnumPlugins/AnyShaderConverter/AnyConverter.cpp

@ -228,7 +228,7 @@ Containers::Pair<bool, Containers::String> AnyConverter::doValidateFile(const St
converter->setDefinitions(_state->definitionViews); converter->setDefinitions(_state->definitionViews);
/* Propagate configuration */ /* 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 /* Try to validate the file (error output should be printed by the plugin
itself) */ itself) */
@ -285,7 +285,7 @@ Containers::Pair<bool, Containers::String> AnyConverter::doValidateData(const St
converter->setDefinitions(_state->definitionViews); converter->setDefinitions(_state->definitionViews);
/* Propagate configuration */ /* 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 /* Try to validate the data (error output should be printed by the plugin
itself) */ itself) */
@ -369,7 +369,7 @@ bool AnyConverter::doConvertFileToFile(const Stage stage, const Containers::Stri
converter->setOptimizationLevel(_state->optimizationLevel); converter->setOptimizationLevel(_state->optimizationLevel);
/* Propagate configuration */ /* 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 /* Try to convert the file (error output should be printed by the plugin
itself) */ itself) */
@ -454,7 +454,7 @@ Containers::Optional<Containers::Array<char>> AnyConverter::doConvertFileToData(
converter->setOptimizationLevel(_state->optimizationLevel); converter->setOptimizationLevel(_state->optimizationLevel);
/* Propagate configuration */ /* 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 /* Try to convert the file (error output should be printed by the plugin
itself) */ itself) */
@ -537,7 +537,7 @@ Containers::Optional<Containers::Array<char>> AnyConverter::doConvertDataToData(
converter->setOptimizationLevel(_state->optimizationLevel); converter->setOptimizationLevel(_state->optimizationLevel);
/* Propagate configuration */ /* 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 /* Try to convert the file (error output should be printed by the plugin
itself) */ itself) */

104
src/MagnumPlugins/AnyShaderConverter/Test/AnyConverterTest.cpp

@ -130,6 +130,15 @@ struct AnyConverterTest: TestSuite::Tester {
PluginManager::Manager<AbstractConverter> _manager{"nonexistent"}; PluginManager::Manager<AbstractConverter> _manager{"nonexistent"};
}; };
const struct {
const char* name;
ConverterFlags flags;
bool quiet;
} PropagateConfigurationUnknownData[]{
{"", {}, false},
{"quiet", ConverterFlag::Quiet, true}
};
constexpr struct { constexpr struct {
const char* name; const char* name;
const char* filename; const char* filename;
@ -163,10 +172,12 @@ AnyConverterTest::AnyConverterTest() {
&AnyConverterTest::validateFilePropagateInputVersion, &AnyConverterTest::validateFilePropagateInputVersion,
&AnyConverterTest::validateFilePropagateOutputVersion, &AnyConverterTest::validateFilePropagateOutputVersion,
&AnyConverterTest::validateFilePropagatePreprocess, &AnyConverterTest::validateFilePropagatePreprocess,
&AnyConverterTest::validateFilePropagateConfiguration, &AnyConverterTest::validateFilePropagateConfiguration});
&AnyConverterTest::validateFilePropagateConfigurationUnknown,
&AnyConverterTest::validateData, addInstancedTests({&AnyConverterTest::validateFilePropagateConfigurationUnknown},
Containers::arraySize(PropagateConfigurationUnknownData));
addTests({&AnyConverterTest::validateData,
&AnyConverterTest::validateDataPluginLoadFailed, &AnyConverterTest::validateDataPluginLoadFailed,
&AnyConverterTest::validateDataNoFormatSet, &AnyConverterTest::validateDataNoFormatSet,
&AnyConverterTest::validateDataNotSupported, &AnyConverterTest::validateDataNotSupported,
@ -175,10 +186,12 @@ AnyConverterTest::AnyConverterTest() {
&AnyConverterTest::validateDataPropagateInputVersion, &AnyConverterTest::validateDataPropagateInputVersion,
&AnyConverterTest::validateDataPropagateOutputVersion, &AnyConverterTest::validateDataPropagateOutputVersion,
&AnyConverterTest::validateDataPropagatePreprocess, &AnyConverterTest::validateDataPropagatePreprocess,
&AnyConverterTest::validateDataPropagateConfiguration, &AnyConverterTest::validateDataPropagateConfiguration});
&AnyConverterTest::validateDataPropagateConfigurationUnknown,
addInstancedTests({&AnyConverterTest::validateDataPropagateConfigurationUnknown},
Containers::arraySize(PropagateConfigurationUnknownData));
&AnyConverterTest::convertFileToFile, addTests({&AnyConverterTest::convertFileToFile,
&AnyConverterTest::convertFileToFilePluginLoadFailed, &AnyConverterTest::convertFileToFilePluginLoadFailed,
&AnyConverterTest::convertFileToFileUnknownInput, &AnyConverterTest::convertFileToFileUnknownInput,
&AnyConverterTest::convertFileToFileUnknownOutput, &AnyConverterTest::convertFileToFileUnknownOutput,
@ -192,10 +205,12 @@ AnyConverterTest::AnyConverterTest() {
&AnyConverterTest::convertFileToFilePropagatePreprocess, &AnyConverterTest::convertFileToFilePropagatePreprocess,
&AnyConverterTest::convertFileToFilePropagateDebugInfo, &AnyConverterTest::convertFileToFilePropagateDebugInfo,
&AnyConverterTest::convertFileToFilePropagateOptimization, &AnyConverterTest::convertFileToFilePropagateOptimization,
&AnyConverterTest::convertFileToFilePropagateConfiguration, &AnyConverterTest::convertFileToFilePropagateConfiguration});
&AnyConverterTest::convertFileToFilePropagateConfigurationUnknown,
&AnyConverterTest::convertFileToData, addInstancedTests({&AnyConverterTest::convertFileToFilePropagateConfigurationUnknown},
Containers::arraySize(PropagateConfigurationUnknownData));
addTests({&AnyConverterTest::convertFileToData,
&AnyConverterTest::convertFileToDataPluginLoadFailed, &AnyConverterTest::convertFileToDataPluginLoadFailed,
&AnyConverterTest::convertFileToDataUnknown, &AnyConverterTest::convertFileToDataUnknown,
&AnyConverterTest::convertFileToDataNoFormatSet, &AnyConverterTest::convertFileToDataNoFormatSet,
@ -209,10 +224,12 @@ AnyConverterTest::AnyConverterTest() {
&AnyConverterTest::convertFileToDataPropagatePreprocess, &AnyConverterTest::convertFileToDataPropagatePreprocess,
&AnyConverterTest::convertFileToDataPropagateDebugInfo, &AnyConverterTest::convertFileToDataPropagateDebugInfo,
&AnyConverterTest::convertFileToDataPropagateOptimization, &AnyConverterTest::convertFileToDataPropagateOptimization,
&AnyConverterTest::convertFileToDataPropagateConfiguration, &AnyConverterTest::convertFileToDataPropagateConfiguration});
&AnyConverterTest::convertFileToDataPropagateConfigurationUnknown,
addInstancedTests({&AnyConverterTest::convertFileToDataPropagateConfigurationUnknown},
Containers::arraySize(PropagateConfigurationUnknownData));
&AnyConverterTest::convertDataToData, addTests({&AnyConverterTest::convertDataToData,
&AnyConverterTest::convertDataToDataPluginLoadFailed, &AnyConverterTest::convertDataToDataPluginLoadFailed,
&AnyConverterTest::convertDataToDataNoInputFormatSet, &AnyConverterTest::convertDataToDataNoInputFormatSet,
&AnyConverterTest::convertDataToDataNoOutputFormatSet, &AnyConverterTest::convertDataToDataNoOutputFormatSet,
@ -226,8 +243,10 @@ AnyConverterTest::AnyConverterTest() {
&AnyConverterTest::convertDataToDataPropagatePreprocess, &AnyConverterTest::convertDataToDataPropagatePreprocess,
&AnyConverterTest::convertDataToDataPropagateDebugInfo, &AnyConverterTest::convertDataToDataPropagateDebugInfo,
&AnyConverterTest::convertDataToDataPropagateOptimization, &AnyConverterTest::convertDataToDataPropagateOptimization,
&AnyConverterTest::convertDataToDataPropagateConfiguration, &AnyConverterTest::convertDataToDataPropagateConfiguration});
&AnyConverterTest::convertDataToDataPropagateConfigurationUnknown});
addInstancedTests({&AnyConverterTest::convertDataToDataPropagateConfigurationUnknown},
Containers::arraySize(PropagateConfigurationUnknownData));
addInstancedTests({&AnyConverterTest::detectValidate}, addInstancedTests({&AnyConverterTest::detectValidate},
Containers::arraySize(DetectValidateData)); Containers::arraySize(DetectValidateData));
@ -446,6 +465,9 @@ void AnyConverterTest::validateFilePropagateConfiguration() {
} }
void AnyConverterTest::validateFilePropagateConfigurationUnknown() { void AnyConverterTest::validateFilePropagateConfigurationUnknown() {
auto&& data = PropagateConfigurationUnknownData[testCaseInstanceId()];
setTestCaseDescription(data.name);
PluginManager::Manager<AbstractConverter> manager{MAGNUM_PLUGINS_SHADERCONVERTER_INSTALL_DIR}; PluginManager::Manager<AbstractConverter> manager{MAGNUM_PLUGINS_SHADERCONVERTER_INSTALL_DIR};
#ifdef ANYSHADERCONVERTER_PLUGIN_FILENAME #ifdef ANYSHADERCONVERTER_PLUGIN_FILENAME
CORRADE_VERIFY(manager.load(ANYSHADERCONVERTER_PLUGIN_FILENAME) & PluginManager::LoadState::Loaded); CORRADE_VERIFY(manager.load(ANYSHADERCONVERTER_PLUGIN_FILENAME) & PluginManager::LoadState::Loaded);
@ -458,12 +480,16 @@ void AnyConverterTest::validateFilePropagateConfigurationUnknown() {
converter->configuration().setValue("noSuchOption", "isHere"); converter->configuration().setValue("noSuchOption", "isHere");
/* So it doesn't warn about anything */ /* So it doesn't warn about anything */
converter->setDefinitions({{"reserved__identifier", "sorry"}}); converter->setDefinitions({{"reserved__identifier", "sorry"}});
converter->setFlags(data.flags);
std::ostringstream out; std::ostringstream out;
Warning redirectWarning{&out}; Warning redirectWarning{&out};
CORRADE_COMPARE(converter->validateFile(Stage::Fragment, Utility::Path::join(ANYSHADERCONVERTER_TEST_DIR, "file.glsl")), CORRADE_COMPARE(converter->validateFile(Stage::Fragment, Utility::Path::join(ANYSHADERCONVERTER_TEST_DIR, "file.glsl")),
Containers::pair(true, Containers::String{})); 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"); "ShaderTools::AnyConverter::validateFile(): option noSuchOption not recognized by GlslangShaderConverter\n");
} }
@ -691,6 +717,9 @@ void AnyConverterTest::validateDataPropagateConfiguration() {
} }
void AnyConverterTest::validateDataPropagateConfigurationUnknown() { void AnyConverterTest::validateDataPropagateConfigurationUnknown() {
auto&& data = PropagateConfigurationUnknownData[testCaseInstanceId()];
setTestCaseDescription(data.name);
PluginManager::Manager<AbstractConverter> manager{MAGNUM_PLUGINS_SHADERCONVERTER_INSTALL_DIR}; PluginManager::Manager<AbstractConverter> manager{MAGNUM_PLUGINS_SHADERCONVERTER_INSTALL_DIR};
#ifdef ANYSHADERCONVERTER_PLUGIN_FILENAME #ifdef ANYSHADERCONVERTER_PLUGIN_FILENAME
CORRADE_VERIFY(manager.load(ANYSHADERCONVERTER_PLUGIN_FILENAME) & PluginManager::LoadState::Loaded); CORRADE_VERIFY(manager.load(ANYSHADERCONVERTER_PLUGIN_FILENAME) & PluginManager::LoadState::Loaded);
@ -704,15 +733,19 @@ void AnyConverterTest::validateDataPropagateConfigurationUnknown() {
converter->configuration().setValue("noSuchOption", "isHere"); converter->configuration().setValue("noSuchOption", "isHere");
/* So it doesn't warn about anything */ /* So it doesn't warn about anything */
converter->setDefinitions({{"reserved__identifier", "sorry"}}); converter->setDefinitions({{"reserved__identifier", "sorry"}});
converter->setFlags(data.flags);
Containers::Optional<Containers::Array<char>> data = Utility::Path::read(Utility::Path::join(ANYSHADERCONVERTER_TEST_DIR, "file.glsl")); Containers::Optional<Containers::Array<char>> shaderData = Utility::Path::read(Utility::Path::join(ANYSHADERCONVERTER_TEST_DIR, "file.glsl"));
CORRADE_VERIFY(data); CORRADE_VERIFY(shaderData);
std::ostringstream out; std::ostringstream out;
Warning redirectWarning{&out}; Warning redirectWarning{&out};
CORRADE_COMPARE(converter->validateData(Stage::Fragment, *data), CORRADE_COMPARE(converter->validateData(Stage::Fragment, *shaderData),
Containers::pair(true, Containers::String{})); 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"); "ShaderTools::AnyConverter::validateData(): option noSuchOption not recognized by GlslangShaderConverter\n");
} }
@ -1052,6 +1085,9 @@ void AnyConverterTest::convertFileToFilePropagateConfiguration() {
} }
void AnyConverterTest::convertFileToFilePropagateConfigurationUnknown() { void AnyConverterTest::convertFileToFilePropagateConfigurationUnknown() {
auto&& data = PropagateConfigurationUnknownData[testCaseInstanceId()];
setTestCaseDescription(data.name);
PluginManager::Manager<AbstractConverter> manager{MAGNUM_PLUGINS_SHADERCONVERTER_INSTALL_DIR}; PluginManager::Manager<AbstractConverter> manager{MAGNUM_PLUGINS_SHADERCONVERTER_INSTALL_DIR};
#ifdef ANYSHADERCONVERTER_PLUGIN_FILENAME #ifdef ANYSHADERCONVERTER_PLUGIN_FILENAME
CORRADE_VERIFY(manager.load(ANYSHADERCONVERTER_PLUGIN_FILENAME) & PluginManager::LoadState::Loaded); CORRADE_VERIFY(manager.load(ANYSHADERCONVERTER_PLUGIN_FILENAME) & PluginManager::LoadState::Loaded);
@ -1064,11 +1100,15 @@ void AnyConverterTest::convertFileToFilePropagateConfigurationUnknown() {
converter->configuration().setValue("noSuchOption", "isHere"); converter->configuration().setValue("noSuchOption", "isHere");
/* So it doesn't warn about anything */ /* So it doesn't warn about anything */
converter->setDefinitions({{"reserved__identifier", "sorry"}}); converter->setDefinitions({{"reserved__identifier", "sorry"}});
converter->setFlags(data.flags);
std::ostringstream out; std::ostringstream out;
Warning redirectWarning{&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_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"); "ShaderTools::AnyConverter::convertFileToFile(): option noSuchOption not recognized by GlslangShaderConverter\n");
} }
@ -1417,6 +1457,9 @@ void AnyConverterTest::convertFileToDataPropagateConfiguration() {
} }
void AnyConverterTest::convertFileToDataPropagateConfigurationUnknown() { void AnyConverterTest::convertFileToDataPropagateConfigurationUnknown() {
auto&& data = PropagateConfigurationUnknownData[testCaseInstanceId()];
setTestCaseDescription(data.name);
PluginManager::Manager<AbstractConverter> manager{MAGNUM_PLUGINS_SHADERCONVERTER_INSTALL_DIR}; PluginManager::Manager<AbstractConverter> manager{MAGNUM_PLUGINS_SHADERCONVERTER_INSTALL_DIR};
#ifdef ANYSHADERCONVERTER_PLUGIN_FILENAME #ifdef ANYSHADERCONVERTER_PLUGIN_FILENAME
CORRADE_VERIFY(manager.load(ANYSHADERCONVERTER_PLUGIN_FILENAME) & PluginManager::LoadState::Loaded); CORRADE_VERIFY(manager.load(ANYSHADERCONVERTER_PLUGIN_FILENAME) & PluginManager::LoadState::Loaded);
@ -1430,11 +1473,15 @@ void AnyConverterTest::convertFileToDataPropagateConfigurationUnknown() {
converter->configuration().setValue("noSuchOption", "isHere"); converter->configuration().setValue("noSuchOption", "isHere");
/* So it doesn't warn about anything */ /* So it doesn't warn about anything */
converter->setDefinitions({{"reserved__identifier", "sorry"}}); converter->setDefinitions({{"reserved__identifier", "sorry"}});
converter->setFlags(data.flags);
std::ostringstream out; std::ostringstream out;
Warning redirectWarning{&out}; Warning redirectWarning{&out};
CORRADE_VERIFY(converter->convertFileToData(Stage::Fragment, Utility::Path::join(ANYSHADERCONVERTER_TEST_DIR, "file.glsl"))); 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"); "ShaderTools::AnyConverter::convertFileToData(): option noSuchOption not recognized by GlslangShaderConverter\n");
} }
@ -1822,6 +1869,9 @@ void AnyConverterTest::convertDataToDataPropagateConfiguration() {
} }
void AnyConverterTest::convertDataToDataPropagateConfigurationUnknown() { void AnyConverterTest::convertDataToDataPropagateConfigurationUnknown() {
auto&& data = PropagateConfigurationUnknownData[testCaseInstanceId()];
setTestCaseDescription(data.name);
PluginManager::Manager<AbstractConverter> manager{MAGNUM_PLUGINS_SHADERCONVERTER_INSTALL_DIR}; PluginManager::Manager<AbstractConverter> manager{MAGNUM_PLUGINS_SHADERCONVERTER_INSTALL_DIR};
#ifdef ANYSHADERCONVERTER_PLUGIN_FILENAME #ifdef ANYSHADERCONVERTER_PLUGIN_FILENAME
CORRADE_VERIFY(manager.load(ANYSHADERCONVERTER_PLUGIN_FILENAME) & PluginManager::LoadState::Loaded); CORRADE_VERIFY(manager.load(ANYSHADERCONVERTER_PLUGIN_FILENAME) & PluginManager::LoadState::Loaded);
@ -1836,14 +1886,18 @@ void AnyConverterTest::convertDataToDataPropagateConfigurationUnknown() {
converter->configuration().setValue("noSuchOption", "isHere"); converter->configuration().setValue("noSuchOption", "isHere");
/* So it doesn't warn about anything */ /* So it doesn't warn about anything */
converter->setDefinitions({{"reserved__identifier", "sorry"}}); converter->setDefinitions({{"reserved__identifier", "sorry"}});
converter->setFlags(data.flags);
Containers::Optional<Containers::Array<char>> data = Utility::Path::read(Utility::Path::join(ANYSHADERCONVERTER_TEST_DIR, "file.glsl")); Containers::Optional<Containers::Array<char>> shaderData = Utility::Path::read(Utility::Path::join(ANYSHADERCONVERTER_TEST_DIR, "file.glsl"));
CORRADE_VERIFY(data); CORRADE_VERIFY(shaderData);
std::ostringstream out; std::ostringstream out;
Warning redirectWarning{&out}; Warning redirectWarning{&out};
CORRADE_VERIFY(converter->convertDataToData(Stage::Fragment, *data)); CORRADE_VERIFY(converter->convertDataToData(Stage::Fragment, *shaderData));
CORRADE_COMPARE(out.str(), if(data.quiet)
CORRADE_COMPARE(out.str(), "");
else
CORRADE_COMPARE(out.str(),
"ShaderTools::AnyConverter::convertDataToData(): option noSuchOption not recognized by GlslangShaderConverter\n"); "ShaderTools::AnyConverter::convertDataToData(): option noSuchOption not recognized by GlslangShaderConverter\n");
} }

12
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 */ /* Used only in plugins where we don't want it to be exported */
namespace { 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; using namespace Containers::Literals;
/* Propagate values */ /* Propagate values */
@ -65,18 +65,22 @@ void propagateConfiguration(const char* warningPrefix, const Containers::String&
customSceneFieldTypes), don't warn about unrecognized values. This customSceneFieldTypes), don't warn about unrecognized values. This
logic is repeated for nested subgroups instead of being inherited, logic is repeated for nested subgroups instead of being inherited,
meaning that adding a nonexistent subgroup to an empty group will meaning that adding a nonexistent subgroup to an empty group will
warn again. */ warn again (unless all warnings are disabled). */
bool warnUnrecognizedSubgroup = true; bool warnUnrecognizedSubgroup = warnUnrecognizedNested;
if(!dstGroup) { if(!dstGroup) {
dstGroup = dst.addGroup(group.first()); dstGroup = dst.addGroup(group.first());
} else if(!dstGroup->hasGroups() && !dstGroup->hasValues()) { } else if(!dstGroup->hasGroups() && !dstGroup->hasValues()) {
warnUnrecognizedSubgroup = false; 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);
}
} }
}} }}

Loading…
Cancel
Save