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.cpp89
1 files changed, 89 insertions, 0 deletions
diff --git a/core/fpdfapi/edit/cpdf_pagecontentgenerator_unittest.cpp b/core/fpdfapi/edit/cpdf_pagecontentgenerator_unittest.cpp
new file mode 100644
index 0000000000..8812c0e2b6
--- /dev/null
+++ b/core/fpdfapi/edit/cpdf_pagecontentgenerator_unittest.cpp
@@ -0,0 +1,89 @@
+// Copyright 2017 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/edit/cpdf_pagecontentgenerator.h"
+
+#include "core/fpdfapi/page/cpdf_page.h"
+#include "core/fpdfapi/page/cpdf_pathobject.h"
+#include "testing/gtest/include/gtest/gtest.h"
+#include "third_party/base/ptr_util.h"
+
+TEST(cpdf_pagecontentgenerator, ProcessRect) {
+ auto pPathObj = pdfium::MakeUnique<CPDF_PathObject>();
+ pPathObj->m_Path.AppendRect(10, 5, 13, 30);
+ pPathObj->m_FillType = FXFILL_ALTERNATE;
+ pPathObj->m_bStroke = true;
+ auto pTestPage = pdfium::MakeUnique<CPDF_Page>(nullptr, nullptr, false);
+ CPDF_PageContentGenerator generator(pTestPage.get());
+ CFX_ByteTextBuf buf;
+ generator.ProcessPath(&buf, pPathObj.get());
+ EXPECT_EQ("10 5 3 25 re B*\n", buf.MakeString());
+
+ pPathObj = pdfium::MakeUnique<CPDF_PathObject>();
+ pPathObj->m_Path.SetPointCount(4);
+ FX_PATHPOINT* pPoints = pPathObj->m_Path.GetMutablePoints();
+ pPoints[0].m_PointX = 0;
+ pPoints[0].m_PointY = 0;
+ pPoints[0].m_Flag = FXPT_MOVETO;
+ pPoints[1].m_PointX = 5.2f;
+ pPoints[1].m_PointY = 0;
+ pPoints[1].m_Flag = FXPT_LINETO;
+ pPoints[2].m_PointX = 5.2f;
+ pPoints[2].m_PointY = 3.78f;
+ pPoints[2].m_Flag = FXPT_LINETO;
+ pPoints[3].m_PointX = 0;
+ pPoints[3].m_PointY = 3.78f;
+ pPoints[3].m_Flag = FXPT_LINETO | FXPT_CLOSEFIGURE;
+ pPathObj->m_FillType = 0;
+ pPathObj->m_bStroke = false;
+ buf.Clear();
+ generator.ProcessPath(&buf, pPathObj.get());
+ EXPECT_EQ("0 0 5.2 3.78 re n\n", buf.MakeString());
+}
+
+TEST(cpdf_pagecontentgenerator, ProcessPath) {
+ auto pPathObj = pdfium::MakeUnique<CPDF_PathObject>();
+ pPathObj->m_Path.SetPointCount(10);
+ FX_PATHPOINT* pPoints = pPathObj->m_Path.GetMutablePoints();
+ pPoints[0].m_PointX = 3.102f;
+ pPoints[0].m_PointY = 4.67f;
+ pPoints[0].m_Flag = FXPT_MOVETO;
+ pPoints[1].m_PointX = 5.45f;
+ pPoints[1].m_PointY = 0.29f;
+ pPoints[1].m_Flag = FXPT_LINETO;
+ pPoints[2].m_PointX = 4.24f;
+ pPoints[2].m_PointY = 3.15f;
+ pPoints[2].m_Flag = FXPT_BEZIERTO;
+ pPoints[3].m_PointX = 4.65f;
+ pPoints[3].m_PointY = 2.98f;
+ pPoints[3].m_Flag = FXPT_BEZIERTO;
+ pPoints[4].m_PointX = 3.456f;
+ pPoints[4].m_PointY = 0.24f;
+ pPoints[4].m_Flag = FXPT_BEZIERTO;
+ pPoints[5].m_PointX = 10.6f;
+ pPoints[5].m_PointY = 11.15f;
+ pPoints[5].m_Flag = FXPT_LINETO;
+ pPoints[6].m_PointX = 11;
+ pPoints[6].m_PointY = 12.5f;
+ pPoints[6].m_Flag = FXPT_LINETO;
+ pPoints[7].m_PointX = 11.46f;
+ pPoints[7].m_PointY = 12.67f;
+ pPoints[7].m_Flag = FXPT_BEZIERTO;
+ pPoints[8].m_PointX = 11.84f;
+ pPoints[8].m_PointY = 12.96f;
+ pPoints[8].m_Flag = FXPT_BEZIERTO;
+ pPoints[9].m_PointX = 12;
+ pPoints[9].m_PointY = 13.64f;
+ pPoints[9].m_Flag = FXPT_BEZIERTO | FXPT_CLOSEFIGURE;
+ pPathObj->m_FillType = FXFILL_WINDING;
+ pPathObj->m_bStroke = false;
+ auto pTestPage = pdfium::MakeUnique<CPDF_Page>(nullptr, nullptr, false);
+ CPDF_PageContentGenerator generator(pTestPage.get());
+ CFX_ByteTextBuf buf;
+ generator.ProcessPath(&buf, pPathObj.get());
+ EXPECT_EQ(
+ "3.102 4.67 m 5.45 0.29 l 4.24 3.15 4.65 2.98 3.456 0.24 c 10.6 11.15 l "
+ "11 12.5 l 11.46 12.67 11.84 12.96 12 13.64 c h f\n",
+ buf.MakeString());
+}