diff options
author | Artem Strygin <art-snake@yandex-team.ru> | 2017-07-28 19:41:59 +0300 |
---|---|---|
committer | Chromium commit bot <commit-bot@chromium.org> | 2017-07-28 18:22:46 +0000 |
commit | 90555e06b0c03777bca17ca423b765b3cb517f56 (patch) | |
tree | 8223800b230be79d0af7dc04454e85a2fcee7713 /core/fpdfapi/parser/cpdf_object_unittest.cpp | |
parent | e7a99de4f711302d57fe22682a9a8c3cfddb458c (diff) | |
download | pdfium-90555e06b0c03777bca17ca423b765b3cb517f56.tar.xz |
Add CPDF_Stream::ReplaceData method.chromium/3170
Change-Id: I94b2e8f6fd522b97c917037e32fb3bcbeea0cbeb
Reviewed-on: https://pdfium-review.googlesource.com/8911
Commit-Queue: Lei Zhang <thestig@chromium.org>
Reviewed-by: Lei Zhang <thestig@chromium.org>
Diffstat (limited to 'core/fpdfapi/parser/cpdf_object_unittest.cpp')
-rw-r--r-- | core/fpdfapi/parser/cpdf_object_unittest.cpp | 45 |
1 files changed, 45 insertions, 0 deletions
diff --git a/core/fpdfapi/parser/cpdf_object_unittest.cpp b/core/fpdfapi/parser/cpdf_object_unittest.cpp index 7d474b2e7d..ffaa2648a3 100644 --- a/core/fpdfapi/parser/cpdf_object_unittest.cpp +++ b/core/fpdfapi/parser/cpdf_object_unittest.cpp @@ -785,6 +785,51 @@ TEST(PDFArrayTest, ConvertIndirect) { EXPECT_EQ(42, array->GetIntegerAt(0)); } +TEST(PDFStreamTest, SetData) { + std::vector<uint8_t> data(100); + auto stream = pdfium::MakeUnique<CPDF_Stream>(); + stream->InitStream(data.data(), data.size(), + pdfium::MakeUnique<CPDF_Dictionary>()); + EXPECT_EQ(static_cast<int>(data.size()), + stream->GetDict()->GetIntegerFor("Length")); + + stream->GetDict()->SetNewFor<CPDF_String>("Filter", L"SomeFilter"); + stream->GetDict()->SetNewFor<CPDF_String>("DecodeParms", L"SomeParams"); + + std::vector<uint8_t> new_data(data.size() * 2); + stream->SetData(new_data.data(), new_data.size()); + + // The "Length" field should be updated for new data size. + EXPECT_EQ(static_cast<int>(new_data.size()), + stream->GetDict()->GetIntegerFor("Length")); + + // The "Filter" and "DecodeParms" fields should not be changed. + EXPECT_EQ(stream->GetDict()->GetUnicodeTextFor("Filter"), L"SomeFilter"); + EXPECT_EQ(stream->GetDict()->GetUnicodeTextFor("DecodeParms"), L"SomeParams"); +} + +TEST(PDFStreamTest, SetDataAndRemoveFilter) { + std::vector<uint8_t> data(100); + auto stream = pdfium::MakeUnique<CPDF_Stream>(); + stream->InitStream(data.data(), data.size(), + pdfium::MakeUnique<CPDF_Dictionary>()); + EXPECT_EQ(static_cast<int>(data.size()), + stream->GetDict()->GetIntegerFor("Length")); + + stream->GetDict()->SetNewFor<CPDF_String>("Filter", L"SomeFilter"); + stream->GetDict()->SetNewFor<CPDF_String>("DecodeParms", L"SomeParams"); + + std::vector<uint8_t> new_data(data.size() * 2); + stream->SetDataAndRemoveFilter(new_data.data(), new_data.size()); + // The "Length" field should be updated for new data size. + EXPECT_EQ(static_cast<int>(new_data.size()), + stream->GetDict()->GetIntegerFor("Length")); + + // The "Filter" and "DecodeParms" should be removed. + EXPECT_FALSE(stream->GetDict()->KeyExist("Filter")); + EXPECT_FALSE(stream->GetDict()->KeyExist("DecodeParms")); +} + TEST(PDFDictionaryTest, CloneDirectObject) { CPDF_IndirectObjectHolder objects_holder; auto dict = pdfium::MakeUnique<CPDF_Dictionary>(); |