From c499d02dbf3d9e7da91ec8ad77fcb1486317d591 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Luis=20D=C3=ADaz=20M=C3=A1s?= Date: Sun, 3 Mar 2019 13:01:13 +0100 Subject: [PATCH] Add characterisation test for ImageFactory::create(type) - Split test identifying which Images can be created and which not - Add tests for the ImageFactory::create(type, filePath) --- unitTests/CMakeLists.txt | 1 + unitTests/test_ImageFactory.cpp | 103 ++++++++++++++++++++++++++++++++ 2 files changed, 104 insertions(+) create mode 100644 unitTests/test_ImageFactory.cpp diff --git a/unitTests/CMakeLists.txt b/unitTests/CMakeLists.txt index a8e4b852..cac5856a 100644 --- a/unitTests/CMakeLists.txt +++ b/unitTests/CMakeLists.txt @@ -14,6 +14,7 @@ add_executable(unit_tests test_futils.cpp test_helper_functions.cpp test_image_int.cpp + test_ImageFactory.cpp test_IptcKey.cpp test_pngimage.cpp test_safe_op.cpp diff --git a/unitTests/test_ImageFactory.cpp b/unitTests/test_ImageFactory.cpp new file mode 100644 index 00000000..7f140dfb --- /dev/null +++ b/unitTests/test_ImageFactory.cpp @@ -0,0 +1,103 @@ +#include // Unit under test + +/// \todo we should not need to include all these headers to be able to use the Factory +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + +#include // Need to include this header for the Exiv2::Error exception + +#include + +using namespace Exiv2; + +TEST(TheImageFactory, createsInstancesForSupportedTypesInMemory) +{ + // Note that the constructor of these Image classes take an 'create' argument + EXPECT_NO_THROW(ImageFactory::create(ImageType::jp2)); + EXPECT_NO_THROW(ImageFactory::create(ImageType::jpeg)); + EXPECT_NO_THROW(ImageFactory::create(ImageType::exv)); + EXPECT_NO_THROW(ImageFactory::create(ImageType::pgf)); + EXPECT_NO_THROW(ImageFactory::create(ImageType::png)); +} + +TEST(TheImageFactory, cannotCreateInstancesForSomeTypesInMemory) +{ + // Note that the constructor of these Image classes does not take an 'create' argument + + EXPECT_THROW(ImageFactory::create(ImageType::bmp), Error); + EXPECT_THROW(ImageFactory::create(ImageType::cr2), Error); + EXPECT_THROW(ImageFactory::create(ImageType::crw), Error); + EXPECT_THROW(ImageFactory::create(ImageType::gif), Error); + EXPECT_THROW(ImageFactory::create(ImageType::mrw), Error); + EXPECT_THROW(ImageFactory::create(ImageType::orf), Error); + EXPECT_THROW(ImageFactory::create(ImageType::psd), Error); + EXPECT_THROW(ImageFactory::create(ImageType::raf), Error); + EXPECT_THROW(ImageFactory::create(ImageType::rw2), Error); +// EXPECT_THROW(ImageFactory::create(ImageType::tga), Error); // This one crashes badly + EXPECT_THROW(ImageFactory::create(ImageType::webp), Error); + + // TIFF + EXPECT_THROW(ImageFactory::create(ImageType::tiff), Error); + EXPECT_THROW(ImageFactory::create(ImageType::dng), Error); + EXPECT_THROW(ImageFactory::create(ImageType::nef), Error); + EXPECT_THROW(ImageFactory::create(ImageType::pef), Error); + EXPECT_THROW(ImageFactory::create(ImageType::arw), Error); + EXPECT_THROW(ImageFactory::create(ImageType::sr2), Error); + EXPECT_THROW(ImageFactory::create(ImageType::srw), Error); +} + + +TEST(TheImageFactory, createsInstancesForSupportedTypesInFiles) +{ + const std::string filePath("./here"); + + // Note that the constructor of these Image classes take an 'create' argument + EXPECT_NO_THROW(ImageFactory::create(ImageType::jp2, filePath)); + EXPECT_NO_THROW(ImageFactory::create(ImageType::jpeg, filePath)); + EXPECT_NO_THROW(ImageFactory::create(ImageType::exv, filePath)); + EXPECT_NO_THROW(ImageFactory::create(ImageType::pgf, filePath)); + EXPECT_NO_THROW(ImageFactory::create(ImageType::png, filePath)); + + EXPECT_EQ(0, std::remove(filePath.c_str())); +} + +TEST(TheImageFactory, cannotCreateInstancesForSomeTypesInFiles) +{ + const std::string filePath("./here"); + + // Note that the constructor of these Image classes does not take an 'create' argument + EXPECT_THROW(ImageFactory::create(ImageType::bmp, filePath), Error); + EXPECT_THROW(ImageFactory::create(ImageType::cr2, filePath), Error); + EXPECT_THROW(ImageFactory::create(ImageType::crw, filePath), Error); + EXPECT_THROW(ImageFactory::create(ImageType::gif, filePath), Error); + EXPECT_THROW(ImageFactory::create(ImageType::mrw, filePath), Error); + EXPECT_THROW(ImageFactory::create(ImageType::orf, filePath), Error); + EXPECT_THROW(ImageFactory::create(ImageType::psd, filePath), Error); + EXPECT_THROW(ImageFactory::create(ImageType::raf, filePath), Error); + EXPECT_THROW(ImageFactory::create(ImageType::rw2, filePath), Error); +// EXPECT_THROW(ImageFactory::create(ImageType::tga), Error); // This one crashes badly + EXPECT_THROW(ImageFactory::create(ImageType::webp, filePath), Error); + + // TIFF + EXPECT_THROW(ImageFactory::create(ImageType::tiff, filePath), Error); + EXPECT_THROW(ImageFactory::create(ImageType::dng, filePath), Error); + EXPECT_THROW(ImageFactory::create(ImageType::nef, filePath), Error); + EXPECT_THROW(ImageFactory::create(ImageType::pef, filePath), Error); + EXPECT_THROW(ImageFactory::create(ImageType::arw, filePath), Error); + EXPECT_THROW(ImageFactory::create(ImageType::sr2, filePath), Error); + EXPECT_THROW(ImageFactory::create(ImageType::srw, filePath), Error); +}