5#include "core/fxcrt/check.h"
6#include "core/fxcrt/fx_system.h"
7#include "core/fxge/cfx_defaultrenderdevice.h"
8#include "public/fpdf_edit.h"
9#include "testing/embedder_test.h"
10#include "testing/embedder_test_constants.h"
11#include "testing/gtest/include/gtest/gtest.h"
13using pdfium::RectanglesChecksum;
19constexpr int kExpectedRectangleWidth = 200;
20constexpr int kExpectedRectangleHeight = 300;
22const char* RectanglesAndTriangleChecksum() {
24 ?
"89b85ca2749a98320518531cf365b010"
25 :
"8bb78ca28f1e0ab9d36c0745ae0f58bb";
28ScopedFPDFPageObject CreateBlackTriangle() {
30 EXPECT_TRUE(FPDFPageObj_SetFillColor(path.get(), 0, 0, 0, 255));
32 EXPECT_TRUE(FPDFPath_LineTo(path.get(), 100, 75));
33 EXPECT_TRUE(FPDFPath_LineTo(path.get(), 75, 75));
34 EXPECT_TRUE(FPDFPath_Close(path.get()));
41 constexpr int kObjectCount = 256;
42 CreateEmptyDocument();
43 FPDF_PAGE page = FPDFPage_New(document(), 0, 612, 792);
45 for (size_t i = 0; i < kObjectCount; ++i) {
47 EXPECT_TRUE(FPDFPageObj_SetFillColor(path, i, i, i, i));
48 EXPECT_TRUE(FPDFPageObj_SetStrokeColor(path, i, i, i, i));
58 EXPECT_TRUE(FPDF_SaveAsCopy(document(),
this, 0));
62 ASSERT_TRUE(OpenSavedDocument());
63 page = LoadSavedPage(0);
66 for (size_t i = 0; i < kObjectCount; ++i) {
67 FPDF_PAGEOBJECT path = FPDFPage_GetObject(page, i);
94 OpenDocument(
"rectangles_double_flipped.pdf");
95 FPDF_PAGE page = LoadPage(0);
99 ScopedFPDFBitmap bitmap = RenderLoadedPage(page);
100 CompareBitmap(bitmap.get(), kExpectedRectangleWidth,
110 EXPECT_FLOAT_EQ(1.0f, matrix.a);
111 EXPECT_FLOAT_EQ(0.0f, matrix.b);
112 EXPECT_FLOAT_EQ(0.0f, matrix.c);
113 EXPECT_FLOAT_EQ(-1.0f, matrix.d);
114 EXPECT_FLOAT_EQ(0.0f, matrix.e);
115 EXPECT_FLOAT_EQ(300.0f, matrix.f);
119 ScopedFPDFBitmap bitmap = RenderLoadedPage(page);
120 CompareBitmap(bitmap.get(), kExpectedRectangleWidth,
125 ASSERT_TRUE(FPDF_SaveAsCopy(document(),
this, 0));
128 ScopedFPDFBitmap bitmap = RenderLoadedPage(page);
129 CompareBitmap(bitmap.get(), kExpectedRectangleWidth,
135 VerifySavedDocument(kExpectedRectangleWidth, kExpectedRectangleHeight,
140 OpenDocument(
"form_object_with_path.pdf");
141 FPDF_PAGE page = LoadPage(0);
145 ScopedFPDFBitmap bitmap = RenderLoadedPage(page);
146 CompareBitmap(bitmap.get(), kExpectedRectangleWidth,
156 EXPECT_FLOAT_EQ(2.0f, matrix.a);
157 EXPECT_FLOAT_EQ(0.0f, matrix.b);
158 EXPECT_FLOAT_EQ(0.0f, matrix.c);
159 EXPECT_FLOAT_EQ(-1.0f, matrix.d);
160 EXPECT_FLOAT_EQ(0.0f, matrix.e);
161 EXPECT_FLOAT_EQ(300.0f, matrix.f);
165 ScopedFPDFBitmap bitmap = RenderLoadedPage(page);
166 CompareBitmap(bitmap.get(), kExpectedRectangleWidth,
175 EXPECT_FLOAT_EQ(0.5f, matrix.a);
176 EXPECT_FLOAT_EQ(0.0f, matrix.b);
177 EXPECT_FLOAT_EQ(0.0f, matrix.c);
178 EXPECT_FLOAT_EQ(-1.0f, matrix.d);
179 EXPECT_FLOAT_EQ(0.0f, matrix.e);
180 EXPECT_FLOAT_EQ(300.0f, matrix.f);
184 ScopedFPDFBitmap bitmap = RenderLoadedPage(page);
185 CompareBitmap(bitmap.get(), kExpectedRectangleWidth,
190 ASSERT_TRUE(FPDF_SaveAsCopy(document(),
this, 0));
193 ScopedFPDFBitmap bitmap = RenderLoadedPage(page);
194 CompareBitmap(bitmap.get(), kExpectedRectangleWidth,
200 VerifySavedDocument(kExpectedRectangleWidth, kExpectedRectangleHeight,
205 OpenDocument(
"rectangles.pdf");
206 FPDF_PAGE page = LoadPage(0);
210 ScopedFPDFBitmap bitmap = RenderLoadedPage(page);
211 CompareBitmap(bitmap.get(), kExpectedRectangleWidth,
215 ScopedFPDFPageObject path = CreateBlackTriangle();
217 FPDFPage_InsertObject(page, path.release());
220 ScopedFPDFBitmap bitmap = RenderLoadedPage(page);
221 CompareBitmap(bitmap.get(), kExpectedRectangleWidth,
222 kExpectedRectangleHeight, RectanglesAndTriangleChecksum());
226 EXPECT_TRUE(FPDF_SaveAsCopy(document(),
this, 0));
229 ScopedFPDFBitmap bitmap = RenderLoadedPage(page);
230 CompareBitmap(bitmap.get(), kExpectedRectangleWidth,
231 kExpectedRectangleHeight, RectanglesAndTriangleChecksum());
236 VerifySavedDocument(kExpectedRectangleWidth, kExpectedRectangleHeight,
237 RectanglesAndTriangleChecksum());
241 OpenDocument(
"rectangles_with_leaky_ctm.pdf");
242 FPDF_PAGE page = LoadPage(0);
246 ScopedFPDFBitmap bitmap = RenderLoadedPage(page);
247 CompareBitmap(bitmap.get(), kExpectedRectangleWidth,
251 ScopedFPDFPageObject path = CreateBlackTriangle();
253 FPDFPage_InsertObject(page, path.release());
256 ScopedFPDFBitmap bitmap = RenderLoadedPage(page);
257 CompareBitmap(bitmap.get(), kExpectedRectangleWidth,
258 kExpectedRectangleHeight, RectanglesAndTriangleChecksum());
262 EXPECT_TRUE(FPDF_SaveAsCopy(document(),
this, 0));
265 ScopedFPDFBitmap bitmap = RenderLoadedPage(page);
266 CompareBitmap(bitmap.get(), kExpectedRectangleWidth,
267 kExpectedRectangleHeight, RectanglesAndTriangleChecksum());
272 VerifySavedDocument(kExpectedRectangleWidth, kExpectedRectangleHeight,
273 RectanglesAndTriangleChecksum());
static bool UseSkiaRenderer()
#define FPDF_FILLMODE_ALTERNATE
FPDF_EXPORT FPDF_PAGEOBJECT FPDF_CALLCONV FPDFPageObj_CreateNewPath(float x, float y)
FPDF_EXPORT FPDF_BOOL FPDF_CALLCONV FPDFPath_SetDrawMode(FPDF_PAGEOBJECT path, int fillmode, FPDF_BOOL stroke)
FPDF_EXPORT void FPDF_CALLCONV FPDFPage_InsertObject(FPDF_PAGE page, FPDF_PAGEOBJECT page_object)
FPDF_EXPORT FPDF_BOOL FPDF_CALLCONV FPDFPath_Close(FPDF_PAGEOBJECT path)
FPDF_EXPORT FPDF_BOOL FPDF_CALLCONV FPDFPageObj_GetFillColor(FPDF_PAGEOBJECT page_object, unsigned int *R, unsigned int *G, unsigned int *B, unsigned int *A)
FPDF_EXPORT FPDF_BOOL FPDF_CALLCONV FPDFPath_LineTo(FPDF_PAGEOBJECT path, float x, float y)
FPDF_EXPORT FPDF_PAGEOBJECT FPDF_CALLCONV FPDFPage_GetObject(FPDF_PAGE page, int index)
FPDF_EXPORT int FPDF_CALLCONV FPDFPageObj_GetType(FPDF_PAGEOBJECT page_object)
#define FPDF_PAGEOBJ_PATH
FPDF_EXPORT FPDF_BOOL FPDF_CALLCONV FPDFPageObj_SetMatrix(FPDF_PAGEOBJECT page_object, const FS_MATRIX *matrix)
#define FPDF_PAGEOBJ_FORM
FPDF_EXPORT FPDF_BOOL FPDF_CALLCONV FPDFPage_GenerateContent(FPDF_PAGE page)
FPDF_EXPORT FPDF_PAGEOBJECT FPDF_CALLCONV FPDFFormObj_GetObject(FPDF_PAGEOBJECT form_object, unsigned long index)
FPDF_EXPORT FPDF_BOOL FPDF_CALLCONV FPDFPageObj_GetMatrix(FPDF_PAGEOBJECT page_object, FS_MATRIX *matrix)
FPDF_EXPORT FPDF_BOOL FPDF_CALLCONV FPDFPageObj_GetStrokeColor(FPDF_PAGEOBJECT page_object, unsigned int *R, unsigned int *G, unsigned int *B, unsigned int *A)
EmbedderTest FPDFEditPathEmbedderTest
TEST_F(FPDFParserDecodeEmbedderTest, Bug552046)
FPDF_EXPORT void FPDF_CALLCONV FPDF_ClosePage(FPDF_PAGE page)
const char * RectanglesChecksum()