| OLD | NEW |
| 1 // Copyright (c) 2006-2008 The Chromium Authors. All rights reserved. | 1 // Copyright (c) 2006-2008 The Chromium Authors. All rights reserved. |
| 2 // Use of this source code is governed by a BSD-style license that can be | 2 // Use of this source code is governed by a BSD-style license that can be |
| 3 // found in the LICENSE file. | 3 // found in the LICENSE file. |
| 4 | 4 |
| 5 #ifndef WEBKIT_TOOLS_TEST_SHELL_IMAGE_DECODER_UNITTEST_H_ | 5 #ifndef WEBKIT_TOOLS_TEST_SHELL_IMAGE_DECODER_UNITTEST_H_ |
| 6 #define WEBKIT_TOOLS_TEST_SHELL_IMAGE_DECODER_UNITTEST_H_ | 6 #define WEBKIT_TOOLS_TEST_SHELL_IMAGE_DECODER_UNITTEST_H_ |
| 7 | 7 |
| 8 #include <string> |
| 8 #include <vector> | 9 #include <vector> |
| 9 | 10 |
| 10 #include "Vector.h" | 11 #include "Vector.h" |
| 11 #include "ImageDecoder.h" | 12 #include "ImageDecoder.h" |
| 12 | 13 |
| 13 #undef LOG | 14 #undef LOG |
| 14 | 15 |
| 15 #include "base/basictypes.h" | 16 #include "base/basictypes.h" |
| 17 #include "base/file_path.h" |
| 16 #include "testing/gtest/include/gtest/gtest.h" | 18 #include "testing/gtest/include/gtest/gtest.h" |
| 17 | 19 |
| 18 // If CALCULATE_MD5_SUMS is not defined, then this test decodes a handful of | 20 // If CALCULATE_MD5_SUMS is not defined, then this test decodes a handful of |
| 19 // image files and compares their MD5 sums to the stored sums on disk. | 21 // image files and compares their MD5 sums to the stored sums on disk. |
| 20 // | 22 // |
| 21 // To recalculate the MD5 sums, uncommment CALCULATE_MD5_SUMS. | 23 // To recalculate the MD5 sums, uncommment CALCULATE_MD5_SUMS. |
| 22 // | 24 // |
| 23 // The image files and corresponding MD5 sums live in the directory | 25 // The image files and corresponding MD5 sums live in the directory |
| 24 // chrome/test/data/*_decoder (where "*" is the format being tested). | 26 // chrome/test/data/*_decoder (where "*" is the format being tested). |
| 25 // | 27 // |
| 26 // Note: The MD5 sums calculated in this test by little- and big-endian systems | 28 // Note: The MD5 sums calculated in this test by little- and big-endian systems |
| 27 // will differ, since no endianness correction is done. If we start compiling | 29 // will differ, since no endianness correction is done. If we start compiling |
| 28 // for big endian machines this should be fixed. | 30 // for big endian machines this should be fixed. |
| 29 | 31 |
| 30 //#define CALCULATE_MD5_SUMS | 32 //#define CALCULATE_MD5_SUMS |
| 31 | 33 |
| 32 enum ImageDecoderTestFileSelection { | 34 enum ImageDecoderTestFileSelection { |
| 33 TEST_ALL, | 35 TEST_ALL, |
| 34 TEST_SMALLER, | 36 TEST_SMALLER, |
| 35 TEST_BIGGER, | 37 TEST_BIGGER, |
| 36 }; | 38 }; |
| 37 | 39 |
| 38 // Reads the contents of the specified file into the specified vector. | 40 // Reads the contents of the specified file into the specified vector. |
| 39 void ReadFileToVector(const std::wstring& path, Vector<char>* contents); | 41 void ReadFileToVector(const FilePath& path, Vector<char>* contents); |
| 40 | 42 |
| 41 // Returns the path the decoded data is saved at. | 43 // Returns the path the decoded data is saved at. |
| 42 std::wstring GetMD5SumPath(const std::wstring& path); | 44 FilePath GetMD5SumPath(const FilePath& path); |
| 43 | 45 |
| 44 #ifdef CALCULATE_MD5_SUMS | 46 #ifdef CALCULATE_MD5_SUMS |
| 45 // Saves the MD5 sum to the specified file. | 47 // Saves the MD5 sum to the specified file. |
| 46 void SaveMD5Sum(const std::wstring& path, WebCore::RGBA32Buffer* buffer); | 48 void SaveMD5Sum(const FilePath& path, WebCore::RGBA32Buffer* buffer); |
| 47 #else | 49 #else |
| 48 // Verifies the image. |path| identifies the path the image was loaded from. | 50 // Verifies the image. |path| identifies the path the image was loaded from. |
| 49 // |frame_index| indicates which index from the decoder we should examine. | 51 // |frame_index| indicates which index from the decoder we should examine. |
| 50 void VerifyImage(WebCore::ImageDecoder* decoder, | 52 void VerifyImage(WebCore::ImageDecoder* decoder, |
| 51 const std::wstring& path, | 53 const FilePath& path, |
| 52 const std::wstring& md5_sum_path, | 54 const FilePath& md5_sum_path, |
| 53 size_t frame_index); | 55 size_t frame_index); |
| 54 #endif | 56 #endif |
| 55 | 57 |
| 56 class ImageDecoderTest : public testing::Test { | 58 class ImageDecoderTest : public testing::Test { |
| 57 public: | 59 public: |
| 58 explicit ImageDecoderTest(const std::wstring& format) : format_(format) { } | 60 explicit ImageDecoderTest(const std::string& format) : format_(format) { } |
| 59 | 61 |
| 60 protected: | 62 protected: |
| 61 virtual void SetUp(); | 63 virtual void SetUp(); |
| 62 | 64 |
| 63 // Returns the vector of image files for testing. | 65 // Returns the vector of image files for testing. |
| 64 std::vector<std::wstring> GetImageFiles() const; | 66 std::vector<FilePath> GetImageFiles() const; |
| 65 | 67 |
| 66 // Returns true if the image is bogus and should not be successfully decoded. | 68 // Returns true if the image is bogus and should not be successfully decoded. |
| 67 bool ShouldImageFail(const std::wstring& path) const; | 69 bool ShouldImageFail(const FilePath& path) const; |
| 68 | 70 |
| 69 // Creates and returns an ImageDecoder for the file at the given |path|. If | 71 // Creates and returns an ImageDecoder for the file at the given |path|. If |
| 70 // |split_at_random| is true, also verifies that breaking the data supplied to | 72 // |split_at_random| is true, also verifies that breaking the data supplied to |
| 71 // the decoder into two random pieces does not cause problems. | 73 // the decoder into two random pieces does not cause problems. |
| 72 WebCore::ImageDecoder* SetupDecoder(const std::wstring& path, | 74 WebCore::ImageDecoder* SetupDecoder(const FilePath& path, |
| 73 bool split_at_random) const; | 75 bool split_at_random) const; |
| 74 | 76 |
| 75 // Verifies each of the test image files is decoded correctly and matches the | 77 // Verifies each of the test image files is decoded correctly and matches the |
| 76 // expected state. |file_selection| and |threshold| can be used to select | 78 // expected state. |file_selection| and |threshold| can be used to select |
| 77 // files to test based on file size. | 79 // files to test based on file size. |
| 78 void TestDecoding(ImageDecoderTestFileSelection file_selection, | 80 void TestDecoding(ImageDecoderTestFileSelection file_selection, |
| 79 const int64 threshold) const; | 81 const int64 threshold) const; |
| 80 | 82 |
| 81 void TestDecoding() const { | 83 void TestDecoding() const { |
| 82 TestDecoding(TEST_ALL, 0); | 84 TestDecoding(TEST_ALL, 0); |
| 83 } | 85 } |
| 84 | 86 |
| 85 #ifndef CALCULATE_MD5_SUMS | 87 #ifndef CALCULATE_MD5_SUMS |
| 86 // Verifies that decoding still works correctly when the files are split into | 88 // Verifies that decoding still works correctly when the files are split into |
| 87 // pieces at a random point. |file_selection| and |threshold| can be used to | 89 // pieces at a random point. |file_selection| and |threshold| can be used to |
| 88 // select files to test based on file size. | 90 // select files to test based on file size. |
| 89 void TestChunkedDecoding(ImageDecoderTestFileSelection file_selection, | 91 void TestChunkedDecoding(ImageDecoderTestFileSelection file_selection, |
| 90 const int64 threshold) const; | 92 const int64 threshold) const; |
| 91 | 93 |
| 92 void TestChunkedDecoding() const { | 94 void TestChunkedDecoding() const { |
| 93 TestChunkedDecoding(TEST_ALL, 0); | 95 TestChunkedDecoding(TEST_ALL, 0); |
| 94 } | 96 } |
| 95 | 97 |
| 96 #endif | 98 #endif |
| 97 | 99 |
| 98 // Returns the correct type of image decoder for this test. | 100 // Returns the correct type of image decoder for this test. |
| 99 virtual WebCore::ImageDecoder* CreateDecoder() const = 0; | 101 virtual WebCore::ImageDecoder* CreateDecoder() const = 0; |
| 100 | 102 |
| 101 // The format to be decoded, like "bmp" or "ico". | 103 // The format to be decoded, like "bmp" or "ico". |
| 102 std::wstring format_; | 104 std::string format_; |
| 103 | 105 |
| 104 protected: | 106 protected: |
| 105 // Path to the test files. | 107 // Path to the test files. |
| 106 std::wstring data_dir_; | 108 FilePath data_dir_; |
| 107 | 109 |
| 108 private: | 110 private: |
| 109 DISALLOW_EVIL_CONSTRUCTORS(ImageDecoderTest); | 111 DISALLOW_COPY_AND_ASSIGN(ImageDecoderTest); |
| 110 }; | 112 }; |
| 111 | 113 |
| 112 #endif // WEBKIT_TOOLS_TEST_SHELL_IMAGE_DECODER_UNITTEST_H_ | 114 #endif // WEBKIT_TOOLS_TEST_SHELL_IMAGE_DECODER_UNITTEST_H_ |
| OLD | NEW |