57 EXPECT_EQ(Walk(pdfium::MakeRetain<CPDF_Null>()),
"Null");
58 EXPECT_EQ(Walk(pdfium::MakeRetain<CPDF_Dictionary>()),
"Dict");
59 EXPECT_EQ(Walk(pdfium::MakeRetain<CPDF_Array>()),
"Arr");
60 EXPECT_EQ(Walk(pdfium::MakeRetain<CPDF_String>()),
"Str");
61 EXPECT_EQ(Walk(pdfium::MakeRetain<CPDF_Boolean>()),
"Bool");
62 EXPECT_EQ(Walk(pdfium::MakeRetain<CPDF_Stream>()),
"Stream");
63 EXPECT_EQ(Walk(pdfium::MakeRetain<CPDF_Reference>(
nullptr, 0)),
"Ref");
68 auto dict = pdfium::MakeRetain<CPDF_Dictionary>();
69 dict->SetFor(
"1", pdfium::MakeRetain<CPDF_String>());
70 dict->SetFor(
"2", pdfium::MakeRetain<CPDF_Boolean>());
71 auto array = pdfium::MakeRetain<CPDF_Array>();
72 array->Append(pdfium::MakeRetain<CPDF_Reference>(
nullptr, 0));
73 array->Append(pdfium::MakeRetain<CPDF_Null>());
75 holder.NewIndirect<CPDF_Stream>(pdfium::MakeRetain<CPDF_Dictionary>());
77 const uint32_t stream_object_number = stream->GetObjNum();
78 ASSERT_GT(stream_object_number, 0u);
80 pdfium::MakeRetain<CPDF_Reference>(&holder, stream_object_number));
81 dict->SetFor(
"3",
std::move(array));
82 EXPECT_EQ(Walk(dict),
"Dict Str Bool Arr Ref Null Ref");
87 auto level_4 = pdfium::MakeRetain<CPDF_Number>(0);
88 auto level_3 = pdfium::MakeRetain<CPDF_Dictionary>();
89 level_3->SetFor(
"Length",
std::move(level_4));
90 auto level_2 = holder.NewIndirect<CPDF_Stream>(
std::move(level_3));
92 const uint32_t level_2_object_number = level_2->GetObjNum();
93 ASSERT_GT(level_2_object_number, 0u);
94 auto level_1 = pdfium::MakeRetain<CPDF_Array>();
96 pdfium::MakeRetain<CPDF_Reference>(&holder, level_2_object_number));
97 auto level_0 = pdfium::MakeRetain<CPDF_Dictionary>();
98 level_0->SetFor(
"Array",
std::move(level_1));
105 while (RetainPtr<
const CPDF_Object> obj = walker.GetNext()) {
107 cur_parent =
std::move(obj);
112 auto root_array = pdfium::MakeRetain<CPDF_Array>();
114 root_array->AppendNew<CPDF_Null>();
115 root_array->AppendNew<CPDF_Null>();
118 root_array->Append(root_array->Clone());
120 int non_array_objects = 0;
122 while (RetainPtr<
const CPDF_Object> obj = walker.GetNext()) {
123 if (obj != root_array && obj->IsArray()) {
131 EXPECT_EQ(2, non_array_objects);
135 auto dict = pdfium::MakeRetain<CPDF_Dictionary>();
136 dict->SetFor(
"1", pdfium::MakeRetain<CPDF_Null>());
137 dict->SetFor(
"2", pdfium::MakeRetain<CPDF_Null>());
138 dict->SetFor(
"3", pdfium::MakeRetain<CPDF_Null>());
139 dict->SetFor(
"4", pdfium::MakeRetain<CPDF_Null>());
140 dict->SetFor(
"5", pdfium::MakeRetain<CPDF_Null>());
143 while (RetainPtr<
const CPDF_Object> obj = walker.GetNext()) {