| Index: tests/CodexTest.cpp
|
| diff --git a/tests/CodexTest.cpp b/tests/CodexTest.cpp
|
| index b7f1584a16a29a52724c44e752fc7e9f56897d29..24846a69b9654d6dcb4533c7ce992f0d2472156d 100644
|
| --- a/tests/CodexTest.cpp
|
| +++ b/tests/CodexTest.cpp
|
| @@ -42,6 +42,26 @@ static void compare_to_good_digest(skiatest::Reporter* r, const SkMD5::Digest& g
|
| REPORTER_ASSERT(r, digest == goodDigest);
|
| }
|
|
|
| +/**
|
| + * Test decoding an SkCodec to a particular SkImageInfo.
|
| + *
|
| + * Calling getPixels(info) should return expectedResult, and if goodDigest is non NULL,
|
| + * the resulting decode should match.
|
| + */
|
| +static void test_info(skiatest::Reporter* r, SkCodec* codec, const SkImageInfo& info,
|
| + SkCodec::Result expectedResult, const SkMD5::Digest* goodDigest) {
|
| + SkBitmap bm;
|
| + bm.allocPixels(info);
|
| + SkAutoLockPixels autoLockPixels(bm);
|
| +
|
| + SkCodec::Result result = codec->getPixels(info, bm.getPixels(), bm.rowBytes());
|
| + REPORTER_ASSERT(r, result == expectedResult);
|
| +
|
| + if (goodDigest) {
|
| + compare_to_good_digest(r, *goodDigest, bm);
|
| + }
|
| +}
|
| +
|
| SkIRect generate_random_subset(SkRandom* rand, int w, int h) {
|
| SkIRect rect;
|
| do {
|
| @@ -86,14 +106,32 @@ static void check(skiatest::Reporter* r,
|
| SkMD5::Digest digest;
|
| md5(bm, &digest);
|
|
|
| - bm.eraseColor(SK_ColorYELLOW);
|
| -
|
| - result =
|
| - codec->getPixels(info, bm.getPixels(), bm.rowBytes(), NULL, NULL, NULL);
|
| -
|
| - REPORTER_ASSERT(r, result == SkCodec::kSuccess);
|
| // verify that re-decoding gives the same result.
|
| - compare_to_good_digest(r, digest, bm);
|
| + test_info(r, codec, info, SkCodec::kSuccess, &digest);
|
| +
|
| + {
|
| + // Check alpha type conversions
|
| + if (info.alphaType() == kOpaque_SkAlphaType) {
|
| + test_info(r, codec, info.makeAlphaType(kUnpremul_SkAlphaType),
|
| + SkCodec::kInvalidConversion, NULL);
|
| + test_info(r, codec, info.makeAlphaType(kPremul_SkAlphaType),
|
| + SkCodec::kInvalidConversion, NULL);
|
| + } else {
|
| + // Decoding to opaque should fail
|
| + test_info(r, codec, info.makeAlphaType(kOpaque_SkAlphaType),
|
| + SkCodec::kInvalidConversion, NULL);
|
| + SkAlphaType otherAt = info.alphaType();
|
| + if (kPremul_SkAlphaType == otherAt) {
|
| + otherAt = kUnpremul_SkAlphaType;
|
| + } else {
|
| + otherAt = kPremul_SkAlphaType;
|
| + }
|
| + // The other non-opaque alpha type should always succeed, but not match.
|
| + test_info(r, codec, info.makeAlphaType(otherAt), SkCodec::kSuccess, NULL);
|
| + }
|
| + }
|
| +
|
| + // Scanline decoding follows.
|
|
|
| stream.reset(resource(path));
|
| SkAutoTDelete<SkScanlineDecoder> scanlineDecoder(
|
|
|