Clean up fpdf_catalog_unittest.cpp - Add PDFCatalogTest methods to access variables. - Save a pointer to the CPDF_TestDocument. - Use Google C++ style variable names. - Use pdfium::as_byte_span(). - Fix bad formatting. Change-Id: Ifc70fcb3d09a1559e75f1c6128b4011295e519cb Reviewed-on: https://pdfium-review.googlesource.com/c/pdfium/+/143030 Reviewed-by: Andy Phan <andyphan@chromium.org> Commit-Queue: Lei Zhang <thestig@chromium.org>
diff --git a/fpdfsdk/fpdf_catalog_unittest.cpp b/fpdfsdk/fpdf_catalog_unittest.cpp index 3348588..11ba475 100644 --- a/fpdfsdk/fpdf_catalog_unittest.cpp +++ b/fpdfsdk/fpdf_catalog_unittest.cpp
@@ -14,6 +14,7 @@ #include "core/fpdfapi/parser/cpdf_parser.h" #include "core/fpdfapi/parser/cpdf_string.h" #include "core/fpdfapi/parser/cpdf_test_document.h" +#include "core/fxcrt/unowned_ptr.h" #include "core/fxcrt/widestring.h" #include "fpdfsdk/cpdfsdk_helpers.h" #include "public/cpp/fpdf_scopers.h" @@ -23,18 +24,25 @@ public: void SetUp() override { TestWithPageModule::SetUp(); - auto pTestDoc = std::make_unique<CPDF_TestDocument>(); - doc_.reset(FPDFDocumentFromCPDFDocument(pTestDoc.release())); + auto test_doc = std::make_unique<CPDF_TestDocument>(); + test_doc_ = test_doc.get(); + doc_.reset(FPDFDocumentFromCPDFDocument(test_doc.release())); root_obj_ = pdfium::MakeRetain<CPDF_Dictionary>(); } void TearDown() override { + test_doc_ = nullptr; doc_.reset(); TestWithPageModule::TearDown(); } - protected: - ScopedFPDFDocument doc_; + FPDF_DOCUMENT doc() { return doc_.get(); } + CPDF_TestDocument* test_doc() { return test_doc_; } + RetainPtr<CPDF_Dictionary> root_obj() { return root_obj_; } + + private: + ScopedFPDFDocument doc_; // Must outlive `test_doc_`. + UnownedPtr<CPDF_TestDocument> test_doc_ = nullptr; RetainPtr<CPDF_Dictionary> root_obj_; }; @@ -42,67 +50,59 @@ // Null doc EXPECT_FALSE(FPDFCatalog_IsTagged(nullptr)); - CPDF_TestDocument* pTestDoc = - static_cast<CPDF_TestDocument*>(CPDFDocumentFromFPDFDocument(doc_.get())); - // No root - pTestDoc->SetRoot(nullptr); - EXPECT_FALSE(FPDFCatalog_IsTagged(doc_.get())); + test_doc()->SetRoot(nullptr); + EXPECT_FALSE(FPDFCatalog_IsTagged(doc())); // Empty root - pTestDoc->SetRoot(root_obj_); - EXPECT_FALSE(FPDFCatalog_IsTagged(doc_.get())); + test_doc()->SetRoot(root_obj()); + EXPECT_FALSE(FPDFCatalog_IsTagged(doc())); // Root with other key - root_obj_->SetNewFor<CPDF_String>("OTHER_KEY", "other value"); - EXPECT_FALSE(FPDFCatalog_IsTagged(doc_.get())); + root_obj()->SetNewFor<CPDF_String>("OTHER_KEY", "other value"); + EXPECT_FALSE(FPDFCatalog_IsTagged(doc())); // Root with empty MarkInfo - auto markInfoDict = root_obj_->SetNewFor<CPDF_Dictionary>("MarkInfo"); - EXPECT_FALSE(FPDFCatalog_IsTagged(doc_.get())); + auto mark_info_dict = root_obj()->SetNewFor<CPDF_Dictionary>("MarkInfo"); + EXPECT_FALSE(FPDFCatalog_IsTagged(doc())); // MarkInfo present but Marked is 0 - markInfoDict->SetNewFor<CPDF_Number>("Marked", 0); - EXPECT_FALSE(FPDFCatalog_IsTagged(doc_.get())); + mark_info_dict->SetNewFor<CPDF_Number>("Marked", 0); + EXPECT_FALSE(FPDFCatalog_IsTagged(doc())); // MarkInfo present and Marked is 1, PDF is considered tagged. - markInfoDict->SetNewFor<CPDF_Number>("Marked", 1); - EXPECT_TRUE(FPDFCatalog_IsTagged(doc_.get())); + mark_info_dict->SetNewFor<CPDF_Number>("Marked", 1); + EXPECT_TRUE(FPDFCatalog_IsTagged(doc())); } TEST_F(PDFCatalogTest, GetLanguage) { // Null document. EXPECT_EQ(0u, FPDFCatalog_GetLanguage(nullptr, nullptr, 0)); - CPDF_TestDocument *pTestDoc = static_cast<CPDF_TestDocument *>( - CPDFDocumentFromFPDFDocument(doc_.get())); - // Document has no root. - pTestDoc->SetRoot(nullptr); - EXPECT_EQ(0u, FPDFCatalog_GetLanguage(doc_.get(), nullptr, 0)); + test_doc()->SetRoot(nullptr); + EXPECT_EQ(0u, FPDFCatalog_GetLanguage(doc(), nullptr, 0)); // Document has no Lang entry. - pTestDoc->SetRoot(root_obj_); + test_doc()->SetRoot(root_obj()); // Query size. Expected: NUL in UTF-16LE = 2 bytes. - EXPECT_EQ(2u, FPDFCatalog_GetLanguage(doc_.get(), nullptr, 0)); + EXPECT_EQ(2u, FPDFCatalog_GetLanguage(doc(), nullptr, 0)); // Validate returned value (empty string). std::vector<FPDF_WCHAR> empty_buf(1); - EXPECT_EQ(2u, FPDFCatalog_GetLanguage(doc_.get(), empty_buf.data(), 2)); - EXPECT_EQ(L"", - WideString::FromUTF16LE(pdfium::as_bytes(pdfium::span(empty_buf)))); + EXPECT_EQ(2u, FPDFCatalog_GetLanguage(doc(), empty_buf.data(), 2)); + EXPECT_EQ(L"", WideString::FromUTF16LE(pdfium::as_byte_span(empty_buf))); // Set Lang entry. - root_obj_->SetNewFor<CPDF_String>("Lang", "en-US"); + root_obj()->SetNewFor<CPDF_String>("Lang", "en-US"); // Query size. Expected: "en-US" + NUL in UTF-16LE = 6 * 2 bytes. - unsigned long size = FPDFCatalog_GetLanguage(doc_.get(), nullptr, 0); + unsigned long size = FPDFCatalog_GetLanguage(doc(), nullptr, 0); EXPECT_EQ(12u, size); // Validate returned value ("en-US"). std::vector<FPDF_WCHAR> buffer(size / sizeof(FPDF_WCHAR)); - EXPECT_EQ(size, FPDFCatalog_GetLanguage(doc_.get(), buffer.data(), size)); - EXPECT_EQ(L"en-US", - WideString::FromUTF16LE(pdfium::as_bytes(pdfium::span(buffer)))); + EXPECT_EQ(size, FPDFCatalog_GetLanguage(doc(), buffer.data(), size)); + EXPECT_EQ(L"en-US", WideString::FromUTF16LE(pdfium::as_byte_span(buffer))); }