| 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 165 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 176 std::vector<ScopedObj> m_DirectObjs; | 176 std::vector<ScopedObj> m_DirectObjs; |
| 177 std::vector<int> m_DirectObjTypes; | 177 std::vector<int> m_DirectObjTypes; |
| 178 std::vector<ScopedObj> m_RefObjs; | 178 std::vector<ScopedObj> m_RefObjs; |
| 179 CPDF_Dictionary* m_DictObj; | 179 CPDF_Dictionary* m_DictObj; |
| 180 CPDF_Dictionary* m_StreamDictObj; | 180 CPDF_Dictionary* m_StreamDictObj; |
| 181 CPDF_Array* m_ArrayObj; | 181 CPDF_Array* m_ArrayObj; |
| 182 std::vector<CPDF_Object*> m_IndirectObjs; | 182 std::vector<CPDF_Object*> m_IndirectObjs; |
| 183 }; | 183 }; |
| 184 | 184 |
| 185 TEST_F(PDFObjectsTest, GetString) { | 185 TEST_F(PDFObjectsTest, GetString) { |
| 186 const char* direct_obj_results[] = { | 186 const char* const direct_obj_results[] = { |
| 187 "false", "true", "1245", "9.00345", "A simple test", "\t\n", "space", | 187 "false", "true", "1245", "9.00345", "A simple test", "\t\n", "space", |
| 188 "", "", "", ""}; | 188 "", "", "", ""}; |
| 189 // Check for direct objects. | 189 // Check for direct objects. |
| 190 for (size_t i = 0; i < m_DirectObjs.size(); ++i) | 190 for (size_t i = 0; i < m_DirectObjs.size(); ++i) |
| 191 EXPECT_STREQ(direct_obj_results[i], m_DirectObjs[i]->GetString().c_str()); | 191 EXPECT_STREQ(direct_obj_results[i], m_DirectObjs[i]->GetString().c_str()); |
| 192 | 192 |
| 193 // Check indirect references. | 193 // Check indirect references. |
| 194 const char* indirect_obj_results[] = {"true", "1245", "\t\n", "space", | 194 const char* const indirect_obj_results[] = {"true", "1245", "\t\n", "space", |
| 195 "", "", ""}; | 195 "", "", ""}; |
| 196 for (size_t i = 0; i < m_RefObjs.size(); ++i) { | 196 for (size_t i = 0; i < m_RefObjs.size(); ++i) { |
| 197 EXPECT_STREQ(indirect_obj_results[i], m_RefObjs[i]->GetString().c_str()); | 197 EXPECT_STREQ(indirect_obj_results[i], m_RefObjs[i]->GetString().c_str()); |
| 198 } | 198 } |
| 199 } | 199 } |
| 200 | 200 |
| 201 TEST_F(PDFObjectsTest, GetUnicodeText) { | 201 TEST_F(PDFObjectsTest, GetUnicodeText) { |
| 202 const wchar_t* direct_obj_results[] = { | 202 const wchar_t* const direct_obj_results[] = { |
| 203 L"", L"", L"", L"", L"A simple test", | 203 L"", L"", L"", L"", L"A simple test", |
| 204 L"\t\n", L"space", L"", L"", L"abcdefghijklmnopqrstuvwxyz", | 204 L"\t\n", L"space", L"", L"", L"abcdefghijklmnopqrstuvwxyz", |
| 205 L""}; | 205 L""}; |
| 206 // Check for direct objects. | 206 // Check for direct objects. |
| 207 for (size_t i = 0; i < m_DirectObjs.size(); ++i) { | 207 for (size_t i = 0; i < m_DirectObjs.size(); ++i) { |
| 208 EXPECT_STREQ(direct_obj_results[i], | 208 EXPECT_STREQ(direct_obj_results[i], |
| 209 m_DirectObjs[i]->GetUnicodeText().c_str()); | 209 m_DirectObjs[i]->GetUnicodeText().c_str()); |
| 210 } | 210 } |
| 211 | 211 |
| 212 // Check indirect references. | 212 // Check indirect references. |
| (...skipping 20 matching lines...) Expand all Loading... |
| 233 for (size_t i = 0; i < m_DirectObjs.size(); ++i) | 233 for (size_t i = 0; i < m_DirectObjs.size(); ++i) |
| 234 EXPECT_EQ(direct_obj_results[i], m_DirectObjs[i]->GetInteger()); | 234 EXPECT_EQ(direct_obj_results[i], m_DirectObjs[i]->GetInteger()); |
| 235 | 235 |
| 236 // Check indirect references. | 236 // Check indirect references. |
| 237 const int indirect_obj_results[] = {1, 1245, 0, 0, 0, 0, 0}; | 237 const int indirect_obj_results[] = {1, 1245, 0, 0, 0, 0, 0}; |
| 238 for (size_t i = 0; i < m_RefObjs.size(); ++i) | 238 for (size_t i = 0; i < m_RefObjs.size(); ++i) |
| 239 EXPECT_EQ(indirect_obj_results[i], m_RefObjs[i]->GetInteger()); | 239 EXPECT_EQ(indirect_obj_results[i], m_RefObjs[i]->GetInteger()); |
| 240 } | 240 } |
| 241 | 241 |
| 242 TEST_F(PDFObjectsTest, GetDict) { | 242 TEST_F(PDFObjectsTest, GetDict) { |
| 243 const CPDF_Dictionary* direct_obj_results[] = { | 243 const CPDF_Dictionary* const direct_obj_results[] = { |
| 244 nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, | 244 nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, |
| 245 nullptr, nullptr, m_DictObj, m_StreamDictObj, nullptr}; | 245 nullptr, nullptr, m_DictObj, m_StreamDictObj, nullptr}; |
| 246 // Check for direct objects. | 246 // Check for direct objects. |
| 247 for (size_t i = 0; i < m_DirectObjs.size(); ++i) | 247 for (size_t i = 0; i < m_DirectObjs.size(); ++i) |
| 248 EXPECT_EQ(direct_obj_results[i], m_DirectObjs[i]->GetDict()); | 248 EXPECT_EQ(direct_obj_results[i], m_DirectObjs[i]->GetDict()); |
| 249 | 249 |
| 250 // Check indirect references. | 250 // Check indirect references. |
| 251 const CPDF_Dictionary* indirect_obj_results[] = { | 251 const CPDF_Dictionary* const indirect_obj_results[] = { |
| 252 nullptr, nullptr, nullptr, nullptr, nullptr, m_DictObj, m_StreamDictObj}; | 252 nullptr, nullptr, nullptr, nullptr, nullptr, m_DictObj, m_StreamDictObj}; |
| 253 for (size_t i = 0; i < m_RefObjs.size(); ++i) | 253 for (size_t i = 0; i < m_RefObjs.size(); ++i) |
| 254 EXPECT_EQ(indirect_obj_results[i], m_RefObjs[i]->GetDict()); | 254 EXPECT_EQ(indirect_obj_results[i], m_RefObjs[i]->GetDict()); |
| 255 } | 255 } |
| 256 | 256 |
| 257 TEST_F(PDFObjectsTest, GetArray) { | 257 TEST_F(PDFObjectsTest, GetArray) { |
| 258 const CPDF_Array* direct_obj_results[] = { | 258 const CPDF_Array* const direct_obj_results[] = { |
| 259 nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, | 259 nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, |
| 260 nullptr, m_ArrayObj, nullptr, nullptr, nullptr}; | 260 nullptr, m_ArrayObj, nullptr, nullptr, nullptr}; |
| 261 // Check for direct objects. | 261 // Check for direct objects. |
| 262 for (size_t i = 0; i < m_DirectObjs.size(); ++i) | 262 for (size_t i = 0; i < m_DirectObjs.size(); ++i) |
| 263 EXPECT_EQ(direct_obj_results[i], m_DirectObjs[i]->GetArray()); | 263 EXPECT_EQ(direct_obj_results[i], m_DirectObjs[i]->AsArray()); |
| 264 | 264 |
| 265 // Check indirect references. | 265 // Check indirect references. |
| 266 for (const auto& it : m_RefObjs) | 266 for (const auto& it : m_RefObjs) |
| 267 EXPECT_EQ(nullptr, it->GetArray()); | 267 EXPECT_EQ(nullptr, it->AsArray()); |
| 268 } | 268 } |
| 269 | 269 |
| 270 TEST_F(PDFObjectsTest, Clone) { | 270 TEST_F(PDFObjectsTest, Clone) { |
| 271 // Check for direct objects. | 271 // Check for direct objects. |
| 272 for (size_t i = 0; i < m_DirectObjs.size(); ++i) { | 272 for (size_t i = 0; i < m_DirectObjs.size(); ++i) { |
| 273 ScopedObj obj(m_DirectObjs[i]->Clone()); | 273 ScopedObj obj(m_DirectObjs[i]->Clone()); |
| 274 EXPECT_TRUE(Equal(m_DirectObjs[i].get(), obj.get())); | 274 EXPECT_TRUE(Equal(m_DirectObjs[i].get(), obj.get())); |
| 275 } | 275 } |
| 276 | 276 |
| 277 // Check indirect references. | 277 // Check indirect references. |
| (...skipping 20 matching lines...) Expand all Loading... |
| 298 | 298 |
| 299 // Check indirect references. | 299 // Check indirect references. |
| 300 for (size_t i = 0; i < m_RefObjs.size(); ++i) | 300 for (size_t i = 0; i < m_RefObjs.size(); ++i) |
| 301 EXPECT_EQ(m_IndirectObjs[i], m_RefObjs[i]->GetDirect()); | 301 EXPECT_EQ(m_IndirectObjs[i], m_RefObjs[i]->GetDirect()); |
| 302 } | 302 } |
| 303 | 303 |
| 304 TEST_F(PDFObjectsTest, SetString) { | 304 TEST_F(PDFObjectsTest, SetString) { |
| 305 // Check for direct objects. | 305 // Check for direct objects. |
| 306 const char* const set_values[] = {"true", "fake", "3.125f", "097", | 306 const char* const set_values[] = {"true", "fake", "3.125f", "097", |
| 307 "changed", "", "NewName"}; | 307 "changed", "", "NewName"}; |
| 308 const char* expected[] = {"true", "false", "3.125", "97", | 308 const char* const expected[] = {"true", "false", "3.125", "97", |
| 309 "changed", "", "NewName"}; | 309 "changed", "", "NewName"}; |
| 310 for (size_t i = 0; i < FX_ArraySize(set_values); ++i) { | 310 for (size_t i = 0; i < FX_ArraySize(set_values); ++i) { |
| 311 m_DirectObjs[i]->SetString(set_values[i]); | 311 m_DirectObjs[i]->SetString(set_values[i]); |
| 312 EXPECT_STREQ(expected[i], m_DirectObjs[i]->GetString().c_str()); | 312 EXPECT_STREQ(expected[i], m_DirectObjs[i]->GetString().c_str()); |
| 313 } | 313 } |
| 314 } | 314 } |
| 315 | 315 |
| 316 TEST_F(PDFObjectsTest, IsTypeAndAsType) { | 316 TEST_F(PDFObjectsTest, IsTypeAndAsType) { |
| 317 // Check for direct objects. | 317 // Check for direct objects. |
| 318 for (size_t i = 0; i < m_DirectObjs.size(); ++i) { | 318 for (size_t i = 0; i < m_DirectObjs.size(); ++i) { |
| 319 if (m_DirectObjTypes[i] == CPDF_Object::ARRAY) { | 319 if (m_DirectObjTypes[i] == CPDF_Object::ARRAY) { |
| (...skipping 97 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 417 EXPECT_EQ(rect.left, arr_rect.left); | 417 EXPECT_EQ(rect.left, arr_rect.left); |
| 418 EXPECT_EQ(rect.right, arr_rect.right); | 418 EXPECT_EQ(rect.right, arr_rect.right); |
| 419 EXPECT_EQ(rect.bottom, arr_rect.bottom); | 419 EXPECT_EQ(rect.bottom, arr_rect.bottom); |
| 420 EXPECT_EQ(rect.top, arr_rect.top); | 420 EXPECT_EQ(rect.top, arr_rect.top); |
| 421 } | 421 } |
| 422 } | 422 } |
| 423 | 423 |
| 424 TEST(PDFArrayTest, GetTypeAt) { | 424 TEST(PDFArrayTest, GetTypeAt) { |
| 425 { | 425 { |
| 426 // Boolean array. | 426 // Boolean array. |
| 427 bool vals[] = {true, false, false, true, true}; | 427 const bool vals[] = {true, false, false, true, true}; |
| 428 ScopedArray arr(new CPDF_Array); | 428 ScopedArray arr(new CPDF_Array); |
| 429 for (size_t i = 0; i < FX_ArraySize(vals); ++i) | 429 for (size_t i = 0; i < FX_ArraySize(vals); ++i) |
| 430 arr->InsertAt(i, new CPDF_Boolean(vals[i])); | 430 arr->InsertAt(i, new CPDF_Boolean(vals[i])); |
| 431 for (size_t i = 0; i < FX_ArraySize(vals); ++i) { | 431 for (size_t i = 0; i < FX_ArraySize(vals); ++i) { |
| 432 TestArrayAccessors(arr.get(), i, // Array and index. | 432 TestArrayAccessors(arr.get(), i, // Array and index. |
| 433 vals[i] ? "true" : "false", // String value. | 433 vals[i] ? "true" : "false", // String value. |
| 434 nullptr, // Const string value. | 434 nullptr, // Const string value. |
| 435 vals[i] ? 1 : 0, // Integer value. | 435 vals[i] ? 1 : 0, // Integer value. |
| 436 0, // Float value. | 436 0, // Float value. |
| 437 nullptr, // Array value. | 437 nullptr, // Array value. |
| 438 nullptr, // Dictionary value. | 438 nullptr, // Dictionary value. |
| 439 nullptr); // Stream value. | 439 nullptr); // Stream value. |
| 440 } | 440 } |
| 441 } | 441 } |
| 442 { | 442 { |
| 443 // Integer array. | 443 // Integer array. |
| 444 int vals[] = {10, 0, -345, 2089345456, -1000000000, 567, 93658767}; | 444 const int vals[] = {10, 0, -345, 2089345456, -1000000000, 567, 93658767}; |
| 445 ScopedArray arr(new CPDF_Array); | 445 ScopedArray arr(new CPDF_Array); |
| 446 for (size_t i = 0; i < FX_ArraySize(vals); ++i) | 446 for (size_t i = 0; i < FX_ArraySize(vals); ++i) |
| 447 arr->InsertAt(i, new CPDF_Number(vals[i])); | 447 arr->InsertAt(i, new CPDF_Number(vals[i])); |
| 448 for (size_t i = 0; i < FX_ArraySize(vals); ++i) { | 448 for (size_t i = 0; i < FX_ArraySize(vals); ++i) { |
| 449 char buf[33]; | 449 char buf[33]; |
| 450 TestArrayAccessors(arr.get(), i, // Array and index. | 450 TestArrayAccessors(arr.get(), i, // Array and index. |
| 451 FXSYS_itoa(vals[i], buf, 10), // String value. | 451 FXSYS_itoa(vals[i], buf, 10), // String value. |
| 452 nullptr, // Const string value. | 452 nullptr, // Const string value. |
| 453 vals[i], // Integer value. | 453 vals[i], // Integer value. |
| 454 vals[i], // Float value. | 454 vals[i], // Float value. |
| 455 nullptr, // Array value. | 455 nullptr, // Array value. |
| 456 nullptr, // Dictionary value. | 456 nullptr, // Dictionary value. |
| 457 nullptr); // Stream value. | 457 nullptr); // Stream value. |
| 458 } | 458 } |
| 459 } | 459 } |
| 460 { | 460 { |
| 461 // Float array. | 461 // Float array. |
| 462 float vals[] = {0.0f, 0, 10, 10.0f, 0.0345f, | 462 const float vals[] = {0.0f, 0, 10, 10.0f, 0.0345f, |
| 463 897.34f, -2.5f, -1.0f, -345.0f, -0.0f}; | 463 897.34f, -2.5f, -1.0f, -345.0f, -0.0f}; |
| 464 const char* expected_str[] = {"0", "0", "10", "10", "0.0345", | 464 const char* const expected_str[] = { |
| 465 "897.34", "-2.5", "-1", "-345", "0"}; | 465 "0", "0", "10", "10", "0.0345", "897.34", "-2.5", "-1", "-345", "0"}; |
| 466 ScopedArray arr(new CPDF_Array); | 466 ScopedArray arr(new CPDF_Array); |
| 467 for (size_t i = 0; i < FX_ArraySize(vals); ++i) { | 467 for (size_t i = 0; i < FX_ArraySize(vals); ++i) { |
| 468 arr->InsertAt(i, new CPDF_Number(vals[i])); | 468 arr->InsertAt(i, new CPDF_Number(vals[i])); |
| 469 } | 469 } |
| 470 for (size_t i = 0; i < FX_ArraySize(vals); ++i) { | 470 for (size_t i = 0; i < FX_ArraySize(vals); ++i) { |
| 471 TestArrayAccessors(arr.get(), i, // Array and index. | 471 TestArrayAccessors(arr.get(), i, // Array and index. |
| 472 expected_str[i], // String value. | 472 expected_str[i], // String value. |
| 473 nullptr, // Const string value. | 473 nullptr, // Const string value. |
| 474 vals[i], // Integer value. | 474 vals[i], // Integer value. |
| 475 vals[i], // Float value. | 475 vals[i], // Float value. |
| (...skipping 260 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 736 EXPECT_EQ(arr->GetCount(), arr1->GetCount()); | 736 EXPECT_EQ(arr->GetCount(), arr1->GetCount()); |
| 737 for (size_t i = 0; i < arr->GetCount(); ++i) { | 737 for (size_t i = 0; i < arr->GetCount(); ++i) { |
| 738 EXPECT_EQ(CPDF_Object::REFERENCE, arr->GetObjectAt(i)->GetType()); | 738 EXPECT_EQ(CPDF_Object::REFERENCE, arr->GetObjectAt(i)->GetType()); |
| 739 EXPECT_EQ(indirect_objs[i], arr->GetObjectAt(i)->GetDirect()); | 739 EXPECT_EQ(indirect_objs[i], arr->GetObjectAt(i)->GetDirect()); |
| 740 EXPECT_EQ(indirect_objs[i], arr->GetDirectObjectAt(i)); | 740 EXPECT_EQ(indirect_objs[i], arr->GetDirectObjectAt(i)); |
| 741 EXPECT_EQ(CPDF_Object::REFERENCE, arr1->GetObjectAt(i)->GetType()); | 741 EXPECT_EQ(CPDF_Object::REFERENCE, arr1->GetObjectAt(i)->GetType()); |
| 742 EXPECT_EQ(indirect_objs[i], arr1->GetObjectAt(i)->GetDirect()); | 742 EXPECT_EQ(indirect_objs[i], arr1->GetObjectAt(i)->GetDirect()); |
| 743 EXPECT_EQ(indirect_objs[i], arr1->GetDirectObjectAt(i)); | 743 EXPECT_EQ(indirect_objs[i], arr1->GetDirectObjectAt(i)); |
| 744 } | 744 } |
| 745 } | 745 } |
| OLD | NEW |