Browse Source

Any*{Importer,Converter}: show used plugin in verbose output.

Good for the first step when debugging why is something wrong.
pull/442/head
Vladimír Vondruš 6 years ago
parent
commit
3977f0472f
  1. 9
      src/MagnumPlugins/AnyImageConverter/AnyImageConverter.cpp
  2. 10
      src/MagnumPlugins/AnyImageConverter/Test/AnyImageConverterTest.cpp
  3. 17
      src/MagnumPlugins/AnyImageImporter/AnyImageImporter.cpp
  4. 19
      src/MagnumPlugins/AnyImageImporter/Test/AnyImageImporterTest.cpp
  5. 9
      src/MagnumPlugins/AnySceneImporter/AnySceneImporter.cpp
  6. 25
      src/MagnumPlugins/AnySceneImporter/Test/AnySceneImporterTest.cpp

9
src/MagnumPlugins/AnyImageConverter/AnyImageConverter.cpp

@ -26,6 +26,7 @@
#include "AnyImageConverter.h" #include "AnyImageConverter.h"
#include <Corrade/PluginManager/Manager.h> #include <Corrade/PluginManager/Manager.h>
#include <Corrade/PluginManager/PluginMetadata.h>
#include <Corrade/Utility/Assert.h> #include <Corrade/Utility/Assert.h>
#include <Corrade/Utility/DebugStl.h> #include <Corrade/Utility/DebugStl.h>
#include <Corrade/Utility/String.h> #include <Corrade/Utility/String.h>
@ -81,6 +82,14 @@ bool AnyImageConverter::doExportToFile(const ImageView2D& image, const std::stri
Error{} << "Trade::AnyImageConverter::exportToFile(): cannot load the" << plugin << "plugin"; Error{} << "Trade::AnyImageConverter::exportToFile(): cannot load the" << plugin << "plugin";
return false; 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 */ /* Instantiate the plugin, propagate flags */
Containers::Pointer<AbstractImageConverter> converter = static_cast<PluginManager::Manager<AbstractImageConverter>*>(manager())->instantiate(plugin); Containers::Pointer<AbstractImageConverter> converter = static_cast<PluginManager::Manager<AbstractImageConverter>*>(manager())->instantiate(plugin);

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

@ -47,7 +47,7 @@ struct AnyImageConverterTest: TestSuite::Tester {
void unknown(); void unknown();
void propagateFlags(); void verbose();
/* Explicitly forbid system-wide plugin dependencies */ /* Explicitly forbid system-wide plugin dependencies */
PluginManager::Manager<AbstractImageConverter> _manager{"nonexistent"}; PluginManager::Manager<AbstractImageConverter> _manager{"nonexistent"};
@ -83,7 +83,7 @@ AnyImageConverterTest::AnyImageConverterTest() {
addTests({&AnyImageConverterTest::unknown, addTests({&AnyImageConverterTest::unknown,
&AnyImageConverterTest::propagateFlags}); &AnyImageConverterTest::verbose});
/* 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. */
@ -154,7 +154,7 @@ void AnyImageConverterTest::unknown() {
CORRADE_COMPARE(output.str(), "Trade::AnyImageConverter::exportToFile(): cannot determine the format of image.xcf\n"); 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)) if(!(_manager.loadState("TgaImageConverter") & PluginManager::LoadState::Loaded))
CORRADE_SKIP("TgaImageConverter plugin not enabled, cannot test"); CORRADE_SKIP("TgaImageConverter plugin not enabled, cannot test");
@ -172,7 +172,9 @@ void AnyImageConverterTest::propagateFlags() {
CORRADE_VERIFY(converter->exportToFile(Image, filename)); CORRADE_VERIFY(converter->exportToFile(Image, filename));
} }
CORRADE_VERIFY(Utility::Directory::exists(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");
} }
}}}} }}}}

17
src/MagnumPlugins/AnyImageImporter/AnyImageImporter.cpp

