| Index: webkit/tools/test_shell/image_decoder_unittest.cc
|
| diff --git a/webkit/tools/test_shell/image_decoder_unittest.cc b/webkit/tools/test_shell/image_decoder_unittest.cc
|
| deleted file mode 100644
|
| index bf9514b1c09144f0cef22dbdc1be406b9573d006..0000000000000000000000000000000000000000
|
| --- a/webkit/tools/test_shell/image_decoder_unittest.cc
|
| +++ /dev/null
|
| @@ -1,216 +0,0 @@
|
| -// Copyright (c) 2012 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 "webkit/tools/test_shell/image_decoder_unittest.h"
|
| -
|
| -#include "base/file_util.h"
|
| -#include "base/files/file_path.h"
|
| -#include "base/md5.h"
|
| -#include "base/memory/scoped_ptr.h"
|
| -#include "base/path_service.h"
|
| -#include "base/string_util.h"
|
| -#include "third_party/WebKit/Source/Platform/chromium/public/WebData.h"
|
| -#include "third_party/WebKit/Source/Platform/chromium/public/WebImage.h"
|
| -#include "third_party/WebKit/Source/Platform/chromium/public/WebSize.h"
|
| -#include "third_party/WebKit/Source/WebKit/chromium/public/WebImageDecoder.h"
|
| -
|
| -using base::Time;
|
| -
|
| -namespace {
|
| -
|
| -const int kFirstFrameIndex = 0;
|
| -
|
| -// Determine if we should test with file specified by |path| based
|
| -// on |file_selection| and the |threshold| for the file size.
|
| -bool ShouldSkipFile(const base::FilePath& path,
|
| - ImageDecoderTestFileSelection file_selection,
|
| - const int64 threshold) {
|
| - if (file_selection == TEST_ALL)
|
| - return false;
|
| -
|
| - int64 image_size = 0;
|
| - file_util::GetFileSize(path, &image_size);
|
| - return (file_selection == TEST_SMALLER) == (image_size > threshold);
|
| -}
|
| -
|
| -} // namespace
|
| -
|
| -void ReadFileToVector(const base::FilePath& path, std::vector<char>* contents) {
|
| - std::string raw_image_data;
|
| - file_util::ReadFileToString(path, &raw_image_data);
|
| - contents->resize(raw_image_data.size());
|
| - memcpy(&contents->at(0), raw_image_data.data(), raw_image_data.size());
|
| -}
|
| -
|
| -base::FilePath GetMD5SumPath(const base::FilePath& path) {
|
| - static const base::FilePath::StringType kDecodedDataExtension(
|
| - FILE_PATH_LITERAL(".md5sum"));
|
| - return base::FilePath(path.value() + kDecodedDataExtension);
|
| -}
|
| -
|
| -#if defined(CALCULATE_MD5_SUMS)
|
| -void SaveMD5Sum(const base::FilePath& path, const WebKit::WebImage& web_image) {
|
| - // Calculate MD5 sum.
|
| - base::MD5Digest digest;
|
| - web_image.getSkBitmap().lockPixels();
|
| - base::MD5Sum(web_image.getSkBitmap().getPixels(),
|
| - web_image.getSkBitmap().width() * web_image.getSkBitmap().height() *
|
| - sizeof(uint32_t),
|
| - &digest);
|
| -
|
| - // Write sum to disk.
|
| - int bytes_written = file_util::WriteFile(path,
|
| - reinterpret_cast<const char*>(&digest), sizeof digest);
|
| - ASSERT_EQ(sizeof digest, bytes_written);
|
| - web_image.getSkBitmap().unlockPixels();
|
| -}
|
| -#endif
|
| -
|
| -#if !defined(CALCULATE_MD5_SUMS)
|
| -void VerifyImage(const WebKit::WebImageDecoder& decoder,
|
| - const base::FilePath& path,
|
| - const base::FilePath& md5_sum_path,
|
| - size_t frame_index) {
|
| - // Make sure decoding can complete successfully.
|
| - EXPECT_TRUE(decoder.isSizeAvailable()) << path.value();
|
| - EXPECT_GE(decoder.frameCount(), frame_index) << path.value();
|
| - EXPECT_TRUE(decoder.isFrameCompleteAtIndex(frame_index)) << path.value();
|
| - EXPECT_FALSE(decoder.isFailed());
|
| -
|
| - // Calculate MD5 sum.
|
| - base::MD5Digest actual_digest;
|
| - WebKit::WebImage web_image = decoder.getFrameAtIndex(frame_index);
|
| - web_image.getSkBitmap().lockPixels();
|
| - base::MD5Sum(web_image.getSkBitmap().getPixels(),
|
| - web_image.getSkBitmap().width() * web_image.getSkBitmap().height() *
|
| - sizeof(uint32_t),
|
| - &actual_digest);
|
| -
|
| - // Read the MD5 sum off disk.
|
| - std::string file_bytes;
|
| - file_util::ReadFileToString(md5_sum_path, &file_bytes);
|
| - base::MD5Digest expected_digest;
|
| - ASSERT_EQ(sizeof expected_digest, file_bytes.size()) << path.value();
|
| - memcpy(&expected_digest, file_bytes.data(), sizeof expected_digest);
|
| -
|
| - // Verify that the sums are the same.
|
| - EXPECT_EQ(0,
|
| - memcmp(&expected_digest, &actual_digest, sizeof(base::MD5Digest)))
|
| - << path.value();
|
| - web_image.getSkBitmap().unlockPixels();
|
| -}
|
| -#endif
|
| -
|
| -void ImageDecoderTest::SetUp() {
|
| - base::FilePath data_dir;
|
| - ASSERT_TRUE(PathService::Get(base::DIR_SOURCE_ROOT, &data_dir));
|
| - data_dir_ = data_dir.AppendASCII("webkit").
|
| - AppendASCII("data").
|
| - AppendASCII(format_ + "_decoder");
|
| - ASSERT_TRUE(file_util::PathExists(data_dir_)) << data_dir_.value();
|
| -}
|
| -
|
| -std::vector<base::FilePath> ImageDecoderTest::GetImageFiles() const {
|
| - std::string pattern = "*." + format_;
|
| -
|
| - file_util::FileEnumerator enumerator(data_dir_,
|
| - false,
|
| - file_util::FileEnumerator::FILES);
|
| -
|
| - std::vector<base::FilePath> image_files;
|
| - base::FilePath next_file_name;
|
| - while (!(next_file_name = enumerator.Next()).empty()) {
|
| - base::FilePath base_name = next_file_name.BaseName();
|
| -#if defined(OS_WIN)
|
| - std::string base_name_ascii = WideToASCII(base_name.value());
|
| -#else
|
| - std::string base_name_ascii = base_name.value();
|
| -#endif
|
| - if (!MatchPattern(base_name_ascii, pattern))
|
| - continue;
|
| - image_files.push_back(next_file_name);
|
| - }
|
| -
|
| - return image_files;
|
| -}
|
| -
|
| -bool ImageDecoderTest::ShouldImageFail(const base::FilePath& path) const {
|
| - static const base::FilePath::StringType kBadSuffix(FILE_PATH_LITERAL(".bad."));
|
| - return (path.value().length() > (kBadSuffix.length() + format_.length()) &&
|
| - !path.value().compare(path.value().length() - format_.length() -
|
| - kBadSuffix.length(),
|
| - kBadSuffix.length(), kBadSuffix));
|
| -}
|
| -
|
| -void ImageDecoderTest::TestDecoding(
|
| - ImageDecoderTestFileSelection file_selection,
|
| - const int64 threshold) {
|
| - const std::vector<base::FilePath> image_files(GetImageFiles());
|
| - for (std::vector<base::FilePath>::const_iterator i = image_files.begin();
|
| - i != image_files.end(); ++i) {
|
| - if (ShouldSkipFile(*i, file_selection, threshold))
|
| - continue;
|
| - const base::FilePath md5_sum_path(GetMD5SumPath(*i));
|
| - TestWebKitImageDecoder(*i, md5_sum_path, kFirstFrameIndex);
|
| - }
|
| -}
|
| -
|
| -void ImageDecoderTest::TestWebKitImageDecoder(const base::FilePath& image_path,
|
| - const base::FilePath& md5_sum_path, int desired_frame_index) const {
|
| - bool should_test_chunking = true;
|
| - bool should_test_failed_images = true;
|
| -#ifdef CALCULATE_MD5_SUMS
|
| - // Do not test anything just get the md5 sums.
|
| - should_test_chunking = false;
|
| - should_test_failed_images = false;
|
| -#endif
|
| -
|
| - std::vector<char> image_contents;
|
| - ReadFileToVector(image_path, &image_contents);
|
| - EXPECT_TRUE(image_contents.size());
|
| - scoped_ptr<WebKit::WebImageDecoder> decoder(CreateWebKitImageDecoder());
|
| - EXPECT_FALSE(decoder->isFailed());
|
| -
|
| - if (should_test_chunking) {
|
| - // Test chunking file into half.
|
| - const int partial_size = image_contents.size()/2;
|
| -
|
| - WebKit::WebData partial_data(
|
| - reinterpret_cast<const char*>(&(image_contents.at(0))), partial_size);
|
| -
|
| - // Make Sure the image decoder doesn't fail when we ask for the frame
|
| - // buffer for this partial image.
|
| - // NOTE: We can't check that frame 0 is non-NULL, because if this is an
|
| - // ICO and we haven't yet supplied enough data to read the directory,
|
| - // there is no framecount and thus no first frame.
|
| - decoder->setData(const_cast<WebKit::WebData&>(partial_data), false);
|
| - EXPECT_FALSE(decoder->isFailed()) << image_path.value();
|
| - }
|
| -
|
| - // Make sure passing the complete image results in successful decoding.
|
| - WebKit::WebData data(reinterpret_cast<const char*>(&(image_contents.at(0))),
|
| - image_contents.size());
|
| - decoder->setData(const_cast<WebKit::WebData&>(data), true);
|
| -
|
| - if (should_test_failed_images) {
|
| - if (ShouldImageFail(image_path)) {
|
| - EXPECT_FALSE(decoder->isFrameCompleteAtIndex(kFirstFrameIndex));
|
| - EXPECT_TRUE(decoder->isFailed());
|
| - return;
|
| - }
|
| - }
|
| -
|
| - EXPECT_FALSE(decoder->isFailed()) << image_path.value();
|
| -
|
| -#ifdef CALCULATE_MD5_SUMS
|
| - // Since WebImage does not expose get data by frame, get the size
|
| - // through decoder and pass it to fromData so that the closest
|
| - // image dats to the size is returned.
|
| - WebKit::WebSize size(decoder->getImage(desired_frame_index).size());
|
| - const WebKit::WebImage& image = WebKit::WebImage::fromData(data, size);
|
| - SaveMD5Sum(md5_sum_path, image);
|
| -#else
|
| - VerifyImage(*decoder, image_path, md5_sum_path, desired_frame_index);
|
| -#endif
|
| -}
|
|
|