diff --git a/src/MagnumPlugins/AnyImageConverter/AnyImageConverter.cpp b/src/MagnumPlugins/AnyImageConverter/AnyImageConverter.cpp index e5932d49f..7680d3eb9 100644 --- a/src/MagnumPlugins/AnyImageConverter/AnyImageConverter.cpp +++ b/src/MagnumPlugins/AnyImageConverter/AnyImageConverter.cpp @@ -26,6 +26,7 @@ #include "AnyImageConverter.h" #include +#include #include #include #include @@ -81,6 +82,14 @@ bool AnyImageConverter::doExportToFile(const ImageView2D& image, const std::stri Error{} << "Trade::AnyImageConverter::exportToFile(): cannot load the" << plugin << "plugin"; return false; } + if(flags() & ImageConverterFlag::Verbose) { + Debug d; + d << "Trade::AnyImageConverter::exportToFile(): using" << plugin; + PluginManager::PluginMetadata* metadata = manager()->metadata(plugin); + CORRADE_INTERNAL_ASSERT(metadata); + if(plugin != metadata->name()) + d << "(provided by" << metadata->name() << Debug::nospace << ")"; + } /* Instantiate the plugin, propagate flags */ Containers::Pointer converter = static_cast*>(manager())->instantiate(plugin); diff --git a/src/MagnumPlugins/AnyImageConverter/Test/AnyImageConverterTest.cpp b/src/MagnumPlugins/AnyImageConverter/Test/AnyImageConverterTest.cpp index f1b5e2408..4c2d85843 100644 --- a/src/MagnumPlugins/AnyImageConverter/Test/AnyImageConverterTest.cpp +++ b/src/MagnumPlugins/AnyImageConverter/Test/AnyImageConverterTest.cpp @@ -47,7 +47,7 @@ struct AnyImageConverterTest: TestSuite::Tester { void unknown(); - void propagateFlags(); + void verbose(); /* Explicitly forbid system-wide plugin dependencies */ PluginManager::Manager _manager{"nonexistent"}; @@ -83,7 +83,7 @@ AnyImageConverterTest::AnyImageConverterTest() { addTests({&AnyImageConverterTest::unknown, - &AnyImageConverterTest::propagateFlags}); + &AnyImageConverterTest::verbose}); /* Load the plugin directly from the build tree. Otherwise it's static and already loaded. */ @@ -154,7 +154,7 @@ void AnyImageConverterTest::unknown() { CORRADE_COMPARE(output.str(), "Trade::AnyImageConverter::exportToFile(): cannot determine the format of image.xcf\n"); } -void AnyImageConverterTest::propagateFlags() { +void AnyImageConverterTest::verbose() { if(!(_manager.loadState("TgaImageConverter") & PluginManager::LoadState::Loaded)) CORRADE_SKIP("TgaImageConverter plugin not enabled, cannot test"); @@ -172,7 +172,9 @@ void AnyImageConverterTest::propagateFlags() { CORRADE_VERIFY(converter->exportToFile(Image, filename)); } CORRADE_VERIFY(Utility::Directory::exists(filename)); - CORRADE_COMPARE(out.str(), "Trade::TgaImageConverter::exportToData(): converting from RGB to BGR\n"); + CORRADE_COMPARE(out.str(), + "Trade::AnyImageConverter::exportToFile(): using TgaImageConverter\n" + "Trade::TgaImageConverter::exportToData(): converting from RGB to BGR\n"); } }}}} diff --git a/src/MagnumPlugins/AnyImageImporter/AnyImageImporter.cpp b/src/MagnumPlugins/AnyImageImporter/AnyImageImporter.cpp index 5e51b1fc9..76a9da075 100644 --- a/src/MagnumPlugins/AnyImageImporter/AnyImageImporter.cpp +++ b/src/MagnumPlugins/AnyImageImporter/AnyImageImporter.cpp @@ -27,6 +27,7 @@ #include #include +#include #include #include #include @@ -112,6 +113,14 @@ void AnyImageImporter::doOpenFile(const std::string& filename) { Error{} << "Trade::AnyImageImporter::openFile(): cannot determine the format of" << filename; return; } + if(flags() & ImporterFlag::Verbose) { + Debug d; + d << "Trade::AnyImageImporter::openFile(): using" << plugin; + PluginManager::PluginMetadata* metadata = manager()->metadata(plugin); + CORRADE_INTERNAL_ASSERT(metadata); + if(plugin != metadata->name()) + d << "(provided by" << metadata->name() << Debug::nospace << ")"; + } /* Try to load the plugin */ if(!(manager()->load(plugin) & PluginManager::LoadState::Loaded)) { @@ -192,6 +201,14 @@ void AnyImageImporter::doOpenData(Containers::ArrayView data) { Error{} << "Trade::AnyImageImporter::openData(): cannot load the" << plugin << "plugin"; return; } + if(flags() & ImporterFlag::Verbose) { + Debug d; + d << "Trade::AnyImageImporter::openData(): using" << plugin; + PluginManager::PluginMetadata* metadata = manager()->metadata(plugin); + CORRADE_INTERNAL_ASSERT(metadata); + if(plugin != metadata->name()) + d << "(provided by" << metadata->name() << Debug::nospace << ")"; + } /* Instantiate the plugin, propagate flags */ Containers::Pointer importer = static_cast*>(manager())->instantiate(plugin); diff --git a/src/MagnumPlugins/AnyImageImporter/Test/AnyImageImporterTest.cpp b/src/MagnumPlugins/AnyImageImporter/Test/AnyImageImporterTest.cpp index 22d4662cc..87df72535 100644 --- a/src/MagnumPlugins/AnyImageImporter/Test/AnyImageImporterTest.cpp +++ b/src/MagnumPlugins/AnyImageImporter/Test/AnyImageImporterTest.cpp @@ -48,7 +48,7 @@ struct AnyImageImporterTest: TestSuite::Tester { void unknownSignature(); void emptyData(); - void propagateFlags(); + void verbose(); /* Explicitly forbid system-wide plugin dependencies */ PluginManager::Manager _manager{"nonexistent"}; @@ -63,9 +63,10 @@ constexpr struct { const char* name; const char* filename; Containers::Optional>(*callback)(const std::string&, InputFileCallbackPolicy, Containers::Array&); + const char* verboseFunctionName; } LoadData[]{ - {"TGA", TGA_FILE, nullptr}, - {"TGA data", TGA_FILE, fileCallback} + {"TGA", TGA_FILE, nullptr, "openFile"}, + {"TGA data", TGA_FILE, fileCallback, "openData"} }; constexpr struct { @@ -105,7 +106,7 @@ AnyImageImporterTest::AnyImageImporterTest() { &AnyImageImporterTest::unknownSignature, &AnyImageImporterTest::emptyData}); - addInstancedTests({&AnyImageImporterTest::propagateFlags}, + addInstancedTests({&AnyImageImporterTest::verbose}, Containers::arraySize(LoadData)); /* Load the plugin directly from the build tree. Otherwise it's static and @@ -196,7 +197,7 @@ void AnyImageImporterTest::emptyData() { CORRADE_COMPARE(output.str(), "Trade::AnyImageImporter::openData(): file is empty\n"); } -void AnyImageImporterTest::propagateFlags() { +void AnyImageImporterTest::verbose() { auto&& data = LoadData[testCaseInstanceId()]; setTestCaseDescription(data.name); @@ -209,14 +210,16 @@ void AnyImageImporterTest::propagateFlags() { Containers::Array storage; importer->setFileCallback(data.callback, storage); - CORRADE_VERIFY(importer->openFile(data.filename)); - std::ostringstream out; { Debug redirectOutput{&out}; + CORRADE_VERIFY(importer->openFile(data.filename)); CORRADE_VERIFY(importer->image2D(0)); } - CORRADE_COMPARE(out.str(), "Trade::TgaImporter::image2D(): converting from BGR to RGB\n"); + CORRADE_COMPARE(out.str(), Utility::formatString( + "Trade::AnyImageImporter::{}(): using TgaImporter\n" + "Trade::TgaImporter::image2D(): converting from BGR to RGB\n", + data.verboseFunctionName)); } }}}} diff --git a/src/MagnumPlugins/AnySceneImporter/AnySceneImporter.cpp b/src/MagnumPlugins/AnySceneImporter/AnySceneImporter.cpp index a6c6859c7..460ecb6fb 100644 --- a/src/MagnumPlugins/AnySceneImporter/AnySceneImporter.cpp +++ b/src/MagnumPlugins/AnySceneImporter/AnySceneImporter.cpp @@ -27,6 +27,7 @@ #include #include +#include #include #include #include @@ -138,6 +139,14 @@ void AnySceneImporter::doOpenFile(const std::string& filename) { Error{} << "Trade::AnySceneImporter::openFile(): cannot load the" << plugin << "plugin"; return; } + if(flags() & ImporterFlag::Verbose) { + Debug d; + d << "Trade::AnySceneImporter::openFile(): using" << plugin; + PluginManager::PluginMetadata* metadata = manager()->metadata(plugin); + CORRADE_INTERNAL_ASSERT(metadata); + if(plugin != metadata->name()) + d << "(provided by" << metadata->name() << Debug::nospace << ")"; + } /* Instantiate the plugin, propagate flags */ Containers::Pointer importer = static_cast*>(manager())->instantiate(plugin); diff --git a/src/MagnumPlugins/AnySceneImporter/Test/AnySceneImporterTest.cpp b/src/MagnumPlugins/AnySceneImporter/Test/AnySceneImporterTest.cpp index 9ab10472f..c0d63c666 100644 --- a/src/MagnumPlugins/AnySceneImporter/Test/AnySceneImporterTest.cpp +++ b/src/MagnumPlugins/AnySceneImporter/Test/AnySceneImporterTest.cpp @@ -56,7 +56,7 @@ struct AnySceneImporterTest: TestSuite::Tester { void unknown(); - void propagateFlags(); + void verbose(); /* Explicitly forbid system-wide plugin dependencies */ PluginManager::Manager _manager{"nonexistent"}; @@ -98,7 +98,7 @@ AnySceneImporterTest::AnySceneImporterTest() { addTests({&AnySceneImporterTest::unknown, - &AnySceneImporterTest::propagateFlags}); + &AnySceneImporterTest::verbose}); /* Load the plugin directly from the build tree. Otherwise it's static and already loaded. */ @@ -181,8 +181,25 @@ void AnySceneImporterTest::unknown() { CORRADE_COMPARE(output.str(), "Trade::AnySceneImporter::openFile(): cannot determine the format of mesh.wtf\n"); } -void AnySceneImporterTest::propagateFlags() { - CORRADE_SKIP("No plugin with verbose output available to test."); +void AnySceneImporterTest::verbose() { + if(!(_manager.loadState("ObjImporter") & PluginManager::LoadState::Loaded)) + CORRADE_SKIP("ObjImporter plugin not enabled, cannot test"); + + Containers::Pointer importer = _manager.instantiate("AnySceneImporter"); + importer->setFlags(ImporterFlag::Verbose); + + std::ostringstream out; + { + Debug redirectOutput{&out}; + CORRADE_VERIFY(importer->openFile(OBJ_FILE)); + CORRADE_VERIFY(importer->mesh(0)); + } + CORRADE_COMPARE(out.str(), + "Trade::AnySceneImporter::openFile(): using ObjImporter\n"); + + /* We tested AnySceneImporter's verbose output, but can't actually test + the flag propagation in any way yet */ + CORRADE_SKIP("No plugin with verbose output available to test flag propagation."); } }}}}