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