diff options
author | Artem Strygin <art-snake@yandex-team.ru> | 2017-10-03 17:33:19 +0300 |
---|---|---|
committer | Chromium commit bot <commit-bot@chromium.org> | 2017-10-03 19:53:25 +0000 |
commit | aafdc153a2b7609968b315ca6c6900717f6d6c36 (patch) | |
tree | 4e9671595b04047a507a64292f19114d9589be91 /core/fpdfapi/parser/cpdf_read_validator_unittest.cpp | |
parent | 609d1fd4a4360e2592c5c59d60758ac67a1cb4ee (diff) | |
download | pdfium-aafdc153a2b7609968b315ca6c6900717f6d6c36.tar.xz |
Unify CPDF_HintsTable.chromium/3232
Break relationship from CPDF_DataAvail for CPDF_HintsTable.
Change-Id: If3e6d4910dd368742f095c05adb122ab08c0d804
Reviewed-on: https://pdfium-review.googlesource.com/15270
Commit-Queue: Art Snake <art-snake@yandex-team.ru>
Reviewed-by: dsinclair <dsinclair@chromium.org>
Diffstat (limited to 'core/fpdfapi/parser/cpdf_read_validator_unittest.cpp')
-rw-r--r-- | core/fpdfapi/parser/cpdf_read_validator_unittest.cpp | 48 |
1 files changed, 48 insertions, 0 deletions
diff --git a/core/fpdfapi/parser/cpdf_read_validator_unittest.cpp b/core/fpdfapi/parser/cpdf_read_validator_unittest.cpp index 13ace078d3..89b7e6b4de 100644 --- a/core/fpdfapi/parser/cpdf_read_validator_unittest.cpp +++ b/core/fpdfapi/parser/cpdf_read_validator_unittest.cpp @@ -243,3 +243,51 @@ TEST(CPDF_ReadValidatorTest, SessionReset) { EXPECT_TRUE(validator->has_unavailable_data()); EXPECT_FALSE(validator->read_error()); } + +TEST(CPDF_ReadValidatorTest, CheckDataRangeAndRequestIfUnavailable) { + std::vector<uint8_t> test_data(kTestDataSize); + auto file = pdfium::MakeRetain<CFX_MemoryStream>(test_data.data(), + test_data.size(), false); + MockFileAvail file_avail; + auto validator = pdfium::MakeRetain<CPDF_ReadValidator>(file, &file_avail); + + MockDownloadHints hints; + validator->SetDownloadHints(&hints); + + EXPECT_FALSE(validator->CheckDataRangeAndRequestIfUnavailable(5000, 100)); + EXPECT_FALSE(validator->read_error()); + EXPECT_TRUE(validator->has_unavailable_data()); + + // Requested range should be enlarged and aligned. + EXPECT_EQ(MakeRange(4608, 5632), hints.GetLastRequstedRange()); + + file_avail.SetAvailableRange(hints.GetLastRequstedRange()); + hints.Reset(); + + validator->ResetErrors(); + EXPECT_TRUE(validator->CheckDataRangeAndRequestIfUnavailable(5000, 100)); + // No new request on already available data. + EXPECT_EQ(MakeRange(0, 0), hints.GetLastRequstedRange()); + EXPECT_FALSE(validator->read_error()); + EXPECT_FALSE(validator->has_unavailable_data()); + + std::vector<uint8_t> read_buffer(100); + EXPECT_TRUE( + validator->ReadBlock(read_buffer.data(), 5000, read_buffer.size())); + // No new request on already available data. + EXPECT_EQ(MakeRange(0, 0), hints.GetLastRequstedRange()); + EXPECT_FALSE(validator->read_error()); + EXPECT_FALSE(validator->has_unavailable_data()); + + validator->ResetErrors(); + // Try request unavailable data at file end. + EXPECT_FALSE(validator->CheckDataRangeAndRequestIfUnavailable( + validator->GetSize() - 100, 100)); + + // Should not enlarge request at file end. + EXPECT_EQ(validator->GetSize(), hints.GetLastRequstedRange().second); + EXPECT_FALSE(validator->read_error()); + EXPECT_TRUE(validator->has_unavailable_data()); + + validator->SetDownloadHints(nullptr); +} |