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