xref: /aosp_15_r20/external/pdfium/xfa/fwl/cfwl_edit_embeddertest.cpp (revision 3ac0a46f773bac49fa9476ec2b1cf3f8da5ec3a4)
1*3ac0a46fSAndroid Build Coastguard Worker // Copyright 2017 The PDFium Authors
2*3ac0a46fSAndroid Build Coastguard Worker // Use of this source code is governed by a BSD-style license that can be
3*3ac0a46fSAndroid Build Coastguard Worker // found in the LICENSE file.
4*3ac0a46fSAndroid Build Coastguard Worker 
5*3ac0a46fSAndroid Build Coastguard Worker #include "xfa/fwl/cfwl_edit.h"
6*3ac0a46fSAndroid Build Coastguard Worker 
7*3ac0a46fSAndroid Build Coastguard Worker #include <memory>
8*3ac0a46fSAndroid Build Coastguard Worker 
9*3ac0a46fSAndroid Build Coastguard Worker #include "core/fxcrt/widestring.h"
10*3ac0a46fSAndroid Build Coastguard Worker #include "core/fxge/cfx_defaultrenderdevice.h"
11*3ac0a46fSAndroid Build Coastguard Worker #include "public/fpdf_ext.h"
12*3ac0a46fSAndroid Build Coastguard Worker #include "public/fpdf_formfill.h"
13*3ac0a46fSAndroid Build Coastguard Worker #include "public/fpdf_fwlevent.h"
14*3ac0a46fSAndroid Build Coastguard Worker #include "testing/embedder_test.h"
15*3ac0a46fSAndroid Build Coastguard Worker #include "testing/embedder_test_environment.h"
16*3ac0a46fSAndroid Build Coastguard Worker #include "testing/embedder_test_timer_handling_delegate.h"
17*3ac0a46fSAndroid Build Coastguard Worker #include "testing/gtest/include/gtest/gtest.h"
18*3ac0a46fSAndroid Build Coastguard Worker #include "testing/xfa_js_embedder_test.h"
19*3ac0a46fSAndroid Build Coastguard Worker 
20*3ac0a46fSAndroid Build Coastguard Worker namespace {
21*3ac0a46fSAndroid Build Coastguard Worker 
22*3ac0a46fSAndroid Build Coastguard Worker const char kEmailRecommendedFilledChecksum[] =
23*3ac0a46fSAndroid Build Coastguard Worker     "211e4e46eb347aa2bc7c425556d600b0";
24*3ac0a46fSAndroid Build Coastguard Worker 
25*3ac0a46fSAndroid Build Coastguard Worker }  // namespace
26*3ac0a46fSAndroid Build Coastguard Worker 
27*3ac0a46fSAndroid Build Coastguard Worker class CFWLEditEmbedderTest : public XFAJSEmbedderTest {
28*3ac0a46fSAndroid Build Coastguard Worker  protected:
SetUp()29*3ac0a46fSAndroid Build Coastguard Worker   void SetUp() override {
30*3ac0a46fSAndroid Build Coastguard Worker     EmbedderTest::SetUp();
31*3ac0a46fSAndroid Build Coastguard Worker     SetDelegate(&delegate_);
32*3ac0a46fSAndroid Build Coastguard Worker 
33*3ac0a46fSAndroid Build Coastguard Worker     // Arbitrary, picked nice even number, 2020-09-13 12:26:40.
34*3ac0a46fSAndroid Build Coastguard Worker     FSDK_SetTimeFunction([]() -> time_t { return 1600000000; });
35*3ac0a46fSAndroid Build Coastguard Worker     FSDK_SetLocaltimeFunction([](const time_t* t) { return gmtime(t); });
36*3ac0a46fSAndroid Build Coastguard Worker   }
37*3ac0a46fSAndroid Build Coastguard Worker 
TearDown()38*3ac0a46fSAndroid Build Coastguard Worker   void TearDown() override {
39*3ac0a46fSAndroid Build Coastguard Worker     FSDK_SetTimeFunction(nullptr);
40*3ac0a46fSAndroid Build Coastguard Worker     FSDK_SetLocaltimeFunction(nullptr);
41*3ac0a46fSAndroid Build Coastguard Worker     // TODO(crbug.com/pdfium/11): A page might not have been loaded if a test
42*3ac0a46fSAndroid Build Coastguard Worker     // is skipped at runtime. This check for a non-null page should be able to
43*3ac0a46fSAndroid Build Coastguard Worker     // removed once none of the tests are being skipped for Skia.
44*3ac0a46fSAndroid Build Coastguard Worker     if (page())
45*3ac0a46fSAndroid Build Coastguard Worker       UnloadPage(page());
46*3ac0a46fSAndroid Build Coastguard Worker     EmbedderTest::TearDown();
47*3ac0a46fSAndroid Build Coastguard Worker   }
48*3ac0a46fSAndroid Build Coastguard Worker 
CreateAndInitializeFormPDF(const char * filename)49*3ac0a46fSAndroid Build Coastguard Worker   void CreateAndInitializeFormPDF(const char* filename) {
50*3ac0a46fSAndroid Build Coastguard Worker     ASSERT_TRUE(OpenDocument(filename));
51*3ac0a46fSAndroid Build Coastguard Worker     page_ = LoadPage(0);
52*3ac0a46fSAndroid Build Coastguard Worker     ASSERT_TRUE(page_);
53*3ac0a46fSAndroid Build Coastguard Worker   }
54*3ac0a46fSAndroid Build Coastguard Worker 
page() const55*3ac0a46fSAndroid Build Coastguard Worker   FPDF_PAGE page() const { return page_; }
delegate() const56*3ac0a46fSAndroid Build Coastguard Worker   EmbedderTestTimerHandlingDelegate delegate() const { return delegate_; }
57*3ac0a46fSAndroid Build Coastguard Worker 
58*3ac0a46fSAndroid Build Coastguard Worker  private:
59*3ac0a46fSAndroid Build Coastguard Worker   FPDF_PAGE page_ = nullptr;
60*3ac0a46fSAndroid Build Coastguard Worker   EmbedderTestTimerHandlingDelegate delegate_;
61*3ac0a46fSAndroid Build Coastguard Worker };
62*3ac0a46fSAndroid Build Coastguard Worker 
TEST_F(CFWLEditEmbedderTest,Trivial)63*3ac0a46fSAndroid Build Coastguard Worker TEST_F(CFWLEditEmbedderTest, Trivial) {
64*3ac0a46fSAndroid Build Coastguard Worker   CreateAndInitializeFormPDF("xfa/email_recommended.pdf");
65*3ac0a46fSAndroid Build Coastguard Worker   ASSERT_EQ(0u, delegate().GetAlerts().size());
66*3ac0a46fSAndroid Build Coastguard Worker }
67*3ac0a46fSAndroid Build Coastguard Worker 
TEST_F(CFWLEditEmbedderTest,LeftClickMouseSelection)68*3ac0a46fSAndroid Build Coastguard Worker TEST_F(CFWLEditEmbedderTest, LeftClickMouseSelection) {
69*3ac0a46fSAndroid Build Coastguard Worker   CreateAndInitializeFormPDF("xfa/email_recommended.pdf");
70*3ac0a46fSAndroid Build Coastguard Worker   FORM_OnLButtonDown(form_handle(), page(), 0, 115, 58);
71*3ac0a46fSAndroid Build Coastguard Worker   for (size_t i = 0; i < 10; ++i)
72*3ac0a46fSAndroid Build Coastguard Worker     FORM_OnChar(form_handle(), page(), 'a' + i, 0);
73*3ac0a46fSAndroid Build Coastguard Worker 
74*3ac0a46fSAndroid Build Coastguard Worker   // Mouse selection
75*3ac0a46fSAndroid Build Coastguard Worker   FORM_OnLButtonDown(form_handle(), page(), 0, 128, 58);
76*3ac0a46fSAndroid Build Coastguard Worker   FORM_OnLButtonDown(form_handle(), page(), FWL_EVENTFLAG_ShiftKey, 152, 58);
77*3ac0a46fSAndroid Build Coastguard Worker 
78*3ac0a46fSAndroid Build Coastguard Worker   // 12 == (2 * strlen(defgh)) + 2 (for \0\0)
79*3ac0a46fSAndroid Build Coastguard Worker   EXPECT_EQ(12UL, FORM_GetSelectedText(form_handle(), page(), nullptr, 0));
80*3ac0a46fSAndroid Build Coastguard Worker 
81*3ac0a46fSAndroid Build Coastguard Worker   unsigned short buf[128];
82*3ac0a46fSAndroid Build Coastguard Worker   unsigned long len = FORM_GetSelectedText(form_handle(), page(), &buf, 128);
83*3ac0a46fSAndroid Build Coastguard Worker   EXPECT_STREQ(L"defgh", WideString::FromUTF16LE(buf, len).c_str());
84*3ac0a46fSAndroid Build Coastguard Worker }
85*3ac0a46fSAndroid Build Coastguard Worker 
TEST_F(CFWLEditEmbedderTest,DragMouseSelection)86*3ac0a46fSAndroid Build Coastguard Worker TEST_F(CFWLEditEmbedderTest, DragMouseSelection) {
87*3ac0a46fSAndroid Build Coastguard Worker   // TODO(crbug.com/pdfium/11): Fix this test and enable for Skia variants.
88*3ac0a46fSAndroid Build Coastguard Worker   if (CFX_DefaultRenderDevice::SkiaIsDefaultRenderer())
89*3ac0a46fSAndroid Build Coastguard Worker     return;
90*3ac0a46fSAndroid Build Coastguard Worker 
91*3ac0a46fSAndroid Build Coastguard Worker   CreateAndInitializeFormPDF("xfa/email_recommended.pdf");
92*3ac0a46fSAndroid Build Coastguard Worker   FORM_OnLButtonDown(form_handle(), page(), 0, 115, 58);
93*3ac0a46fSAndroid Build Coastguard Worker   for (size_t i = 0; i < 10; ++i)
94*3ac0a46fSAndroid Build Coastguard Worker     FORM_OnChar(form_handle(), page(), 'a' + i, 0);
95*3ac0a46fSAndroid Build Coastguard Worker 
96*3ac0a46fSAndroid Build Coastguard Worker   // Mouse selection
97*3ac0a46fSAndroid Build Coastguard Worker   FORM_OnLButtonDown(form_handle(), page(), 0, 128, 58);
98*3ac0a46fSAndroid Build Coastguard Worker   FORM_OnMouseMove(form_handle(), page(), FWL_EVENTFLAG_ShiftKey, 152, 58);
99*3ac0a46fSAndroid Build Coastguard Worker 
100*3ac0a46fSAndroid Build Coastguard Worker   // 12 == (2 * strlen(defgh)) + 2 (for \0\0)
101*3ac0a46fSAndroid Build Coastguard Worker   EXPECT_EQ(12UL, FORM_GetSelectedText(form_handle(), page(), nullptr, 0));
102*3ac0a46fSAndroid Build Coastguard Worker 
103*3ac0a46fSAndroid Build Coastguard Worker   unsigned short buf[128];
104*3ac0a46fSAndroid Build Coastguard Worker   unsigned long len = FORM_GetSelectedText(form_handle(), page(), &buf, 128);
105*3ac0a46fSAndroid Build Coastguard Worker   EXPECT_STREQ(L"defgh", WideString::FromUTF16LE(buf, len).c_str());
106*3ac0a46fSAndroid Build Coastguard Worker 
107*3ac0a46fSAndroid Build Coastguard Worker   // TODO(hnakashima): This is incorrect. Visually 'abcdefgh' are selected.
108*3ac0a46fSAndroid Build Coastguard Worker   const char kDraggedMD5[] = "f131526c8edd04e44de17b2647ec54c8";
109*3ac0a46fSAndroid Build Coastguard Worker   {
110*3ac0a46fSAndroid Build Coastguard Worker     ScopedFPDFBitmap page_bitmap =
111*3ac0a46fSAndroid Build Coastguard Worker         RenderLoadedPageWithFlags(page(), FPDF_ANNOT);
112*3ac0a46fSAndroid Build Coastguard Worker     CompareBitmap(page_bitmap.get(), 612, 792, kDraggedMD5);
113*3ac0a46fSAndroid Build Coastguard Worker   }
114*3ac0a46fSAndroid Build Coastguard Worker }
115*3ac0a46fSAndroid Build Coastguard Worker 
TEST_F(CFWLEditEmbedderTest,SimpleFill)116*3ac0a46fSAndroid Build Coastguard Worker TEST_F(CFWLEditEmbedderTest, SimpleFill) {
117*3ac0a46fSAndroid Build Coastguard Worker   // TODO(crbug.com/pdfium/11): Fix this test and enable for Skia variants.
118*3ac0a46fSAndroid Build Coastguard Worker   if (CFX_DefaultRenderDevice::SkiaIsDefaultRenderer())
119*3ac0a46fSAndroid Build Coastguard Worker     return;
120*3ac0a46fSAndroid Build Coastguard Worker 
121*3ac0a46fSAndroid Build Coastguard Worker   CreateAndInitializeFormPDF("xfa/email_recommended.pdf");
122*3ac0a46fSAndroid Build Coastguard Worker   const char kBlankMD5[] = "8dda78a3afaf9f7b5210eb81cacc4600";
123*3ac0a46fSAndroid Build Coastguard Worker   {
124*3ac0a46fSAndroid Build Coastguard Worker     ScopedFPDFBitmap page_bitmap =
125*3ac0a46fSAndroid Build Coastguard Worker         RenderLoadedPageWithFlags(page(), FPDF_ANNOT);
126*3ac0a46fSAndroid Build Coastguard Worker     CompareBitmap(page_bitmap.get(), 612, 792, kBlankMD5);
127*3ac0a46fSAndroid Build Coastguard Worker   }
128*3ac0a46fSAndroid Build Coastguard Worker 
129*3ac0a46fSAndroid Build Coastguard Worker   FORM_OnLButtonDown(form_handle(), page(), 0, 115, 58);
130*3ac0a46fSAndroid Build Coastguard Worker   for (size_t i = 0; i < 10; ++i)
131*3ac0a46fSAndroid Build Coastguard Worker     FORM_OnChar(form_handle(), page(), 'a' + i, 0);
132*3ac0a46fSAndroid Build Coastguard Worker 
133*3ac0a46fSAndroid Build Coastguard Worker   {
134*3ac0a46fSAndroid Build Coastguard Worker     ScopedFPDFBitmap page_bitmap =
135*3ac0a46fSAndroid Build Coastguard Worker         RenderLoadedPageWithFlags(page(), FPDF_ANNOT);
136*3ac0a46fSAndroid Build Coastguard Worker     CompareBitmap(page_bitmap.get(), 612, 792, kEmailRecommendedFilledChecksum);
137*3ac0a46fSAndroid Build Coastguard Worker   }
138*3ac0a46fSAndroid Build Coastguard Worker }
139*3ac0a46fSAndroid Build Coastguard Worker 
TEST_F(CFWLEditEmbedderTest,FillWithNewLineWithoutMultiline)140*3ac0a46fSAndroid Build Coastguard Worker TEST_F(CFWLEditEmbedderTest, FillWithNewLineWithoutMultiline) {
141*3ac0a46fSAndroid Build Coastguard Worker   // TODO(crbug.com/pdfium/11): Fix this test and enable for Skia variants.
142*3ac0a46fSAndroid Build Coastguard Worker   if (CFX_DefaultRenderDevice::SkiaIsDefaultRenderer())
143*3ac0a46fSAndroid Build Coastguard Worker     return;
144*3ac0a46fSAndroid Build Coastguard Worker 
145*3ac0a46fSAndroid Build Coastguard Worker   CreateAndInitializeFormPDF("xfa/email_recommended.pdf");
146*3ac0a46fSAndroid Build Coastguard Worker   FORM_OnLButtonDown(form_handle(), page(), 0, 115, 58);
147*3ac0a46fSAndroid Build Coastguard Worker   for (size_t i = 0; i < 5; ++i)
148*3ac0a46fSAndroid Build Coastguard Worker     FORM_OnChar(form_handle(), page(), 'a' + i, 0);
149*3ac0a46fSAndroid Build Coastguard Worker   FORM_OnChar(form_handle(), page(), '\r', 0);
150*3ac0a46fSAndroid Build Coastguard Worker   for (size_t i = 5; i < 10; ++i)
151*3ac0a46fSAndroid Build Coastguard Worker     FORM_OnChar(form_handle(), page(), 'a' + i, 0);
152*3ac0a46fSAndroid Build Coastguard Worker 
153*3ac0a46fSAndroid Build Coastguard Worker   {
154*3ac0a46fSAndroid Build Coastguard Worker     ScopedFPDFBitmap page_bitmap =
155*3ac0a46fSAndroid Build Coastguard Worker         RenderLoadedPageWithFlags(page(), FPDF_ANNOT);
156*3ac0a46fSAndroid Build Coastguard Worker     CompareBitmap(page_bitmap.get(), 612, 792, kEmailRecommendedFilledChecksum);
157*3ac0a46fSAndroid Build Coastguard Worker   }
158*3ac0a46fSAndroid Build Coastguard Worker }
159*3ac0a46fSAndroid Build Coastguard Worker 
160*3ac0a46fSAndroid Build Coastguard Worker // Disabled due to flakiness.
TEST_F(CFWLEditEmbedderTest,DISABLED_FillWithNewLineWithMultiline)161*3ac0a46fSAndroid Build Coastguard Worker TEST_F(CFWLEditEmbedderTest, DISABLED_FillWithNewLineWithMultiline) {
162*3ac0a46fSAndroid Build Coastguard Worker   CreateAndInitializeFormPDF("xfa/xfa_multiline_textfield.pdf");
163*3ac0a46fSAndroid Build Coastguard Worker   FORM_OnLButtonDown(form_handle(), page(), 0, 115, 58);
164*3ac0a46fSAndroid Build Coastguard Worker 
165*3ac0a46fSAndroid Build Coastguard Worker   for (size_t i = 0; i < 5; ++i)
166*3ac0a46fSAndroid Build Coastguard Worker     FORM_OnChar(form_handle(), page(), 'a' + i, 0);
167*3ac0a46fSAndroid Build Coastguard Worker   FORM_OnChar(form_handle(), page(), '\r', 0);
168*3ac0a46fSAndroid Build Coastguard Worker   for (size_t i = 5; i < 10; ++i)
169*3ac0a46fSAndroid Build Coastguard Worker     FORM_OnChar(form_handle(), page(), 'a' + i, 0);
170*3ac0a46fSAndroid Build Coastguard Worker 
171*3ac0a46fSAndroid Build Coastguard Worker   // Should look like:
172*3ac0a46fSAndroid Build Coastguard Worker   // abcde
173*3ac0a46fSAndroid Build Coastguard Worker   // fghij|
174*3ac0a46fSAndroid Build Coastguard Worker   {
175*3ac0a46fSAndroid Build Coastguard Worker #if BUILDFLAG(IS_LINUX) || BUILDFLAG(IS_CHROMEOS)
176*3ac0a46fSAndroid Build Coastguard Worker     const char kFilledMultilineMD5[] = "fc1f4d5fdb2c5755005fc525b0a60ec9";
177*3ac0a46fSAndroid Build Coastguard Worker #else
178*3ac0a46fSAndroid Build Coastguard Worker     const char kFilledMultilineMD5[] = "a5654e027d8b1667c20f3b86d1918003";
179*3ac0a46fSAndroid Build Coastguard Worker #endif  // BUILDFLAG(IS_LINUX) || BUILDFLAG(IS_CHROMEOS)
180*3ac0a46fSAndroid Build Coastguard Worker     ScopedFPDFBitmap page_bitmap =
181*3ac0a46fSAndroid Build Coastguard Worker         RenderLoadedPageWithFlags(page(), FPDF_ANNOT);
182*3ac0a46fSAndroid Build Coastguard Worker     CompareBitmap(page_bitmap.get(), 612, 792, kFilledMultilineMD5);
183*3ac0a46fSAndroid Build Coastguard Worker   }
184*3ac0a46fSAndroid Build Coastguard Worker 
185*3ac0a46fSAndroid Build Coastguard Worker   for (size_t i = 0; i < 4; ++i)
186*3ac0a46fSAndroid Build Coastguard Worker     FORM_OnKeyDown(form_handle(), page(), FWL_VKEY_Left, 0);
187*3ac0a46fSAndroid Build Coastguard Worker 
188*3ac0a46fSAndroid Build Coastguard Worker   // Should look like:
189*3ac0a46fSAndroid Build Coastguard Worker   // abcde
190*3ac0a46fSAndroid Build Coastguard Worker   // f|ghij
191*3ac0a46fSAndroid Build Coastguard Worker 
192*3ac0a46fSAndroid Build Coastguard Worker   // Two backspaces is a workaround because left arrow does not behave well
193*3ac0a46fSAndroid Build Coastguard Worker   // in the first character of a line. It skips back to the previous line.
194*3ac0a46fSAndroid Build Coastguard Worker   for (size_t i = 0; i < 2; ++i)
195*3ac0a46fSAndroid Build Coastguard Worker     FORM_OnChar(form_handle(), page(), '\b', 0);
196*3ac0a46fSAndroid Build Coastguard Worker 
197*3ac0a46fSAndroid Build Coastguard Worker   // Should look like:
198*3ac0a46fSAndroid Build Coastguard Worker   // abcde|ghij
199*3ac0a46fSAndroid Build Coastguard Worker   {
200*3ac0a46fSAndroid Build Coastguard Worker #if BUILDFLAG(IS_LINUX) || BUILDFLAG(IS_CHROMEOS)
201*3ac0a46fSAndroid Build Coastguard Worker     const char kMultilineBackspaceMD5[] = "8bb62a8100ff1e1cc113d4033e0d824e";
202*3ac0a46fSAndroid Build Coastguard Worker #else
203*3ac0a46fSAndroid Build Coastguard Worker     const char kMultilineBackspaceMD5[] = "a2f1dcab92bb1fb7c2f9ccc70100c989";
204*3ac0a46fSAndroid Build Coastguard Worker #endif  // BUILDFLAG(IS_LINUX) || BUILDFLAG(IS_CHROMEOS)
205*3ac0a46fSAndroid Build Coastguard Worker     ScopedFPDFBitmap page_bitmap =
206*3ac0a46fSAndroid Build Coastguard Worker         RenderLoadedPageWithFlags(page(), FPDF_ANNOT);
207*3ac0a46fSAndroid Build Coastguard Worker     CompareBitmap(page_bitmap.get(), 612, 792, kMultilineBackspaceMD5);
208*3ac0a46fSAndroid Build Coastguard Worker   }
209*3ac0a46fSAndroid Build Coastguard Worker }
210*3ac0a46fSAndroid Build Coastguard Worker 
TEST_F(CFWLEditEmbedderTest,DateTimePickerTest)211*3ac0a46fSAndroid Build Coastguard Worker TEST_F(CFWLEditEmbedderTest, DateTimePickerTest) {
212*3ac0a46fSAndroid Build Coastguard Worker   // TODO(crbug.com/pdfium/11): Fix this test and enable for Skia variants.
213*3ac0a46fSAndroid Build Coastguard Worker   if (CFX_DefaultRenderDevice::SkiaIsDefaultRenderer())
214*3ac0a46fSAndroid Build Coastguard Worker     return;
215*3ac0a46fSAndroid Build Coastguard Worker 
216*3ac0a46fSAndroid Build Coastguard Worker   CreateAndInitializeFormPDF("xfa/xfa_date_time_edit.pdf");
217*3ac0a46fSAndroid Build Coastguard Worker 
218*3ac0a46fSAndroid Build Coastguard Worker   // Give focus to date time widget, creating down-arrow button.
219*3ac0a46fSAndroid Build Coastguard Worker   FORM_OnLButtonDown(form_handle(), page(), 0, 115, 58);
220*3ac0a46fSAndroid Build Coastguard Worker   FORM_OnLButtonUp(form_handle(), page(), 0, 115, 58);
221*3ac0a46fSAndroid Build Coastguard Worker   const char kSelectedMD5[] = "1036b8837a9dba75c6bd8f9347ae2eb2";
222*3ac0a46fSAndroid Build Coastguard Worker   {
223*3ac0a46fSAndroid Build Coastguard Worker     ScopedFPDFBitmap page_bitmap =
224*3ac0a46fSAndroid Build Coastguard Worker         RenderLoadedPageWithFlags(page(), FPDF_ANNOT);
225*3ac0a46fSAndroid Build Coastguard Worker     CompareBitmap(page_bitmap.get(), 612, 792, kSelectedMD5);
226*3ac0a46fSAndroid Build Coastguard Worker   }
227*3ac0a46fSAndroid Build Coastguard Worker 
228*3ac0a46fSAndroid Build Coastguard Worker   // Click down-arrow button, bringing up calendar widget.
229*3ac0a46fSAndroid Build Coastguard Worker   FORM_OnLButtonDown(form_handle(), page(), 0, 446, 54);
230*3ac0a46fSAndroid Build Coastguard Worker   FORM_OnLButtonUp(form_handle(), page(), 0, 446, 54);
231*3ac0a46fSAndroid Build Coastguard Worker   {
232*3ac0a46fSAndroid Build Coastguard Worker     ScopedFPDFBitmap page_bitmap =
233*3ac0a46fSAndroid Build Coastguard Worker         RenderLoadedPageWithFlags(page(), FPDF_ANNOT);
234*3ac0a46fSAndroid Build Coastguard Worker 
235*3ac0a46fSAndroid Build Coastguard Worker     // TODO(tsepez): hermetic fonts.
236*3ac0a46fSAndroid Build Coastguard Worker     // const char kCalendarOpenMD5[] = "02de64e7e83c82c1ef0ae484d671a51d";
237*3ac0a46fSAndroid Build Coastguard Worker     // CompareBitmap(page_bitmap.get(), 612, 792, kCalendarOpenMD5);
238*3ac0a46fSAndroid Build Coastguard Worker   }
239*3ac0a46fSAndroid Build Coastguard Worker 
240*3ac0a46fSAndroid Build Coastguard Worker   // Click on date on calendar, putting result into field as text.
241*3ac0a46fSAndroid Build Coastguard Worker   FORM_OnLButtonDown(form_handle(), page(), 0, 100, 162);
242*3ac0a46fSAndroid Build Coastguard Worker   FORM_OnLButtonUp(form_handle(), page(), 0, 100, 162);
243*3ac0a46fSAndroid Build Coastguard Worker   {
244*3ac0a46fSAndroid Build Coastguard Worker     ScopedFPDFBitmap page_bitmap =
245*3ac0a46fSAndroid Build Coastguard Worker         RenderLoadedPageWithFlags(page(), FPDF_ANNOT);
246*3ac0a46fSAndroid Build Coastguard Worker 
247*3ac0a46fSAndroid Build Coastguard Worker     // TODO(tsepez): hermetic fonts.
248*3ac0a46fSAndroid Build Coastguard Worker     // const char kFilledMD5[] = "1bce66c11f1c87b8d639ce0076ac36d3";
249*3ac0a46fSAndroid Build Coastguard Worker     // CompareBitmap(page_bitmap.get(), 612, 792, kFilledMD5);
250*3ac0a46fSAndroid Build Coastguard Worker   }
251*3ac0a46fSAndroid Build Coastguard Worker }
252*3ac0a46fSAndroid Build Coastguard Worker 
TEST_F(CFWLEditEmbedderTest,ImageEditTest)253*3ac0a46fSAndroid Build Coastguard Worker TEST_F(CFWLEditEmbedderTest, ImageEditTest) {
254*3ac0a46fSAndroid Build Coastguard Worker   CreateAndInitializeFormPDF("xfa/xfa_image_edit.pdf");
255*3ac0a46fSAndroid Build Coastguard Worker   FORM_OnLButtonDown(form_handle(), page(), 0, 115, 58);
256*3ac0a46fSAndroid Build Coastguard Worker   const char* filled_checksum = []() {
257*3ac0a46fSAndroid Build Coastguard Worker     if (CFX_DefaultRenderDevice::SkiaIsDefaultRenderer())
258*3ac0a46fSAndroid Build Coastguard Worker       return "23658ed124114f05518372d41c80e41b";
259*3ac0a46fSAndroid Build Coastguard Worker     return "101cf6223fa2403fba4c413a8310ab02";
260*3ac0a46fSAndroid Build Coastguard Worker   }();
261*3ac0a46fSAndroid Build Coastguard Worker   ScopedFPDFBitmap page_bitmap = RenderLoadedPageWithFlags(page(), FPDF_ANNOT);
262*3ac0a46fSAndroid Build Coastguard Worker   CompareBitmap(page_bitmap.get(), 612, 792, filled_checksum);
263*3ac0a46fSAndroid Build Coastguard Worker }
264*3ac0a46fSAndroid Build Coastguard Worker 
TEST_F(CFWLEditEmbedderTest,ComboBoxTest)265*3ac0a46fSAndroid Build Coastguard Worker TEST_F(CFWLEditEmbedderTest, ComboBoxTest) {
266*3ac0a46fSAndroid Build Coastguard Worker   CreateAndInitializeFormPDF("xfa/xfa_combobox.pdf");
267*3ac0a46fSAndroid Build Coastguard Worker 
268*3ac0a46fSAndroid Build Coastguard Worker   // Give focus to widget.
269*3ac0a46fSAndroid Build Coastguard Worker   FORM_OnLButtonDown(form_handle(), page(), 0, 115, 58);
270*3ac0a46fSAndroid Build Coastguard Worker   FORM_OnLButtonUp(form_handle(), page(), 0, 115, 58);
271*3ac0a46fSAndroid Build Coastguard Worker   {
272*3ac0a46fSAndroid Build Coastguard Worker     const char* filled_checksum = []() {
273*3ac0a46fSAndroid Build Coastguard Worker       if (CFX_DefaultRenderDevice::SkiaIsDefaultRenderer())
274*3ac0a46fSAndroid Build Coastguard Worker         return "8c555487e09ee4acf3ace77db5929bdc";
275*3ac0a46fSAndroid Build Coastguard Worker       return "dad642ae8a5afce2591ffbcabbfc58dd";
276*3ac0a46fSAndroid Build Coastguard Worker     }();
277*3ac0a46fSAndroid Build Coastguard Worker     ScopedFPDFBitmap page_bitmap =
278*3ac0a46fSAndroid Build Coastguard Worker         RenderLoadedPageWithFlags(page(), FPDF_ANNOT);
279*3ac0a46fSAndroid Build Coastguard Worker     CompareBitmap(page_bitmap.get(), 612, 792, filled_checksum);
280*3ac0a46fSAndroid Build Coastguard Worker   }
281*3ac0a46fSAndroid Build Coastguard Worker 
282*3ac0a46fSAndroid Build Coastguard Worker   // Click on down-arrow button, dropdown list appears.
283*3ac0a46fSAndroid Build Coastguard Worker   FORM_OnLButtonDown(form_handle(), page(), 0, 438, 53);
284*3ac0a46fSAndroid Build Coastguard Worker   FORM_OnLButtonUp(form_handle(), page(), 0, 438, 53);
285*3ac0a46fSAndroid Build Coastguard Worker   {
286*3ac0a46fSAndroid Build Coastguard Worker     ScopedFPDFBitmap page_bitmap =
287*3ac0a46fSAndroid Build Coastguard Worker         RenderLoadedPageWithFlags(page(), FPDF_ANNOT);
288*3ac0a46fSAndroid Build Coastguard Worker     // TODO(tsepez): hermetic fonts.
289*3ac0a46fSAndroid Build Coastguard Worker     // const char kFilledMD5[] = "dad642ae8a5afce2591ffbcabbfc58dd";
290*3ac0a46fSAndroid Build Coastguard Worker     // CompareBitmap(page_bitmap.get(), 612, 792, kFilledMD5);
291*3ac0a46fSAndroid Build Coastguard Worker   }
292*3ac0a46fSAndroid Build Coastguard Worker 
293*3ac0a46fSAndroid Build Coastguard Worker   // Enter drop-down list, selection highlighted.
294*3ac0a46fSAndroid Build Coastguard Worker   FORM_OnMouseMove(form_handle(), page(), 0, 253, 107);
295*3ac0a46fSAndroid Build Coastguard Worker   {
296*3ac0a46fSAndroid Build Coastguard Worker     ScopedFPDFBitmap page_bitmap =
297*3ac0a46fSAndroid Build Coastguard Worker         RenderLoadedPageWithFlags(page(), FPDF_ANNOT);
298*3ac0a46fSAndroid Build Coastguard Worker     // TODO(tsepez): hermetic fonts.
299*3ac0a46fSAndroid Build Coastguard Worker     // const char kFilledMD5[] = "dad642ae8a5afce2591ffbcabbfc58dd";
300*3ac0a46fSAndroid Build Coastguard Worker     // CompareBitmap(page_bitmap.get(), 612, 792, kFilledMD5);
301*3ac0a46fSAndroid Build Coastguard Worker   }
302*3ac0a46fSAndroid Build Coastguard Worker 
303*3ac0a46fSAndroid Build Coastguard Worker   // Click on selection, putting result into field.
304*3ac0a46fSAndroid Build Coastguard Worker   FORM_OnLButtonDown(form_handle(), page(), 0, 253, 107);
305*3ac0a46fSAndroid Build Coastguard Worker   FORM_OnLButtonUp(form_handle(), page(), 0, 253, 107);
306*3ac0a46fSAndroid Build Coastguard Worker   {
307*3ac0a46fSAndroid Build Coastguard Worker     ScopedFPDFBitmap page_bitmap =
308*3ac0a46fSAndroid Build Coastguard Worker         RenderLoadedPageWithFlags(page(), FPDF_ANNOT);
309*3ac0a46fSAndroid Build Coastguard Worker     // TODO(tsepez): hermetic fonts.
310*3ac0a46fSAndroid Build Coastguard Worker     // const char kFilledMD5[] = "dad642ae8a5afce2591ffbcabbfc58dd";
311*3ac0a46fSAndroid Build Coastguard Worker     // CompareBitmap(page_bitmap.get(), 612, 792, kFilledMD5);
312*3ac0a46fSAndroid Build Coastguard Worker   }
313*3ac0a46fSAndroid Build Coastguard Worker }
314