1 // Copyright 2017 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 "fpdfsdk/pwl/cpwl_edit.h"
6
7 #include <utility>
8
9 #include "fpdfsdk/cpdfsdk_annotiterator.h"
10 #include "fpdfsdk/cpdfsdk_formfillenvironment.h"
11 #include "fpdfsdk/cpdfsdk_helpers.h"
12 #include "fpdfsdk/cpdfsdk_widget.h"
13 #include "fpdfsdk/formfiller/cffl_formfield.h"
14 #include "fpdfsdk/formfiller/cffl_interactiveformfiller.h"
15 #include "public/fpdf_fwlevent.h"
16 #include "testing/embedder_test.h"
17 #include "testing/gtest/include/gtest/gtest.h"
18
19 class CPWLEditEmbedderTest : public EmbedderTest {
20 protected:
SetUp()21 void SetUp() override {
22 EmbedderTest::SetUp();
23 ASSERT_TRUE(OpenDocument("text_form_multiple.pdf"));
24 }
25
CreateAndInitializeFormPDF()26 ScopedEmbedderTestPage CreateAndInitializeFormPDF() {
27 ScopedEmbedderTestPage page = LoadScopedPage(0);
28 if (!page) {
29 ADD_FAILURE();
30 return ScopedEmbedderTestPage();
31 }
32 m_pFormFillEnv =
33 CPDFSDKFormFillEnvironmentFromFPDFFormHandle(form_handle());
34 CPDFSDK_AnnotIterator iter(m_pFormFillEnv->GetPageViewAtIndex(0),
35 {CPDF_Annot::Subtype::WIDGET});
36 // Normal text field.
37 m_pAnnot = ToCPDFSDKWidget(iter.GetFirstAnnot());
38 if (!m_pAnnot) {
39 ADD_FAILURE();
40 return ScopedEmbedderTestPage();
41 }
42
43 // Read-only text field.
44 CPDFSDK_Annot* pAnnotReadOnly = iter.GetNextAnnot(m_pAnnot);
45
46 // Pre-filled text field with char limit of 10.
47 m_pAnnotCharLimit = ToCPDFSDKWidget(iter.GetNextAnnot(pAnnotReadOnly));
48 if (!m_pAnnotCharLimit) {
49 ADD_FAILURE();
50 return ScopedEmbedderTestPage();
51 }
52
53 // Password text field.
54 CPDFSDK_Annot* password_annot = iter.GetNextAnnot(m_pAnnotCharLimit);
55 if (!password_annot) {
56 ADD_FAILURE();
57 return ScopedEmbedderTestPage();
58 }
59 if (CPDF_Annot::Subtype::WIDGET != password_annot->GetAnnotSubtype()) {
60 ADD_FAILURE();
61 return ScopedEmbedderTestPage();
62 }
63
64 CPDFSDK_Annot* pLastAnnot = iter.GetLastAnnot();
65 if (password_annot != pLastAnnot) {
66 ADD_FAILURE();
67 return ScopedEmbedderTestPage();
68 }
69 return page;
70 }
71
FormFillerAndWindowSetup(CPDFSDK_Widget * pAnnotTextField)72 void FormFillerAndWindowSetup(CPDFSDK_Widget* pAnnotTextField) {
73 CFFL_InteractiveFormFiller* pInteractiveFormFiller =
74 m_pFormFillEnv->GetInteractiveFormFiller();
75 {
76 ObservedPtr<CPDFSDK_Widget> pObserved(pAnnotTextField);
77 EXPECT_TRUE(pInteractiveFormFiller->OnSetFocus(pObserved, {}));
78 }
79
80 m_pFormFiller =
81 pInteractiveFormFiller->GetFormFieldForTesting(pAnnotTextField);
82 ASSERT_TRUE(m_pFormFiller);
83
84 CPWL_Wnd* pWindow =
85 m_pFormFiller->GetPWLWindow(m_pFormFillEnv->GetPageViewAtIndex(0));
86 ASSERT_TRUE(pWindow);
87 m_pEdit = static_cast<CPWL_Edit*>(pWindow);
88 }
89
TypeTextIntoTextField(int num_chars)90 void TypeTextIntoTextField(int num_chars) {
91 // Type text starting with 'A' to as many chars as specified by |num_chars|.
92 for (int i = 0; i < num_chars; ++i) {
93 EXPECT_TRUE(GetCFFLFormFiller()->OnChar(GetCPDFSDKAnnot(), i + 'A', {}));
94 }
95 }
96
GetCPWLEdit()97 CPWL_Edit* GetCPWLEdit() { return m_pEdit; }
GetCFFLFormFiller()98 CFFL_FormField* GetCFFLFormFiller() { return m_pFormFiller; }
GetCPDFSDKAnnot()99 CPDFSDK_Widget* GetCPDFSDKAnnot() { return m_pAnnot; }
GetCPDFSDKAnnotCharLimit()100 CPDFSDK_Widget* GetCPDFSDKAnnotCharLimit() { return m_pAnnotCharLimit; }
101
102 private:
103 CPWL_Edit* m_pEdit;
104 CFFL_FormField* m_pFormFiller;
105 CPDFSDK_Widget* m_pAnnot;
106 CPDFSDK_Widget* m_pAnnotCharLimit;
107 CPDFSDK_FormFillEnvironment* m_pFormFillEnv;
108 };
109
TEST_F(CPWLEditEmbedderTest,TypeText)110 TEST_F(CPWLEditEmbedderTest, TypeText) {
111 ScopedEmbedderTestPage page = CreateAndInitializeFormPDF();
112 ASSERT_TRUE(page);
113 FormFillerAndWindowSetup(GetCPDFSDKAnnot());
114 EXPECT_TRUE(GetCPWLEdit()->GetText().IsEmpty());
115 EXPECT_TRUE(GetCFFLFormFiller()->OnChar(GetCPDFSDKAnnot(), 'a', {}));
116 EXPECT_TRUE(GetCFFLFormFiller()->OnChar(GetCPDFSDKAnnot(), 'b', {}));
117 EXPECT_TRUE(GetCFFLFormFiller()->OnChar(GetCPDFSDKAnnot(), 'c', {}));
118
119 EXPECT_EQ(L"abc", GetCPWLEdit()->GetText());
120 }
121
TEST_F(CPWLEditEmbedderTest,GetSelectedTextEmptyAndBasic)122 TEST_F(CPWLEditEmbedderTest, GetSelectedTextEmptyAndBasic) {
123 ScopedEmbedderTestPage page = CreateAndInitializeFormPDF();
124 ASSERT_TRUE(page);
125 FormFillerAndWindowSetup(GetCPDFSDKAnnot());
126 // Attempt to set selection before text has been typed to test that
127 // selection is identified as empty.
128 //
129 // Select from character index [0, 3) within form text field.
130 GetCPWLEdit()->SetSelection(0, 3);
131 EXPECT_TRUE(GetCPWLEdit()->GetSelectedText().IsEmpty());
132
133 EXPECT_TRUE(GetCFFLFormFiller()->OnChar(GetCPDFSDKAnnot(), 'a', {}));
134 EXPECT_TRUE(GetCFFLFormFiller()->OnChar(GetCPDFSDKAnnot(), 'b', {}));
135 EXPECT_TRUE(GetCFFLFormFiller()->OnChar(GetCPDFSDKAnnot(), 'c', {}));
136 GetCPWLEdit()->SetSelection(0, 2);
137
138 EXPECT_EQ(L"ab", GetCPWLEdit()->GetSelectedText());
139 }
140
TEST_F(CPWLEditEmbedderTest,GetSelectedTextFragments)141 TEST_F(CPWLEditEmbedderTest, GetSelectedTextFragments) {
142 ScopedEmbedderTestPage page = CreateAndInitializeFormPDF();
143 ASSERT_TRUE(page);
144 FormFillerAndWindowSetup(GetCPDFSDKAnnot());
145 TypeTextIntoTextField(50);
146
147 GetCPWLEdit()->SetSelection(0, 0);
148 EXPECT_TRUE(GetCPWLEdit()->GetSelectedText().IsEmpty());
149
150 GetCPWLEdit()->SetSelection(0, 1);
151 EXPECT_EQ(L"A", GetCPWLEdit()->GetSelectedText());
152
153 GetCPWLEdit()->SetSelection(0, -1);
154 EXPECT_EQ(L"ABCDEFGHIJKLMNOPQRSTUVWXYZ[\\]^_`abcdefghijklmnopqr",
155 GetCPWLEdit()->GetSelectedText());
156
157 GetCPWLEdit()->SetSelection(-8, -1);
158 EXPECT_TRUE(GetCPWLEdit()->GetSelectedText().IsEmpty());
159
160 GetCPWLEdit()->SetSelection(23, 12);
161 EXPECT_EQ(L"MNOPQRSTUVW", GetCPWLEdit()->GetSelectedText());
162
163 GetCPWLEdit()->SetSelection(12, 23);
164 EXPECT_EQ(L"MNOPQRSTUVW", GetCPWLEdit()->GetSelectedText());
165
166 GetCPWLEdit()->SetSelection(49, 50);
167 EXPECT_EQ(L"r", GetCPWLEdit()->GetSelectedText());
168
169 GetCPWLEdit()->SetSelection(49, 55);
170 EXPECT_EQ(L"r", GetCPWLEdit()->GetSelectedText());
171 }
172
TEST_F(CPWLEditEmbedderTest,DeleteEntireTextSelection)173 TEST_F(CPWLEditEmbedderTest, DeleteEntireTextSelection) {
174 ScopedEmbedderTestPage page = CreateAndInitializeFormPDF();
175 ASSERT_TRUE(page);
176 FormFillerAndWindowSetup(GetCPDFSDKAnnot());
177 TypeTextIntoTextField(50);
178
179 GetCPWLEdit()->SetSelection(0, -1);
180 EXPECT_EQ(L"ABCDEFGHIJKLMNOPQRSTUVWXYZ[\\]^_`abcdefghijklmnopqr",
181 GetCPWLEdit()->GetSelectedText());
182
183 GetCPWLEdit()->ReplaceSelection(L"");
184 EXPECT_TRUE(GetCPWLEdit()->GetText().IsEmpty());
185 }
186
TEST_F(CPWLEditEmbedderTest,DeleteTextSelectionMiddle)187 TEST_F(CPWLEditEmbedderTest, DeleteTextSelectionMiddle) {
188 ScopedEmbedderTestPage page = CreateAndInitializeFormPDF();
189 ASSERT_TRUE(page);
190 FormFillerAndWindowSetup(GetCPDFSDKAnnot());
191 TypeTextIntoTextField(50);
192
193 GetCPWLEdit()->SetSelection(12, 23);
194 EXPECT_EQ(L"MNOPQRSTUVW", GetCPWLEdit()->GetSelectedText());
195
196 GetCPWLEdit()->ReplaceSelection(L"");
197 EXPECT_EQ(L"ABCDEFGHIJKLXYZ[\\]^_`abcdefghijklmnopqr",
198 GetCPWLEdit()->GetText());
199 }
200
TEST_F(CPWLEditEmbedderTest,DeleteTextSelectionLeft)201 TEST_F(CPWLEditEmbedderTest, DeleteTextSelectionLeft) {
202 ScopedEmbedderTestPage page = CreateAndInitializeFormPDF();
203 ASSERT_TRUE(page);
204 FormFillerAndWindowSetup(GetCPDFSDKAnnot());
205 TypeTextIntoTextField(50);
206
207 GetCPWLEdit()->SetSelection(0, 5);
208 EXPECT_EQ(L"ABCDE", GetCPWLEdit()->GetSelectedText());
209
210 GetCPWLEdit()->ReplaceSelection(L"");
211 EXPECT_EQ(L"FGHIJKLMNOPQRSTUVWXYZ[\\]^_`abcdefghijklmnopqr",
212 GetCPWLEdit()->GetText());
213 }
214
TEST_F(CPWLEditEmbedderTest,DeleteTextSelectionRight)215 TEST_F(CPWLEditEmbedderTest, DeleteTextSelectionRight) {
216 ScopedEmbedderTestPage page = CreateAndInitializeFormPDF();
217 ASSERT_TRUE(page);
218 FormFillerAndWindowSetup(GetCPDFSDKAnnot());
219 TypeTextIntoTextField(50);
220
221 GetCPWLEdit()->SetSelection(45, 50);
222 EXPECT_EQ(L"nopqr", GetCPWLEdit()->GetSelectedText());
223
224 GetCPWLEdit()->ReplaceSelection(L"");
225 EXPECT_EQ(L"ABCDEFGHIJKLMNOPQRSTUVWXYZ[\\]^_`abcdefghijklm",
226 GetCPWLEdit()->GetText());
227 }
228
TEST_F(CPWLEditEmbedderTest,DeleteEmptyTextSelection)229 TEST_F(CPWLEditEmbedderTest, DeleteEmptyTextSelection) {
230 ScopedEmbedderTestPage page = CreateAndInitializeFormPDF();
231 ASSERT_TRUE(page);
232 FormFillerAndWindowSetup(GetCPDFSDKAnnot());
233 TypeTextIntoTextField(50);
234
235 GetCPWLEdit()->ReplaceSelection(L"");
236 EXPECT_EQ(L"ABCDEFGHIJKLMNOPQRSTUVWXYZ[\\]^_`abcdefghijklmnopqr",
237 GetCPWLEdit()->GetText());
238 }
239
TEST_F(CPWLEditEmbedderTest,InsertTextInEmptyTextField)240 TEST_F(CPWLEditEmbedderTest, InsertTextInEmptyTextField) {
241 ScopedEmbedderTestPage page = CreateAndInitializeFormPDF();
242 ASSERT_TRUE(page);
243 FormFillerAndWindowSetup(GetCPDFSDKAnnot());
244 GetCPWLEdit()->ReplaceSelection(L"Hello");
245 EXPECT_EQ(L"Hello", GetCPWLEdit()->GetText());
246 }
247
TEST_F(CPWLEditEmbedderTest,InsertTextInPopulatedTextFieldLeft)248 TEST_F(CPWLEditEmbedderTest, InsertTextInPopulatedTextFieldLeft) {
249 ScopedEmbedderTestPage page = CreateAndInitializeFormPDF();
250 ASSERT_TRUE(page);
251 FormFillerAndWindowSetup(GetCPDFSDKAnnot());
252 TypeTextIntoTextField(10);
253
254 // Move cursor to beginning of text field.
255 EXPECT_TRUE(GetCFFLFormFiller()->OnKeyDown(FWL_VKEY_Home, {}));
256
257 GetCPWLEdit()->ReplaceSelection(L"Hello");
258 EXPECT_EQ(L"HelloABCDEFGHIJ", GetCPWLEdit()->GetText());
259 }
260
TEST_F(CPWLEditEmbedderTest,InsertTextInPopulatedTextFieldMiddle)261 TEST_F(CPWLEditEmbedderTest, InsertTextInPopulatedTextFieldMiddle) {
262 ScopedEmbedderTestPage page = CreateAndInitializeFormPDF();
263 ASSERT_TRUE(page);
264 FormFillerAndWindowSetup(GetCPDFSDKAnnot());
265 TypeTextIntoTextField(10);
266
267 // Move cursor to middle of text field.
268 for (int i = 0; i < 5; ++i) {
269 EXPECT_TRUE(GetCFFLFormFiller()->OnKeyDown(FWL_VKEY_Left, {}));
270 }
271
272 GetCPWLEdit()->ReplaceSelection(L"Hello");
273 EXPECT_EQ(L"ABCDEHelloFGHIJ", GetCPWLEdit()->GetText());
274 }
275
TEST_F(CPWLEditEmbedderTest,InsertTextInPopulatedTextFieldRight)276 TEST_F(CPWLEditEmbedderTest, InsertTextInPopulatedTextFieldRight) {
277 ScopedEmbedderTestPage page = CreateAndInitializeFormPDF();
278 ASSERT_TRUE(page);
279 FormFillerAndWindowSetup(GetCPDFSDKAnnot());
280 TypeTextIntoTextField(10);
281
282 GetCPWLEdit()->ReplaceSelection(L"Hello");
283 EXPECT_EQ(L"ABCDEFGHIJHello", GetCPWLEdit()->GetText());
284 }
285
TEST_F(CPWLEditEmbedderTest,InsertTextAndReplaceSelectionInPopulatedTextFieldWhole)286 TEST_F(CPWLEditEmbedderTest,
287 InsertTextAndReplaceSelectionInPopulatedTextFieldWhole) {
288 ScopedEmbedderTestPage page = CreateAndInitializeFormPDF();
289 ASSERT_TRUE(page);
290 FormFillerAndWindowSetup(GetCPDFSDKAnnot());
291 TypeTextIntoTextField(10);
292
293 GetCPWLEdit()->SetSelection(0, -1);
294 EXPECT_EQ(L"ABCDEFGHIJ", GetCPWLEdit()->GetSelectedText());
295 GetCPWLEdit()->ReplaceSelection(L"Hello");
296 EXPECT_EQ(L"Hello", GetCPWLEdit()->GetText());
297 }
298
TEST_F(CPWLEditEmbedderTest,InsertTextAndReplaceSelectionInPopulatedTextFieldLeft)299 TEST_F(CPWLEditEmbedderTest,
300 InsertTextAndReplaceSelectionInPopulatedTextFieldLeft) {
301 ScopedEmbedderTestPage page = CreateAndInitializeFormPDF();
302 ASSERT_TRUE(page);
303 FormFillerAndWindowSetup(GetCPDFSDKAnnot());
304 TypeTextIntoTextField(10);
305
306 GetCPWLEdit()->SetSelection(0, 5);
307 EXPECT_EQ(L"ABCDE", GetCPWLEdit()->GetSelectedText());
308 GetCPWLEdit()->ReplaceSelection(L"Hello");
309 EXPECT_EQ(L"HelloFGHIJ", GetCPWLEdit()->GetText());
310 }
311
TEST_F(CPWLEditEmbedderTest,InsertTextAndReplaceSelectionInPopulatedTextFieldMiddle)312 TEST_F(CPWLEditEmbedderTest,
313 InsertTextAndReplaceSelectionInPopulatedTextFieldMiddle) {
314 ScopedEmbedderTestPage page = CreateAndInitializeFormPDF();
315 ASSERT_TRUE(page);
316 FormFillerAndWindowSetup(GetCPDFSDKAnnot());
317 TypeTextIntoTextField(10);
318
319 GetCPWLEdit()->SetSelection(2, 7);
320 EXPECT_EQ(L"CDEFG", GetCPWLEdit()->GetSelectedText());
321 GetCPWLEdit()->ReplaceSelection(L"Hello");
322 EXPECT_EQ(L"ABHelloHIJ", GetCPWLEdit()->GetText());
323 }
324
TEST_F(CPWLEditEmbedderTest,InsertTextAndReplaceSelectionInPopulatedTextFieldRight)325 TEST_F(CPWLEditEmbedderTest,
326 InsertTextAndReplaceSelectionInPopulatedTextFieldRight) {
327 ScopedEmbedderTestPage page = CreateAndInitializeFormPDF();
328 ASSERT_TRUE(page);
329 FormFillerAndWindowSetup(GetCPDFSDKAnnot());
330 TypeTextIntoTextField(10);
331
332 GetCPWLEdit()->SetSelection(5, 10);
333 EXPECT_EQ(L"FGHIJ", GetCPWLEdit()->GetSelectedText());
334 GetCPWLEdit()->ReplaceSelection(L"Hello");
335 EXPECT_EQ(L"ABCDEHello", GetCPWLEdit()->GetText());
336 }
337
TEST_F(CPWLEditEmbedderTest,InsertTextInEmptyCharLimitTextFieldOverflow)338 TEST_F(CPWLEditEmbedderTest, InsertTextInEmptyCharLimitTextFieldOverflow) {
339 ScopedEmbedderTestPage page = CreateAndInitializeFormPDF();
340 ASSERT_TRUE(page);
341 FormFillerAndWindowSetup(GetCPDFSDKAnnotCharLimit());
342 GetCPWLEdit()->SetSelection(0, -1);
343 EXPECT_EQ(L"Elephant", GetCPWLEdit()->GetSelectedText());
344 GetCPWLEdit()->ReplaceSelection(L"");
345
346 GetCPWLEdit()->ReplaceSelection(L"Hippopotamus");
347 EXPECT_EQ(L"Hippopotam", GetCPWLEdit()->GetText());
348 }
349
TEST_F(CPWLEditEmbedderTest,InsertTextInEmptyCharLimitTextFieldFit)350 TEST_F(CPWLEditEmbedderTest, InsertTextInEmptyCharLimitTextFieldFit) {
351 ScopedEmbedderTestPage page = CreateAndInitializeFormPDF();
352 ASSERT_TRUE(page);
353 FormFillerAndWindowSetup(GetCPDFSDKAnnotCharLimit());
354 GetCPWLEdit()->SetSelection(0, -1);
355 EXPECT_EQ(L"Elephant", GetCPWLEdit()->GetSelectedText());
356 GetCPWLEdit()->ReplaceSelection(L"");
357
358 GetCPWLEdit()->ReplaceSelection(L"Zebra");
359 EXPECT_EQ(L"Zebra", GetCPWLEdit()->GetText());
360 }
361
TEST_F(CPWLEditEmbedderTest,InsertTextInPopulatedCharLimitTextFieldLeft)362 TEST_F(CPWLEditEmbedderTest, InsertTextInPopulatedCharLimitTextFieldLeft) {
363 ScopedEmbedderTestPage page = CreateAndInitializeFormPDF();
364 ASSERT_TRUE(page);
365 FormFillerAndWindowSetup(GetCPDFSDKAnnotCharLimit());
366 GetCPWLEdit()->ReplaceSelection(L"Hippopotamus");
367 EXPECT_EQ(L"HiElephant", GetCPWLEdit()->GetText());
368 }
369
TEST_F(CPWLEditEmbedderTest,InsertTextInPopulatedCharLimitTextFieldMiddle)370 TEST_F(CPWLEditEmbedderTest, InsertTextInPopulatedCharLimitTextFieldMiddle) {
371 ScopedEmbedderTestPage page = CreateAndInitializeFormPDF();
372 ASSERT_TRUE(page);
373 FormFillerAndWindowSetup(GetCPDFSDKAnnotCharLimit());
374 // Move cursor to middle of text field.
375 for (int i = 0; i < 5; ++i) {
376 EXPECT_TRUE(GetCFFLFormFiller()->OnKeyDown(FWL_VKEY_Right, {}));
377 }
378
379 GetCPWLEdit()->ReplaceSelection(L"Hippopotamus");
380 EXPECT_EQ(L"ElephHiant", GetCPWLEdit()->GetText());
381 }
382
TEST_F(CPWLEditEmbedderTest,InsertTextInPopulatedCharLimitTextFieldRight)383 TEST_F(CPWLEditEmbedderTest, InsertTextInPopulatedCharLimitTextFieldRight) {
384 ScopedEmbedderTestPage page = CreateAndInitializeFormPDF();
385 ASSERT_TRUE(page);
386 FormFillerAndWindowSetup(GetCPDFSDKAnnotCharLimit());
387 // Move cursor to end of text field.
388 EXPECT_TRUE(GetCFFLFormFiller()->OnKeyDown(FWL_VKEY_End, {}));
389
390 GetCPWLEdit()->ReplaceSelection(L"Hippopotamus");
391 EXPECT_EQ(L"ElephantHi", GetCPWLEdit()->GetText());
392 }
393
TEST_F(CPWLEditEmbedderTest,InsertTextAndReplaceSelectionInPopulatedCharLimitTextFieldWhole)394 TEST_F(CPWLEditEmbedderTest,
395 InsertTextAndReplaceSelectionInPopulatedCharLimitTextFieldWhole) {
396 ScopedEmbedderTestPage page = CreateAndInitializeFormPDF();
397 ASSERT_TRUE(page);
398 FormFillerAndWindowSetup(GetCPDFSDKAnnotCharLimit());
399 GetCPWLEdit()->SetSelection(0, -1);
400 EXPECT_EQ(L"Elephant", GetCPWLEdit()->GetSelectedText());
401 GetCPWLEdit()->ReplaceSelection(L"Hippopotamus");
402 EXPECT_EQ(L"Hippopotam", GetCPWLEdit()->GetText());
403 }
404
TEST_F(CPWLEditEmbedderTest,InsertTextAndReplaceSelectionInPopulatedCharLimitTextFieldLeft)405 TEST_F(CPWLEditEmbedderTest,
406 InsertTextAndReplaceSelectionInPopulatedCharLimitTextFieldLeft) {
407 ScopedEmbedderTestPage page = CreateAndInitializeFormPDF();
408 ASSERT_TRUE(page);
409 FormFillerAndWindowSetup(GetCPDFSDKAnnotCharLimit());
410 GetCPWLEdit()->SetSelection(0, 4);
411 EXPECT_EQ(L"Elep", GetCPWLEdit()->GetSelectedText());
412 GetCPWLEdit()->ReplaceSelection(L"Hippopotamus");
413 EXPECT_EQ(L"Hippophant", GetCPWLEdit()->GetText());
414 }
415
TEST_F(CPWLEditEmbedderTest,InsertTextAndReplaceSelectionInPopulatedCharLimitTextFieldMiddle)416 TEST_F(CPWLEditEmbedderTest,
417 InsertTextAndReplaceSelectionInPopulatedCharLimitTextFieldMiddle) {
418 ScopedEmbedderTestPage page = CreateAndInitializeFormPDF();
419 ASSERT_TRUE(page);
420 FormFillerAndWindowSetup(GetCPDFSDKAnnotCharLimit());
421 GetCPWLEdit()->SetSelection(2, 6);
422 EXPECT_EQ(L"epha", GetCPWLEdit()->GetSelectedText());
423 GetCPWLEdit()->ReplaceSelection(L"Hippopotamus");
424 EXPECT_EQ(L"ElHippopnt", GetCPWLEdit()->GetText());
425 }
426
TEST_F(CPWLEditEmbedderTest,InsertTextAndReplaceSelectionInPopulatedCharLimitTextFieldRight)427 TEST_F(CPWLEditEmbedderTest,
428 InsertTextAndReplaceSelectionInPopulatedCharLimitTextFieldRight) {
429 ScopedEmbedderTestPage page = CreateAndInitializeFormPDF();
430 ASSERT_TRUE(page);
431 FormFillerAndWindowSetup(GetCPDFSDKAnnotCharLimit());
432 GetCPWLEdit()->SetSelection(4, 8);
433 EXPECT_EQ(L"hant", GetCPWLEdit()->GetSelectedText());
434 GetCPWLEdit()->ReplaceSelection(L"Hippopotamus");
435 EXPECT_EQ(L"ElepHippop", GetCPWLEdit()->GetText());
436 }
437
TEST_F(CPWLEditEmbedderTest,SetTextWithEndCarriageFeed)438 TEST_F(CPWLEditEmbedderTest, SetTextWithEndCarriageFeed) {
439 ScopedEmbedderTestPage page = CreateAndInitializeFormPDF();
440 ASSERT_TRUE(page);
441 FormFillerAndWindowSetup(GetCPDFSDKAnnot());
442 GetCPWLEdit()->SetText(L"Foo\r");
443 EXPECT_EQ(L"Foo", GetCPWLEdit()->GetText());
444 }
445
TEST_F(CPWLEditEmbedderTest,SetTextWithEndNewline)446 TEST_F(CPWLEditEmbedderTest, SetTextWithEndNewline) {
447 ScopedEmbedderTestPage page = CreateAndInitializeFormPDF();
448 ASSERT_TRUE(page);
449 FormFillerAndWindowSetup(GetCPDFSDKAnnot());
450 GetCPWLEdit()->SetText(L"Foo\n");
451 EXPECT_EQ(L"Foo", GetCPWLEdit()->GetText());
452 }
453
TEST_F(CPWLEditEmbedderTest,SetTextWithEndCarriageFeedAndNewLine)454 TEST_F(CPWLEditEmbedderTest, SetTextWithEndCarriageFeedAndNewLine) {
455 ScopedEmbedderTestPage page = CreateAndInitializeFormPDF();
456 ASSERT_TRUE(page);
457 FormFillerAndWindowSetup(GetCPDFSDKAnnot());
458 GetCPWLEdit()->SetText(L"Foo\r\n");
459 EXPECT_EQ(L"Foo", GetCPWLEdit()->GetText());
460 }
461
TEST_F(CPWLEditEmbedderTest,SetTextWithEndNewLineAndCarriageFeed)462 TEST_F(CPWLEditEmbedderTest, SetTextWithEndNewLineAndCarriageFeed) {
463 ScopedEmbedderTestPage page = CreateAndInitializeFormPDF();
464 ASSERT_TRUE(page);
465 FormFillerAndWindowSetup(GetCPDFSDKAnnot());
466 GetCPWLEdit()->SetText(L"Foo\n\r");
467 EXPECT_EQ(L"Foo", GetCPWLEdit()->GetText());
468 }
469
TEST_F(CPWLEditEmbedderTest,SetTextWithBodyCarriageFeed)470 TEST_F(CPWLEditEmbedderTest, SetTextWithBodyCarriageFeed) {
471 ScopedEmbedderTestPage page = CreateAndInitializeFormPDF();
472 ASSERT_TRUE(page);
473 FormFillerAndWindowSetup(GetCPDFSDKAnnot());
474 GetCPWLEdit()->SetText(L"Foo\rBar");
475 EXPECT_EQ(L"FooBar", GetCPWLEdit()->GetText());
476 }
477
TEST_F(CPWLEditEmbedderTest,SetTextWithBodyNewline)478 TEST_F(CPWLEditEmbedderTest, SetTextWithBodyNewline) {
479 ScopedEmbedderTestPage page = CreateAndInitializeFormPDF();
480 ASSERT_TRUE(page);
481 FormFillerAndWindowSetup(GetCPDFSDKAnnot());
482 GetCPWLEdit()->SetText(L"Foo\nBar");
483 EXPECT_EQ(L"FooBar", GetCPWLEdit()->GetText());
484 }
485
TEST_F(CPWLEditEmbedderTest,SetTextWithBodyCarriageFeedAndNewLine)486 TEST_F(CPWLEditEmbedderTest, SetTextWithBodyCarriageFeedAndNewLine) {
487 ScopedEmbedderTestPage page = CreateAndInitializeFormPDF();
488 ASSERT_TRUE(page);
489 FormFillerAndWindowSetup(GetCPDFSDKAnnot());
490 GetCPWLEdit()->SetText(L"Foo\r\nBar");
491 EXPECT_EQ(L"FooBar", GetCPWLEdit()->GetText());
492 }
493
TEST_F(CPWLEditEmbedderTest,SetTextWithBodyNewLineAndCarriageFeed)494 TEST_F(CPWLEditEmbedderTest, SetTextWithBodyNewLineAndCarriageFeed) {
495 ScopedEmbedderTestPage page = CreateAndInitializeFormPDF();
496 ASSERT_TRUE(page);
497 FormFillerAndWindowSetup(GetCPDFSDKAnnot());
498 GetCPWLEdit()->SetText(L"Foo\n\rBar");
499 EXPECT_EQ(L"FooBar", GetCPWLEdit()->GetText());
500 }
501
TEST_F(CPWLEditEmbedderTest,ReplaceAndKeepSelection)502 TEST_F(CPWLEditEmbedderTest, ReplaceAndKeepSelection) {
503 ScopedEmbedderTestPage page = CreateAndInitializeFormPDF();
504 ASSERT_TRUE(page);
505 FormFillerAndWindowSetup(GetCPDFSDKAnnot());
506 TypeTextIntoTextField(10);
507
508 GetCPWLEdit()->SetSelection(1, 3);
509 EXPECT_EQ(L"ABCDEFGHIJ", GetCPWLEdit()->GetText());
510 GetCPWLEdit()->ReplaceAndKeepSelection(L"xyz");
511 EXPECT_EQ(L"AxyzDEFGHIJ", GetCPWLEdit()->GetText());
512 EXPECT_EQ(L"xyz", GetCPWLEdit()->GetSelectedText());
513 EXPECT_EQ(GetCPWLEdit()->GetSelection(), std::make_pair(1, 4));
514
515 GetCPWLEdit()->SetSelection(4, 1);
516 GetCPWLEdit()->ReplaceAndKeepSelection(L"12");
517 EXPECT_EQ(L"A12DEFGHIJ", GetCPWLEdit()->GetText());
518 EXPECT_EQ(L"12", GetCPWLEdit()->GetSelectedText());
519 EXPECT_EQ(GetCPWLEdit()->GetSelection(), std::make_pair(1, 3));
520 }
521