Consolidate CPDF_TestDocument implementations.
Provide a single implementation of this test class and use it where
applicable.
Change-Id: I47505e83d1dffd3e076ec5bc68ed52c7f42df272
Reviewed-on: https://pdfium-review.googlesource.com/c/pdfium/+/90990
Reviewed-by: Tom Sepez <tsepez@chromium.org>
Commit-Queue: Lei Zhang <thestig@chromium.org>
diff --git a/core/fpdfapi/edit/BUILD.gn b/core/fpdfapi/edit/BUILD.gn
index 8ce8be9..4361352 100644
--- a/core/fpdfapi/edit/BUILD.gn
+++ b/core/fpdfapi/edit/BUILD.gn
@@ -38,6 +38,7 @@
"../font",
"../page",
"../parser",
+ "../parser:unit_test_support",
"../render",
]
pdfium_root_dir = "../../../"
diff --git a/core/fpdfapi/edit/cpdf_pagecontentgenerator_unittest.cpp b/core/fpdfapi/edit/cpdf_pagecontentgenerator_unittest.cpp
index d28f93a..ed95590 100644
--- a/core/fpdfapi/edit/cpdf_pagecontentgenerator_unittest.cpp
+++ b/core/fpdfapi/edit/cpdf_pagecontentgenerator_unittest.cpp
@@ -22,7 +22,7 @@
#include "core/fpdfapi/parser/cpdf_parser.h"
#include "core/fpdfapi/parser/cpdf_reference.h"
#include "core/fpdfapi/parser/cpdf_stream.h"
-#include "core/fpdfapi/render/cpdf_docrenderdata.h"
+#include "core/fpdfapi/parser/cpdf_test_document.h"
#include "core/fxcrt/fx_memory_wrappers.h"
#include "core/fxge/cfx_fillrenderoptions.h"
#include "testing/gtest/include/gtest/gtest.h"
@@ -205,10 +205,7 @@
pPathObj->m_GeneralState.SetFillAlpha(0.5f);
pPathObj->m_GeneralState.SetStrokeAlpha(0.8f);
- auto pDoc =
- std::make_unique<CPDF_Document>(std::make_unique<CPDF_DocRenderData>(),
- std::make_unique<CPDF_DocPageData>());
-
+ auto pDoc = std::make_unique<CPDF_TestDocument>();
pDoc->CreateNewDoc();
CPDF_Dictionary* pPageDict = pDoc->CreateNewPage(0);
auto pTestPage = pdfium::MakeRetain<CPDF_Page>(pDoc.get(), pPageDict);
@@ -248,10 +245,7 @@
TEST_F(CPDF_PageContentGeneratorTest, ProcessStandardText) {
// Checking font whose font dictionary is not yet indirect object.
- auto pDoc =
- std::make_unique<CPDF_Document>(std::make_unique<CPDF_DocRenderData>(),
- std::make_unique<CPDF_DocPageData>());
-
+ auto pDoc = std::make_unique<CPDF_TestDocument>();
pDoc->CreateNewDoc();
CPDF_Dictionary* pPageDict = pDoc->CreateNewPage(0);
auto pTestPage = pdfium::MakeRetain<CPDF_Page>(pDoc.get(), pPageDict);
@@ -317,9 +311,7 @@
TEST_F(CPDF_PageContentGeneratorTest, ProcessText) {
// Checking font whose font dictionary is already an indirect object.
- auto pDoc =
- std::make_unique<CPDF_Document>(std::make_unique<CPDF_DocRenderData>(),
- std::make_unique<CPDF_DocPageData>());
+ auto pDoc = std::make_unique<CPDF_TestDocument>();
pDoc->CreateNewDoc();
CPDF_Dictionary* pPageDict = pDoc->CreateNewPage(0);
@@ -396,9 +388,7 @@
}
TEST_F(CPDF_PageContentGeneratorTest, ProcessEmptyForm) {
- auto pDoc =
- std::make_unique<CPDF_Document>(std::make_unique<CPDF_DocRenderData>(),
- std::make_unique<CPDF_DocPageData>());
+ auto pDoc = std::make_unique<CPDF_TestDocument>();
pDoc->CreateNewDoc();
auto pDict = pdfium::MakeRetain<CPDF_Dictionary>();
auto pStream = pdfium::MakeRetain<CPDF_Stream>(nullptr, 0, std::move(pDict));
@@ -418,9 +408,7 @@
}
TEST_F(CPDF_PageContentGeneratorTest, ProcessFormWithPath) {
- auto pDoc =
- std::make_unique<CPDF_Document>(std::make_unique<CPDF_DocRenderData>(),
- std::make_unique<CPDF_DocPageData>());
+ auto pDoc = std::make_unique<CPDF_TestDocument>();
pDoc->CreateNewDoc();
auto pDict = pdfium::MakeRetain<CPDF_Dictionary>();
const char content[] =
diff --git a/core/fpdfapi/font/BUILD.gn b/core/fpdfapi/font/BUILD.gn
index 9dbc9ef..71522a8 100644
--- a/core/fpdfapi/font/BUILD.gn
+++ b/core/fpdfapi/font/BUILD.gn
@@ -66,6 +66,7 @@
":font",
"../page",
"../parser",
+ "../parser:unit_test_support",
"../render",
]
pdfium_root_dir = "../../../"
diff --git a/core/fpdfapi/font/cpdf_cidfont_unittest.cpp b/core/fpdfapi/font/cpdf_cidfont_unittest.cpp
index cafd458..a9405fb 100644
--- a/core/fpdfapi/font/cpdf_cidfont_unittest.cpp
+++ b/core/fpdfapi/font/cpdf_cidfont_unittest.cpp
@@ -6,13 +6,12 @@
#include <utility>
-#include "core/fpdfapi/page/cpdf_docpagedata.h"
#include "core/fpdfapi/page/cpdf_pagemodule.h"
#include "core/fpdfapi/parser/cpdf_array.h"
#include "core/fpdfapi/parser/cpdf_dictionary.h"
#include "core/fpdfapi/parser/cpdf_document.h"
#include "core/fpdfapi/parser/cpdf_name.h"
-#include "core/fpdfapi/render/cpdf_docrenderdata.h"
+#include "core/fpdfapi/parser/cpdf_test_document.h"
#include "testing/gtest/include/gtest/gtest.h"
class CPDF_CIDFontTest : public testing::Test {
@@ -22,8 +21,7 @@
};
TEST_F(CPDF_CIDFontTest, BUG_920636) {
- CPDF_Document doc(std::make_unique<CPDF_DocRenderData>(),
- std::make_unique<CPDF_DocPageData>());
+ CPDF_TestDocument doc;
auto font_dict = pdfium::MakeRetain<CPDF_Dictionary>();
font_dict->SetNewFor<CPDF_Name>("Encoding", "Identity−H");
diff --git a/core/fpdfapi/parser/BUILD.gn b/core/fpdfapi/parser/BUILD.gn
index 80b442c..9ed32fc 100644
--- a/core/fpdfapi/parser/BUILD.gn
+++ b/core/fpdfapi/parser/BUILD.gn
@@ -79,8 +79,8 @@
"../../../constants",
"../../fdrm",
"../../fxcodec",
- "../../fxcrt",
]
+ public_deps = [ "../../fxcrt" ]
allow_circular_includes_from = []
visibility = [ "../../../*" ]
@@ -96,6 +96,20 @@
}
}
+source_set("unit_test_support") {
+ testonly = true
+ sources = [
+ "cpdf_test_document.cpp",
+ "cpdf_test_document.h",
+ ]
+ configs += [ "../../../:pdfium_strict_config" ]
+ deps = [
+ ":parser",
+ "../page",
+ "../render",
+ ]
+}
+
pdfium_unittest_source_set("unittests") {
sources = [
"cpdf_array_unittest.cpp",
@@ -118,6 +132,7 @@
]
deps = [
":parser",
+ ":unit_test_support",
"../../../constants",
"../page",
"../render",
diff --git a/core/fpdfapi/parser/cpdf_document_unittest.cpp b/core/fpdfapi/parser/cpdf_document_unittest.cpp
index c256815..b6aee6b 100644
--- a/core/fpdfapi/parser/cpdf_document_unittest.cpp
+++ b/core/fpdfapi/parser/cpdf_document_unittest.cpp
@@ -7,7 +7,6 @@
#include <memory>
#include <utility>
-#include "core/fpdfapi/page/cpdf_docpagedata.h"
#include "core/fpdfapi/page/cpdf_pagemodule.h"
#include "core/fpdfapi/parser/cpdf_array.h"
#include "core/fpdfapi/parser/cpdf_boolean.h"
@@ -18,7 +17,7 @@
#include "core/fpdfapi/parser/cpdf_parser.h"
#include "core/fpdfapi/parser/cpdf_reference.h"
#include "core/fpdfapi/parser/cpdf_string.h"
-#include "core/fpdfapi/render/cpdf_docrenderdata.h"
+#include "core/fpdfapi/parser/cpdf_test_document.h"
#include "testing/gtest/include/gtest/gtest.h"
#include "third_party/base/check.h"
@@ -48,11 +47,9 @@
return page;
}
-class CPDF_TestDocumentForPages final : public CPDF_Document {
+class CPDF_TestDocumentForPages final : public CPDF_TestDocument {
public:
- CPDF_TestDocumentForPages()
- : CPDF_Document(std::make_unique<CPDF_DocRenderData>(),
- std::make_unique<CPDF_DocPageData>()) {
+ CPDF_TestDocumentForPages() {
// Set up test
auto zeroToTwo = pdfium::MakeRetain<CPDF_Array>();
zeroToTwo->AppendNew<CPDF_Reference>(
@@ -101,11 +98,9 @@
}
};
-class CPDF_TestDocumentWithPageWithoutPageNum final : public CPDF_Document {
+class CPDF_TestDocumentWithPageWithoutPageNum final : public CPDF_TestDocument {
public:
- CPDF_TestDocumentWithPageWithoutPageNum()
- : CPDF_Document(std::make_unique<CPDF_DocRenderData>(),
- std::make_unique<CPDF_DocPageData>()) {
+ CPDF_TestDocumentWithPageWithoutPageNum() {
// Set up test
auto allPages = pdfium::MakeRetain<CPDF_Array>();
allPages->AppendNew<CPDF_Reference>(
@@ -133,11 +128,9 @@
: CPDF_LinearizedHeader(dict, 0) {}
};
-class CPDF_TestDocPagesWithoutKids final : public CPDF_Document {
+class CPDF_TestDocPagesWithoutKids final : public CPDF_TestDocument {
public:
- CPDF_TestDocPagesWithoutKids()
- : CPDF_Document(std::make_unique<CPDF_DocRenderData>(),
- std::make_unique<CPDF_DocPageData>()) {
+ CPDF_TestDocPagesWithoutKids() {
CPDF_Dictionary* pagesDict = NewIndirect<CPDF_Dictionary>();
pagesDict->SetNewFor<CPDF_Name>("Type", "Pages");
pagesDict->SetNewFor<CPDF_Number>("Count", 3);
@@ -147,11 +140,9 @@
}
};
-class CPDF_TestDocumentAllowSetParser final : public CPDF_Document {
+class CPDF_TestDocumentAllowSetParser final : public CPDF_TestDocument {
public:
- CPDF_TestDocumentAllowSetParser()
- : CPDF_Document(std::make_unique<CPDF_DocRenderData>(),
- std::make_unique<CPDF_DocPageData>()) {}
+ CPDF_TestDocumentAllowSetParser() = default;
using CPDF_Document::SetParser;
};
diff --git a/core/fpdfapi/parser/cpdf_test_document.cpp b/core/fpdfapi/parser/cpdf_test_document.cpp
new file mode 100644
index 0000000..54e6098
--- /dev/null
+++ b/core/fpdfapi/parser/cpdf_test_document.cpp
@@ -0,0 +1,18 @@
+// Copyright 2022 PDFium Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+#include "core/fpdfapi/parser/cpdf_test_document.h"
+
+#include <memory>
+
+#include "core/fpdfapi/page/cpdf_docpagedata.h"
+#include "core/fpdfapi/render/cpdf_docrenderdata.h"
+
+CPDF_TestDocument::CPDF_TestDocument()
+ : CPDF_Document(std::make_unique<CPDF_DocRenderData>(),
+ std::make_unique<CPDF_DocPageData>()) {}
+
+void CPDF_TestDocument::SetRoot(CPDF_Dictionary* root) {
+ SetRootForTesting(root);
+}
diff --git a/core/fpdfapi/parser/cpdf_test_document.h b/core/fpdfapi/parser/cpdf_test_document.h
new file mode 100644
index 0000000..2c148df
--- /dev/null
+++ b/core/fpdfapi/parser/cpdf_test_document.h
@@ -0,0 +1,17 @@
+// Copyright 2022 PDFium Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+#ifndef CORE_FPDFAPI_PARSER_CPDF_TEST_DOCUMENT_H_
+#define CORE_FPDFAPI_PARSER_CPDF_TEST_DOCUMENT_H_
+
+#include "core/fpdfapi/parser/cpdf_document.h"
+
+class CPDF_TestDocument : public CPDF_Document {
+ public:
+ CPDF_TestDocument();
+
+ void SetRoot(CPDF_Dictionary* root);
+};
+
+#endif // CORE_FPDFAPI_PARSER_CPDF_TEST_DOCUMENT_H_
diff --git a/core/fpdfapi/parser/fpdf_parser_utility_unittest.cpp b/core/fpdfapi/parser/fpdf_parser_utility_unittest.cpp
index 0deb439..03ead73 100644
--- a/core/fpdfapi/parser/fpdf_parser_utility_unittest.cpp
+++ b/core/fpdfapi/parser/fpdf_parser_utility_unittest.cpp
@@ -6,14 +6,13 @@
#include <memory>
-#include "core/fpdfapi/page/cpdf_docpagedata.h"
#include "core/fpdfapi/page/cpdf_pagemodule.h"
#include "core/fpdfapi/parser/cpdf_dictionary.h"
#include "core/fpdfapi/parser/cpdf_document.h"
#include "core/fpdfapi/parser/cpdf_name.h"
#include "core/fpdfapi/parser/cpdf_reference.h"
#include "core/fpdfapi/parser/cpdf_string.h"
-#include "core/fpdfapi/render/cpdf_docrenderdata.h"
+#include "core/fpdfapi/parser/cpdf_test_document.h"
#include "testing/gtest/include/gtest/gtest.h"
TEST(fpdf_parser_utility, PDF_NameDecode) {
@@ -91,10 +90,7 @@
{
// Indirect dictionary.
- auto doc =
- std::make_unique<CPDF_Document>(std::make_unique<CPDF_DocRenderData>(),
- std::make_unique<CPDF_DocPageData>());
-
+ auto doc = std::make_unique<CPDF_TestDocument>();
auto dict = doc->New<CPDF_Dictionary>();
// Add a correct dictionary entry.
diff --git a/core/fpdfdoc/BUILD.gn b/core/fpdfdoc/BUILD.gn
index feecb7a..725c02f 100644
--- a/core/fpdfdoc/BUILD.gn
+++ b/core/fpdfdoc/BUILD.gn
@@ -109,6 +109,7 @@
"../../constants",
"../fpdfapi/page",
"../fpdfapi/parser",
+ "../fpdfapi/parser:unit_test_support",
"../fpdfapi/render",
]
pdfium_root_dir = "../../"
diff --git a/core/fpdfdoc/cpdf_formfield_unittest.cpp b/core/fpdfdoc/cpdf_formfield_unittest.cpp
index 8b19e10..d88eee9 100644
--- a/core/fpdfdoc/cpdf_formfield_unittest.cpp
+++ b/core/fpdfdoc/cpdf_formfield_unittest.cpp
@@ -8,7 +8,6 @@
#include "constants/form_fields.h"
#include "constants/form_flags.h"
-#include "core/fpdfapi/page/cpdf_docpagedata.h"
#include "core/fpdfapi/page/cpdf_pagemodule.h"
#include "core/fpdfapi/parser/cpdf_array.h"
#include "core/fpdfapi/parser/cpdf_dictionary.h"
@@ -18,7 +17,7 @@
#include "core/fpdfapi/parser/cpdf_number.h"
#include "core/fpdfapi/parser/cpdf_reference.h"
#include "core/fpdfapi/parser/cpdf_string.h"
-#include "core/fpdfapi/render/cpdf_docrenderdata.h"
+#include "core/fpdfapi/parser/cpdf_test_document.h"
#include "core/fpdfdoc/cpdf_interactiveform.h"
#include "core/fxcrt/fx_memory.h"
#include "testing/gtest/include/gtest/gtest.h"
@@ -36,13 +35,6 @@
~ScopedCPDF_PageModule() { CPDF_PageModule::Destroy(); }
};
-class CPDF_TestEmptyDocument final : public CPDF_Document {
- public:
- CPDF_TestEmptyDocument()
- : CPDF_Document(std::make_unique<CPDF_DocRenderData>(),
- std::make_unique<CPDF_DocPageData>()) {}
-};
-
void TestMultiselectFieldDict(RetainPtr<CPDF_Array> opt_array,
RetainPtr<CPDF_Object> values,
RetainPtr<CPDF_Object> selected_indices,
@@ -60,7 +52,7 @@
form_dict->SetFor(pdfium::form_fields::kV, values);
form_dict->SetFor("I", selected_indices);
- CPDF_TestEmptyDocument doc;
+ CPDF_TestDocument doc;
CPDF_InteractiveForm form(&doc);
CPDF_FormField form_field(&form, form_dict.Get());
EXPECT_EQ(expected_use_indices, form_field.UseSelectedIndicesObject());
diff --git a/fpdfsdk/BUILD.gn b/fpdfsdk/BUILD.gn
index 748f43f..f63ba67 100644
--- a/fpdfsdk/BUILD.gn
+++ b/fpdfsdk/BUILD.gn
@@ -119,6 +119,7 @@
"../constants",
"../core/fpdfapi/page",
"../core/fpdfapi/parser",
+ "../core/fpdfapi/parser:unit_test_support",
"../core/fpdfapi/render",
"../core/fpdfdoc",
]
diff --git a/fpdfsdk/fpdf_catalog_unittest.cpp b/fpdfsdk/fpdf_catalog_unittest.cpp
index 2224065..117ab02 100644
--- a/fpdfsdk/fpdf_catalog_unittest.cpp
+++ b/fpdfsdk/fpdf_catalog_unittest.cpp
@@ -6,27 +6,17 @@
#include <memory>
-#include "core/fpdfapi/page/cpdf_docpagedata.h"
#include "core/fpdfapi/page/cpdf_pagemodule.h"
#include "core/fpdfapi/parser/cpdf_dictionary.h"
#include "core/fpdfapi/parser/cpdf_document.h"
#include "core/fpdfapi/parser/cpdf_number.h"
#include "core/fpdfapi/parser/cpdf_parser.h"
#include "core/fpdfapi/parser/cpdf_string.h"
-#include "core/fpdfapi/render/cpdf_docrenderdata.h"
+#include "core/fpdfapi/parser/cpdf_test_document.h"
#include "fpdfsdk/cpdfsdk_helpers.h"
#include "public/cpp/fpdf_scopers.h"
#include "testing/gtest/include/gtest/gtest.h"
-class CPDF_TestDocument final : public CPDF_Document {
- public:
- CPDF_TestDocument()
- : CPDF_Document(std::make_unique<CPDF_DocRenderData>(),
- std::make_unique<CPDF_DocPageData>()) {}
-
- void SetRoot(CPDF_Dictionary* root) { SetRootForTesting(root); }
-};
-
class PDFCatalogTest : public testing::Test {
public:
void SetUp() override {
diff --git a/fpdfsdk/fpdf_doc_unittest.cpp b/fpdfsdk/fpdf_doc_unittest.cpp
index 6b3d992..a205459 100644
--- a/fpdfsdk/fpdf_doc_unittest.cpp
+++ b/fpdfsdk/fpdf_doc_unittest.cpp
@@ -7,7 +7,6 @@
#include <memory>
#include <vector>
-#include "core/fpdfapi/page/cpdf_docpagedata.h"
#include "core/fpdfapi/page/cpdf_pagemodule.h"
#include "core/fpdfapi/parser/cpdf_array.h"
#include "core/fpdfapi/parser/cpdf_dictionary.h"
@@ -18,23 +17,13 @@
#include "core/fpdfapi/parser/cpdf_parser.h"
#include "core/fpdfapi/parser/cpdf_reference.h"
#include "core/fpdfapi/parser/cpdf_string.h"
-#include "core/fpdfapi/render/cpdf_docrenderdata.h"
+#include "core/fpdfapi/parser/cpdf_test_document.h"
#include "core/fpdfdoc/cpdf_dest.h"
#include "fpdfsdk/cpdfsdk_helpers.h"
#include "public/cpp/fpdf_scopers.h"
#include "testing/fx_string_testhelpers.h"
#include "testing/gtest/include/gtest/gtest.h"
-class CPDF_TestDocument final : public CPDF_Document {
- public:
- CPDF_TestDocument()
- : CPDF_Document(std::make_unique<CPDF_DocRenderData>(),
- std::make_unique<CPDF_DocPageData>()) {}
-
- void SetRoot(CPDF_Dictionary* root) { SetRootForTesting(root); }
- CPDF_IndirectObjectHolder* GetHolder() { return this; }
-};
-
class PDFDocTest : public testing::Test {
public:
struct DictObjInfo {
@@ -45,7 +34,7 @@
void SetUp() override {
CPDF_PageModule::Create();
auto pTestDoc = std::make_unique<CPDF_TestDocument>();
- m_pIndirectObjs = pTestDoc->GetHolder();
+ m_pIndirectObjs = pTestDoc.get();
m_pRootObj.Reset(m_pIndirectObjs->NewIndirect<CPDF_Dictionary>());
pTestDoc->SetRoot(m_pRootObj.Get());
m_pDoc.reset(FPDFDocumentFromCPDFDocument(pTestDoc.release()));