Browse Source

Any*{Importer,Converter}: propagate flags to the actual plugins.

pull/427/merge
Vladimír Vondruš 6 years ago
parent
commit
1b03e20e3e
  1. 6
      src/MagnumPlugins/AnyImageConverter/AnyImageConverter.cpp
  2. 27
      src/MagnumPlugins/AnyImageConverter/Test/AnyImageConverterTest.cpp
  3. 10
      src/MagnumPlugins/AnyImageImporter/AnyImageImporter.cpp
  4. 30
      src/MagnumPlugins/AnyImageImporter/Test/AnyImageImporterTest.cpp
  5. 8
      src/MagnumPlugins/AnyImageImporter/Test/CMakeLists.txt
  6. BIN
      src/MagnumPlugins/AnyImageImporter/Test/rgb.tga
  7. 5
      src/MagnumPlugins/AnySceneImporter/AnySceneImporter.cpp
  8. 10
      src/MagnumPlugins/AnySceneImporter/Test/AnySceneImporterTest.cpp

6
src/MagnumPlugins/AnyImageConverter/AnyImageConverter.cpp

@ -82,9 +82,13 @@ bool AnyImageConverter::doExportToFile(const ImageView2D& image, const std::stri
return false;
}
/* Instantiate the plugin, propagate flags */
Containers::Pointer<AbstractImageConverter> converter = static_cast<PluginManager::Manager<AbstractImageConverter>*>(manager())->instantiate(plugin);
converter->setFlags(flags());
/* Try to convert the file (error output should be printed by the plugin
itself) */
return static_cast<PluginManager::Manager<AbstractImageConverter>*>(manager())->instantiate(plugin)->exportToFile(image, filename);
return converter->exportToFile(image, filename);
}
bool AnyImageConverter::doExportToFile(const CompressedImageView2D&, const std::string& filename) {

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

@ -47,6 +47,8 @@ struct AnyImageConverterTest: TestSuite::Tester {
void unknown();
void propagateFlags();
/* Explicitly forbid system-wide plugin dependencies */
PluginManager::Manager<AbstractImageConverter> _manager{"nonexistent"};
};
@ -79,7 +81,9 @@ AnyImageConverterTest::AnyImageConverterTest() {
addInstancedTests({&AnyImageConverterTest::detect},
Containers::arraySize(DetectData));
addTests({&AnyImageConverterTest::unknown});
addTests({&AnyImageConverterTest::unknown,
&AnyImageConverterTest::propagateFlags});
/* Load the plugin directly from the build tree. Otherwise it's static and
already loaded. */
@ -150,6 +154,27 @@ void AnyImageConverterTest::unknown() {
CORRADE_COMPARE(output.str(), "Trade::AnyImageConverter::exportToFile(): cannot determine the format of image.xcf\n");
}
void AnyImageConverterTest::propagateFlags() {
if(!(_manager.loadState("TgaImageConverter") & PluginManager::LoadState::Loaded))
CORRADE_SKIP("TgaImageConverter plugin not enabled, cannot test");
const std::string filename = Utility::Directory::join(ANYIMAGECONVERTER_TEST_DIR, "output.tga");
if(Utility::Directory::exists(filename))
CORRADE_VERIFY(Utility::Directory::rm(filename));
/* Just test that the exported file exists */
Containers::Pointer<AbstractImageConverter> converter = _manager.instantiate("AnyImageConverter");
converter->setFlags(ImageConverterFlag::Verbose);
std::ostringstream out;
{
Debug redirectOutput{&out};
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_TEST_MAIN(Magnum::Trade::Test::AnyImageConverterTest)

10
src/MagnumPlugins/AnyImageImporter/AnyImageImporter.cpp

@ -119,9 +119,12 @@ void AnyImageImporter::doOpenFile(const std::string& filename) {
return;
}
/* Instantiate the plugin, propagate flags */
Containers::Pointer<AbstractImporter> importer = static_cast<PluginManager::Manager<AbstractImporter>*>(manager())->instantiate(plugin);
importer->setFlags(flags());
/* Try to open the file (error output should be printed by the plugin
itself) */
Containers::Pointer<AbstractImporter> importer = static_cast<PluginManager::Manager<AbstractImporter>*>(manager())->instantiate(plugin);
if(!importer->openFile(filename)) return;
/* Success, save the instance */
@ -190,9 +193,12 @@ void AnyImageImporter::doOpenData(Containers::ArrayView<const char> data) {
return;
}
/* Instantiate the plugin, propagate flags */
Containers::Pointer<AbstractImporter> importer = static_cast<PluginManager::Manager<AbstractImporter>*>(manager())->instantiate(plugin);
importer->setFlags(flags());
/* Try to open the file (error output should be printed by the plugin
itself) */
Containers::Pointer<AbstractImporter> importer = static_cast<PluginManager::Manager<AbstractImporter>*>(manager())->instantiate(plugin);
if(!importer->openData(data)) return;
/* Success, save the instance */

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

@ -48,6 +48,8 @@ struct AnyImageImporterTest: TestSuite::Tester {
void unknownSignature();
void emptyData();
void propagateFlags();
/* Explicitly forbid system-wide plugin dependencies */
PluginManager::Manager<AbstractImporter> _manager{"nonexistent"};
};
@ -103,6 +105,9 @@ AnyImageImporterTest::AnyImageImporterTest() {
&AnyImageImporterTest::unknownSignature,
&AnyImageImporterTest::emptyData});
addInstancedTests({&AnyImageImporterTest::propagateFlags},
Containers::arraySize(LoadData));
/* Load the plugin directly from the build tree. Otherwise it's static and
already loaded. */
#ifdef ANYIMAGEIMPORTER_PLUGIN_FILENAME
@ -131,7 +136,7 @@ void AnyImageImporterTest::load() {
/* Check only size, as it is good enough proof that it is working */
Containers::Optional<ImageData2D> image = importer->image2D(0);
CORRADE_VERIFY(image);
CORRADE_COMPARE(image->size(), Vector2i(2, 3));
CORRADE_COMPARE(image->size(), Vector2i(3, 2));
importer->close();
CORRADE_VERIFY(!importer->isOpened());
@ -191,6 +196,29 @@ void AnyImageImporterTest::emptyData() {
CORRADE_COMPARE(output.str(), "Trade::AnyImageImporter::openData(): file is empty\n");
}
void AnyImageImporterTest::propagateFlags() {
auto&& data = LoadData[testCaseInstanceId()];
setTestCaseDescription(data.name);
if(!(_manager.loadState("TgaImporter") & PluginManager::LoadState::Loaded))
CORRADE_SKIP("TgaImporter plugin not enabled, cannot test");
Containers::Pointer<AbstractImporter> importer = _manager.instantiate("AnyImageImporter");
importer->setFlags(ImporterFlag::Verbose);
Containers::Array<char> storage;
importer->setFileCallback(data.callback, storage);
CORRADE_VERIFY(importer->openFile(data.filename));
std::ostringstream out;
{
Debug redirectOutput{&out};
CORRADE_VERIFY(importer->image2D(0));
}
CORRADE_COMPARE(out.str(), "Trade::TgaImporter::image2D(): converting from BGR to RGB\n");
}
}}}}
CORRADE_TEST_MAIN(Magnum::Trade::Test::AnyImageImporterTest)

