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());
/* 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::ArrayView<const ImageV
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) */
@ -431,7 +431,7 @@ bool AnyImageConverter::doConvertToFile(const Containers::ArrayView<const ImageV
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) */
@ -479,7 +479,7 @@ bool AnyImageConverter::doConvertToFile(const Containers::ArrayView<const ImageV
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) */
@ -523,7 +523,7 @@ bool AnyImageConverter::doConvertToFile(const Containers::ArrayView<const Compre
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) */
@ -567,7 +567,7 @@ bool AnyImageConverter::doConvertToFile(const Containers::ArrayView<const Compre
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) */
@ -611,7 +611,7 @@ bool AnyImageConverter::doConvertToFile(const Containers::ArrayView<const Compre
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) */

169
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<AbstractImageConverter> 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<AbstractImageConverter> 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<AbstractImageConverter> 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<AbstractImageConverter> 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<AbstractImageConverter> 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<AbstractImageConverter> 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<AbstractImageConverter> 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<AbstractImageConverter> 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<AbstractImageConverter> 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<AbstractImageConverter> 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<AbstractImageConverter> 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<AbstractImageConverter> 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<AbstractImageConverter> 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<AbstractImageConverter> 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<AbstractImageConverter> 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<AbstractImageConverter> 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<AbstractImageConverter> 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<AbstractImageConverter> 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<AbstractImageConverter> 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<AbstractImageConverter> 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<AbstractImageConverter> 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<AbstractImageConverter> 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<AbstractImageConverter> 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");
}
}}}}

4
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<char>&& 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) */

24
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<AbstractImporter> 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() {

4
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) */

36
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<AbstractSceneConverter> 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<AbstractSceneConverter> 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<AbstractSceneConverter> 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<AbstractSceneConverter> 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");
}
}}}}

2
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) */

27
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<AbstractImporter> 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");

10
src/MagnumPlugins/AnyShaderConverter/AnyConverter.cpp

@ -228,7 +228,7 @@ Containers::Pair<bool, Containers::String> 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<bool, Containers::String> 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<Containers::Array<char>> 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<Containers::Array<char>> 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) */

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

@ -130,6 +130,15 @@ struct AnyConverterTest: TestSuite::Tester {
PluginManager::Manager<AbstractConverter> _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<AbstractConverter> 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<AbstractConverter> 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<Containers::Array<char>> data = Utility::Path::read(Utility::Path::join(ANYSHADERCONVERTER_TEST_DIR, "file.glsl"));
CORRADE_VERIFY(data);
Containers::Optional<Containers::Array<char>> 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<AbstractConverter> 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<AbstractConverter> 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<AbstractConverter> 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<Containers::Array<char>> data = Utility::Path::read(Utility::Path::join(ANYSHADERCONVERTER_TEST_DIR, "file.glsl"));
CORRADE_VERIFY(data);
Containers::Optional<Containers::Array<char>> 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");
}

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 */
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);
}
}
}}

Loading…
Cancel
Save