• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
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