diff options
Diffstat (limited to 'tests/ExifTest.cpp')
-rw-r--r-- | tests/ExifTest.cpp | 49 |
1 files changed, 46 insertions, 3 deletions
diff --git a/tests/ExifTest.cpp b/tests/ExifTest.cpp index 181f0f9f04..f2eec7a98e 100644 --- a/tests/ExifTest.cpp +++ b/tests/ExifTest.cpp @@ -6,7 +6,12 @@ */ #include "Resources.h" +#include "SkBitmap.h" #include "SkCodec.h" +#include "SkColor.h" +#include "SkImageInfo.h" +#include "SkJpegEncoder.h" +#include "SkStream.h" #include "Test.h" DEF_TEST(ExifOrientation, r) { @@ -18,11 +23,49 @@ DEF_TEST(ExifOrientation, r) { std::unique_ptr<SkCodec> codec(SkCodec::MakeFromStream(std::move(stream))); REPORTER_ASSERT(r, nullptr != codec); - SkCodec::Origin origin = codec->getOrigin(); - REPORTER_ASSERT(r, SkCodec::kTopRight_Origin == origin); + SkEncodedOrigin origin = codec->getOrigin(); + REPORTER_ASSERT(r, kTopRight_SkEncodedOrigin == origin); codec = SkCodec::MakeFromStream(GetResourceAsStream("mandrill_512_q075.jpg")); REPORTER_ASSERT(r, nullptr != codec); origin = codec->getOrigin(); - REPORTER_ASSERT(r, SkCodec::kTopLeft_Origin == origin); + REPORTER_ASSERT(r, kTopLeft_SkEncodedOrigin == origin); } + +#ifdef SK_HAS_EXIF_LIBRARY +DEF_TEST(ExifWriteOrientation, r) { + SkBitmap bm; + bm.allocPixels(SkImageInfo::MakeN32Premul(100, 100)); + bm.eraseColor(SK_ColorBLUE); + SkPixmap pm; + if (!bm.peekPixels(&pm)) { + ERRORF(r, "failed to peek pixels"); + return; + } + for (auto o : { kTopLeft_SkEncodedOrigin, + kTopRight_SkEncodedOrigin, + kBottomRight_SkEncodedOrigin, + kBottomLeft_SkEncodedOrigin, + kLeftTop_SkEncodedOrigin, + kRightTop_SkEncodedOrigin, + kRightBottom_SkEncodedOrigin, + kLeftBottom_SkEncodedOrigin }) { + SkDynamicMemoryWStream stream; + SkJpegEncoder::Options options; + options.fOrigin = o; + if (!SkJpegEncoder::Encode(&stream, pm, options)) { + ERRORF(r, "Failed to encode with orientation %i", o); + return; + } + + auto data = stream.detachAsData(); + auto codec = SkCodec::MakeFromData(std::move(data)); + if (!codec) { + ERRORF(r, "Failed to create a codec with orientation %i", o); + return; + } + + REPORTER_ASSERT(r, codec->getOrigin() == o); + } +} +#endif |