| OLD | NEW |
| 1 // Copyright 2016 PDFium Authors. All rights reserved. | 1 // Copyright 2016 PDFium Authors. All rights reserved. |
| 2 // Use of this source code is governed by a BSD-style license that can be | 2 // Use of this source code is governed by a BSD-style license that can be |
| 3 // found in the LICENSE file. | 3 // found in the LICENSE file. |
| 4 | 4 |
| 5 #include "core/fpdfapi/fpdf_parser/cpdf_boolean.h" | 5 #include "core/fpdfapi/fpdf_parser/cpdf_boolean.h" |
| 6 #include "core/fpdfapi/fpdf_parser/cpdf_null.h" | 6 #include "core/fpdfapi/fpdf_parser/cpdf_null.h" |
| 7 #include "core/fpdfapi/fpdf_parser/include/cpdf_array.h" | 7 #include "core/fpdfapi/fpdf_parser/include/cpdf_array.h" |
| 8 #include "core/fpdfapi/fpdf_parser/include/cpdf_dictionary.h" | 8 #include "core/fpdfapi/fpdf_parser/include/cpdf_dictionary.h" |
| 9 #include "core/fpdfapi/fpdf_parser/include/cpdf_name.h" | 9 #include "core/fpdfapi/fpdf_parser/include/cpdf_name.h" |
| 10 #include "core/fpdfapi/fpdf_parser/include/cpdf_number.h" | 10 #include "core/fpdfapi/fpdf_parser/include/cpdf_number.h" |
| (...skipping 74 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 85 stream_obj, null_obj}; | 85 stream_obj, null_obj}; |
| 86 m_DirectObjTypes = { | 86 m_DirectObjTypes = { |
| 87 CPDF_Object::BOOLEAN, CPDF_Object::BOOLEAN, CPDF_Object::NUMBER, | 87 CPDF_Object::BOOLEAN, CPDF_Object::BOOLEAN, CPDF_Object::NUMBER, |
| 88 CPDF_Object::NUMBER, CPDF_Object::STRING, CPDF_Object::STRING, | 88 CPDF_Object::NUMBER, CPDF_Object::STRING, CPDF_Object::STRING, |
| 89 CPDF_Object::NAME, CPDF_Object::ARRAY, CPDF_Object::DICTIONARY, | 89 CPDF_Object::NAME, CPDF_Object::ARRAY, CPDF_Object::DICTIONARY, |
| 90 CPDF_Object::STREAM, CPDF_Object::NULLOBJ}; | 90 CPDF_Object::STREAM, CPDF_Object::NULLOBJ}; |
| 91 for (size_t i = 0; i < FX_ArraySize(objs); ++i) | 91 for (size_t i = 0; i < FX_ArraySize(objs); ++i) |
| 92 m_DirectObjs.emplace_back(objs[i]); | 92 m_DirectObjs.emplace_back(objs[i]); |
| 93 | 93 |
| 94 // Indirect references to indirect objects. | 94 // Indirect references to indirect objects. |
| 95 m_ObjHolder.reset(new CPDF_IndirectObjectHolder()); | 95 m_ObjHolder.reset(new CPDF_IndirectObjectHolder(nullptr)); |
| 96 m_IndirectObjs = {boolean_true_obj, number_int_obj, str_spec_obj, name_obj, | 96 m_IndirectObjs = {boolean_true_obj, number_int_obj, str_spec_obj, name_obj, |
| 97 m_ArrayObj, m_DictObj, stream_obj}; | 97 m_ArrayObj, m_DictObj, stream_obj}; |
| 98 for (size_t i = 0; i < m_IndirectObjs.size(); ++i) { | 98 for (size_t i = 0; i < m_IndirectObjs.size(); ++i) { |
| 99 m_ObjHolder->AddIndirectObject(m_IndirectObjs[i]); | 99 m_ObjHolder->AddIndirectObject(m_IndirectObjs[i]); |
| 100 m_RefObjs.emplace_back(new CPDF_Reference( | 100 m_RefObjs.emplace_back(new CPDF_Reference( |
| 101 m_ObjHolder.get(), m_IndirectObjs[i]->GetObjNum())); | 101 m_ObjHolder.get(), m_IndirectObjs[i]->GetObjNum())); |
| 102 } | 102 } |
| 103 } | 103 } |
| 104 | 104 |
| 105 bool Equal(CPDF_Object* obj1, CPDF_Object* obj2) { | 105 bool Equal(CPDF_Object* obj1, CPDF_Object* obj2) { |
| (...skipping 597 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 703 for (size_t i = 0; i < FX_ArraySize(vals); ++i) { | 703 for (size_t i = 0; i < FX_ArraySize(vals); ++i) { |
| 704 EXPECT_EQ(CPDF_Object::STRING, string_array->GetObjectAt(i)->GetType()); | 704 EXPECT_EQ(CPDF_Object::STRING, string_array->GetObjectAt(i)->GetType()); |
| 705 EXPECT_STREQ(vals[i], string_array->GetObjectAt(i)->GetString().c_str()); | 705 EXPECT_STREQ(vals[i], string_array->GetObjectAt(i)->GetString().c_str()); |
| 706 EXPECT_EQ(CPDF_Object::NAME, name_array->GetObjectAt(i)->GetType()); | 706 EXPECT_EQ(CPDF_Object::NAME, name_array->GetObjectAt(i)->GetType()); |
| 707 EXPECT_STREQ(vals[i], name_array->GetObjectAt(i)->GetString().c_str()); | 707 EXPECT_STREQ(vals[i], name_array->GetObjectAt(i)->GetString().c_str()); |
| 708 } | 708 } |
| 709 } | 709 } |
| 710 | 710 |
| 711 TEST(PDFArrayTest, AddReferenceAndGetObjectAt) { | 711 TEST(PDFArrayTest, AddReferenceAndGetObjectAt) { |
| 712 std::unique_ptr<CPDF_IndirectObjectHolder> holder( | 712 std::unique_ptr<CPDF_IndirectObjectHolder> holder( |
| 713 new CPDF_IndirectObjectHolder()); | 713 new CPDF_IndirectObjectHolder(nullptr)); |
| 714 CPDF_Boolean* boolean_obj = new CPDF_Boolean(true); | 714 CPDF_Boolean* boolean_obj = new CPDF_Boolean(true); |
| 715 CPDF_Number* int_obj = new CPDF_Number(-1234); | 715 CPDF_Number* int_obj = new CPDF_Number(-1234); |
| 716 CPDF_Number* float_obj = new CPDF_Number(2345.089f); | 716 CPDF_Number* float_obj = new CPDF_Number(2345.089f); |
| 717 CPDF_String* str_obj = new CPDF_String("Adsfdsf 343434 %&&*\n", false); | 717 CPDF_String* str_obj = new CPDF_String("Adsfdsf 343434 %&&*\n", false); |
| 718 CPDF_Name* name_obj = new CPDF_Name("Title:"); | 718 CPDF_Name* name_obj = new CPDF_Name("Title:"); |
| 719 CPDF_Null* null_obj = new CPDF_Null(); | 719 CPDF_Null* null_obj = new CPDF_Null(); |
| 720 CPDF_Object* indirect_objs[] = {boolean_obj, int_obj, float_obj, | 720 CPDF_Object* indirect_objs[] = {boolean_obj, int_obj, float_obj, |
| 721 str_obj, name_obj, null_obj}; | 721 str_obj, name_obj, null_obj}; |
| 722 unsigned int obj_nums[] = {2, 4, 7, 2345, 799887, 1}; | 722 unsigned int obj_nums[] = {2, 4, 7, 2345, 799887, 1}; |
| 723 ScopedArray arr(new CPDF_Array); | 723 ScopedArray arr(new CPDF_Array); |
| 724 ScopedArray arr1(new CPDF_Array); | 724 ScopedArray arr1(new CPDF_Array); |
| 725 // Create two arrays of references by different AddReference() APIs. | 725 // Create two arrays of references by different AddReference() APIs. |
| 726 for (size_t i = 0; i < FX_ArraySize(indirect_objs); ++i) { | 726 for (size_t i = 0; i < FX_ArraySize(indirect_objs); ++i) { |
| 727 // All the indirect objects inserted will be owned by holder. | 727 // All the indirect objects inserted will be owned by holder. |
| 728 holder->ReplaceIndirectObjectIfHigherGeneration(obj_nums[i], | 728 holder->InsertIndirectObject(obj_nums[i], indirect_objs[i]); |
| 729 indirect_objs[i]); | |
| 730 arr->AddReference(holder.get(), obj_nums[i]); | 729 arr->AddReference(holder.get(), obj_nums[i]); |
| 731 arr1->AddReference(holder.get(), indirect_objs[i]); | 730 arr1->AddReference(holder.get(), indirect_objs[i]); |
| 732 } | 731 } |
| 733 // Check indirect objects. | 732 // Check indirect objects. |
| 734 for (size_t i = 0; i < FX_ArraySize(obj_nums); ++i) | 733 for (size_t i = 0; i < FX_ArraySize(obj_nums); ++i) |
| 735 EXPECT_EQ(indirect_objs[i], holder->GetOrParseIndirectObject(obj_nums[i])); | 734 EXPECT_EQ(indirect_objs[i], holder->GetIndirectObject(obj_nums[i])); |
| 736 // Check arrays. | 735 // Check arrays. |
| 737 EXPECT_EQ(arr->GetCount(), arr1->GetCount()); | 736 EXPECT_EQ(arr->GetCount(), arr1->GetCount()); |
| 738 for (size_t i = 0; i < arr->GetCount(); ++i) { | 737 for (size_t i = 0; i < arr->GetCount(); ++i) { |
| 739 EXPECT_EQ(CPDF_Object::REFERENCE, arr->GetObjectAt(i)->GetType()); | 738 EXPECT_EQ(CPDF_Object::REFERENCE, arr->GetObjectAt(i)->GetType()); |
| 740 EXPECT_EQ(indirect_objs[i], arr->GetObjectAt(i)->GetDirect()); | 739 EXPECT_EQ(indirect_objs[i], arr->GetObjectAt(i)->GetDirect()); |
| 741 EXPECT_EQ(indirect_objs[i], arr->GetDirectObjectAt(i)); | 740 EXPECT_EQ(indirect_objs[i], arr->GetDirectObjectAt(i)); |
| 742 EXPECT_EQ(CPDF_Object::REFERENCE, arr1->GetObjectAt(i)->GetType()); | 741 EXPECT_EQ(CPDF_Object::REFERENCE, arr1->GetObjectAt(i)->GetType()); |
| 743 EXPECT_EQ(indirect_objs[i], arr1->GetObjectAt(i)->GetDirect()); | 742 EXPECT_EQ(indirect_objs[i], arr1->GetObjectAt(i)->GetDirect()); |
| 744 EXPECT_EQ(indirect_objs[i], arr1->GetDirectObjectAt(i)); | 743 EXPECT_EQ(indirect_objs[i], arr1->GetDirectObjectAt(i)); |
| 745 } | 744 } |
| 746 } | 745 } |
| OLD | NEW |