| 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/cpdf_modulemgr.h" | 10 #include "core/fpdfapi/cpdf_modulemgr.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 = WrapUnique(new CPDF_TestPdfDocument()); | 64 m_pDoc = WrapUnique(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(CFX_WeakPtr<CFX_ByteStringPool>())); | 67 m_pRootObj.reset(new CPDF_Dictionary()); |
| 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( | 82 CPDF_Dictionary* obj = new CPDF_Dictionary(); |
| 83 new CPDF_Dictionary(CFX_WeakPtr<CFX_ByteStringPool>())); | |
| 84 info.push_back({m_pIndirectObjs->AddIndirectObject(obj), obj}); | 83 info.push_back({m_pIndirectObjs->AddIndirectObject(obj), obj}); |
| 85 } | 84 } |
| 86 return info; | 85 return info; |
| 87 } | 86 } |
| 88 | 87 |
| 89 protected: | 88 protected: |
| 90 std::unique_ptr<CPDF_TestPdfDocument> m_pDoc; | 89 std::unique_ptr<CPDF_TestPdfDocument> m_pDoc; |
| 91 CPDF_IndirectObjectHolder* m_pIndirectObjs; | 90 CPDF_IndirectObjectHolder* m_pIndirectObjs; |
| 92 std::unique_ptr<CPDF_Dictionary, ReleaseDeleter<CPDF_Dictionary>> m_pRootObj; | 91 std::unique_ptr<CPDF_Dictionary, ReleaseDeleter<CPDF_Dictionary>> m_pRootObj; |
| 93 }; | 92 }; |
| 94 | 93 |
| 95 TEST_F(PDFDocTest, FindBookmark) { | 94 TEST_F(PDFDocTest, FindBookmark) { |
| 96 { | 95 { |
| 97 // No bookmark information. | 96 // No bookmark information. |
| 98 std::unique_ptr<unsigned short, pdfium::FreeDeleter> title = | 97 std::unique_ptr<unsigned short, pdfium::FreeDeleter> title = |
| 99 GetFPDFWideString(L""); | 98 GetFPDFWideString(L""); |
| 100 EXPECT_EQ(nullptr, FPDFBookmark_Find(m_pDoc.get(), title.get())); | 99 EXPECT_EQ(nullptr, FPDFBookmark_Find(m_pDoc.get(), title.get())); |
| 101 | 100 |
| 102 title = GetFPDFWideString(L"Preface"); | 101 title = GetFPDFWideString(L"Preface"); |
| 103 EXPECT_EQ(nullptr, FPDFBookmark_Find(m_pDoc.get(), title.get())); | 102 EXPECT_EQ(nullptr, FPDFBookmark_Find(m_pDoc.get(), title.get())); |
| 104 } | 103 } |
| 105 { | 104 { |
| 106 // Empty bookmark tree. | 105 // Empty bookmark tree. |
| 107 m_pRootObj->SetFor("Outlines", | 106 m_pRootObj->SetFor("Outlines", new CPDF_Dictionary()); |
| 108 new CPDF_Dictionary(CFX_WeakPtr<CFX_ByteStringPool>())); | |
| 109 std::unique_ptr<unsigned short, pdfium::FreeDeleter> title = | 107 std::unique_ptr<unsigned short, pdfium::FreeDeleter> title = |
| 110 GetFPDFWideString(L""); | 108 GetFPDFWideString(L""); |
| 111 EXPECT_EQ(nullptr, FPDFBookmark_Find(m_pDoc.get(), title.get())); | 109 EXPECT_EQ(nullptr, FPDFBookmark_Find(m_pDoc.get(), title.get())); |
| 112 | 110 |
| 113 title = GetFPDFWideString(L"Preface"); | 111 title = GetFPDFWideString(L"Preface"); |
| 114 EXPECT_EQ(nullptr, FPDFBookmark_Find(m_pDoc.get(), title.get())); | 112 EXPECT_EQ(nullptr, FPDFBookmark_Find(m_pDoc.get(), title.get())); |
| 115 } | 113 } |
| 116 { | 114 { |
| 117 // Check on a regular bookmark tree. | 115 // Check on a regular bookmark tree. |
| 118 auto bookmarks = CreateDictObjs(3); | 116 auto bookmarks = CreateDictObjs(3); |
| (...skipping 107 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 226 // Title with no match. | 224 // Title with no match. |
| 227 std::unique_ptr<unsigned short, pdfium::FreeDeleter> title = | 225 std::unique_ptr<unsigned short, pdfium::FreeDeleter> title = |
| 228 GetFPDFWideString(L"Chapter 8"); | 226 GetFPDFWideString(L"Chapter 8"); |
| 229 EXPECT_EQ(nullptr, FPDFBookmark_Find(m_pDoc.get(), title.get())); | 227 EXPECT_EQ(nullptr, FPDFBookmark_Find(m_pDoc.get(), title.get())); |
| 230 | 228 |
| 231 // Title with a match. | 229 // Title with a match. |
| 232 title = GetFPDFWideString(L"Chapter 3"); | 230 title = GetFPDFWideString(L"Chapter 3"); |
| 233 EXPECT_EQ(bookmarks[3].obj, FPDFBookmark_Find(m_pDoc.get(), title.get())); | 231 EXPECT_EQ(bookmarks[3].obj, FPDFBookmark_Find(m_pDoc.get(), title.get())); |
| 234 } | 232 } |
| 235 } | 233 } |
| OLD | NEW |