diff --git a/src/Magnum/Trade/Implementation/converterUtilities.h b/src/Magnum/Trade/Implementation/converterUtilities.h index 3b150709a..51b4303ad 100644 --- a/src/Magnum/Trade/Implementation/converterUtilities.h +++ b/src/Magnum/Trade/Implementation/converterUtilities.h @@ -135,10 +135,17 @@ void printImageConverterInfo(const Debug::Flags useColor, const Trade::AbstractI Debug d{useColor|Debug::Flag::NoNewlineAtTheEnd}; - if(const Containers::String extension = converter.extension()) - d << Debug::boldColor(Debug::Color::Default) << "File extension:" << Debug::resetColor << extension << Debug::newline; - if(const Containers::String mimeType = converter.mimeType()) - d << Debug::boldColor(Debug::Color::Default) << "MIME type:" << Debug::resetColor << mimeType << Debug::newline; + if(converter.features() & (ImageConverterFeature::Convert1DToFile| + ImageConverterFeature::Convert2DToFile| + ImageConverterFeature::Convert3DToFile| + ImageConverterFeature::ConvertCompressed1DToFile| + ImageConverterFeature::ConvertCompressed2DToFile| + ImageConverterFeature::ConvertCompressed3DToFile)) { + if(const Containers::String extension = converter.extension()) + d << Debug::boldColor(Debug::Color::Default) << "File extension:" << Debug::resetColor << extension << Debug::newline; + if(const Containers::String mimeType = converter.mimeType()) + d << Debug::boldColor(Debug::Color::Default) << "MIME type:" << Debug::resetColor << mimeType << Debug::newline; + } printPluginConfigurationInfo(useColor, converter); } diff --git a/src/Magnum/Trade/Test/ImageConverterImplementationTest.cpp b/src/Magnum/Trade/Test/ImageConverterImplementationTest.cpp index 42ccd1bd9..d11adde8c 100644 --- a/src/Magnum/Trade/Test/ImageConverterImplementationTest.cpp +++ b/src/Magnum/Trade/Test/ImageConverterImplementationTest.cpp @@ -27,6 +27,7 @@ #include /** @todo remove once Debug is stream-free */ #include #include +#include #include #include /** @todo remove once Debug is stream-free */ #include @@ -48,6 +49,7 @@ struct ImageConverterImplementationTest: TestSuite::Tester { void importerInfo(); void converterInfo(); void converterInfoExtensionMimeType(); + void converterInfoExtensionMimeTypeNoFileConversion(); void info(); void infoError(); @@ -66,6 +68,7 @@ ImageConverterImplementationTest::ImageConverterImplementationTest() { &ImageConverterImplementationTest::importerInfo, &ImageConverterImplementationTest::converterInfo, &ImageConverterImplementationTest::converterInfoExtensionMimeType, + &ImageConverterImplementationTest::converterInfoExtensionMimeTypeNoFileConversion, &ImageConverterImplementationTest::info, &ImageConverterImplementationTest::infoError}); @@ -364,6 +367,36 @@ void ImageConverterImplementationTest::converterInfoExtensionMimeType() { " something=is there\n"); } +void ImageConverterImplementationTest::converterInfoExtensionMimeTypeNoFileConversion() { + PluginManager::Manager converterManager{MAGNUM_PLUGINS_IMAGECONVERTER_INSTALL_DIR}; + + /* Check if the required plugin can be loaded. Catches also ABI and + interface mismatch errors. */ + if(!(converterManager.load("StbResizeImageConverter") & PluginManager::LoadState::Loaded)) + CORRADE_SKIP("StbResizeImageConverter plugin can't be loaded."); + + Containers::Pointer converter = converterManager.instantiate("StbResizeImageConverter"); + + /* Print to visually verify coloring */ + { + Debug{} << "======================== visual color verification start ======================="; + Implementation::printImageConverterInfo(Debug::isTty() ? Debug::Flags{} : Debug::Flag::DisableColors, *converter); + Debug{} << "======================== visual color verification end ========================="; + } + + std::ostringstream out; + Debug redirectOutput{&out}; + Implementation::printImageConverterInfo(Debug::Flag::DisableColors, *converter); + CORRADE_COMPARE_AS(out.str(), + "Plugin name: StbResizeImageConverter\n" + "Features:\n" + " Convert2D\n" + " Convert3D\n" + "Configuration:\n" + " # Target width and height", + TestSuite::Compare::StringHasPrefix); +} + void ImageConverterImplementationTest::info() { struct Importer: Trade::AbstractImporter { Trade::ImporterFeatures doFeatures() const override { return {}; }