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 "public/fpdf_doc.h" | 5 #include "public/fpdf_doc.h" |
6 | 6 |
7 #include <memory> | 7 #include <memory> |
8 #include <vector> | 8 #include <vector> |
9 | 9 |
10 #include "core/fpdfapi/fpdf_parser/include/cpdf_document.h" | 10 #include "core/fpdfapi/fpdf_parser/include/cpdf_document.h" |
(...skipping 86 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
97 // No bookmark information. | 97 // No bookmark information. |
98 std::unique_ptr<unsigned short, pdfium::FreeDeleter> title = | 98 std::unique_ptr<unsigned short, pdfium::FreeDeleter> title = |
99 GetFPDFWideString(L""); | 99 GetFPDFWideString(L""); |
100 EXPECT_EQ(nullptr, FPDFBookmark_Find(m_pDoc.get(), title.get())); | 100 EXPECT_EQ(nullptr, FPDFBookmark_Find(m_pDoc.get(), title.get())); |
101 | 101 |
102 title = GetFPDFWideString(L"Preface"); | 102 title = GetFPDFWideString(L"Preface"); |
103 EXPECT_EQ(nullptr, FPDFBookmark_Find(m_pDoc.get(), title.get())); | 103 EXPECT_EQ(nullptr, FPDFBookmark_Find(m_pDoc.get(), title.get())); |
104 } | 104 } |
105 { | 105 { |
106 // Empty bookmark tree. | 106 // Empty bookmark tree. |
107 m_pRootObj->SetAt("Outlines", new CPDF_Dictionary()); | 107 m_pRootObj->SetFor("Outlines", new CPDF_Dictionary()); |
108 std::unique_ptr<unsigned short, pdfium::FreeDeleter> title = | 108 std::unique_ptr<unsigned short, pdfium::FreeDeleter> title = |
109 GetFPDFWideString(L""); | 109 GetFPDFWideString(L""); |
110 EXPECT_EQ(nullptr, FPDFBookmark_Find(m_pDoc.get(), title.get())); | 110 EXPECT_EQ(nullptr, FPDFBookmark_Find(m_pDoc.get(), title.get())); |
111 | 111 |
112 title = GetFPDFWideString(L"Preface"); | 112 title = GetFPDFWideString(L"Preface"); |
113 EXPECT_EQ(nullptr, FPDFBookmark_Find(m_pDoc.get(), title.get())); | 113 EXPECT_EQ(nullptr, FPDFBookmark_Find(m_pDoc.get(), title.get())); |
114 } | 114 } |
115 { | 115 { |
116 // Check on a regular bookmark tree. | 116 // Check on a regular bookmark tree. |
117 auto bookmarks = CreateDictObjs(3); | 117 auto bookmarks = CreateDictObjs(3); |
118 | 118 |
119 bookmarks[1].obj->SetAt("Title", new CPDF_String(L"Chapter 1")); | 119 bookmarks[1].obj->SetFor("Title", new CPDF_String(L"Chapter 1")); |
120 bookmarks[1].obj->SetAt( | 120 bookmarks[1].obj->SetFor( |
121 "Parent", new CPDF_Reference(m_pIndirectObjs, bookmarks[0].num)); | 121 "Parent", new CPDF_Reference(m_pIndirectObjs, bookmarks[0].num)); |
122 bookmarks[1].obj->SetAt( | 122 bookmarks[1].obj->SetFor( |
123 "Next", new CPDF_Reference(m_pIndirectObjs, bookmarks[2].num)); | 123 "Next", new CPDF_Reference(m_pIndirectObjs, bookmarks[2].num)); |
124 | 124 |
125 bookmarks[2].obj->SetAt("Title", new CPDF_String(L"Chapter 2")); | 125 bookmarks[2].obj->SetFor("Title", new CPDF_String(L"Chapter 2")); |
126 bookmarks[2].obj->SetAt( | 126 bookmarks[2].obj->SetFor( |
127 "Parent", new CPDF_Reference(m_pIndirectObjs, bookmarks[0].num)); | 127 "Parent", new CPDF_Reference(m_pIndirectObjs, bookmarks[0].num)); |
128 bookmarks[2].obj->SetAt( | 128 bookmarks[2].obj->SetFor( |
129 "Prev", new CPDF_Reference(m_pIndirectObjs, bookmarks[1].num)); | 129 "Prev", new CPDF_Reference(m_pIndirectObjs, bookmarks[1].num)); |
130 | 130 |
131 bookmarks[0].obj->SetAt("Type", new CPDF_Name("Outlines")); | 131 bookmarks[0].obj->SetFor("Type", new CPDF_Name("Outlines")); |
132 bookmarks[0].obj->SetAt("Count", new CPDF_Number(2)); | 132 bookmarks[0].obj->SetFor("Count", new CPDF_Number(2)); |
133 bookmarks[0].obj->SetAt( | 133 bookmarks[0].obj->SetFor( |
134 "First", new CPDF_Reference(m_pIndirectObjs, bookmarks[1].num)); | 134 "First", new CPDF_Reference(m_pIndirectObjs, bookmarks[1].num)); |
135 bookmarks[0].obj->SetAt( | 135 bookmarks[0].obj->SetFor( |
136 "Last", new CPDF_Reference(m_pIndirectObjs, bookmarks[2].num)); | 136 "Last", new CPDF_Reference(m_pIndirectObjs, bookmarks[2].num)); |
137 | 137 |
138 m_pRootObj->SetAt("Outlines", | 138 m_pRootObj->SetFor("Outlines", |
139 new CPDF_Reference(m_pIndirectObjs, bookmarks[0].num)); | 139 new CPDF_Reference(m_pIndirectObjs, bookmarks[0].num)); |
140 | 140 |
141 // Title with no match. | 141 // Title with no match. |
142 std::unique_ptr<unsigned short, pdfium::FreeDeleter> title = | 142 std::unique_ptr<unsigned short, pdfium::FreeDeleter> title = |
143 GetFPDFWideString(L"Chapter 3"); | 143 GetFPDFWideString(L"Chapter 3"); |
144 EXPECT_EQ(nullptr, FPDFBookmark_Find(m_pDoc.get(), title.get())); | 144 EXPECT_EQ(nullptr, FPDFBookmark_Find(m_pDoc.get(), title.get())); |
145 | 145 |
146 // Title with partial match only. | 146 // Title with partial match only. |
147 title = GetFPDFWideString(L"Chapter"); | 147 title = GetFPDFWideString(L"Chapter"); |
148 EXPECT_EQ(nullptr, FPDFBookmark_Find(m_pDoc.get(), title.get())); | 148 EXPECT_EQ(nullptr, FPDFBookmark_Find(m_pDoc.get(), title.get())); |
149 | 149 |
150 // Title with a match. | 150 // Title with a match. |
151 title = GetFPDFWideString(L"Chapter 2"); | 151 title = GetFPDFWideString(L"Chapter 2"); |
152 EXPECT_EQ(bookmarks[2].obj, FPDFBookmark_Find(m_pDoc.get(), title.get())); | 152 EXPECT_EQ(bookmarks[2].obj, FPDFBookmark_Find(m_pDoc.get(), title.get())); |
153 | 153 |
154 // Title match is case insensitive. | 154 // Title match is case insensitive. |
155 title = GetFPDFWideString(L"cHaPter 2"); | 155 title = GetFPDFWideString(L"cHaPter 2"); |
156 EXPECT_EQ(bookmarks[2].obj, FPDFBookmark_Find(m_pDoc.get(), title.get())); | 156 EXPECT_EQ(bookmarks[2].obj, FPDFBookmark_Find(m_pDoc.get(), title.get())); |
157 } | 157 } |
158 { | 158 { |
159 // Circular bookmarks in depth. | 159 // Circular bookmarks in depth. |
160 auto bookmarks = CreateDictObjs(3); | 160 auto bookmarks = CreateDictObjs(3); |
161 | 161 |
162 bookmarks[1].obj->SetAt("Title", new CPDF_String(L"Chapter 1")); | 162 bookmarks[1].obj->SetFor("Title", new CPDF_String(L"Chapter 1")); |
163 bookmarks[1].obj->SetAt( | 163 bookmarks[1].obj->SetFor( |
164 "Parent", new CPDF_Reference(m_pIndirectObjs, bookmarks[0].num)); | 164 "Parent", new CPDF_Reference(m_pIndirectObjs, bookmarks[0].num)); |
165 bookmarks[1].obj->SetAt( | 165 bookmarks[1].obj->SetFor( |
166 "First", new CPDF_Reference(m_pIndirectObjs, bookmarks[2].num)); | 166 "First", new CPDF_Reference(m_pIndirectObjs, bookmarks[2].num)); |
167 | 167 |
168 bookmarks[2].obj->SetAt("Title", new CPDF_String(L"Chapter 2")); | 168 bookmarks[2].obj->SetFor("Title", new CPDF_String(L"Chapter 2")); |
169 bookmarks[2].obj->SetAt( | 169 bookmarks[2].obj->SetFor( |
170 "Parent", new CPDF_Reference(m_pIndirectObjs, bookmarks[1].num)); | 170 "Parent", new CPDF_Reference(m_pIndirectObjs, bookmarks[1].num)); |
171 bookmarks[2].obj->SetAt( | 171 bookmarks[2].obj->SetFor( |
172 "First", new CPDF_Reference(m_pIndirectObjs, bookmarks[1].num)); | 172 "First", new CPDF_Reference(m_pIndirectObjs, bookmarks[1].num)); |
173 | 173 |
174 bookmarks[0].obj->SetAt("Type", new CPDF_Name("Outlines")); | 174 bookmarks[0].obj->SetFor("Type", new CPDF_Name("Outlines")); |
175 bookmarks[0].obj->SetAt("Count", new CPDF_Number(2)); | 175 bookmarks[0].obj->SetFor("Count", new CPDF_Number(2)); |
176 bookmarks[0].obj->SetAt( | 176 bookmarks[0].obj->SetFor( |
177 "First", new CPDF_Reference(m_pIndirectObjs, bookmarks[1].num)); | 177 "First", new CPDF_Reference(m_pIndirectObjs, bookmarks[1].num)); |
178 bookmarks[0].obj->SetAt( | 178 bookmarks[0].obj->SetFor( |
179 "Last", new CPDF_Reference(m_pIndirectObjs, bookmarks[2].num)); | 179 "Last", new CPDF_Reference(m_pIndirectObjs, bookmarks[2].num)); |
180 | 180 |
181 m_pRootObj->SetAt("Outlines", | 181 m_pRootObj->SetFor("Outlines", |
182 new CPDF_Reference(m_pIndirectObjs, bookmarks[0].num)); | 182 new CPDF_Reference(m_pIndirectObjs, bookmarks[0].num)); |
183 | 183 |
184 // Title with no match. | 184 // Title with no match. |
185 std::unique_ptr<unsigned short, pdfium::FreeDeleter> title = | 185 std::unique_ptr<unsigned short, pdfium::FreeDeleter> title = |
186 GetFPDFWideString(L"Chapter 3"); | 186 GetFPDFWideString(L"Chapter 3"); |
187 EXPECT_EQ(nullptr, FPDFBookmark_Find(m_pDoc.get(), title.get())); | 187 EXPECT_EQ(nullptr, FPDFBookmark_Find(m_pDoc.get(), title.get())); |
188 | 188 |
189 // Title with a match. | 189 // Title with a match. |
190 title = GetFPDFWideString(L"Chapter 2"); | 190 title = GetFPDFWideString(L"Chapter 2"); |
191 EXPECT_EQ(bookmarks[2].obj, FPDFBookmark_Find(m_pDoc.get(), title.get())); | 191 EXPECT_EQ(bookmarks[2].obj, FPDFBookmark_Find(m_pDoc.get(), title.get())); |
192 } | 192 } |
193 { | 193 { |
194 // Circular bookmarks in breadth. | 194 // Circular bookmarks in breadth. |
195 auto bookmarks = CreateDictObjs(4); | 195 auto bookmarks = CreateDictObjs(4); |
196 | 196 |
197 bookmarks[1].obj->SetAt("Title", new CPDF_String(L"Chapter 1")); | 197 bookmarks[1].obj->SetFor("Title", new CPDF_String(L"Chapter 1")); |
198 bookmarks[1].obj->SetAt( | 198 bookmarks[1].obj->SetFor( |
199 "Parent", new CPDF_Reference(m_pIndirectObjs, bookmarks[0].num)); | 199 "Parent", new CPDF_Reference(m_pIndirectObjs, bookmarks[0].num)); |
200 bookmarks[1].obj->SetAt( | 200 bookmarks[1].obj->SetFor( |
201 "Next", new CPDF_Reference(m_pIndirectObjs, bookmarks[2].num)); | 201 "Next", new CPDF_Reference(m_pIndirectObjs, bookmarks[2].num)); |
202 | 202 |
203 bookmarks[2].obj->SetAt("Title", new CPDF_String(L"Chapter 2")); | 203 bookmarks[2].obj->SetFor("Title", new CPDF_String(L"Chapter 2")); |
204 bookmarks[2].obj->SetAt( | 204 bookmarks[2].obj->SetFor( |
205 "Parent", new CPDF_Reference(m_pIndirectObjs, bookmarks[0].num)); | 205 "Parent", new CPDF_Reference(m_pIndirectObjs, bookmarks[0].num)); |
206 bookmarks[2].obj->SetAt( | 206 bookmarks[2].obj->SetFor( |
207 "Next", new CPDF_Reference(m_pIndirectObjs, bookmarks[3].num)); | 207 "Next", new CPDF_Reference(m_pIndirectObjs, bookmarks[3].num)); |
208 | 208 |
209 bookmarks[3].obj->SetAt("Title", new CPDF_String(L"Chapter 3")); | 209 bookmarks[3].obj->SetFor("Title", new CPDF_String(L"Chapter 3")); |
210 bookmarks[3].obj->SetAt( | 210 bookmarks[3].obj->SetFor( |
211 "Parent", new CPDF_Reference(m_pIndirectObjs, bookmarks[0].num)); | 211 "Parent", new CPDF_Reference(m_pIndirectObjs, bookmarks[0].num)); |
212 bookmarks[3].obj->SetAt( | 212 bookmarks[3].obj->SetFor( |
213 "Next", new CPDF_Reference(m_pIndirectObjs, bookmarks[1].num)); | 213 "Next", new CPDF_Reference(m_pIndirectObjs, bookmarks[1].num)); |
214 | 214 |
215 bookmarks[0].obj->SetAt("Type", new CPDF_Name("Outlines")); | 215 bookmarks[0].obj->SetFor("Type", new CPDF_Name("Outlines")); |
216 bookmarks[0].obj->SetAt("Count", new CPDF_Number(2)); | 216 bookmarks[0].obj->SetFor("Count", new CPDF_Number(2)); |
217 bookmarks[0].obj->SetAt( | 217 bookmarks[0].obj->SetFor( |
218 "First", new CPDF_Reference(m_pIndirectObjs, bookmarks[1].num)); | 218 "First", new CPDF_Reference(m_pIndirectObjs, bookmarks[1].num)); |
219 bookmarks[0].obj->SetAt( | 219 bookmarks[0].obj->SetFor( |
220 "Last", new CPDF_Reference(m_pIndirectObjs, bookmarks[2].num)); | 220 "Last", new CPDF_Reference(m_pIndirectObjs, bookmarks[2].num)); |
221 | 221 |
222 m_pRootObj->SetAt("Outlines", | 222 m_pRootObj->SetFor("Outlines", |
223 new CPDF_Reference(m_pIndirectObjs, bookmarks[0].num)); | 223 new CPDF_Reference(m_pIndirectObjs, bookmarks[0].num)); |
224 | 224 |
225 // Title with no match. | 225 // Title with no match. |
226 std::unique_ptr<unsigned short, pdfium::FreeDeleter> title = | 226 std::unique_ptr<unsigned short, pdfium::FreeDeleter> title = |
227 GetFPDFWideString(L"Chapter 8"); | 227 GetFPDFWideString(L"Chapter 8"); |
228 EXPECT_EQ(nullptr, FPDFBookmark_Find(m_pDoc.get(), title.get())); | 228 EXPECT_EQ(nullptr, FPDFBookmark_Find(m_pDoc.get(), title.get())); |
229 | 229 |
230 // Title with a match. | 230 // Title with a match. |
231 title = GetFPDFWideString(L"Chapter 3"); | 231 title = GetFPDFWideString(L"Chapter 3"); |
232 EXPECT_EQ(bookmarks[3].obj, FPDFBookmark_Find(m_pDoc.get(), title.get())); | 232 EXPECT_EQ(bookmarks[3].obj, FPDFBookmark_Find(m_pDoc.get(), title.get())); |
233 } | 233 } |
234 } | 234 } |
OLD | NEW |