xref: /aosp_15_r20/external/pdfium/fpdfsdk/fpdf_editimg_embeddertest.cpp (revision 3ac0a46f773bac49fa9476ec2b1cf3f8da5ec3a4)
1 // Copyright 2016 The PDFium Authors
2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file.
4 
5 #include "public/fpdf_edit.h"
6 
7 #include "public/cpp/fpdf_scopers.h"
8 #include "testing/embedder_test.h"
9 #include "testing/utils/file_util.h"
10 
11 class PDFEditImgTest : public EmbedderTest {};
12 
TEST_F(PDFEditImgTest,InsertObjectWithInvalidPage)13 TEST_F(PDFEditImgTest, InsertObjectWithInvalidPage) {
14   FPDF_DOCUMENT doc = FPDF_CreateNewDocument();
15   FPDF_PAGE page = FPDFPage_New(doc, 0, 100, 100);
16   EXPECT_EQ(0, FPDFPage_CountObjects(page));
17 
18   FPDFPage_InsertObject(nullptr, nullptr);
19   EXPECT_EQ(0, FPDFPage_CountObjects(page));
20 
21   FPDFPage_InsertObject(page, nullptr);
22   EXPECT_EQ(0, FPDFPage_CountObjects(page));
23 
24   FPDF_PAGEOBJECT page_image = FPDFPageObj_NewImageObj(doc);
25   FPDFPage_InsertObject(nullptr, page_image);
26   EXPECT_EQ(0, FPDFPage_CountObjects(page));
27 
28   FPDF_ClosePage(page);
29   FPDF_CloseDocument(doc);
30 }
31 
TEST_F(PDFEditImgTest,NewImageObj)32 TEST_F(PDFEditImgTest, NewImageObj) {
33   FPDF_DOCUMENT doc = FPDF_CreateNewDocument();
34   FPDF_PAGE page = FPDFPage_New(doc, 0, 100, 100);
35   EXPECT_EQ(0, FPDFPage_CountObjects(page));
36 
37   FPDF_PAGEOBJECT page_image = FPDFPageObj_NewImageObj(doc);
38   FPDFPage_InsertObject(page, page_image);
39   EXPECT_EQ(1, FPDFPage_CountObjects(page));
40   EXPECT_TRUE(FPDFPage_GenerateContent(page));
41 
42   FPDF_ClosePage(page);
43   FPDF_CloseDocument(doc);
44 }
45 
TEST_F(PDFEditImgTest,NewImageObjGenerateContent)46 TEST_F(PDFEditImgTest, NewImageObjGenerateContent) {
47   FPDF_DOCUMENT doc = FPDF_CreateNewDocument();
48   FPDF_PAGE page = FPDFPage_New(doc, 0, 100, 100);
49   EXPECT_EQ(0, FPDFPage_CountObjects(page));
50 
51   constexpr int kBitmapSize = 50;
52   FPDF_BITMAP bitmap = FPDFBitmap_Create(kBitmapSize, kBitmapSize, 0);
53   FPDFBitmap_FillRect(bitmap, 0, 0, kBitmapSize, kBitmapSize, 0x00000000);
54   EXPECT_EQ(kBitmapSize, FPDFBitmap_GetWidth(bitmap));
55   EXPECT_EQ(kBitmapSize, FPDFBitmap_GetHeight(bitmap));
56 
57   FPDF_PAGEOBJECT page_image = FPDFPageObj_NewImageObj(doc);
58   ASSERT_TRUE(FPDFImageObj_SetBitmap(&page, 0, page_image, bitmap));
59   static constexpr FS_MATRIX kScaleBitmapMatrix{kBitmapSize, 0, 0,
60                                                 kBitmapSize, 0, 0};
61   ASSERT_TRUE(FPDFPageObj_SetMatrix(page_image, &kScaleBitmapMatrix));
62   FPDFPage_InsertObject(page, page_image);
63   EXPECT_EQ(1, FPDFPage_CountObjects(page));
64   EXPECT_TRUE(FPDFPage_GenerateContent(page));
65 
66   FPDFBitmap_Destroy(bitmap);
67   FPDF_ClosePage(page);
68   FPDF_CloseDocument(doc);
69 }
70 
TEST_F(PDFEditImgTest,NewImageObjLoadJpeg)71 TEST_F(PDFEditImgTest, NewImageObjLoadJpeg) {
72   ScopedFPDFDocument doc(FPDF_CreateNewDocument());
73   ScopedFPDFPage page(FPDFPage_New(doc.get(), 0, 200, 200));
74   ASSERT_TRUE(page);
75 
76   ScopedFPDFPageObject image(FPDFPageObj_NewImageObj(doc.get()));
77   ASSERT_TRUE(image);
78 
79   FileAccessForTesting file_access("mona_lisa.jpg");
80   FPDF_PAGE temp_page = page.get();
81   EXPECT_TRUE(
82       FPDFImageObj_LoadJpegFile(&temp_page, 1, image.get(), &file_access));
83 
84   ScopedFPDFBitmap bitmap(FPDFImageObj_GetBitmap(image.get()));
85   EXPECT_TRUE(bitmap);
86   EXPECT_EQ(120, FPDFBitmap_GetWidth(bitmap.get()));
87   EXPECT_EQ(120, FPDFBitmap_GetHeight(bitmap.get()));
88 }
89 
TEST_F(PDFEditImgTest,NewImageObjLoadJpegInline)90 TEST_F(PDFEditImgTest, NewImageObjLoadJpegInline) {
91   ScopedFPDFDocument doc(FPDF_CreateNewDocument());
92   ScopedFPDFPage page(FPDFPage_New(doc.get(), 0, 200, 200));
93   ASSERT_TRUE(page);
94 
95   ScopedFPDFPageObject image(FPDFPageObj_NewImageObj(doc.get()));
96   ASSERT_TRUE(image);
97 
98   FileAccessForTesting file_access("mona_lisa.jpg");
99   FPDF_PAGE temp_page = page.get();
100   EXPECT_TRUE(FPDFImageObj_LoadJpegFileInline(&temp_page, 1, image.get(),
101                                               &file_access));
102 
103   ScopedFPDFBitmap bitmap(FPDFImageObj_GetBitmap(image.get()));
104   EXPECT_TRUE(bitmap);
105   EXPECT_EQ(120, FPDFBitmap_GetWidth(bitmap.get()));
106   EXPECT_EQ(120, FPDFBitmap_GetHeight(bitmap.get()));
107 }
108 
TEST_F(PDFEditImgTest,SetBitmap)109 TEST_F(PDFEditImgTest, SetBitmap) {
110   ScopedFPDFDocument doc(FPDF_CreateNewDocument());
111   ScopedFPDFPage page(FPDFPage_New(doc.get(), 0, 100, 100));
112   ScopedFPDFPageObject image(FPDFPageObj_NewImageObj(doc.get()));
113   ScopedFPDFBitmap bitmap(FPDFBitmap_Create(100, 100, 0));
114 
115   FPDF_PAGE page_ptr = page.get();
116   FPDF_PAGE* pages = &page_ptr;
117   EXPECT_TRUE(FPDFImageObj_SetBitmap(nullptr, 1, image.get(), bitmap.get()));
118   EXPECT_TRUE(FPDFImageObj_SetBitmap(pages, 0, image.get(), bitmap.get()));
119   EXPECT_FALSE(FPDFImageObj_SetBitmap(pages, 1, nullptr, bitmap.get()));
120   EXPECT_FALSE(FPDFImageObj_SetBitmap(pages, 1, image.get(), nullptr));
121 }
122 
TEST_F(PDFEditImgTest,GetSetImageMatrix)123 TEST_F(PDFEditImgTest, GetSetImageMatrix) {
124   FPDF_DOCUMENT doc = FPDF_CreateNewDocument();
125   FPDF_PAGEOBJECT image = FPDFPageObj_NewImageObj(doc);
126 
127   FS_MATRIX matrix;
128   EXPECT_FALSE(FPDFPageObj_GetMatrix(nullptr, nullptr));
129   EXPECT_FALSE(FPDFPageObj_GetMatrix(nullptr, &matrix));
130   EXPECT_FALSE(FPDFPageObj_GetMatrix(image, nullptr));
131 
132   EXPECT_TRUE(FPDFPageObj_GetMatrix(image, &matrix));
133   EXPECT_FLOAT_EQ(1.0f, matrix.a);
134   EXPECT_FLOAT_EQ(0.0f, matrix.b);
135   EXPECT_FLOAT_EQ(0.0f, matrix.c);
136   EXPECT_FLOAT_EQ(1.0f, matrix.d);
137   EXPECT_FLOAT_EQ(0.0f, matrix.e);
138   EXPECT_FLOAT_EQ(0.0f, matrix.f);
139 
140   static constexpr FS_MATRIX kMatrix{1, 2, 3, 4, 5, 6};
141   EXPECT_TRUE(FPDFPageObj_SetMatrix(image, &kMatrix));
142   EXPECT_TRUE(FPDFPageObj_GetMatrix(image, &matrix));
143   EXPECT_FLOAT_EQ(1.0f, matrix.a);
144   EXPECT_FLOAT_EQ(2.0f, matrix.b);
145   EXPECT_FLOAT_EQ(3.0f, matrix.c);
146   EXPECT_FLOAT_EQ(4.0f, matrix.d);
147   EXPECT_FLOAT_EQ(5.0f, matrix.e);
148   EXPECT_FLOAT_EQ(6.0f, matrix.f);
149 
150   FPDFPageObj_Destroy(image);
151   FPDF_CloseDocument(doc);
152 }
153