summaryrefslogtreecommitdiff
path: root/core/fpdfapi/edit/cpdf_pagecontentgenerator_unittest.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'core/fpdfapi/edit/cpdf_pagecontentgenerator_unittest.cpp')
-rw-r--r--core/fpdfapi/edit/cpdf_pagecontentgenerator_unittest.cpp50
1 files changed, 49 insertions, 1 deletions
diff --git a/core/fpdfapi/edit/cpdf_pagecontentgenerator_unittest.cpp b/core/fpdfapi/edit/cpdf_pagecontentgenerator_unittest.cpp
index 91389eef5f..ef186666f1 100644
--- a/core/fpdfapi/edit/cpdf_pagecontentgenerator_unittest.cpp
+++ b/core/fpdfapi/edit/cpdf_pagecontentgenerator_unittest.cpp
@@ -4,8 +4,12 @@
#include "core/fpdfapi/edit/cpdf_pagecontentgenerator.h"
+#include <memory>
+#include <utility>
+
#include "core/fpdfapi/cpdf_modulemgr.h"
#include "core/fpdfapi/font/cpdf_font.h"
+#include "core/fpdfapi/page/cpdf_form.h"
#include "core/fpdfapi/page/cpdf_page.h"
#include "core/fpdfapi/page/cpdf_pathobject.h"
#include "core/fpdfapi/page/cpdf_textobject.h"
@@ -34,7 +38,7 @@ class CPDF_PageContentGeneratorTest : public testing::Test {
CPDF_Dictionary* TestGetResource(CPDF_PageContentGenerator* pGen,
const CFX_ByteString& type,
const CFX_ByteString& name) {
- return pGen->m_pPage->m_pResources->GetDictFor(type)->GetDictFor(name);
+ return pGen->m_pObjHolder->m_pResources->GetDictFor(type)->GetDictFor(name);
}
void TestProcessText(CPDF_PageContentGenerator* pGen,
@@ -273,3 +277,47 @@ TEST_F(CPDF_PageContentGeneratorTest, ProcessText) {
EXPECT_EQ("FontDescriptor", fontDesc->GetStringFor("Type"));
EXPECT_EQ("Helvetica", fontDesc->GetStringFor("FontName"));
}
+
+TEST_F(CPDF_PageContentGeneratorTest, ProcessEmptyForm) {
+ auto pDoc = pdfium::MakeUnique<CPDF_Document>(nullptr);
+ pDoc->CreateNewDoc();
+ auto pDict = pdfium::MakeUnique<CPDF_Dictionary>();
+ auto pStream = pdfium::MakeUnique<CPDF_Stream>(nullptr, 0, std::move(pDict));
+
+ // Create an empty form.
+ auto pTestForm =
+ pdfium::MakeUnique<CPDF_Form>(pDoc.get(), nullptr, pStream.get());
+ pTestForm->ParseContent(nullptr, nullptr, nullptr);
+ ASSERT_TRUE(pTestForm->IsParsed());
+
+ // The generated stream for the empty form should be an empty string.
+ CPDF_PageContentGenerator generator(pTestForm.get());
+ std::ostringstream buf;
+ generator.ProcessPageObjects(&buf);
+ EXPECT_EQ("", CFX_ByteString(buf));
+}
+
+TEST_F(CPDF_PageContentGeneratorTest, ProcessFormWithPath) {
+ auto pDoc = pdfium::MakeUnique<CPDF_Document>(nullptr);
+ pDoc->CreateNewDoc();
+ auto pDict = pdfium::MakeUnique<CPDF_Dictionary>();
+ const char content[] =
+ "q 3.102 4.67 m 5.45 0.29 l 4.24 3.15 4.65 2.98 3.456 0.24 c 3.102 4.67 "
+ "l h f Q\n";
+ size_t buf_len = FX_ArraySize(content);
+ std::unique_ptr<uint8_t, FxFreeDeleter> buf(FX_Alloc(uint8_t, buf_len));
+ memcpy(buf.get(), content, buf_len);
+ auto pStream = pdfium::MakeUnique<CPDF_Stream>(std::move(buf), buf_len,
+ std::move(pDict));
+
+ // Create a form with a non-empty stream.
+ auto pTestForm =
+ pdfium::MakeUnique<CPDF_Form>(pDoc.get(), nullptr, pStream.get());
+ pTestForm->ParseContent(nullptr, nullptr, nullptr);
+ ASSERT_TRUE(pTestForm->IsParsed());
+
+ CPDF_PageContentGenerator generator(pTestForm.get());
+ std::ostringstream process_buf;
+ generator.ProcessPageObjects(&process_buf);
+ EXPECT_EQ(content, CFX_ByteString(process_buf));
+}