summaryrefslogtreecommitdiff
path: root/core/fpdfapi/parser/cpdf_object_unittest.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'core/fpdfapi/parser/cpdf_object_unittest.cpp')
-rw-r--r--core/fpdfapi/parser/cpdf_object_unittest.cpp45
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>();