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 f2486e36c9d2d118aab253a8eb86408812b7d32e..5c0483ede45b2c9aa101c9c37ba8bdbd993efa27 100644 |
--- a/Source/WebKit/chromium/tests/GIFImageDecoderTest.cpp |
+++ b/Source/WebKit/chromium/tests/WEBPImageDecoderTest.cpp |
@@ -30,11 +30,13 @@ |
#include "config.h" |
-#include "core/platform/image-decoders/gif/GIFImageDecoder.h" |
+#include "core/platform/image-decoders/webp/WEBPImageDecoder.h" |
-#include <gtest/gtest.h> |
+#include "core/page/RuntimeEnabledFeatures.h" |
#include "core/platform/FileSystem.h" |
#include "core/platform/SharedBuffer.h" |
+#include <base/basictypes.h> |
+#include <gtest/gtest.h> |
#include <public/Platform.h> |
#include <public/WebData.h> |
#include <public/WebSize.h> |
@@ -68,9 +70,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 +80,98 @@ static unsigned hashSkBitmap(const SkBitmap& bitmap) |
return StringHasher::hashMemory(bitmap.getPixels(), bitmap.getSize()); |
} |
-TEST(GIFImageDecoderTest, decodeTwoFrames) |
-{ |
- OwnPtr<GIFImageDecoder> decoder(createDecoder()); |
- |
- RefPtr<SharedBuffer> data = readFile("/LayoutTests/fast/images/resources/animated.gif"); |
- ASSERT_TRUE(data.get()); |
- decoder->setData(data.get(), true); |
- 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()); |
-} |
+class WEBPImageDecoderTest : public ::testing::Test { |
+protected: |
+ virtual void SetUp() |
+ { |
+ // Enable animated WebP for all the tests. |
+ WebCore::RuntimeEnabledFeatures::setAnimatedWebPEnabled(true); |
+ } |
+}; |
-TEST(GIFImageDecoderTest, parseAndDecode) |
+TEST_F(WEBPImageDecoderTest, verifyAnimationParameters) |
Noel Gordon
2013/04/29 18:41:57
I like that you added "Animation" to the test name
urvang (Google)
2013/04/30 13:14:15
Changed the name of the fixture class itself to in
|
{ |
- 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()); |
- // 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"); |
+ RefPtr<SharedBuffer> data = readFile("/LayoutTests/fast/images/resources/webp-animated.webp"); |
ASSERT_TRUE(data.get()); |
+ decoder->setData(data.get(), true); |
- 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_F(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_F(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 +181,13 @@ TEST(GIFImageDecoderTest, brokenSecondFrame) |
EXPECT_EQ(cAnimationLoopOnce, decoder->repetitionCount()); |
} |
-TEST(GIFImageDecoderTest, progressiveDecode) |
+TEST_F(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; |