diff options
Diffstat (limited to 'tests')
-rw-r--r-- | tests/CodexTest.cpp | 32 |
1 files changed, 32 insertions, 0 deletions
diff --git a/tests/CodexTest.cpp b/tests/CodexTest.cpp index b53cbe1a4d..697ba749f7 100644 --- a/tests/CodexTest.cpp +++ b/tests/CodexTest.cpp @@ -10,9 +10,11 @@ #include "SkBitmap.h" #include "SkCodec.h" #include "SkData.h" +#include "SkImageDecoder.h" #include "SkMD5.h" #include "SkRandom.h" #include "SkStream.h" +#include "SkStreamPriv.h" #include "SkPngChunkReader.h" #include "Test.h" @@ -845,3 +847,33 @@ DEF_TEST(Codec_pngChunkReader, r) { REPORTER_ASSERT(r, chunkReader.allHaveBeenSeen()); } #endif // PNG_READ_UNKNOWN_CHUNKS_SUPPORTED + +// SkCodec's wbmp decoder was initially more restrictive than SkImageDecoder. +// It required the second byte to be zero. But SkImageDecoder allowed a couple +// of bits to be 1 (so long as they do not overlap with 0x9F). Test that +// SkCodec now supports an image with these bits set. +DEF_TEST(Codec_wbmp, r) { + const char* path = "mandrill.wbmp"; + SkAutoTDelete<SkStream> stream(resource(path)); + if (!stream) { + SkDebugf("Missing resource '%s'\n", path); + return; + } + + // Modify the stream to contain a second byte with some bits set. + SkAutoTUnref<SkData> data(SkCopyStreamToData(stream)); + uint8_t* writeableData = static_cast<uint8_t*>(data->writable_data()); + writeableData[1] = static_cast<uint8_t>(~0x9F); + + // SkImageDecoder supports this. + SkBitmap bitmap; + REPORTER_ASSERT(r, SkImageDecoder::DecodeMemory(data->data(), data->size(), &bitmap)); + + // So SkCodec should, too. + SkAutoTDelete<SkCodec> codec(SkCodec::NewFromData(data)); + REPORTER_ASSERT(r, codec); + if (!codec) { + return; + } + test_info(r, codec, codec->getInfo(), SkCodec::kSuccess, nullptr); +} |