From 690dde3440070d916fc191db9ae8ece2a2b4d362 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Luis=20D=C3=ADaz=20M=C3=A1s?= Date: Thu, 14 Mar 2019 19:26:46 +0100 Subject: [PATCH] Add tests for ImageFactory::checkMode (for all the supported image types) --- include/exiv2/image_types.hpp | 1 - include/exiv2/types.hpp | 31 +++- unitTests/test_ImageFactory.cpp | 254 ++++++++++++++++++++++++++++++++ 3 files changed, 281 insertions(+), 5 deletions(-) diff --git a/include/exiv2/image_types.hpp b/include/exiv2/image_types.hpp index e812d2d7..6b9d90d1 100644 --- a/include/exiv2/image_types.hpp +++ b/include/exiv2/image_types.hpp @@ -49,7 +49,6 @@ namespace Exiv2 { rw2, ///< pgf, ///< webp, ///< - bigtiff, ///< eps, bmff, }; diff --git a/include/exiv2/types.hpp b/include/exiv2/types.hpp index a0f8a860..6d40d2fb 100644 --- a/include/exiv2/types.hpp +++ b/include/exiv2/types.hpp @@ -68,16 +68,39 @@ namespace Exiv2 { typedef std::pair Rational; //! Type to express the byte order (little or big endian) - enum ByteOrder { invalidByteOrder, littleEndian, bigEndian }; + enum ByteOrder + { + invalidByteOrder, + littleEndian, + bigEndian, + }; //! Type to indicate write method used by TIFF parsers - enum WriteMethod { wmIntrusive, wmNonIntrusive }; + enum WriteMethod + { + wmIntrusive, + wmNonIntrusive, + }; //! An identifier for each type of metadata - enum MetadataId { mdNone=0, mdExif=1, mdIptc=2, mdComment=4, mdXmp=8, mdIccProfile=16 }; + enum MetadataId + { + mdNone = 0, + mdExif = 1, + mdIptc = 2, + mdComment = 4, + mdXmp = 8, + mdIccProfile = 16, + }; //! An identifier for each mode of metadata support - enum AccessMode { amNone=0, amRead=1, amWrite=2, amReadWrite=3 }; + enum AccessMode + { + amNone = 0, + amRead = 1, + amWrite = 2, + amReadWrite = 3, + }; /*! @brief %Exiv2 value type identifiers. diff --git a/unitTests/test_ImageFactory.cpp b/unitTests/test_ImageFactory.cpp index 8d9f4736..85e51a90 100644 --- a/unitTests/test_ImageFactory.cpp +++ b/unitTests/test_ImageFactory.cpp @@ -139,3 +139,257 @@ TEST(TheImageFactory, loadInstancesDifferentImageTypes) EXPECT_EQ(ImageType::jp2, ImageFactory::getType(imagePath)); EXPECT_NO_THROW(ImageFactory::open(imagePath, false)); } + +TEST(TheImageFactory, getsExpectedModesForJp2Images) +{ + EXPECT_EQ(amNone, ImageFactory::checkMode(ImageType::jp2, mdNone)); + EXPECT_EQ(amReadWrite, ImageFactory::checkMode(ImageType::jp2, mdExif)); + EXPECT_EQ(amReadWrite, ImageFactory::checkMode(ImageType::jp2, mdIptc)); + EXPECT_EQ(amReadWrite, ImageFactory::checkMode(ImageType::jp2, mdXmp)); + EXPECT_EQ(amNone, ImageFactory::checkMode(ImageType::jp2, mdComment)); + EXPECT_EQ(amNone, ImageFactory::checkMode(ImageType::jp2, mdIccProfile)); +} + +TEST(TheImageFactory, getsExpectedModesForJpegImages) +{ + EXPECT_EQ(amNone, ImageFactory::checkMode(ImageType::jpeg, mdNone)); + EXPECT_EQ(amReadWrite, ImageFactory::checkMode(ImageType::jpeg, mdExif)); + EXPECT_EQ(amReadWrite, ImageFactory::checkMode(ImageType::jpeg, mdIptc)); + EXPECT_EQ(amReadWrite, ImageFactory::checkMode(ImageType::jpeg, mdXmp)); + EXPECT_EQ(amReadWrite, ImageFactory::checkMode(ImageType::jpeg, mdComment)); + EXPECT_EQ(amNone, ImageFactory::checkMode(ImageType::jpeg, mdIccProfile)); +} + +TEST(TheImageFactory, getsExpectedModesForExvImages) +{ + EXPECT_EQ(amNone, ImageFactory::checkMode(ImageType::exv, mdNone)); + EXPECT_EQ(amReadWrite, ImageFactory::checkMode(ImageType::exv, mdExif)); + EXPECT_EQ(amReadWrite, ImageFactory::checkMode(ImageType::exv, mdIptc)); + EXPECT_EQ(amReadWrite, ImageFactory::checkMode(ImageType::exv, mdXmp)); + EXPECT_EQ(amReadWrite, ImageFactory::checkMode(ImageType::exv, mdComment)); + EXPECT_EQ(amNone, ImageFactory::checkMode(ImageType::exv, mdIccProfile)); +} + +TEST(TheImageFactory, getsExpectedModesForPgfImages) +{ + EXPECT_EQ(amNone, ImageFactory::checkMode(ImageType::pgf, mdNone)); + EXPECT_EQ(amReadWrite, ImageFactory::checkMode(ImageType::pgf, mdExif)); + EXPECT_EQ(amReadWrite, ImageFactory::checkMode(ImageType::pgf, mdIptc)); + EXPECT_EQ(amReadWrite, ImageFactory::checkMode(ImageType::pgf, mdXmp)); + EXPECT_EQ(amReadWrite, ImageFactory::checkMode(ImageType::pgf, mdComment)); + EXPECT_EQ(amNone, ImageFactory::checkMode(ImageType::pgf, mdIccProfile)); +} + +#ifdef EXV_HAVE_LIBZ +TEST(TheImageFactory, getsExpectedModesForPngImages) +{ + EXPECT_EQ(amNone, ImageFactory::checkMode(ImageType::png, mdNone)); + EXPECT_EQ(amReadWrite, ImageFactory::checkMode(ImageType::png, mdExif)); + EXPECT_EQ(amReadWrite, ImageFactory::checkMode(ImageType::png, mdIptc)); + EXPECT_EQ(amReadWrite, ImageFactory::checkMode(ImageType::png, mdXmp)); + EXPECT_EQ(amReadWrite, ImageFactory::checkMode(ImageType::png, mdComment)); + EXPECT_EQ(amNone, ImageFactory::checkMode(ImageType::png, mdIccProfile)); +} +#endif + +TEST(TheImageFactory, getsExpectedModesForBmpImages) +{ + EXPECT_EQ(amNone, ImageFactory::checkMode(ImageType::bmp, mdNone)); + EXPECT_EQ(amNone, ImageFactory::checkMode(ImageType::bmp, mdExif)); + EXPECT_EQ(amNone, ImageFactory::checkMode(ImageType::bmp, mdIptc)); + EXPECT_EQ(amNone, ImageFactory::checkMode(ImageType::bmp, mdXmp)); + EXPECT_EQ(amNone, ImageFactory::checkMode(ImageType::bmp, mdComment)); + EXPECT_EQ(amNone, ImageFactory::checkMode(ImageType::bmp, mdIccProfile)); +} + +TEST(TheImageFactory, getsExpectedModesForCr2Images) +{ + EXPECT_EQ(amNone, ImageFactory::checkMode(ImageType::cr2, mdNone)); + EXPECT_EQ(amReadWrite, ImageFactory::checkMode(ImageType::cr2, mdExif)); + EXPECT_EQ(amReadWrite, ImageFactory::checkMode(ImageType::cr2, mdIptc)); + EXPECT_EQ(amReadWrite, ImageFactory::checkMode(ImageType::cr2, mdXmp)); + EXPECT_EQ(amNone, ImageFactory::checkMode(ImageType::cr2, mdComment)); + EXPECT_EQ(amNone, ImageFactory::checkMode(ImageType::cr2, mdIccProfile)); +} + +TEST(TheImageFactory, getsExpectedModesForCrwImages) +{ + EXPECT_EQ(amNone, ImageFactory::checkMode(ImageType::crw, mdNone)); + EXPECT_EQ(amReadWrite, ImageFactory::checkMode(ImageType::crw, mdExif)); + EXPECT_EQ(amNone, ImageFactory::checkMode(ImageType::crw, mdIptc)); + EXPECT_EQ(amNone, ImageFactory::checkMode(ImageType::crw, mdXmp)); + EXPECT_EQ(amReadWrite, ImageFactory::checkMode(ImageType::crw, mdComment)); + EXPECT_EQ(amNone, ImageFactory::checkMode(ImageType::crw, mdIccProfile)); +} + +TEST(TheImageFactory, getsExpectedModesForGifImages) +{ + EXPECT_EQ(amNone, ImageFactory::checkMode(ImageType::gif, mdNone)); + EXPECT_EQ(amNone, ImageFactory::checkMode(ImageType::gif, mdExif)); + EXPECT_EQ(amNone, ImageFactory::checkMode(ImageType::gif, mdIptc)); + EXPECT_EQ(amNone, ImageFactory::checkMode(ImageType::gif, mdXmp)); + EXPECT_EQ(amNone, ImageFactory::checkMode(ImageType::gif, mdComment)); + EXPECT_EQ(amNone, ImageFactory::checkMode(ImageType::gif, mdIccProfile)); +} + +TEST(TheImageFactory, getsExpectedModesForMrwImages) +{ + EXPECT_EQ(amNone, ImageFactory::checkMode(ImageType::mrw, mdNone)); + EXPECT_EQ(amRead, ImageFactory::checkMode(ImageType::mrw, mdExif)); + EXPECT_EQ(amRead, ImageFactory::checkMode(ImageType::mrw, mdIptc)); + EXPECT_EQ(amRead, ImageFactory::checkMode(ImageType::mrw, mdXmp)); + EXPECT_EQ(amNone, ImageFactory::checkMode(ImageType::mrw, mdComment)); + EXPECT_EQ(amNone, ImageFactory::checkMode(ImageType::mrw, mdIccProfile)); +} + +TEST(TheImageFactory, getsExpectedModesForOrfImages) +{ + EXPECT_EQ(amNone, ImageFactory::checkMode(ImageType::orf, mdNone)); + EXPECT_EQ(amReadWrite, ImageFactory::checkMode(ImageType::orf, mdExif)); + EXPECT_EQ(amReadWrite, ImageFactory::checkMode(ImageType::orf, mdIptc)); + EXPECT_EQ(amReadWrite, ImageFactory::checkMode(ImageType::orf, mdXmp)); + EXPECT_EQ(amNone, ImageFactory::checkMode(ImageType::orf, mdComment)); + EXPECT_EQ(amNone, ImageFactory::checkMode(ImageType::orf, mdIccProfile)); +} + +TEST(TheImageFactory, getsExpectedModesForPsdImages) +{ + EXPECT_EQ(amNone, ImageFactory::checkMode(ImageType::psd, mdNone)); + EXPECT_EQ(amReadWrite, ImageFactory::checkMode(ImageType::psd, mdExif)); + EXPECT_EQ(amReadWrite, ImageFactory::checkMode(ImageType::psd, mdIptc)); + EXPECT_EQ(amReadWrite, ImageFactory::checkMode(ImageType::psd, mdXmp)); + EXPECT_EQ(amNone, ImageFactory::checkMode(ImageType::psd, mdComment)); + EXPECT_EQ(amNone, ImageFactory::checkMode(ImageType::psd, mdIccProfile)); +} + +TEST(TheImageFactory, getsExpectedModesForRafImages) +{ + EXPECT_EQ(amNone, ImageFactory::checkMode(ImageType::raf, mdNone)); + EXPECT_EQ(amRead, ImageFactory::checkMode(ImageType::raf, mdExif)); + EXPECT_EQ(amRead, ImageFactory::checkMode(ImageType::raf, mdIptc)); + EXPECT_EQ(amRead, ImageFactory::checkMode(ImageType::raf, mdXmp)); + EXPECT_EQ(amNone, ImageFactory::checkMode(ImageType::raf, mdComment)); + EXPECT_EQ(amNone, ImageFactory::checkMode(ImageType::raf, mdIccProfile)); +} + +TEST(TheImageFactory, getsExpectedModesForRw2Images) +{ + EXPECT_EQ(amNone, ImageFactory::checkMode(ImageType::rw2, mdNone)); + EXPECT_EQ(amRead, ImageFactory::checkMode(ImageType::rw2, mdExif)); + EXPECT_EQ(amRead, ImageFactory::checkMode(ImageType::rw2, mdIptc)); + EXPECT_EQ(amRead, ImageFactory::checkMode(ImageType::rw2, mdXmp)); + EXPECT_EQ(amNone, ImageFactory::checkMode(ImageType::rw2, mdComment)); + EXPECT_EQ(amNone, ImageFactory::checkMode(ImageType::rw2, mdIccProfile)); +} + +TEST(TheImageFactory, getsExpectedModesForTgaImages) +{ + EXPECT_EQ(amNone, ImageFactory::checkMode(ImageType::tga, mdNone)); + EXPECT_EQ(amNone, ImageFactory::checkMode(ImageType::tga, mdExif)); + EXPECT_EQ(amNone, ImageFactory::checkMode(ImageType::tga, mdIptc)); + EXPECT_EQ(amNone, ImageFactory::checkMode(ImageType::tga, mdXmp)); + EXPECT_EQ(amNone, ImageFactory::checkMode(ImageType::tga, mdComment)); + EXPECT_EQ(amNone, ImageFactory::checkMode(ImageType::tga, mdIccProfile)); +} + +TEST(TheImageFactory, getsExpectedModesForWebpImages) +{ + EXPECT_EQ(amNone, ImageFactory::checkMode(ImageType::webp, mdNone)); + EXPECT_EQ(amReadWrite, ImageFactory::checkMode(ImageType::webp, mdExif)); + EXPECT_EQ(amNone, ImageFactory::checkMode(ImageType::webp, mdIptc)); + EXPECT_EQ(amReadWrite, ImageFactory::checkMode(ImageType::webp, mdXmp)); + EXPECT_EQ(amNone, ImageFactory::checkMode(ImageType::webp, mdComment)); + EXPECT_EQ(amNone, ImageFactory::checkMode(ImageType::webp, mdIccProfile)); +} + +TEST(TheImageFactory, getsExpectedModesForTiffImages) +{ + EXPECT_EQ(amNone, ImageFactory::checkMode(ImageType::tiff, mdNone)); + EXPECT_EQ(amReadWrite, ImageFactory::checkMode(ImageType::tiff, mdExif)); + EXPECT_EQ(amReadWrite, ImageFactory::checkMode(ImageType::tiff, mdIptc)); + EXPECT_EQ(amReadWrite, ImageFactory::checkMode(ImageType::tiff, mdXmp)); + EXPECT_EQ(amNone, ImageFactory::checkMode(ImageType::tiff, mdComment)); + EXPECT_EQ(amNone, ImageFactory::checkMode(ImageType::tiff, mdIccProfile)); +} + +TEST(TheImageFactory, getsExpectedModesForDngImages) +{ + EXPECT_EQ(amNone, ImageFactory::checkMode(ImageType::dng, mdNone)); + EXPECT_EQ(amReadWrite, ImageFactory::checkMode(ImageType::dng, mdExif)); + EXPECT_EQ(amReadWrite, ImageFactory::checkMode(ImageType::dng, mdIptc)); + EXPECT_EQ(amReadWrite, ImageFactory::checkMode(ImageType::dng, mdXmp)); + EXPECT_EQ(amNone, ImageFactory::checkMode(ImageType::dng, mdComment)); + EXPECT_EQ(amNone, ImageFactory::checkMode(ImageType::dng, mdIccProfile)); +} + +TEST(TheImageFactory, getsExpectedModesForNefImages) +{ + EXPECT_EQ(amNone, ImageFactory::checkMode(ImageType::nef, mdNone)); + EXPECT_EQ(amReadWrite, ImageFactory::checkMode(ImageType::nef, mdExif)); + EXPECT_EQ(amReadWrite, ImageFactory::checkMode(ImageType::nef, mdIptc)); + EXPECT_EQ(amReadWrite, ImageFactory::checkMode(ImageType::nef, mdXmp)); + EXPECT_EQ(amNone, ImageFactory::checkMode(ImageType::nef, mdComment)); + EXPECT_EQ(amNone, ImageFactory::checkMode(ImageType::nef, mdIccProfile)); +} + +TEST(TheImageFactory, getsExpectedModesForPefImages) +{ + EXPECT_EQ(amNone, ImageFactory::checkMode(ImageType::pef, mdNone)); + EXPECT_EQ(amReadWrite, ImageFactory::checkMode(ImageType::pef, mdExif)); + EXPECT_EQ(amReadWrite, ImageFactory::checkMode(ImageType::pef, mdIptc)); + EXPECT_EQ(amReadWrite, ImageFactory::checkMode(ImageType::pef, mdXmp)); + EXPECT_EQ(amNone, ImageFactory::checkMode(ImageType::pef, mdComment)); + EXPECT_EQ(amNone, ImageFactory::checkMode(ImageType::pef, mdIccProfile)); +} + +TEST(TheImageFactory, getsExpectedModesForArwImages) +{ + EXPECT_EQ(amNone, ImageFactory::checkMode(ImageType::arw, mdNone)); + EXPECT_EQ(amRead, ImageFactory::checkMode(ImageType::arw, mdExif)); + EXPECT_EQ(amRead, ImageFactory::checkMode(ImageType::arw, mdIptc)); + EXPECT_EQ(amRead, ImageFactory::checkMode(ImageType::arw, mdXmp)); + EXPECT_EQ(amNone, ImageFactory::checkMode(ImageType::arw, mdComment)); + EXPECT_EQ(amNone, ImageFactory::checkMode(ImageType::arw, mdIccProfile)); +} + +TEST(TheImageFactory, getsExpectedModesForSr2Images) +{ + EXPECT_EQ(amNone, ImageFactory::checkMode(ImageType::sr2, mdNone)); + EXPECT_EQ(amRead, ImageFactory::checkMode(ImageType::sr2, mdExif)); + EXPECT_EQ(amRead, ImageFactory::checkMode(ImageType::sr2, mdIptc)); + EXPECT_EQ(amRead, ImageFactory::checkMode(ImageType::sr2, mdXmp)); + EXPECT_EQ(amNone, ImageFactory::checkMode(ImageType::sr2, mdComment)); + EXPECT_EQ(amNone, ImageFactory::checkMode(ImageType::sr2, mdIccProfile)); +} + +TEST(TheImageFactory, getsExpectedModesForSrwImages) +{ + EXPECT_EQ(amNone, ImageFactory::checkMode(ImageType::srw, mdNone)); + EXPECT_EQ(amReadWrite, ImageFactory::checkMode(ImageType::srw, mdExif)); + EXPECT_EQ(amReadWrite, ImageFactory::checkMode(ImageType::srw, mdIptc)); + EXPECT_EQ(amReadWrite, ImageFactory::checkMode(ImageType::srw, mdXmp)); + EXPECT_EQ(amNone, ImageFactory::checkMode(ImageType::srw, mdComment)); + EXPECT_EQ(amNone, ImageFactory::checkMode(ImageType::srw, mdIccProfile)); +} + +TEST(TheImageFactory, getsExpectedModesForXmpImages) +{ + EXPECT_EQ(amNone, ImageFactory::checkMode(ImageType::xmp, mdNone)); + EXPECT_EQ(amReadWrite, ImageFactory::checkMode(ImageType::xmp, mdExif)); + EXPECT_EQ(amReadWrite, ImageFactory::checkMode(ImageType::xmp, mdIptc)); + EXPECT_EQ(amReadWrite, ImageFactory::checkMode(ImageType::xmp, mdXmp)); + EXPECT_EQ(amNone, ImageFactory::checkMode(ImageType::xmp, mdComment)); + EXPECT_EQ(amNone, ImageFactory::checkMode(ImageType::xmp, mdIccProfile)); +} + +TEST(TheImageFactory, getsExpectedModesForNoneValue) +{ + EXPECT_EQ(amNone, ImageFactory::checkMode(ImageType::none, mdNone)); + EXPECT_EQ(amNone, ImageFactory::checkMode(ImageType::none, mdExif)); + EXPECT_EQ(amNone, ImageFactory::checkMode(ImageType::none, mdIptc)); + EXPECT_EQ(amNone, ImageFactory::checkMode(ImageType::none, mdXmp)); + EXPECT_EQ(amNone, ImageFactory::checkMode(ImageType::none, mdComment)); + EXPECT_EQ(amNone, ImageFactory::checkMode(ImageType::none, mdIccProfile)); +} + +/// \todo check why JpegBase is taking ImageType in the constructor