8
src/MagnumPlugins/AnyImageImporter/Test/CMakeLists.txt

@ -25,10 +25,10 @@
if(CORRADE_TARGET_EMSCRIPTEN OR CORRADE_TARGET_ANDROID)
set(TEST_FILE_DIR .)
set(TGA_FILE file.tga)
set(TGA_FILE rgb.tga)
else()
set(TEST_FILE_DIR ${CMAKE_CURRENT_SOURCE_DIR})
set(TGA_FILE ${PROJECT_SOURCE_DIR}/src/MagnumPlugins/TgaImporter/Test/file.tga)
set(TGA_FILE ${CMAKE_CURRENT_SOURCE_DIR}/rgb.tga)
endif()
# CMake before 3.8 has broken $<TARGET_FILE*> expressions for iOS (see
@ -56,8 +56,8 @@ corrade_add_test(AnyImageImporterTest AnyImageImporterTest.cpp
rgb.basis
rgb.hdr
rgb.png
rgba_dxt1.dds
../../TgaImporter/Test/file.tga)
rgb.tga
rgba_dxt1.dds)
target_include_directories(AnyImageImporterTest PRIVATE ${CMAKE_CURRENT_BINARY_DIR}/$<CONFIG>)
if(BUILD_PLUGINS_STATIC)
target_link_libraries(AnyImageImporterTest PRIVATE AnyImageImporter)

BIN
src/MagnumPlugins/AnyImageImporter/Test/rgb.tga

Binary file not shown.

After

Width:  |  Height:  |  Size: 36 B

5
src/MagnumPlugins/AnySceneImporter/AnySceneImporter.cpp

@ -139,9 +139,12 @@ void AnySceneImporter::doOpenFile(const std::string& filename) {
return;
}
/* Instantiate the plugin, propagate flags */
Containers::Pointer<AbstractImporter> importer = static_cast<PluginManager::Manager<AbstractImporter>*>(manager())->instantiate(plugin);
importer->setFlags(flags());
/* Try to open the file (error output should be printed by the plugin
itself) */
Containers::Pointer<AbstractImporter> importer = static_cast<PluginManager::Manager<AbstractImporter>*>(manager())->instantiate(plugin);
if(!importer->openFile(filename)) return;
/* Success, save the instance */

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

@ -56,6 +56,8 @@ struct AnySceneImporterTest: TestSuite::Tester {
void unknown();
void propagateFlags();
/* Explicitly forbid system-wide plugin dependencies */
PluginManager::Manager<AbstractImporter> _manager{"nonexistent"};
};
@ -94,7 +96,9 @@ AnySceneImporterTest::AnySceneImporterTest() {
addInstancedTests({&AnySceneImporterTest::detect},
Containers::arraySize(DetectData));
addTests({&AnySceneImporterTest::unknown});
addTests({&AnySceneImporterTest::unknown,
&AnySceneImporterTest::propagateFlags});
/* Load the plugin directly from the build tree. Otherwise it's static and
already loaded. */
@ -177,6 +181,10 @@ 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.");
}
}}}}
CORRADE_TEST_MAIN(Magnum::Trade::Test::AnySceneImporterTest)

Loading…
Cancel
Save