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 46 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
57 | 57 |
58 void SetUp() override { | 58 void SetUp() override { |
59 // We don't need page module or render module, but | 59 // We don't need page module or render module, but |
60 // initialize them to keep the code sane. | 60 // initialize them to keep the code sane. |
61 CPDF_ModuleMgr* module_mgr = CPDF_ModuleMgr::Get(); | 61 CPDF_ModuleMgr* module_mgr = CPDF_ModuleMgr::Get(); |
62 module_mgr->InitPageModule(); | 62 module_mgr->InitPageModule(); |
63 | 63 |
64 m_pDoc.reset(new CPDF_TestPdfDocument()); | 64 m_pDoc.reset(new CPDF_TestPdfDocument()); |
65 m_pIndirectObjs = m_pDoc->GetHolder(); | 65 m_pIndirectObjs = m_pDoc->GetHolder(); |
66 // Setup the root directory. | 66 // Setup the root directory. |
67 m_pRootObj.reset(new CPDF_Dictionary()); | 67 m_pRootObj.reset(new CPDF_Dictionary(nullptr)); |
68 m_pDoc->SetRoot(m_pRootObj.get()); | 68 m_pDoc->SetRoot(m_pRootObj.get()); |
69 } | 69 } |
70 | 70 |
71 void TearDown() override { | 71 void TearDown() override { |
72 m_pRootObj.reset(); | 72 m_pRootObj.reset(); |
73 m_pIndirectObjs = nullptr; | 73 m_pIndirectObjs = nullptr; |
74 m_pDoc.reset(); | 74 m_pDoc.reset(); |
75 CPDF_ModuleMgr::Destroy(); | 75 CPDF_ModuleMgr::Destroy(); |
76 } | 76 } |
77 | 77 |
78 std::vector<DictObjInfo> CreateDictObjs(int num) { | 78 std::vector<DictObjInfo> CreateDictObjs(int num) { |
79 std::vector<DictObjInfo> info; | 79 std::vector<DictObjInfo> info; |
80 for (int i = 0; i < num; ++i) { | 80 for (int i = 0; i < num; ++i) { |
81 // Objects created will be released by the document. | 81 // Objects created will be released by the document. |
82 CPDF_Dictionary* obj(new CPDF_Dictionary()); | 82 CPDF_Dictionary* obj(new CPDF_Dictionary(nullptr)); |
83 m_pIndirectObjs->AddIndirectObject(obj); | 83 m_pIndirectObjs->AddIndirectObject(obj); |
84 info.push_back({obj->GetObjNum(), obj}); | 84 info.push_back({obj->GetObjNum(), obj}); |
85 } | 85 } |
86 return info; | 86 return info; |
87 } | 87 } |
88 | 88 |
89 protected: | 89 protected: |
90 std::unique_ptr<CPDF_TestPdfDocument> m_pDoc; | 90 std::unique_ptr<CPDF_TestPdfDocument> m_pDoc; |
91 CPDF_IndirectObjectHolder* m_pIndirectObjs; | 91 CPDF_IndirectObjectHolder* m_pIndirectObjs; |
92 std::unique_ptr<CPDF_Dictionary, ReleaseDeleter<CPDF_Dictionary>> m_pRootObj; | 92 std::unique_ptr<CPDF_Dictionary, ReleaseDeleter<CPDF_Dictionary>> m_pRootObj; |
93 }; | 93 }; |
94 | 94 |
95 TEST_F(PDFDocTest, FindBookmark) { | 95 TEST_F(PDFDocTest, FindBookmark) { |
96 { | 96 { |
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->SetFor("Outlines", new CPDF_Dictionary()); | 107 m_pRootObj->SetFor("Outlines", new CPDF_Dictionary(nullptr)); |
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); |
(...skipping 107 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
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 |