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 |