Chromium Code Reviews| Index: third_party/zlib/google/zip_reader_unittest.cc |
| diff --git a/third_party/zlib/google/zip_reader_unittest.cc b/third_party/zlib/google/zip_reader_unittest.cc |
| index 3056aba8ab855d03c91d35c71e7da24db721bdaa..6aa13d577592750d6f6c993a4f9348daaeb09a77 100644 |
| --- a/third_party/zlib/google/zip_reader_unittest.cc |
| +++ b/third_party/zlib/google/zip_reader_unittest.cc |
| @@ -576,18 +576,59 @@ TEST_F(ZipReaderTest, ExtractCurrentEntryToString) { |
| if (i > 0) { |
| // Exact byte read limit: must pass. |
| EXPECT_TRUE(reader.ExtractCurrentEntryToString(i, &contents)); |
| - EXPECT_EQ(i, contents.size()); |
| - EXPECT_EQ(0, memcmp(contents.c_str(), "0123456", i)); |
| + EXPECT_EQ(base::StringPiece("0123456", i).as_string(), contents); |
| } |
| // More than necessary byte read limit: must pass. |
| EXPECT_TRUE(reader.ExtractCurrentEntryToString(16, &contents)); |
| - EXPECT_EQ(i, contents.size()); |
| - EXPECT_EQ(0, memcmp(contents.c_str(), "0123456", i)); |
| + EXPECT_EQ(base::StringPiece("0123456", i).as_string(), contents); |
| } |
| reader.Close(); |
| } |
| +TEST_F(ZipReaderTest, ExtractPartOfCurrentEntry) { |
| + // test_mismatch_size.zip contains files with names from 0.txt to 7.txt with |
| + // sizes from 0 to 7 bytes respectively, being the contents of each file a |
| + // substring of "0123456" starting at '0'. |
| + base::FilePath test_zip_file = |
| + test_data_dir_.AppendASCII("test_mismatch_size.zip"); |
| + |
| + ZipReader reader; |
| + std::string contents; |
| + ASSERT_TRUE(reader.Open(test_zip_file)); |
| + |
| + base::FilePath file_name0 = base::FilePath::FromUTF8Unsafe("0.txt"); |
| + ASSERT_TRUE(reader.LocateAndOpenEntry(file_name0)); |
| + EXPECT_TRUE(reader.ExtractCurrentEntryToString(0, &contents)); |
| + EXPECT_EQ("", contents); |
| + EXPECT_TRUE(reader.ExtractCurrentEntryToString(1, &contents)); |
| + EXPECT_EQ("", contents); |
| + |
| + base::FilePath file_name1 = base::FilePath::FromUTF8Unsafe("1.txt"); |
| + ASSERT_TRUE(reader.LocateAndOpenEntry(file_name1)); |
| + EXPECT_TRUE(reader.ExtractCurrentEntryToString(0, &contents)); |
| + EXPECT_EQ("", contents); |
| + EXPECT_TRUE(reader.ExtractCurrentEntryToString(1, &contents)); |
| + EXPECT_EQ("0", contents); |
| + EXPECT_TRUE(reader.ExtractCurrentEntryToString(2, &contents)); |
| + EXPECT_EQ("0", contents); |
| + |
| + base::FilePath file_name4 = base::FilePath::FromUTF8Unsafe("4.txt"); |
| + ASSERT_TRUE(reader.LocateAndOpenEntry(file_name4)); |
| + EXPECT_TRUE(reader.ExtractCurrentEntryToString(0, &contents)); |
| + EXPECT_EQ("", contents); |
| + EXPECT_FALSE(reader.ExtractCurrentEntryToString(2, &contents)); |
| + EXPECT_EQ("01", contents); |
| + EXPECT_TRUE(reader.ExtractCurrentEntryToString(4, &contents)); |
| + EXPECT_EQ("0123", contents); |
| + // Checks that entire file is extracted and function returns true when |
| + // |max_read_bytes| is larger than file size. |
| + EXPECT_TRUE(reader.ExtractCurrentEntryToString(5, &contents)); |
| + EXPECT_EQ("0123", contents); |
| + |
| + reader.Close(); |
| +} |
| + |
| // This test exposes http://crbug.com/430959, at least on OS X |
| TEST_F(ZipReaderTest, DISABLED_LeakDetectionTest) { |
| for (int i = 0; i < 100000; ++i) { |
| @@ -610,7 +651,8 @@ TEST_F(ZipReaderTest, ExtractCurrentEntryPrepareFailure) { |
| ASSERT_TRUE(reader.Open(test_zip_file_)); |
| ASSERT_TRUE(reader.LocateAndOpenEntry(target_path)); |
| - ASSERT_FALSE(reader.ExtractCurrentEntry(&mock_writer)); |
| + ASSERT_FALSE(reader.ExtractCurrentEntry( |
| + &mock_writer, std::numeric_limits<uint64_t>::max())); |
| } |
| // Test that when WriterDelegate::WriteBytes returns false, no other methods on |
| @@ -628,7 +670,8 @@ TEST_F(ZipReaderTest, ExtractCurrentEntryWriteBytesFailure) { |
| ASSERT_TRUE(reader.Open(test_zip_file_)); |
| ASSERT_TRUE(reader.LocateAndOpenEntry(target_path)); |
| - ASSERT_FALSE(reader.ExtractCurrentEntry(&mock_writer)); |
| + ASSERT_FALSE(reader.ExtractCurrentEntry( |
| + &mock_writer, std::numeric_limits<uint64_t>::max())); |
| } |
| // Test that extraction succeeds when the writer delegate reports all is well. |
| @@ -645,7 +688,58 @@ TEST_F(ZipReaderTest, ExtractCurrentEntrySuccess) { |
| ASSERT_TRUE(reader.Open(test_zip_file_)); |
| ASSERT_TRUE(reader.LocateAndOpenEntry(target_path)); |
| - ASSERT_TRUE(reader.ExtractCurrentEntry(&mock_writer)); |
| + ASSERT_TRUE(reader.ExtractCurrentEntry(&mock_writer, |
| + std::numeric_limits<uint64_t>::max())); |
| +} |
| + |
| +// Test that when WriterDelegate::PrepareMock returns false, no other methods on |
| +// the delegate are called and the partial extraction fails. |
| +TEST_F(ZipReaderTest, ExtractFromBeginningOfCurrentEntryPrepareFailure) { |
| + testing::StrictMock<MockWriterDelegate> mock_writer; |
| + |
| + EXPECT_CALL(mock_writer, PrepareOutput()).WillOnce(Return(false)); |
| + |
| + base::FilePath target_path(FILE_PATH_LITERAL("foo/bar/quux.txt")); |
| + ZipReader reader; |
| + |
| + ASSERT_TRUE(reader.Open(test_zip_file_)); |
| + ASSERT_TRUE(reader.LocateAndOpenEntry(target_path)); |
| + ASSERT_FALSE(reader.ExtractCurrentEntry( |
| + &mock_writer, std::numeric_limits<uint64_t>::max())); |
| +} |
| + |
| +// Test that when WriterDelegate::WriteBytes returns false, no other methods on |
| +// the delegate are called and the partial extraction fails. |
| +TEST_F(ZipReaderTest, ExtractFromBeginningOfCurrentEntryWriteBytesFailure) { |
| + testing::StrictMock<MockWriterDelegate> mock_writer; |
| + |
| + EXPECT_CALL(mock_writer, PrepareOutput()).WillOnce(Return(true)); |
| + EXPECT_CALL(mock_writer, WriteBytes(_, _)).WillOnce(Return(false)); |
| + |
| + base::FilePath target_path(FILE_PATH_LITERAL("foo/bar/quux.txt")); |
| + ZipReader reader; |
| + |
| + ASSERT_TRUE(reader.Open(test_zip_file_)); |
| + ASSERT_TRUE(reader.LocateAndOpenEntry(target_path)); |
| + ASSERT_FALSE(reader.ExtractCurrentEntry( |
| + &mock_writer, std::numeric_limits<uint64_t>::max())); |
| +} |
| + |
| +// Test that partial extraction succeeds when the writer delegate reports all is |
| +// well. |
| +TEST_F(ZipReaderTest, ExtractFromBeginningOfCurrentEntrySuccess) { |
| + testing::StrictMock<MockWriterDelegate> mock_writer; |
| + |
| + EXPECT_CALL(mock_writer, PrepareOutput()).WillOnce(Return(true)); |
| + EXPECT_CALL(mock_writer, WriteBytes(_, _)).WillRepeatedly(Return(true)); |
| + |
| + base::FilePath target_path(FILE_PATH_LITERAL("foo/bar/quux.txt")); |
| + ZipReader reader; |
| + |
| + ASSERT_TRUE(reader.Open(test_zip_file_)); |
| + ASSERT_TRUE(reader.LocateAndOpenEntry(target_path)); |
| + ASSERT_TRUE(reader.ExtractCurrentEntry(&mock_writer, |
| + std::numeric_limits<uint64_t>::max())); |
| } |
|
satorux1
2017/08/03 08:36:48
I's suggest to remove the three gmock-based tests.
satorux1
2017/08/03 08:47:03
correction: difficult => often difficult
mortonm
2017/08/03 15:01:23
Done.
mortonm
2017/08/03 15:01:23
Acknowledged.
|
| class FileWriterDelegateTest : public ::testing::Test { |