@ -27,6 +27,7 @@
#include <Corrade/Containers/Optional.h> #include <Corrade/Containers/Optional.h>
#include <Corrade/PluginManager/Manager.h> #include <Corrade/PluginManager/Manager.h>
#include <Corrade/PluginManager/PluginMetadata.h>
#include <Corrade/Utility/Assert.h> #include <Corrade/Utility/Assert.h>
#include <Corrade/Utility/DebugStl.h> #include <Corrade/Utility/DebugStl.h>
#include <Corrade/Utility/String.h> #include <Corrade/Utility/String.h>
@ -112,6 +113,14 @@ void AnyImageImporter::doOpenFile(const std::string& filename) {
Error{} << "Trade::AnyImageImporter::openFile(): cannot determine the format of" << filename; Error{} << "Trade::AnyImageImporter::openFile(): cannot determine the format of" << filename;
return; 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 */ /* Try to load the plugin */
if(!(manager()->load(plugin) & PluginManager::LoadState::Loaded)) { if(!(manager()->load(plugin) & PluginManager::LoadState::Loaded)) {
@ -192,6 +201,14 @@ void AnyImageImporter::doOpenData(Containers::ArrayView<const char> data) {
Error{} << "Trade::AnyImageImporter::openData(): cannot load the" << plugin << "plugin"; Error{} << "Trade::AnyImageImporter::openData(): cannot load the" << plugin << "plugin";
return; 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 */ /* Instantiate the plugin, propagate flags */
Containers::Pointer<AbstractImporter> importer = static_cast<PluginManager::Manager<AbstractImporter>*>(manager())->instantiate(plugin); Containers::Pointer<AbstractImporter> importer = static_cast<PluginManager::Manager<AbstractImporter>*>(manager())->instantiate(plugin);

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

@ -48,7 +48,7 @@ struct AnyImageImporterTest: TestSuite::Tester {
void unknownSignature(); void unknownSignature();
void emptyData(); void emptyData();
void propagateFlags(); void verbose();
/* Explicitly forbid system-wide plugin dependencies */ /* Explicitly forbid system-wide plugin dependencies */
PluginManager::Manager<AbstractImporter> _manager{"nonexistent"}; PluginManager::Manager<AbstractImporter> _manager{"nonexistent"};
@ -63,9 +63,10 @@ constexpr struct {
const char* name; const char* name;
const char* filename; const char* filename;
Containers::Optional<Containers::ArrayView<const char>>(*callback)(const std::string&, InputFileCallbackPolicy, Containers::Array<char>&); Containers::Optional<Containers::ArrayView<const char>>(*callback)(const std::string&, InputFileCallbackPolicy, Containers::Array<char>&);
const char* verboseFunctionName;
} LoadData[]{ } LoadData[]{
{"TGA", TGA_FILE, nullptr}, {"TGA", TGA_FILE, nullptr, "openFile"},
{"TGA data", TGA_FILE, fileCallback} {"TGA data", TGA_FILE, fileCallback, "openData"}
}; };
constexpr struct { constexpr struct {
@ -105,7 +106,7 @@ AnyImageImporterTest::AnyImageImporterTest() {
&AnyImageImporterTest::unknownSignature, &AnyImageImporterTest::unknownSignature,
&AnyImageImporterTest::emptyData}); &AnyImageImporterTest::emptyData});
addInstancedTests({&AnyImageImporterTest::propagateFlags}, addInstancedTests({&AnyImageImporterTest::verbose},
Containers::arraySize(LoadData)); Containers::arraySize(LoadData));
/* 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
@ -196,7 +197,7 @@ void AnyImageImporterTest::emptyData() {
CORRADE_COMPARE(output.str(), "Trade::AnyImageImporter::openData(): file is empty\n"); CORRADE_COMPARE(output.str(), "Trade::AnyImageImporter::openData(): file is empty\n");
} }
void AnyImageImporterTest::propagateFlags() { void AnyImageImporterTest::verbose() {
auto&& data = LoadData[testCaseInstanceId()]; auto&& data = LoadData[testCaseInstanceId()];
setTestCaseDescription(data.name); setTestCaseDescription(data.name);
@ -209,14 +210,16 @@ void AnyImageImporterTest::propagateFlags() {
Containers::Array<char> storage; Containers::Array<char> storage;
importer->setFileCallback(data.callback, storage); importer->setFileCallback(data.callback, storage);
CORRADE_VERIFY(importer->openFile(data.filename));
std::ostringstream out; std::ostringstream out;
{ {
Debug redirectOutput{&out}; Debug redirectOutput{&out};
CORRADE_VERIFY(importer->openFile(data.filename));
CORRADE_VERIFY(importer->image2D(0)); 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));
} }
}}}} }}}}

9
src/MagnumPlugins/AnySceneImporter/AnySceneImporter.cpp

@ -27,6 +27,7 @@
#include <Corrade/Containers/Optional.h> #include <Corrade/Containers/Optional.h>
#include <Corrade/PluginManager/Manager.h> #include <Corrade/PluginManager/Manager.h>
#include <Corrade/PluginManager/PluginMetadata.h>
#include <Corrade/Utility/Assert.h> #include <Corrade/Utility/Assert.h>
#include <Corrade/Utility/DebugStl.h> #include <Corrade/Utility/DebugStl.h>
#include <Corrade/Utility/String.h> #include <Corrade/Utility/String.h>
@ -138,6 +139,14 @@ void AnySceneImporter::doOpenFile(const std::string& filename) {
Error{} << "Trade::AnySceneImporter::openFile(): cannot load the" << plugin << "plugin"; Error{} << "Trade::AnySceneImporter::openFile(): cannot load the" << plugin << "plugin";
return; 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 */ /* Instantiate the plugin, propagate flags */
Containers::Pointer<AbstractImporter> importer = static_cast<PluginManager::Manager<AbstractImporter>*>(manager())->instantiate(plugin); Containers::Pointer<AbstractImporter> importer = static_cast<PluginManager::Manager<AbstractImporter>*>(manager())->instantiate(plugin);

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

@ -56,7 +56,7 @@ struct AnySceneImporterTest: TestSuite::Tester {
void unknown(); void unknown();
void propagateFlags(); void verbose();
/* Explicitly forbid system-wide plugin dependencies */ /* Explicitly forbid system-wide plugin dependencies */
PluginManager::Manager<AbstractImporter> _manager{"nonexistent"}; PluginManager::Manager<AbstractImporter> _manager{"nonexistent"};
@ -98,7 +98,7 @@ AnySceneImporterTest::AnySceneImporterTest() {
addTests({&AnySceneImporterTest::unknown, addTests({&AnySceneImporterTest::unknown,
&AnySceneImporterTest::propagateFlags}); &AnySceneImporterTest::verbose});
/* 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. */
@ -181,8 +181,25 @@ void AnySceneImporterTest::unknown() {
CORRADE_COMPARE(output.str(), "Trade::AnySceneImporter::openFile(): cannot determine the format of mesh.wtf\n"); CORRADE_COMPARE(output.str(), "Trade::AnySceneImporter::openFile(): cannot determine the format of mesh.wtf\n");
} }
void AnySceneImporterTest::propagateFlags() { void AnySceneImporterTest::verbose() {
CORRADE_SKIP("No plugin with verbose output available to test."); if(!(_manager.loadState("ObjImporter") & PluginManager::LoadState::Loaded))
CORRADE_SKIP("ObjImporter plugin not enabled, cannot test");
Containers::Pointer<AbstractImporter> 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.");
} }
}}}} }}}}

Loading…
Cancel
Save