| 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 | 6 |
| 7 #include <memory> | 7 #include <memory> |
| 8 | 8 |
| 9 #include "core/fpdfapi/parser/cpdf_number.h" | 9 #include "core/fpdfapi/parser/cpdf_number.h" |
| 10 #include "core/fpdfapi/parser/cpdf_reference.h" | 10 #include "core/fpdfapi/parser/cpdf_reference.h" |
| (...skipping 69 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 80 } | 80 } |
| 81 } | 81 } |
| 82 | 82 |
| 83 TEST(cpdf_array, Clone) { | 83 TEST(cpdf_array, Clone) { |
| 84 { | 84 { |
| 85 // Basic case. | 85 // Basic case. |
| 86 int elems[] = {1, 2, 3, 4, 5, 6, 7, 8, 9, 10}; | 86 int elems[] = {1, 2, 3, 4, 5, 6, 7, 8, 9, 10}; |
| 87 std::unique_ptr<CPDF_Array> arr(new CPDF_Array); | 87 std::unique_ptr<CPDF_Array> arr(new CPDF_Array); |
| 88 for (size_t i = 0; i < FX_ArraySize(elems); ++i) | 88 for (size_t i = 0; i < FX_ArraySize(elems); ++i) |
| 89 arr->InsertAt(i, new CPDF_Number(elems[i])); | 89 arr->InsertAt(i, new CPDF_Number(elems[i])); |
| 90 std::unique_ptr<CPDF_Array> arr2(arr->Clone()->AsArray()); | 90 std::unique_ptr<CPDF_Array> arr2 = ToArray(arr->Clone()); |
| 91 EXPECT_EQ(arr->GetCount(), arr2->GetCount()); | 91 EXPECT_EQ(arr->GetCount(), arr2->GetCount()); |
| 92 for (size_t i = 0; i < FX_ArraySize(elems); ++i) { | 92 for (size_t i = 0; i < FX_ArraySize(elems); ++i) { |
| 93 // Clone() always create new objects. | 93 // Clone() always create new objects. |
| 94 EXPECT_NE(arr->GetObjectAt(i), arr2->GetObjectAt(i)); | 94 EXPECT_NE(arr->GetObjectAt(i), arr2->GetObjectAt(i)); |
| 95 EXPECT_EQ(arr->GetIntegerAt(i), arr2->GetIntegerAt(i)); | 95 EXPECT_EQ(arr->GetIntegerAt(i), arr2->GetIntegerAt(i)); |
| 96 } | 96 } |
| 97 } | 97 } |
| 98 { | 98 { |
| 99 // Clone() with and without dereferencing reference objects. | 99 // Clone() with and without dereferencing reference objects. |
| 100 static const size_t kNumOfRows = 3; | 100 static const size_t kNumOfRows = 3; |
| (...skipping 12 matching lines...) Expand all Loading... |
| 113 int obj_num = i * kNumOfRowElems + j + 1; | 113 int obj_num = i * kNumOfRowElems + j + 1; |
| 114 obj_holder->ReplaceIndirectObjectIfHigherGeneration(obj_num, | 114 obj_holder->ReplaceIndirectObjectIfHigherGeneration(obj_num, |
| 115 std::move(obj)); | 115 std::move(obj)); |
| 116 arr_elem->InsertAt(j, new CPDF_Reference(obj_holder.get(), obj_num)); | 116 arr_elem->InsertAt(j, new CPDF_Reference(obj_holder.get(), obj_num)); |
| 117 } | 117 } |
| 118 arr->InsertAt(i, arr_elem); | 118 arr->InsertAt(i, arr_elem); |
| 119 } | 119 } |
| 120 ASSERT_EQ(kNumOfRows, arr->GetCount()); | 120 ASSERT_EQ(kNumOfRows, arr->GetCount()); |
| 121 // Not dereferencing reference objects means just creating new references | 121 // Not dereferencing reference objects means just creating new references |
| 122 // instead of new copies of direct objects. | 122 // instead of new copies of direct objects. |
| 123 std::unique_ptr<CPDF_Array> arr1(arr->Clone()->AsArray()); | 123 std::unique_ptr<CPDF_Array> arr1 = ToArray(arr->Clone()); |
| 124 EXPECT_EQ(arr->GetCount(), arr1->GetCount()); | 124 EXPECT_EQ(arr->GetCount(), arr1->GetCount()); |
| 125 // Dereferencing reference objects creates new copies of direct objects. | 125 // Dereferencing reference objects creates new copies of direct objects. |
| 126 std::unique_ptr<CPDF_Array> arr2(arr->CloneDirectObject()->AsArray()); | 126 std::unique_ptr<CPDF_Array> arr2 = ToArray(arr->CloneDirectObject()); |
| 127 EXPECT_EQ(arr->GetCount(), arr2->GetCount()); | 127 EXPECT_EQ(arr->GetCount(), arr2->GetCount()); |
| 128 for (size_t i = 0; i < kNumOfRows; ++i) { | 128 for (size_t i = 0; i < kNumOfRows; ++i) { |
| 129 CPDF_Array* arr_elem = arr->GetObjectAt(i)->AsArray(); | 129 CPDF_Array* arr_elem = arr->GetObjectAt(i)->AsArray(); |
| 130 CPDF_Array* arr1_elem = arr1->GetObjectAt(i)->AsArray(); | 130 CPDF_Array* arr1_elem = arr1->GetObjectAt(i)->AsArray(); |
| 131 CPDF_Array* arr2_elem = arr2->GetObjectAt(i)->AsArray(); | 131 CPDF_Array* arr2_elem = arr2->GetObjectAt(i)->AsArray(); |
| 132 EXPECT_NE(arr_elem, arr1_elem); | 132 EXPECT_NE(arr_elem, arr1_elem); |
| 133 EXPECT_NE(arr_elem, arr2_elem); | 133 EXPECT_NE(arr_elem, arr2_elem); |
| 134 for (size_t j = 0; j < kNumOfRowElems; ++j) { | 134 for (size_t j = 0; j < kNumOfRowElems; ++j) { |
| 135 auto elem_obj = arr_elem->GetObjectAt(j); | 135 auto elem_obj = arr_elem->GetObjectAt(j); |
| 136 auto elem_obj1 = arr1_elem->GetObjectAt(j); | 136 auto elem_obj1 = arr1_elem->GetObjectAt(j); |
| (...skipping 30 matching lines...) Expand all Loading... |
| 167 TEST(cpdf_array, Iterator) { | 167 TEST(cpdf_array, Iterator) { |
| 168 int elems[] = {-23, -11, 3, 455, 2345877, | 168 int elems[] = {-23, -11, 3, 455, 2345877, |
| 169 0, 7895330, -12564334, 10000, -100000}; | 169 0, 7895330, -12564334, 10000, -100000}; |
| 170 std::unique_ptr<CPDF_Array> arr(new CPDF_Array); | 170 std::unique_ptr<CPDF_Array> arr(new CPDF_Array); |
| 171 for (size_t i = 0; i < FX_ArraySize(elems); ++i) | 171 for (size_t i = 0; i < FX_ArraySize(elems); ++i) |
| 172 arr->InsertAt(i, new CPDF_Number(elems[i])); | 172 arr->InsertAt(i, new CPDF_Number(elems[i])); |
| 173 size_t index = 0; | 173 size_t index = 0; |
| 174 for (const auto& it : *arr) | 174 for (const auto& it : *arr) |
| 175 EXPECT_EQ(elems[index++], it->AsNumber()->GetInteger()); | 175 EXPECT_EQ(elems[index++], it->AsNumber()->GetInteger()); |
| 176 } | 176 } |
| OLD | NEW |