| 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/parser/cpdf_array.h" | 5 #include "core/fpdfapi/parser/cpdf_array.h" |
| 6 #include "core/fpdfapi/parser/cpdf_boolean.h" | 6 #include "core/fpdfapi/parser/cpdf_boolean.h" |
| 7 #include "core/fpdfapi/parser/cpdf_dictionary.h" | 7 #include "core/fpdfapi/parser/cpdf_dictionary.h" |
| 8 #include "core/fpdfapi/parser/cpdf_name.h" | 8 #include "core/fpdfapi/parser/cpdf_name.h" |
| 9 #include "core/fpdfapi/parser/cpdf_null.h" | 9 #include "core/fpdfapi/parser/cpdf_null.h" |
| 10 #include "core/fpdfapi/parser/cpdf_number.h" | 10 #include "core/fpdfapi/parser/cpdf_number.h" |
| (...skipping 751 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 762 CPDF_Object* cloned_array_object = array->CloneDirectObject(); | 762 CPDF_Object* cloned_array_object = array->CloneDirectObject(); |
| 763 ASSERT_TRUE(cloned_array_object); | 763 ASSERT_TRUE(cloned_array_object); |
| 764 ASSERT_TRUE(cloned_array_object->IsArray()); | 764 ASSERT_TRUE(cloned_array_object->IsArray()); |
| 765 | 765 |
| 766 ScopedArray cloned_array(cloned_array_object->AsArray()); | 766 ScopedArray cloned_array(cloned_array_object->AsArray()); |
| 767 ASSERT_EQ(1U, cloned_array->GetCount()); | 767 ASSERT_EQ(1U, cloned_array->GetCount()); |
| 768 CPDF_Object* cloned_obj = cloned_array->GetObjectAt(0); | 768 CPDF_Object* cloned_obj = cloned_array->GetObjectAt(0); |
| 769 EXPECT_FALSE(cloned_obj); | 769 EXPECT_FALSE(cloned_obj); |
| 770 } | 770 } |
| 771 | 771 |
| 772 TEST(PDFArrayTest, ConvertIndirect) { |
| 773 CPDF_IndirectObjectHolder objects_holder; |
| 774 ScopedArray array(new CPDF_Array); |
| 775 CPDF_Object* pObj = new CPDF_Number(42); |
| 776 array->Add(pObj); |
| 777 array->ConvertToIndirectObjectAt(0, &objects_holder); |
| 778 CPDF_Object* pRef = array->GetObjectAt(0); |
| 779 CPDF_Object* pNum = array->GetDirectObjectAt(0); |
| 780 EXPECT_TRUE(pRef->IsReference()); |
| 781 EXPECT_TRUE(pNum->IsNumber()); |
| 782 EXPECT_NE(pObj, pRef); |
| 783 EXPECT_EQ(pObj, pNum); |
| 784 EXPECT_EQ(42, array->GetIntegerAt(0)); |
| 785 } |
| 786 |
| 772 TEST(PDFDictionaryTest, CloneDirectObject) { | 787 TEST(PDFDictionaryTest, CloneDirectObject) { |
| 773 CPDF_IndirectObjectHolder objects_holder; | 788 CPDF_IndirectObjectHolder objects_holder; |
| 774 ScopedDict dict(new CPDF_Dictionary()); | 789 ScopedDict dict(new CPDF_Dictionary()); |
| 775 dict->SetReferenceFor("foo", &objects_holder, 1234); | 790 dict->SetReferenceFor("foo", &objects_holder, 1234); |
| 776 ASSERT_EQ(1U, dict->GetCount()); | 791 ASSERT_EQ(1U, dict->GetCount()); |
| 777 CPDF_Object* obj = dict->GetObjectFor("foo"); | 792 CPDF_Object* obj = dict->GetObjectFor("foo"); |
| 778 ASSERT_TRUE(obj); | 793 ASSERT_TRUE(obj); |
| 779 EXPECT_TRUE(obj->IsReference()); | 794 EXPECT_TRUE(obj->IsReference()); |
| 780 | 795 |
| 781 CPDF_Object* cloned_dict_object = dict->CloneDirectObject(); | 796 CPDF_Object* cloned_dict_object = dict->CloneDirectObject(); |
| (...skipping 62 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 844 // Cloned object should be the same as the original. | 859 // Cloned object should be the same as the original. |
| 845 ASSERT_TRUE(cloned_dict); | 860 ASSERT_TRUE(cloned_dict); |
| 846 CPDF_Object* cloned_arr = cloned_dict->GetObjectFor("arr"); | 861 CPDF_Object* cloned_arr = cloned_dict->GetObjectFor("arr"); |
| 847 ASSERT_TRUE(cloned_arr); | 862 ASSERT_TRUE(cloned_arr); |
| 848 ASSERT_TRUE(cloned_arr->IsArray()); | 863 ASSERT_TRUE(cloned_arr->IsArray()); |
| 849 EXPECT_EQ(1u, cloned_arr->AsArray()->GetCount()); | 864 EXPECT_EQ(1u, cloned_arr->AsArray()->GetCount()); |
| 850 // Recursively referenced object is not cloned. | 865 // Recursively referenced object is not cloned. |
| 851 EXPECT_EQ(nullptr, cloned_arr->AsArray()->GetObjectAt(0)); | 866 EXPECT_EQ(nullptr, cloned_arr->AsArray()->GetObjectAt(0)); |
| 852 } | 867 } |
| 853 } | 868 } |
| 869 |
| 870 TEST(PDFDictionaryTest, ConvertIndirect) { |
| 871 CPDF_IndirectObjectHolder objects_holder; |
| 872 ScopedDict dict(new CPDF_Dictionary); |
| 873 CPDF_Object* pObj = new CPDF_Number(42); |
| 874 dict->SetFor("clams", pObj); |
| 875 dict->ConvertToIndirectObjectFor("clams", &objects_holder); |
| 876 CPDF_Object* pRef = dict->GetObjectFor("clams"); |
| 877 CPDF_Object* pNum = dict->GetDirectObjectFor("clams"); |
| 878 EXPECT_TRUE(pRef->IsReference()); |
| 879 EXPECT_TRUE(pNum->IsNumber()); |
| 880 EXPECT_NE(pObj, pRef); |
| 881 EXPECT_EQ(pObj, pNum); |
| 882 EXPECT_EQ(42, dict->GetIntegerFor("clams")); |
| 883 } |
| OLD | NEW |