summaryrefslogtreecommitdiff
path: root/core/fpdfapi/parser/cpdf_read_validator_unittest.cpp
diff options
context:
space:
mode:
authorArtem Strygin <art-snake@yandex-team.ru>2017-10-03 17:33:19 +0300
committerChromium commit bot <commit-bot@chromium.org>2017-10-03 19:53:25 +0000
commitaafdc153a2b7609968b315ca6c6900717f6d6c36 (patch)
tree4e9671595b04047a507a64292f19114d9589be91 /core/fpdfapi/parser/cpdf_read_validator_unittest.cpp
parent609d1fd4a4360e2592c5c59d60758ac67a1cb4ee (diff)
downloadpdfium-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.cpp48
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);
+}