summaryrefslogtreecommitdiff
path: root/core/fpdfapi/parser/cpdf_object_unittest.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'core/fpdfapi/parser/cpdf_object_unittest.cpp')
-rw-r--r--core/fpdfapi/parser/cpdf_object_unittest.cpp129
1 files changed, 61 insertions, 68 deletions
diff --git a/core/fpdfapi/parser/cpdf_object_unittest.cpp b/core/fpdfapi/parser/cpdf_object_unittest.cpp
index 4145f248fa..c341284602 100644
--- a/core/fpdfapi/parser/cpdf_object_unittest.cpp
+++ b/core/fpdfapi/parser/cpdf_object_unittest.cpp
@@ -59,8 +59,8 @@ class PDFObjectsTest : public testing::Test {
CPDF_Name* name_obj = new CPDF_Name("space");
// Array object.
m_ArrayObj = new CPDF_Array;
- m_ArrayObj->InsertAt(0, new CPDF_Number(8902));
- m_ArrayObj->InsertAt(1, new CPDF_Name("address"));
+ m_ArrayObj->InsertNewAt<CPDF_Number>(0, 8902);
+ m_ArrayObj->InsertNewAt<CPDF_Name>(1, "address");
// Dictionary object.
m_DictObj = new CPDF_Dictionary();
m_DictObj->SetFor("bool", new CPDF_Boolean(false));
@@ -388,11 +388,11 @@ TEST(PDFArrayTest, GetMatrix) {
{2.3f, 4.05f, 3, -2, -3, 0.0f},
{0.05f, 0.1f, 0.56f, 0.67f, 1.34f, 99.9f}};
for (size_t i = 0; i < FX_ArraySize(elems); ++i) {
- std::unique_ptr<CPDF_Array> arr(new CPDF_Array);
+ auto arr = pdfium::MakeUnique<CPDF_Array>();
CFX_Matrix matrix(elems[i][0], elems[i][1], elems[i][2], elems[i][3],
elems[i][4], elems[i][5]);
for (size_t j = 0; j < 6; ++j)
- arr->AddNumber(elems[i][j]);
+ arr->AddNew<CPDF_Number>(elems[i][j]);
CFX_Matrix arr_matrix = arr->GetMatrix();
EXPECT_EQ(matrix.GetA(), arr_matrix.GetA());
EXPECT_EQ(matrix.GetB(), arr_matrix.GetB());
@@ -409,10 +409,10 @@ TEST(PDFArrayTest, GetRect) {
{2.3f, 4.05f, -3, 0.0f},
{0.05f, 0.1f, 1.34f, 99.9f}};
for (size_t i = 0; i < FX_ArraySize(elems); ++i) {
- std::unique_ptr<CPDF_Array> arr(new CPDF_Array);
+ auto arr = pdfium::MakeUnique<CPDF_Array>();
CFX_FloatRect rect(elems[i]);
for (size_t j = 0; j < 4; ++j)
- arr->AddNumber(elems[i][j]);
+ arr->AddNew<CPDF_Number>(elems[i][j]);
CFX_FloatRect arr_rect = arr->GetRect();
EXPECT_EQ(rect.left, arr_rect.left);
EXPECT_EQ(rect.right, arr_rect.right);
@@ -425,9 +425,9 @@ TEST(PDFArrayTest, GetTypeAt) {
{
// Boolean array.
const bool vals[] = {true, false, false, true, true};
- std::unique_ptr<CPDF_Array> arr(new CPDF_Array);
+ auto arr = pdfium::MakeUnique<CPDF_Array>();
for (size_t i = 0; i < FX_ArraySize(vals); ++i)
- arr->InsertAt(i, new CPDF_Boolean(vals[i]));
+ arr->InsertNewAt<CPDF_Boolean>(i, vals[i]);
for (size_t i = 0; i < FX_ArraySize(vals); ++i) {
TestArrayAccessors(arr.get(), i, // Array and index.
vals[i] ? "true" : "false", // String value.
@@ -442,9 +442,9 @@ TEST(PDFArrayTest, GetTypeAt) {
{
// Integer array.
const int vals[] = {10, 0, -345, 2089345456, -1000000000, 567, 93658767};
- std::unique_ptr<CPDF_Array> arr(new CPDF_Array);
+ auto arr = pdfium::MakeUnique<CPDF_Array>();
for (size_t i = 0; i < FX_ArraySize(vals); ++i)
- arr->InsertAt(i, new CPDF_Number(vals[i]));
+ arr->InsertNewAt<CPDF_Number>(i, vals[i]);
for (size_t i = 0; i < FX_ArraySize(vals); ++i) {
char buf[33];
TestArrayAccessors(arr.get(), i, // Array and index.
@@ -463,10 +463,9 @@ TEST(PDFArrayTest, GetTypeAt) {
897.34f, -2.5f, -1.0f, -345.0f, -0.0f};
const char* const expected_str[] = {
"0", "0", "10", "10", "0.0345", "897.34", "-2.5", "-1", "-345", "0"};
- std::unique_ptr<CPDF_Array> arr(new CPDF_Array);
- for (size_t i = 0; i < FX_ArraySize(vals); ++i) {
- arr->InsertAt(i, new CPDF_Number(vals[i]));
- }
+ auto arr = pdfium::MakeUnique<CPDF_Array>();
+ for (size_t i = 0; i < FX_ArraySize(vals); ++i)
+ arr->InsertNewAt<CPDF_Number>(i, vals[i]);
for (size_t i = 0; i < FX_ArraySize(vals); ++i) {
TestArrayAccessors(arr.get(), i, // Array and index.
expected_str[i], // String value.
@@ -485,8 +484,8 @@ TEST(PDFArrayTest, GetTypeAt) {
std::unique_ptr<CPDF_Array> string_array(new CPDF_Array);
std::unique_ptr<CPDF_Array> name_array(new CPDF_Array);
for (size_t i = 0; i < FX_ArraySize(vals); ++i) {
- string_array->InsertAt(i, new CPDF_String(vals[i], false));
- name_array->InsertAt(i, new CPDF_Name(vals[i]));
+ string_array->InsertNewAt<CPDF_String>(i, vals[i], false);
+ name_array->InsertNewAt<CPDF_Name>(i, vals[i]);
}
for (size_t i = 0; i < FX_ArraySize(vals); ++i) {
TestArrayAccessors(string_array.get(), i, // Array and index.
@@ -509,9 +508,9 @@ TEST(PDFArrayTest, GetTypeAt) {
}
{
// Null element array.
- std::unique_ptr<CPDF_Array> arr(new CPDF_Array);
+ auto arr = pdfium::MakeUnique<CPDF_Array>();
for (size_t i = 0; i < 3; ++i)
- arr->InsertAt(i, new CPDF_Null);
+ arr->InsertNewAt<CPDF_Null>(i);
for (size_t i = 0; i < 3; ++i) {
TestArrayAccessors(arr.get(), i, // Array and index.
"", // String value.
@@ -526,14 +525,13 @@ TEST(PDFArrayTest, GetTypeAt) {
{
// Array of array.
CPDF_Array* vals[3];
- std::unique_ptr<CPDF_Array> arr(new CPDF_Array);
+ auto arr = pdfium::MakeUnique<CPDF_Array>();
for (size_t i = 0; i < 3; ++i) {
- vals[i] = new CPDF_Array;
+ vals[i] = arr->AddNew<CPDF_Array>();
for (size_t j = 0; j < 3; ++j) {
int value = j + 100;
- vals[i]->InsertAt(i, new CPDF_Number(value));
+ vals[i]->InsertNewAt<CPDF_Number>(i, value);
}
- arr->InsertAt(i, vals[i]);
}
for (size_t i = 0; i < 3; ++i) {
TestArrayAccessors(arr.get(), i, // Array and index.
@@ -549,9 +547,9 @@ TEST(PDFArrayTest, GetTypeAt) {
{
// Dictionary array.
CPDF_Dictionary* vals[3];
- std::unique_ptr<CPDF_Array> arr(new CPDF_Array);
+ auto arr = pdfium::MakeUnique<CPDF_Array>();
for (size_t i = 0; i < 3; ++i) {
- vals[i] = new CPDF_Dictionary();
+ vals[i] = arr->AddNew<CPDF_Dictionary>();
for (size_t j = 0; j < 3; ++j) {
std::string key("key");
char buf[33];
@@ -559,7 +557,6 @@ TEST(PDFArrayTest, GetTypeAt) {
int value = j + 200;
vals[i]->SetFor(key.c_str(), new CPDF_Number(value));
}
- arr->InsertAt(i, vals[i]);
}
for (size_t i = 0; i < 3; ++i) {
TestArrayAccessors(arr.get(), i, // Array and index.
@@ -576,7 +573,7 @@ TEST(PDFArrayTest, GetTypeAt) {
// Stream array.
CPDF_Dictionary* vals[3];
CPDF_Stream* stream_vals[3];
- std::unique_ptr<CPDF_Array> arr(new CPDF_Array);
+ auto arr = pdfium::MakeUnique<CPDF_Array>();
for (size_t i = 0; i < 3; ++i) {
vals[i] = new CPDF_Dictionary();
for (size_t j = 0; j < 3; ++j) {
@@ -590,8 +587,7 @@ TEST(PDFArrayTest, GetTypeAt) {
size_t data_size = FX_ArraySize(content);
uint8_t* data = reinterpret_cast<uint8_t*>(malloc(data_size));
memcpy(data, content, data_size);
- stream_vals[i] = new CPDF_Stream(data, data_size, vals[i]);
- arr->InsertAt(i, stream_vals[i]);
+ stream_vals[i] = arr->AddNew<CPDF_Stream>(data, data_size, vals[i]);
}
for (size_t i = 0; i < 3; ++i) {
TestArrayAccessors(arr.get(), i, // Array and index.
@@ -606,27 +602,27 @@ TEST(PDFArrayTest, GetTypeAt) {
}
{
// Mixed array.
- std::unique_ptr<CPDF_Array> arr(new CPDF_Array);
- // Array arr will take ownership of all the objects inserted.
- arr->InsertAt(0, new CPDF_Boolean(true));
- arr->InsertAt(1, new CPDF_Boolean(false));
- arr->InsertAt(2, new CPDF_Number(0));
- arr->InsertAt(3, new CPDF_Number(-1234));
- arr->InsertAt(4, new CPDF_Number(2345.0f));
- arr->InsertAt(5, new CPDF_Number(0.05f));
- arr->InsertAt(6, new CPDF_String("", false));
- arr->InsertAt(7, new CPDF_String("It is a test!", false));
- arr->InsertAt(8, new CPDF_Name("NAME"));
- arr->InsertAt(9, new CPDF_Name("test"));
- arr->InsertAt(10, new CPDF_Null());
- CPDF_Array* arr_val = new CPDF_Array;
- arr_val->AddNumber(1);
- arr_val->AddNumber(2);
- arr->InsertAt(11, arr_val);
- CPDF_Dictionary* dict_val = new CPDF_Dictionary();
+ auto arr = pdfium::MakeUnique<CPDF_Array>();
+ arr->InsertNewAt<CPDF_Boolean>(0, true);
+ arr->InsertNewAt<CPDF_Boolean>(1, false);
+ arr->InsertNewAt<CPDF_Number>(2, 0);
+ arr->InsertNewAt<CPDF_Number>(3, -1234);
+ arr->InsertNewAt<CPDF_Number>(4, 2345.0f);
+ arr->InsertNewAt<CPDF_Number>(5, 0.05f);
+ arr->InsertNewAt<CPDF_String>(6, "", false);
+ arr->InsertNewAt<CPDF_String>(7, "It is a test!", false);
+ arr->InsertNewAt<CPDF_Name>(8, "NAME");
+ arr->InsertNewAt<CPDF_Name>(9, "test");
+ arr->InsertNewAt<CPDF_Null>(10);
+
+ CPDF_Array* arr_val = arr->InsertNewAt<CPDF_Array>(11);
+ arr_val->AddNew<CPDF_Number>(1);
+ arr_val->AddNew<CPDF_Number>(2);
+
+ CPDF_Dictionary* dict_val = arr->InsertNewAt<CPDF_Dictionary>(12);
dict_val->SetFor("key1", new CPDF_String("Linda", false));
dict_val->SetFor("key2", new CPDF_String("Zoe", false));
- arr->InsertAt(12, dict_val);
+
CPDF_Dictionary* stream_dict = new CPDF_Dictionary();
stream_dict->SetFor("key1", new CPDF_String("John", false));
stream_dict->SetFor("key2", new CPDF_String("King", false));
@@ -636,8 +632,8 @@ TEST(PDFArrayTest, GetTypeAt) {
size_t buf_size = sizeof(data);
uint8_t* buf = reinterpret_cast<uint8_t*>(malloc(buf_size));
memcpy(buf, data, buf_size);
- CPDF_Stream* stream_val = new CPDF_Stream(buf, buf_size, stream_dict);
- arr->InsertAt(13, stream_val);
+ CPDF_Stream* stream_val =
+ arr->InsertNewAt<CPDF_Stream>(13, buf, buf_size, stream_dict);
const char* const expected_str[] = {
"true", "false", "0", "-1234", "2345", "0.05", "",
"It is a test!", "NAME", "test", "", "", "", ""};
@@ -671,9 +667,9 @@ TEST(PDFArrayTest, GetTypeAt) {
TEST(PDFArrayTest, AddNumber) {
float vals[] = {1.0f, -1.0f, 0, 0.456734f,
12345.54321f, 0.5f, 1000, 0.000045f};
- std::unique_ptr<CPDF_Array> arr(new CPDF_Array);
+ auto arr = pdfium::MakeUnique<CPDF_Array>();
for (size_t i = 0; i < FX_ArraySize(vals); ++i)
- arr->AddNumber(vals[i]);
+ arr->AddNew<CPDF_Number>(vals[i]);
for (size_t i = 0; i < FX_ArraySize(vals); ++i) {
EXPECT_EQ(CPDF_Object::NUMBER, arr->GetObjectAt(i)->GetType());
EXPECT_EQ(vals[i], arr->GetObjectAt(i)->GetNumber());
@@ -682,9 +678,9 @@ TEST(PDFArrayTest, AddNumber) {
TEST(PDFArrayTest, AddInteger) {
int vals[] = {0, 1, 934435456, 876, 10000, -1, -24354656, -100};
- std::unique_ptr<CPDF_Array> arr(new CPDF_Array);
+ auto arr = pdfium::MakeUnique<CPDF_Array>();
for (size_t i = 0; i < FX_ArraySize(vals); ++i)
- arr->AddInteger(vals[i]);
+ arr->AddNew<CPDF_Number>(vals[i]);
for (size_t i = 0; i < FX_ArraySize(vals); ++i) {
EXPECT_EQ(CPDF_Object::NUMBER, arr->GetObjectAt(i)->GetType());
EXPECT_EQ(vals[i], arr->GetObjectAt(i)->GetNumber());
@@ -697,8 +693,8 @@ TEST(PDFArrayTest, AddStringAndName) {
std::unique_ptr<CPDF_Array> string_array(new CPDF_Array);
std::unique_ptr<CPDF_Array> name_array(new CPDF_Array);
for (size_t i = 0; i < FX_ArraySize(vals); ++i) {
- string_array->AddString(vals[i]);
- name_array->AddName(vals[i]);
+ string_array->AddNew<CPDF_String>(vals[i], false);
+ name_array->AddNew<CPDF_Name>(vals[i]);
}
for (size_t i = 0; i < FX_ArraySize(vals); ++i) {
EXPECT_EQ(CPDF_Object::STRING, string_array->GetObjectAt(i)->GetType());
@@ -720,14 +716,14 @@ TEST(PDFArrayTest, AddReferenceAndGetObjectAt) {
CPDF_Object* indirect_objs[] = {boolean_obj, int_obj, float_obj,
str_obj, name_obj, null_obj};
unsigned int obj_nums[] = {2, 4, 7, 2345, 799887, 1};
- std::unique_ptr<CPDF_Array> arr(new CPDF_Array);
+ auto arr = pdfium::MakeUnique<CPDF_Array>();
std::unique_ptr<CPDF_Array> arr1(new CPDF_Array);
// Create two arrays of references by different AddReference() APIs.
for (size_t i = 0; i < FX_ArraySize(indirect_objs); ++i) {
holder->ReplaceIndirectObjectIfHigherGeneration(
obj_nums[i], pdfium::WrapUnique<CPDF_Object>(indirect_objs[i]));
- arr->AddReference(holder.get(), obj_nums[i]);
- arr1->AddReference(holder.get(), indirect_objs[i]->GetObjNum());
+ arr->AddNew<CPDF_Reference>(holder.get(), obj_nums[i]);
+ arr1->AddNew<CPDF_Reference>(holder.get(), indirect_objs[i]->GetObjNum());
}
// Check indirect objects.
for (size_t i = 0; i < FX_ArraySize(obj_nums); ++i)
@@ -747,7 +743,7 @@ TEST(PDFArrayTest, AddReferenceAndGetObjectAt) {
TEST(PDFArrayTest, CloneDirectObject) {
CPDF_IndirectObjectHolder objects_holder;
std::unique_ptr<CPDF_Array> array(new CPDF_Array);
- array->AddReference(&objects_holder, 1234);
+ array->AddNew<CPDF_Reference>(&objects_holder, 1234);
ASSERT_EQ(1U, array->GetCount());
CPDF_Object* obj = array->GetObjectAt(0);
ASSERT_TRUE(obj);
@@ -766,9 +762,8 @@ TEST(PDFArrayTest, CloneDirectObject) {
TEST(PDFArrayTest, ConvertIndirect) {
CPDF_IndirectObjectHolder objects_holder;
- std::unique_ptr<CPDF_Array> array(new CPDF_Array);
- CPDF_Object* pObj = new CPDF_Number(42);
- array->Add(pObj);
+ auto array = pdfium::MakeUnique<CPDF_Array>();
+ CPDF_Object* pObj = array->AddNew<CPDF_Number>(42);
array->ConvertToIndirectObjectAt(0, &objects_holder);
CPDF_Object* pRef = array->GetObjectAt(0);
CPDF_Object* pNum = array->GetDirectObjectAt(0);
@@ -802,11 +797,9 @@ TEST(PDFDictionaryTest, CloneDirectObject) {
TEST(PDFObjectTest, CloneCheckLoop) {
{
// Create a dictionary/array pair with a reference loop.
- CPDF_Dictionary* dict_obj = new CPDF_Dictionary();
- std::unique_ptr<CPDF_Array> arr_obj(new CPDF_Array);
+ auto arr_obj = pdfium::MakeUnique<CPDF_Array>();
+ CPDF_Dictionary* dict_obj = arr_obj->InsertNewAt<CPDF_Dictionary>(0);
dict_obj->SetFor("arr", arr_obj.get());
- arr_obj->InsertAt(0, dict_obj);
-
// Clone this object to see whether stack overflow will be triggered.
std::unique_ptr<CPDF_Array> cloned_array = ToArray(arr_obj->Clone());
// Cloned object should be the same as the original.
@@ -840,8 +833,8 @@ TEST(PDFObjectTest, CloneCheckLoop) {
// Create an object with a reference loop.
CPDF_Dictionary* dict_obj = objects_holder.NewIndirect<CPDF_Dictionary>();
std::unique_ptr<CPDF_Array> arr_obj = pdfium::MakeUnique<CPDF_Array>();
- arr_obj->InsertAt(
- 0, new CPDF_Reference(&objects_holder, dict_obj->GetObjNum()));
+ arr_obj->InsertNewAt<CPDF_Reference>(0, &objects_holder,
+ dict_obj->GetObjNum());
CPDF_Object* elem0 = arr_obj->GetObjectAt(0);
dict_obj->SetFor("arr", arr_obj.release());
EXPECT_EQ(1u, dict_obj->GetObjNum());