Index: ui/gfx/codec/png_codec_unittest.cc |
diff --git a/ui/gfx/codec/png_codec_unittest.cc b/ui/gfx/codec/png_codec_unittest.cc |
index 72ed67101bfd33bdd4f902bde2d396fb6d9a1afa..b31dbd2c289594c67c2d4a0f5f2bf2f1e0734f04 100644 |
--- a/ui/gfx/codec/png_codec_unittest.cc |
+++ b/ui/gfx/codec/png_codec_unittest.cc |
@@ -1,13 +1,15 @@ |
-// Copyright (c) 2006-2008 The Chromium Authors. All rights reserved. |
+// Copyright (c) 2011 The Chromium Authors. All rights reserved. |
// Use of this source code is governed by a BSD-style license that can be |
// found in the LICENSE file. |
-#include <math.h> |
+#include <algorithm> |
+#include <cmath> |
#include "testing/gtest/include/gtest/gtest.h" |
#include "third_party/skia/include/core/SkBitmap.h" |
#include "third_party/skia/include/core/SkUnPreMultiply.h" |
#include "ui/gfx/codec/png_codec.h" |
+#include "ui/gfx/size.h" |
namespace gfx { |
@@ -79,8 +81,10 @@ TEST(PNGCodec, EncodeDecodeRGB) { |
// encode |
std::vector<unsigned char> encoded; |
- EXPECT_TRUE(PNGCodec::Encode(&original[0], PNGCodec::FORMAT_RGB, w, h, |
- w * 3, false, &encoded)); |
+ EXPECT_TRUE(PNGCodec::Encode(&original[0], PNGCodec::FORMAT_RGB, |
+ Size(w, h), w * 3, false, |
+ std::vector<PNGCodec::Comment>(), |
+ &encoded)); |
// decode, it should have the same size as the original |
std::vector<unsigned char> decoded; |
@@ -106,8 +110,10 @@ TEST(PNGCodec, EncodeDecodeRGBA) { |
// encode |
std::vector<unsigned char> encoded; |
- EXPECT_TRUE(PNGCodec::Encode(&original[0], PNGCodec::FORMAT_RGBA, w, h, |
- w * 4, false, &encoded)); |
+ EXPECT_TRUE(PNGCodec::Encode(&original[0], PNGCodec::FORMAT_RGBA, |
+ Size(w, h), w * 4, false, |
+ std::vector<PNGCodec::Comment>(), |
+ &encoded)); |
// decode, it should have the same size as the original |
std::vector<unsigned char> decoded; |
@@ -140,8 +146,10 @@ TEST(PNGCodec, DecodeCorrupted) { |
// Make some compressed data. |
std::vector<unsigned char> compressed; |
- EXPECT_TRUE(PNGCodec::Encode(&original[0], PNGCodec::FORMAT_RGB, w, h, |
- w * 3, false, &compressed)); |
+ EXPECT_TRUE(PNGCodec::Encode(&original[0], PNGCodec::FORMAT_RGB, |
+ Size(w, h), w * 3, false, |
+ std::vector<PNGCodec::Comment>(), |
+ &compressed)); |
// Try decompressing a truncated version. |
EXPECT_FALSE(PNGCodec::Decode(&compressed[0], compressed.size() / 2, |
@@ -166,8 +174,10 @@ TEST(PNGCodec, EncodeDecodeBGRA) { |
// Encode. |
std::vector<unsigned char> encoded; |
- EXPECT_TRUE(PNGCodec::Encode(&original[0], PNGCodec::FORMAT_BGRA, w, h, |
- w * 4, false, &encoded)); |
+ EXPECT_TRUE(PNGCodec::Encode(&original[0], PNGCodec::FORMAT_BGRA, |
+ Size(w, h), w * 4, false, |
+ std::vector<PNGCodec::Comment>(), |
+ &encoded)); |
// Decode, it should have the same size as the original. |
std::vector<unsigned char> decoded; |
@@ -194,10 +204,10 @@ TEST(PNGCodec, StripAddAlpha) { |
// Encode RGBA data as RGB. |
std::vector<unsigned char> encoded; |
- EXPECT_TRUE(PNGCodec::Encode(&original_rgba[0], |
- PNGCodec::FORMAT_RGBA, |
- w, h, |
- w * 4, true, &encoded)); |
+ EXPECT_TRUE(PNGCodec::Encode(&original_rgba[0], PNGCodec::FORMAT_RGBA, |
+ Size(w, h), w * 4, true, |
+ std::vector<PNGCodec::Comment>(), |
+ &encoded)); |
// Decode the RGB to RGBA. |
std::vector<unsigned char> decoded; |
@@ -213,10 +223,10 @@ TEST(PNGCodec, StripAddAlpha) { |
ASSERT_TRUE(original_rgba == decoded); |
// Encode RGBA to RGBA. |
- EXPECT_TRUE(PNGCodec::Encode(&original_rgba[0], |
- PNGCodec::FORMAT_RGBA, |
- w, h, |
- w * 4, false, &encoded)); |
+ EXPECT_TRUE(PNGCodec::Encode(&original_rgba[0], PNGCodec::FORMAT_RGBA, |
+ Size(w, h), w * 4, false, |
+ std::vector<PNGCodec::Comment>(), |
+ &encoded)); |
// Decode the RGBA to RGB. |
EXPECT_TRUE(PNGCodec::Decode(&encoded[0], encoded.size(), |
@@ -294,4 +304,39 @@ TEST(PNGCodec, EncodeBGRASkBitmapDiscardTransparency) { |
} |
} |
+TEST(PNGCodec, EncodeWithComment) { |
+ const int w = 10, h = 10; |
+ |
+ std::vector<unsigned char> original; |
+ MakeRGBImage(w, h, &original); |
+ |
+ std::vector<unsigned char> encoded; |
+ std::vector<PNGCodec::Comment> comments; |
+ comments.push_back(PNGCodec::Comment("key", "text")); |
+ comments.push_back(PNGCodec::Comment("test", "something")); |
+ comments.push_back(PNGCodec::Comment("have some", "spaces in both")); |
+ EXPECT_TRUE(PNGCodec::Encode(&original[0], PNGCodec::FORMAT_RGB, |
+ Size(w, h), w * 3, false, comments, &encoded)); |
+ |
+ // Each chunk is of the form length (4 bytes), chunk type (tEXt), data, |
+ // checksum (4 bytes). Make sure we find all of them in the encoded |
+ // results. |
+ const unsigned char kExpected1[] = |
+ "\x00\x00\x00\x08tEXtkey\x00text\x9e\xe7\x66\x51"; |
+ const unsigned char kExpected2[] = |
+ "\x00\x00\x00\x0etEXttest\x00something\x29\xba\xef\xac"; |
+ const unsigned char kExpected3[] = |
+ "\x00\x00\x00\x18tEXthave some\x00spaces in both\x8d\x69\x34\x2d"; |
+ |
+ EXPECT_NE(search(encoded.begin(), encoded.end(), kExpected1, |
+ kExpected1 + arraysize(kExpected1)), |
+ encoded.end()); |
+ EXPECT_NE(search(encoded.begin(), encoded.end(), kExpected2, |
+ kExpected2 + arraysize(kExpected2)), |
+ encoded.end()); |
+ EXPECT_NE(search(encoded.begin(), encoded.end(), kExpected3, |
+ kExpected3 + arraysize(kExpected3)), |
+ encoded.end()); |
+} |
+ |
} // namespace gfx |