Browse Source

DebugTools: prepare CompareImage for more than one plugin manager.

pull/364/head
Vladimír Vondruš 7 years ago
parent
commit
f102b86645
  1. 18
      src/Magnum/DebugTools/CompareImage.cpp
  2. 24
      src/Magnum/DebugTools/CompareImage.h
  3. 70
      src/Magnum/DebugTools/Test/CompareImageTest.cpp

18
src/Magnum/DebugTools/CompareImage.cpp

@ -346,23 +346,23 @@ enum class ImageComparatorBase::State: UnsignedByte {
class ImageComparatorBase::FileState {
public:
explicit FileState(PluginManager::Manager<Trade::AbstractImporter>& manager): manager{&manager} {}
explicit FileState(PluginManager::Manager<Trade::AbstractImporter>& importerManager): importerManager{&importerManager} {}
explicit FileState(): _privateManager{Containers::InPlaceInit}, manager{&*_privateManager} {}
explicit FileState(): _privateImporterManager{Containers::InPlaceInit}, importerManager{&*_privateImporterManager} {}
private:
Containers::Optional<PluginManager::Manager<Trade::AbstractImporter>> _privateManager;
Containers::Optional<PluginManager::Manager<Trade::AbstractImporter>> _privateImporterManager;
public:
PluginManager::Manager<Trade::AbstractImporter>* manager;
PluginManager::Manager<Trade::AbstractImporter>* importerManager;
std::string actualFilename, expectedFilename;
Containers::Optional<Trade::ImageData2D> actualImageData, expectedImageData;
/** @todo could at least the views have a NoCreate constructor? */
Containers::Optional<ImageView2D> actualImage, expectedImage;
};
ImageComparatorBase::ImageComparatorBase(PluginManager::Manager<Trade::AbstractImporter>* manager, Float maxThreshold, Float meanThreshold): _maxThreshold{maxThreshold}, _meanThreshold{meanThreshold}, _max{}, _mean{} {
if(manager) _fileState.reset(new FileState{*manager});
ImageComparatorBase::ImageComparatorBase(PluginManager::Manager<Trade::AbstractImporter>* importerManager, Float maxThreshold, Float meanThreshold): _maxThreshold{maxThreshold}, _meanThreshold{meanThreshold}, _max{}, _mean{} {
if(importerManager) _fileState.reset(new FileState{*importerManager});
CORRADE_ASSERT(!Math::isNan(maxThreshold) && !Math::isInf(maxThreshold) &&
!Math::isNan(meanThreshold) && !Math::isInf(meanThreshold),
@ -419,7 +419,7 @@ bool ImageComparatorBase::operator()(const std::string& actual, const std::strin
_fileState->expectedFilename = expected;
Containers::Pointer<Trade::AbstractImporter> importer;
if(!(importer = _fileState->manager->loadAndInstantiate("AnyImageImporter"))) {
if(!(importer = _fileState->importerManager->loadAndInstantiate("AnyImageImporter"))) {
_state = State::PluginLoadFailed;
return false;
}
@ -455,7 +455,7 @@ bool ImageComparatorBase::operator()(const ImageView2D& actual, const std::strin
_fileState->expectedFilename = expected;
Containers::Pointer<Trade::AbstractImporter> importer;
if(!(importer = _fileState->manager->loadAndInstantiate("AnyImageImporter"))) {
if(!(importer = _fileState->importerManager->loadAndInstantiate("AnyImageImporter"))) {
_state = State::PluginLoadFailed;
return false;
}
@ -480,7 +480,7 @@ bool ImageComparatorBase::operator()(const std::string& actual, const ImageView2
_fileState->actualFilename = actual;
Containers::Pointer<Trade::AbstractImporter> importer;
if(!(importer = _fileState->manager->loadAndInstantiate("AnyImageImporter"))) {
if(!(importer = _fileState->importerManager->loadAndInstantiate("AnyImageImporter"))) {
_state = State::PluginLoadFailed;
return false;
}

24
src/Magnum/DebugTools/CompareImage.h

@ -60,7 +60,7 @@ namespace Implementation {
class MAGNUM_DEBUGTOOLS_EXPORT ImageComparatorBase {
public:
explicit ImageComparatorBase(PluginManager::Manager<Trade::AbstractImporter>* manager, Float maxThreshold, Float meanThreshold);
explicit ImageComparatorBase(PluginManager::Manager<Trade::AbstractImporter>* importerManager, Float maxThreshold, Float meanThreshold);
/*implicit*/ ImageComparatorBase(): ImageComparatorBase{nullptr, 0.0f, 0.0f} {}
@ -110,7 +110,7 @@ template<> class MAGNUM_DEBUGTOOLS_EXPORT Comparator<Magnum::DebugTools::Compare
template<> class MAGNUM_DEBUGTOOLS_EXPORT Comparator<Magnum::DebugTools::CompareImageFile>: public Magnum::DebugTools::Implementation::ImageComparatorBase {
public:
explicit Comparator(PluginManager::Manager<Magnum::Trade::AbstractImporter>* manager, Magnum::Float maxThreshold, Magnum::Float meanThreshold): Magnum::DebugTools::Implementation::ImageComparatorBase{manager, maxThreshold, meanThreshold} {}
explicit Comparator(PluginManager::Manager<Magnum::Trade::AbstractImporter>* importerManager, Magnum::Float maxThreshold, Magnum::Float meanThreshold): Magnum::DebugTools::Implementation::ImageComparatorBase{importerManager, maxThreshold, meanThreshold} {}
/*implicit*/ Comparator(): Comparator{nullptr, 0.0f, 0.0f} {}
@ -121,7 +121,7 @@ template<> class MAGNUM_DEBUGTOOLS_EXPORT Comparator<Magnum::DebugTools::Compare
template<> class MAGNUM_DEBUGTOOLS_EXPORT Comparator<Magnum::DebugTools::CompareImageToFile>: public Magnum::DebugTools::Implementation::ImageComparatorBase {
public:
explicit Comparator(PluginManager::Manager<Magnum::Trade::AbstractImporter>* manager, Magnum::Float maxThreshold, Magnum::Float meanThreshold): Magnum::DebugTools::Implementation::ImageComparatorBase{manager, maxThreshold, meanThreshold} {}
explicit Comparator(PluginManager::Manager<Magnum::Trade::AbstractImporter>* importerManager, Magnum::Float maxThreshold, Magnum::Float meanThreshold): Magnum::DebugTools::Implementation::ImageComparatorBase{importerManager, maxThreshold, meanThreshold} {}
/*implicit*/ Comparator(): Comparator{nullptr, 0.0f, 0.0f} {}
@ -132,7 +132,7 @@ template<> class MAGNUM_DEBUGTOOLS_EXPORT Comparator<Magnum::DebugTools::Compare
template<> class MAGNUM_DEBUGTOOLS_EXPORT Comparator<Magnum::DebugTools::CompareFileToImage>: public Magnum::DebugTools::Implementation::ImageComparatorBase {
public:
explicit Comparator(PluginManager::Manager<Magnum::Trade::AbstractImporter>* manager, Magnum::Float maxThreshold, Magnum::Float meanThreshold): Magnum::DebugTools::Implementation::ImageComparatorBase{manager, maxThreshold, meanThreshold} {}
explicit Comparator(PluginManager::Manager<Magnum::Trade::AbstractImporter>* importerManager, Magnum::Float maxThreshold, Magnum::Float meanThreshold): Magnum::DebugTools::Implementation::ImageComparatorBase{importerManager, maxThreshold, meanThreshold} {}
/*implicit*/ Comparator(): Comparator{nullptr, 0.0f, 0.0f} {}
@ -301,14 +301,14 @@ class CompareImageFile {
/**
* @brief Construct with an explicit plugin manager instance
* @param manager Image importer plugin manager instance used
* @param importerManager Image importer plugin manager instance used
* when comparing against images loaded from files
* @param maxThreshold Max threshold. If any pixel has delta above
* @param maxThreshold Max threshold. If any pixel has delta above
* this value, this comparison fails
* @param meanThreshold Mean threshold. If mean delta over all pixels
* is above this value, the comparison fails
* @param meanThreshold Mean threshold. If mean delta over all
* pixels is above this value, the comparison fails
*/
explicit CompareImageFile(PluginManager::Manager<Trade::AbstractImporter>& manager, Float maxThreshold, Float meanThreshold): _c{&manager, maxThreshold, meanThreshold} {}
explicit CompareImageFile(PluginManager::Manager<Trade::AbstractImporter>& importerManager, Float maxThreshold, Float meanThreshold): _c{&importerManager, maxThreshold, meanThreshold} {}
/**
* @brief Construct with an explicit plugin manager instance and implicit thresholds
@ -316,7 +316,7 @@ class CompareImageFile {
* Equivalent to calling @ref CompareImageFile(PluginManager::Manager<Trade::AbstractImporter>&, Float, Float)
* with zero values.
*/
explicit CompareImageFile(PluginManager::Manager<Trade::AbstractImporter>& manager): _c{&manager, 0.0f, 0.0f} {}
explicit CompareImageFile(PluginManager::Manager<Trade::AbstractImporter>& importerManager): _c{&importerManager, 0.0f, 0.0f} {}
/**
* @brief Construct with implicit thresholds
@ -363,7 +363,7 @@ class CompareImageToFile {
* See @ref CompareImageFile::CompareImageFile(PluginManager::Manager<Trade::AbstractImporter>&, Float, Float)
* for more information.
*/
explicit CompareImageToFile(PluginManager::Manager<Trade::AbstractImporter>& manager, Float maxThreshold, Float meanThreshold): _c{&manager, maxThreshold, meanThreshold} {}
explicit CompareImageToFile(PluginManager::Manager<Trade::AbstractImporter>& importerManager, Float maxThreshold, Float meanThreshold): _c{&importerManager, maxThreshold, meanThreshold} {}
/**
* @brief Construct with an explicit plugin manager instance and implicit thresholds
@ -371,7 +371,7 @@ class CompareImageToFile {
* Equivalent to calling @ref CompareImageToFile(PluginManager::Manager<Trade::AbstractImporter>&, Float, Float)
* with zero values.
*/
explicit CompareImageToFile(PluginManager::Manager<Trade::AbstractImporter>& manager): _c{&manager, 0.0f, 0.0f} {}
explicit CompareImageToFile(PluginManager::Manager<Trade::AbstractImporter>& importerManager): _c{&importerManager, 0.0f, 0.0f} {}
/**
* @brief Implicit constructor

70
src/Magnum/DebugTools/Test/CompareImageTest.cpp

@ -99,7 +99,7 @@ struct CompareImageTest: TestSuite::Tester {
void fileToImageActualIsCompressed();
private:
Containers::Optional<PluginManager::Manager<Trade::AbstractImporter>> _manager;
Containers::Optional<PluginManager::Manager<Trade::AbstractImporter>> _importerManager;
};
CompareImageTest::CompareImageTest() {
@ -699,17 +699,17 @@ void CompareImageTest::compareSpecialsDisallowedThreshold() {
}
void CompareImageTest::setupExternalPluginManager() {
_manager.emplace("nonexistent");
_importerManager.emplace("nonexistent");
/* Load the plugin directly from the build tree. Otherwise it's either
static and already loaded or not present in the build tree */
#if defined(ANYIMAGEIMPORTER_PLUGIN_FILENAME) && defined(TGAIMPORTER_PLUGIN_FILENAME)
CORRADE_INTERNAL_ASSERT(_manager->load(ANYIMAGEIMPORTER_PLUGIN_FILENAME) & PluginManager::LoadState::Loaded);
CORRADE_INTERNAL_ASSERT(_manager->load(TGAIMPORTER_PLUGIN_FILENAME) & PluginManager::LoadState::Loaded);
CORRADE_INTERNAL_ASSERT(_importerManager->load(ANYIMAGEIMPORTER_PLUGIN_FILENAME) & PluginManager::LoadState::Loaded);
CORRADE_INTERNAL_ASSERT(_importerManager->load(TGAIMPORTER_PLUGIN_FILENAME) & PluginManager::LoadState::Loaded);
#endif
}
void CompareImageTest::teardownExternalPluginManager() {
_manager = Containers::NullOpt;
_importerManager = Containers::NullOpt;
}
constexpr const char* ImageCompareError =
@ -738,25 +738,25 @@ void CompareImageTest::imageError() {
}
void CompareImageTest::imageFile() {
if(_manager->loadState("AnyImageImporter") == PluginManager::LoadState::NotFound ||
_manager->loadState("TgaImporter") == PluginManager::LoadState::NotFound)
if(_importerManager->loadState("AnyImageImporter") == PluginManager::LoadState::NotFound ||
_importerManager->loadState("TgaImporter") == PluginManager::LoadState::NotFound)
CORRADE_SKIP("AnyImageImporter or TgaImporter plugins not found.");
CORRADE_COMPARE_WITH(
Utility::Directory::join(DEBUGTOOLS_TEST_DIR, "CompareImageActual.tga"),
Utility::Directory::join(DEBUGTOOLS_TEST_DIR, "CompareImageExpected.tga"),
(CompareImageFile{*_manager, 40.0f, 20.0f}));
(CompareImageFile{*_importerManager, 40.0f, 20.0f}));
}
void CompareImageTest::imageFileError() {
if(_manager->loadState("AnyImageImporter") == PluginManager::LoadState::NotFound ||
_manager->loadState("TgaImporter") == PluginManager::LoadState::NotFound)
if(_importerManager->loadState("AnyImageImporter") == PluginManager::LoadState::NotFound ||
_importerManager->loadState("TgaImporter") == PluginManager::LoadState::NotFound)
CORRADE_SKIP("AnyImageImporter or TgaImporter plugins not found.");
std::stringstream out;
{
TestSuite::Comparator<CompareImageFile> compare{&*_manager, 20.0f, 10.0f};
TestSuite::Comparator<CompareImageFile> compare{&*_importerManager, 20.0f, 10.0f};
CORRADE_VERIFY(!compare(
Utility::Directory::join(DEBUGTOOLS_TEST_DIR, "CompareImageActual.tga"),
Utility::Directory::join(DEBUGTOOLS_TEST_DIR, "CompareImageExpected.tga")));
@ -787,14 +787,14 @@ void CompareImageTest::imageFilePluginLoadFailed() {
}
void CompareImageTest::imageFileActualLoadFailed() {
if(_manager->loadState("AnyImageImporter") == PluginManager::LoadState::NotFound ||
_manager->loadState("TgaImporter") == PluginManager::LoadState::NotFound)
if(_importerManager->loadState("AnyImageImporter") == PluginManager::LoadState::NotFound ||
_importerManager->loadState("TgaImporter") == PluginManager::LoadState::NotFound)
CORRADE_SKIP("AnyImageImporter or TgaImporter plugins not found.");
std::stringstream out;
{
TestSuite::Comparator<CompareImageFile> compare{&*_manager, 20.0f, 10.0f};
TestSuite::Comparator<CompareImageFile> compare{&*_importerManager, 20.0f, 10.0f};
CORRADE_VERIFY(!compare("nonexistent.tga",
Utility::Directory::join(DEBUGTOOLS_TEST_DIR, "CompareImageExpected.tga")));
Debug d{&out, Debug::Flag::DisableColors};
@ -805,14 +805,14 @@ void CompareImageTest::imageFileActualLoadFailed() {
}
void CompareImageTest::imageFileExpectedLoadFailed() {
if(_manager->loadState("AnyImageImporter") == PluginManager::LoadState::NotFound ||
_manager->loadState("TgaImporter") == PluginManager::LoadState::NotFound)
if(_importerManager->loadState("AnyImageImporter") == PluginManager::LoadState::NotFound ||
_importerManager->loadState("TgaImporter") == PluginManager::LoadState::NotFound)
CORRADE_SKIP("AnyImageImporter or TgaImporter plugins not found.");
std::stringstream out;
{
TestSuite::Comparator<CompareImageFile> compare{&*_manager, 20.0f, 10.0f};
TestSuite::Comparator<CompareImageFile> compare{&*_importerManager, 20.0f, 10.0f};
CORRADE_VERIFY(!compare(
Utility::Directory::join(DEBUGTOOLS_TEST_DIR, "CompareImageActual.tga"),
"nonexistent.tga"));
@ -865,24 +865,24 @@ void CompareImageTest::imageFileExpectedIsCompressed() {
}
void CompareImageTest::imageToFile() {
if(_manager->loadState("AnyImageImporter") == PluginManager::LoadState::NotFound ||
_manager->loadState("TgaImporter") == PluginManager::LoadState::NotFound)
if(_importerManager->loadState("AnyImageImporter") == PluginManager::LoadState::NotFound ||
_importerManager->loadState("TgaImporter") == PluginManager::LoadState::NotFound)
CORRADE_SKIP("AnyImageImporter or TgaImporter plugins not found.");
CORRADE_COMPARE_WITH(ActualRgb,
Utility::Directory::join(DEBUGTOOLS_TEST_DIR, "CompareImageExpected.tga"),
(CompareImageToFile{*_manager, 40.0f, 20.0f}));
(CompareImageToFile{*_importerManager, 40.0f, 20.0f}));
}
void CompareImageTest::imageToFileError() {
if(_manager->loadState("AnyImageImporter") == PluginManager::LoadState::NotFound ||
_manager->loadState("TgaImporter") == PluginManager::LoadState::NotFound)
if(_importerManager->loadState("AnyImageImporter") == PluginManager::LoadState::NotFound ||
_importerManager->loadState("TgaImporter") == PluginManager::LoadState::NotFound)
CORRADE_SKIP("AnyImageImporter or TgaImporter plugins not found.");
std::stringstream out;
{
TestSuite::Comparator<CompareImageToFile> compare{&*_manager, 20.0f, 10.0f};
TestSuite::Comparator<CompareImageToFile> compare{&*_importerManager, 20.0f, 10.0f};
CORRADE_VERIFY(!compare(ActualRgb,
Utility::Directory::join(DEBUGTOOLS_TEST_DIR, "CompareImageExpected.tga")));
Debug d{&out, Debug::Flag::DisableColors};
@ -911,14 +911,14 @@ void CompareImageTest::imageToFilePluginLoadFailed() {
}
void CompareImageTest::imageToFileExpectedLoadFailed() {
if(_manager->loadState("AnyImageImporter") == PluginManager::LoadState::NotFound ||
_manager->loadState("TgaImporter") == PluginManager::LoadState::NotFound)
if(_importerManager->loadState("AnyImageImporter") == PluginManager::LoadState::NotFound ||
_importerManager->loadState("TgaImporter") == PluginManager::LoadState::NotFound)
CORRADE_SKIP("AnyImageImporter or TgaImporter plugins not found.");
std::stringstream out;
{
TestSuite::Comparator<CompareImageToFile> compare{&*_manager, 20.0f, 10.0f};
TestSuite::Comparator<CompareImageToFile> compare{&*_importerManager, 20.0f, 10.0f};
CORRADE_VERIFY(!compare(ActualRgb, "nonexistent.tga"));
Debug d{&out, Debug::Flag::DisableColors};
compare.printErrorMessage(d, "a", "b");
@ -947,25 +947,25 @@ void CompareImageTest::imageToFileExpectedIsCompressed() {
}
void CompareImageTest::fileToImage() {
if(_manager->loadState("AnyImageImporter") == PluginManager::LoadState::NotFound ||
_manager->loadState("TgaImporter") == PluginManager::LoadState::NotFound)
if(_importerManager->loadState("AnyImageImporter") == PluginManager::LoadState::NotFound ||
_importerManager->loadState("TgaImporter") == PluginManager::LoadState::NotFound)
CORRADE_SKIP("AnyImageImporter or TgaImporter plugins not found.");
CORRADE_COMPARE_WITH(
Utility::Directory::join(DEBUGTOOLS_TEST_DIR, "CompareImageActual.tga"),
ExpectedRgb,
(CompareFileToImage{*_manager, 40.0f, 20.0f}));
(CompareFileToImage{*_importerManager, 40.0f, 20.0f}));
}
void CompareImageTest::fileToImageError() {
if(_manager->loadState("AnyImageImporter") == PluginManager::LoadState::NotFound ||
_manager->loadState("TgaImporter") == PluginManager::LoadState::NotFound)
if(_importerManager->loadState("AnyImageImporter") == PluginManager::LoadState::NotFound ||
_importerManager->loadState("TgaImporter") == PluginManager::LoadState::NotFound)
CORRADE_SKIP("AnyImageImporter or TgaImporter plugins not found.");
std::stringstream out;
{
TestSuite::Comparator<CompareFileToImage> compare{&*_manager, 20.0f, 10.0f};
TestSuite::Comparator<CompareFileToImage> compare{&*_importerManager, 20.0f, 10.0f};
CORRADE_VERIFY(!compare(
Utility::Directory::join(DEBUGTOOLS_TEST_DIR, "CompareImageActual.tga"),
ExpectedRgb));
@ -996,14 +996,14 @@ void CompareImageTest::fileToImagePluginLoadFailed() {
}
void CompareImageTest::fileToImageActualLoadFailed() {
if(_manager->loadState("AnyImageImporter") == PluginManager::LoadState::NotFound ||
_manager->loadState("TgaImporter") == PluginManager::LoadState::NotFound)
if(_importerManager->loadState("AnyImageImporter") == PluginManager::LoadState::NotFound ||
_importerManager->loadState("TgaImporter") == PluginManager::LoadState::NotFound)
CORRADE_SKIP("AnyImageImporter or TgaImporter plugins not found.");
std::stringstream out;
{
TestSuite::Comparator<CompareFileToImage> compare{&*_manager, 20.0f, 10.0f};
TestSuite::Comparator<CompareFileToImage> compare{&*_importerManager, 20.0f, 10.0f};
CORRADE_VERIFY(!compare("nonexistent.tga", ExpectedRgb));
Debug d{&out, Debug::Flag::DisableColors};
compare.printErrorMessage(d, "a", "b");

Loading…
Cancel
Save