Index: Source/WebKit/chromium/tests/WEBPImageDecoderTest.cpp |
diff --git a/Source/WebKit/chromium/tests/GIFImageDecoderTest.cpp b/Source/WebKit/chromium/tests/WEBPImageDecoderTest.cpp |
similarity index 55% |
copy from Source/WebKit/chromium/tests/GIFImageDecoderTest.cpp |
copy to Source/WebKit/chromium/tests/WEBPImageDecoderTest.cpp |
index 8e2bd157a6b698d796b4175c53f48d57ffd53da1..9912f3dc0a371207fe50515039c745d9437b3d84 100644 |
--- a/Source/WebKit/chromium/tests/GIFImageDecoderTest.cpp |
+++ b/Source/WebKit/chromium/tests/WEBPImageDecoderTest.cpp |
@@ -30,10 +30,11 @@ |
#include "config.h" |
-#include "GIFImageDecoder.h" |
+#include "WEBPImageDecoder.h" |
#include "FileSystem.h" |
#include "SharedBuffer.h" |
+#include <base/basictypes.h> |
#include <gtest/gtest.h> |
#include <public/Platform.h> |
#include <public/WebData.h> |
@@ -68,9 +69,9 @@ static PassRefPtr<SharedBuffer> readFile(const char* fileName) |
return SharedBuffer::adoptVector(buffer); |
} |
-static PassOwnPtr<GIFImageDecoder> createDecoder() |
+static PassOwnPtr<WEBPImageDecoder> createDecoder() |
{ |
- return adoptPtr(new GIFImageDecoder(ImageSource::AlphaNotPremultiplied, ImageSource::GammaAndColorProfileApplied)); |
+ return adoptPtr(new WEBPImageDecoder(ImageSource::AlphaNotPremultiplied, ImageSource::GammaAndColorProfileApplied)); |
} |
static unsigned hashSkBitmap(const SkBitmap& bitmap) |
@@ -78,111 +79,89 @@ static unsigned hashSkBitmap(const SkBitmap& bitmap) |
return StringHasher::hashMemory(bitmap.getPixels(), bitmap.getSize()); |
} |
-TEST(GIFImageDecoderTest, decodeTwoFrames) |
+TEST(WEBPImageDecoderTest, verifyAnimationParameters) |
Alpha Left Google
2013/04/25 22:07:12
You can have these as TEST_F such that enabling an
urvang (Google)
2013/04/26 01:46:23
Done.
|
{ |
- OwnPtr<GIFImageDecoder> decoder(createDecoder()); |
- |
- RefPtr<SharedBuffer> data = readFile("/LayoutTests/fast/images/resources/animated.gif"); |
- ASSERT_TRUE(data.get()); |
- decoder->setData(data.get(), true); |
+ OwnPtr<WEBPImageDecoder> decoder(createDecoder()); |
EXPECT_EQ(cAnimationLoopOnce, decoder->repetitionCount()); |
- ImageFrame* frame = decoder->frameBufferAtIndex(0); |
- EXPECT_EQ(ImageFrame::FrameComplete, frame->status()); |
- EXPECT_EQ(16, frame->getSkBitmap().width()); |
- EXPECT_EQ(16, frame->getSkBitmap().height()); |
- |
- frame = decoder->frameBufferAtIndex(1); |
- EXPECT_EQ(ImageFrame::FrameComplete, frame->status()); |
- EXPECT_EQ(16, frame->getSkBitmap().width()); |
- EXPECT_EQ(16, frame->getSkBitmap().height()); |
- |
- EXPECT_EQ(2u, decoder->frameCount()); |
- EXPECT_EQ(cAnimationLoopInfinite, decoder->repetitionCount()); |
-} |
- |
-TEST(GIFImageDecoderTest, parseAndDecode) |
-{ |
- OwnPtr<GIFImageDecoder> decoder(createDecoder()); |
- |
- RefPtr<SharedBuffer> data = readFile("/LayoutTests/fast/images/resources/animated.gif"); |
+ RefPtr<SharedBuffer> data = readFile("/LayoutTests/fast/images/resources/webp-animated.webp"); |
ASSERT_TRUE(data.get()); |
decoder->setData(data.get(), true); |
- EXPECT_EQ(cAnimationLoopOnce, decoder->repetitionCount()); |
- |
- // This call will parse the entire file. |
- EXPECT_EQ(2u, decoder->frameCount()); |
- |
- ImageFrame* frame = decoder->frameBufferAtIndex(0); |
- EXPECT_EQ(ImageFrame::FrameComplete, frame->status()); |
- EXPECT_EQ(16, frame->getSkBitmap().width()); |
- EXPECT_EQ(16, frame->getSkBitmap().height()); |
- |
- frame = decoder->frameBufferAtIndex(1); |
- EXPECT_EQ(ImageFrame::FrameComplete, frame->status()); |
- EXPECT_EQ(16, frame->getSkBitmap().width()); |
- EXPECT_EQ(16, frame->getSkBitmap().height()); |
- EXPECT_EQ(cAnimationLoopInfinite, decoder->repetitionCount()); |
-} |
- |
-TEST(GIFImageDecoderTest, parseByteByByte) |
-{ |
- OwnPtr<GIFImageDecoder> decoder(createDecoder()); |
- |
- RefPtr<SharedBuffer> data = readFile("/LayoutTests/fast/images/resources/animated.gif"); |
- ASSERT_TRUE(data.get()); |
- |
- size_t frameCount = 0; |
- // Pass data to decoder byte by byte. |
- for (unsigned length = 1; length <= data->size(); ++length) { |
- RefPtr<SharedBuffer> tempData = SharedBuffer::create(data->data(), length); |
- decoder->setData(tempData.get(), length == data->size()); |
- |
- EXPECT_LE(frameCount, decoder->frameCount()); |
- frameCount = decoder->frameCount(); |
+ const int canvasWidth = 11; |
+ const int canvasHeight = 29; |
+ const int hasAlpha = true; |
+ const struct AnimParam { |
+ int xOffset, yOffset, width, height; |
+ ImageFrame::FrameDisposalMethod dispose; |
+ unsigned duration; |
+ } animParams[] = { |
+ { 0, 0, 11, 29, ImageFrame::DisposeKeep, 1000u }, |
+ { 2, 10, 7, 17, ImageFrame::DisposeKeep, 500u }, |
+ { 2, 2, 7, 16, ImageFrame::DisposeKeep, 1000u }, |
+ }; |
+ |
+ for (size_t i = 0; i < ARRAYSIZE_UNSAFE(animParams); ++i) { |
+ const ImageFrame* const frame = decoder->frameBufferAtIndex(i); |
+ EXPECT_EQ(ImageFrame::FrameComplete, frame->status()); |
+ EXPECT_EQ(canvasWidth, frame->getSkBitmap().width()); |
+ EXPECT_EQ(canvasHeight, frame->getSkBitmap().height()); |
+ EXPECT_EQ(hasAlpha, frame->hasAlpha()); |
+ EXPECT_EQ(animParams[i].xOffset, frame->originalFrameRect().x()); |
+ EXPECT_EQ(animParams[i].yOffset, frame->originalFrameRect().y()); |
+ EXPECT_EQ(animParams[i].width, frame->originalFrameRect().width()); |
+ EXPECT_EQ(animParams[i].height, frame->originalFrameRect().height()); |
+ EXPECT_EQ(animParams[i].dispose, frame->disposalMethod()); |
+ EXPECT_EQ(animParams[i].duration, frame->duration()); |
} |
- EXPECT_EQ(2u, decoder->frameCount()); |
- |
- decoder->frameBufferAtIndex(0); |
- decoder->frameBufferAtIndex(1); |
+ EXPECT_EQ(ARRAYSIZE_UNSAFE(animParams), decoder->frameCount()); |
EXPECT_EQ(cAnimationLoopInfinite, decoder->repetitionCount()); |
} |
-TEST(GIFImageDecoderTest, parseAndDecodeByteByByte) |
+TEST(WEBPImageDecoderTest, parseAndDecodeByteByByte) |
{ |
- OwnPtr<GIFImageDecoder> decoder(createDecoder()); |
- |
- RefPtr<SharedBuffer> data = readFile("/LayoutTests/fast/images/resources/animated-gif-with-offsets.gif"); |
- ASSERT_TRUE(data.get()); |
- |
- size_t frameCount = 0; |
- size_t framesDecoded = 0; |
- |
- // Pass data to decoder byte by byte. |
- for (unsigned length = 1; length <= data->size(); ++length) { |
- RefPtr<SharedBuffer> tempData = SharedBuffer::create(data->data(), length); |
- decoder->setData(tempData.get(), length == data->size()); |
- |
- EXPECT_LE(frameCount, decoder->frameCount()); |
- frameCount = decoder->frameCount(); |
+ const struct TestImage { |
+ const char* filename; |
+ unsigned frameCount; |
+ int repetitionCount; |
+ } testImages[] = { |
+ { "/LayoutTests/fast/images/resources/webp-animated.webp", 3u, cAnimationLoopInfinite }, |
+ { "/LayoutTests/fast/images/resources/webp-animated-icc-xmp.webp", 13u, 32000 }, |
+ }; |
+ |
+ for (size_t i = 0; i < ARRAYSIZE_UNSAFE(testImages); ++i) { |
+ OwnPtr<WEBPImageDecoder> decoder(createDecoder()); |
+ RefPtr<SharedBuffer> data = readFile(testImages[i].filename); |
+ ASSERT_TRUE(data.get()); |
+ |
+ size_t frameCount = 0; |
+ size_t framesDecoded = 0; |
+ |
+ // Pass data to decoder byte by byte. |
+ for (unsigned length = 1; length <= data->size(); ++length) { |
+ RefPtr<SharedBuffer> tempData = SharedBuffer::create(data->data(), length); |
+ decoder->setData(tempData.get(), length == data->size()); |
+ |
+ EXPECT_LE(frameCount, decoder->frameCount()); |
+ frameCount = decoder->frameCount(); |
+ |
+ ImageFrame* frame = decoder->frameBufferAtIndex(frameCount - 1); |
+ if (frame && frame->status() == ImageFrame::FrameComplete && framesDecoded < frameCount) |
+ ++framesDecoded; |
+ } |
- ImageFrame* frame = decoder->frameBufferAtIndex(frameCount - 1); |
- if (frame && frame->status() == ImageFrame::FrameComplete && framesDecoded < frameCount) |
- ++framesDecoded; |
+ EXPECT_EQ(testImages[i].frameCount, decoder->frameCount()); |
+ EXPECT_EQ(testImages[i].frameCount, framesDecoded); |
+ EXPECT_EQ(testImages[i].repetitionCount, decoder->repetitionCount()); |
} |
- |
- EXPECT_EQ(5u, decoder->frameCount()); |
- EXPECT_EQ(5u, framesDecoded); |
- EXPECT_EQ(cAnimationLoopInfinite, decoder->repetitionCount()); |
} |
-TEST(GIFImageDecoderTest, brokenSecondFrame) |
+TEST(WEBPImageDecoderTest, invalidImage) |
{ |
- OwnPtr<GIFImageDecoder> decoder(createDecoder()); |
+ OwnPtr<WEBPImageDecoder> decoder(createDecoder()); |
- RefPtr<SharedBuffer> data = readFile("/Source/WebKit/chromium/tests/data/broken.gif"); |
+ RefPtr<SharedBuffer> data = readFile("/LayoutTests/fast/images/resources/invalid-animated-webp.webp"); |
ASSERT_TRUE(data.get()); |
decoder->setData(data.get(), true); |
@@ -192,13 +171,13 @@ TEST(GIFImageDecoderTest, brokenSecondFrame) |
EXPECT_EQ(cAnimationLoopOnce, decoder->repetitionCount()); |
} |
-TEST(GIFImageDecoderTest, progressiveDecode) |
+TEST(WEBPImageDecoderTest, progressiveDecode) |
{ |
- RefPtr<SharedBuffer> fullData = readFile("/Source/WebKit/chromium/tests/data/radient.gif"); |
+ RefPtr<SharedBuffer> fullData = readFile("/LayoutTests/fast/images/resources/webp-animated.webp"); |
ASSERT_TRUE(fullData.get()); |
const size_t fullLength = fullData->size(); |
- OwnPtr<GIFImageDecoder> decoder; |
+ OwnPtr<WEBPImageDecoder> decoder; |
ImageFrame* frame; |
Vector<unsigned> truncatedHashes; |