Index: tests/CodecTest.cpp |
diff --git a/tests/CodecTest.cpp b/tests/CodecTest.cpp |
index 5ac19d9f7050efccd5ba34f364a851d8c77efd88..12d6ac8d3d2997a164da8219a4bd39f7923e349b 100644 |
--- a/tests/CodecTest.cpp |
+++ b/tests/CodecTest.cpp |
@@ -103,9 +103,49 @@ static void test_codec(skiatest::Reporter* r, Codec* codec, SkBitmap& bm, const |
{ |
// Test decoding to 565 |
SkImageInfo info565 = info.makeColorType(kRGB_565_SkColorType); |
- SkCodec::Result expected565 = info.alphaType() == kOpaque_SkAlphaType ? |
- expectedResult : SkCodec::kInvalidConversion; |
- test_info(r, codec, info565, expected565, nullptr); |
+ if (info.alphaType() == kOpaque_SkAlphaType) { |
+ // Decoding to 565 should succeed. |
+ SkBitmap bm565; |
+ bm565.allocPixels(info565); |
+ SkAutoLockPixels alp(bm565); |
+ |
+ // This will allow comparison even if the image is incomplete. |
+ bm565.eraseColor(SK_ColorBLACK); |
+ |
+ REPORTER_ASSERT(r, expectedResult == codec->getPixels(info565, |
+ bm565.getPixels(), bm565.rowBytes())); |
+ |
+ SkMD5::Digest digest565; |
+ md5(bm565, &digest565); |
+ |
+ // A dumb client's request for non-opaque should also succeed. |
+ for (auto alpha : { kPremul_SkAlphaType, kUnpremul_SkAlphaType }) { |
+ info565 = info565.makeAlphaType(alpha); |
+ test_info(r, codec, info565, expectedResult, &digest565); |
+ } |
+ } else { |
+ test_info(r, codec, info565, SkCodec::kInvalidConversion, nullptr); |
+ } |
+ } |
+ |
+ if (codec->getInfo().colorType() == kGray_8_SkColorType) { |
+ SkImageInfo grayInfo = codec->getInfo(); |
+ SkBitmap grayBm; |
+ grayBm.allocPixels(grayInfo); |
+ SkAutoLockPixels alp(grayBm); |
+ |
+ grayBm.eraseColor(SK_ColorBLACK); |
+ |
+ REPORTER_ASSERT(r, expectedResult == codec->getPixels(grayInfo, |
+ grayBm.getPixels(), grayBm.rowBytes())); |
+ |
+ SkMD5::Digest grayDigest; |
+ md5(grayBm, &grayDigest); |
+ |
+ for (auto alpha : { kPremul_SkAlphaType, kUnpremul_SkAlphaType }) { |
+ grayInfo = grayInfo.makeAlphaType(alpha); |
+ test_info(r, codec, grayInfo, expectedResult, &grayDigest); |
+ } |
} |
// Verify that re-decoding gives the same result. It is interesting to check this after |