• 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_combo_box_embeddertest.h"
6 
7 #include "fpdfsdk/cpdfsdk_formfillenvironment.h"
8 #include "fpdfsdk/cpdfsdk_helpers.h"
9 #include "fpdfsdk/cpdfsdk_widget.h"
10 #include "fpdfsdk/formfiller/cffl_formfield.h"
11 #include "fpdfsdk/formfiller/cffl_interactiveformfiller.h"
12 #include "fpdfsdk/pwl/cpwl_combo_box.h"
13 #include "fpdfsdk/pwl/cpwl_wnd.h"
14 #include "public/fpdf_fwlevent.h"
15 #include "testing/embedder_test.h"
16 #include "testing/gtest/include/gtest/gtest.h"
17 
18 class CPWLComboBoxEditEmbedderTest : public CPWLComboBoxEmbedderTest {};
19 
TEST_F(CPWLComboBoxEditEmbedderTest,GetSelectedTextEmptyAndBasicNormal)20 TEST_F(CPWLComboBoxEditEmbedderTest, GetSelectedTextEmptyAndBasicNormal) {
21   ScopedEmbedderTestPage page = CreateAndInitializeFormComboboxPDF();
22   ASSERT_TRUE(page);
23 
24   FormFillerAndWindowSetup(GetCPDFSDKAnnotNormal());
25 
26   // Automatically pre-filled with "Banana".
27   EXPECT_FALSE(GetCPWLComboBox()->GetText().IsEmpty());
28   EXPECT_EQ(L"Banana", GetCPWLComboBox()->GetText());
29 
30   // Check that selection is initially empty, then select entire word.
31   EXPECT_TRUE(GetCPWLComboBox()->GetSelectedText().IsEmpty());
32   GetCPWLComboBox()->SetSelectText();
33   EXPECT_EQ(L"Banana", GetCPWLComboBox()->GetSelectedText());
34 
35   // Select other options.
36   GetCPWLComboBox()->SetSelect(0);
37   EXPECT_EQ(L"Apple", GetCPWLComboBox()->GetSelectedText());
38   GetCPWLComboBox()->SetSelect(2);
39   EXPECT_EQ(L"Cherry", GetCPWLComboBox()->GetSelectedText());
40 
41   // Verify that combobox text cannot be edited.
42   EXPECT_FALSE(GetCFFLFormField()->OnChar(GetCPDFSDKAnnotNormal(), 'a', {}));
43 }
44 
TEST_F(CPWLComboBoxEditEmbedderTest,GetSelectedTextFragmentsNormal)45 TEST_F(CPWLComboBoxEditEmbedderTest, GetSelectedTextFragmentsNormal) {
46   ScopedEmbedderTestPage page = CreateAndInitializeFormComboboxPDF();
47   ASSERT_TRUE(page);
48 
49   FormFillerAndWindowSetup(GetCPDFSDKAnnotNormal());
50   EXPECT_EQ(L"Banana", GetCPWLComboBox()->GetText());
51 
52   GetCPWLComboBox()->SetEditSelection(0, 0);
53   EXPECT_TRUE(GetCPWLComboBox()->GetSelectedText().IsEmpty());
54 
55   GetCPWLComboBox()->SetEditSelection(0, 1);
56   EXPECT_EQ(L"B", GetCPWLComboBox()->GetSelectedText());
57 
58   GetCPWLComboBox()->SetEditSelection(0, -1);
59   EXPECT_EQ(L"Banana", GetCPWLComboBox()->GetSelectedText());
60 
61   GetCPWLComboBox()->SetEditSelection(-8, -1);
62   EXPECT_TRUE(GetCPWLComboBox()->GetSelectedText().IsEmpty());
63 
64   GetCPWLComboBox()->SetEditSelection(4, 1);
65   EXPECT_EQ(L"ana", GetCPWLComboBox()->GetSelectedText());
66 
67   GetCPWLComboBox()->SetEditSelection(1, 4);
68   EXPECT_EQ(L"ana", GetCPWLComboBox()->GetSelectedText());
69 
70   GetCPWLComboBox()->SetEditSelection(5, 6);
71   EXPECT_EQ(L"a", GetCPWLComboBox()->GetSelectedText());
72 }
73 
TEST_F(CPWLComboBoxEditEmbedderTest,GetSelectedTextEmptyAndBasicEditable)74 TEST_F(CPWLComboBoxEditEmbedderTest, GetSelectedTextEmptyAndBasicEditable) {
75   ScopedEmbedderTestPage page = CreateAndInitializeFormComboboxPDF();
76   ASSERT_TRUE(page);
77 
78   FormFillerAndWindowSetup(GetCPDFSDKAnnotUserEditable());
79   EXPECT_TRUE(GetCPWLComboBox()->GetText().IsEmpty());
80 
81   // Check selection is initially empty, then select a provided option.
82   EXPECT_TRUE(GetCPWLComboBox()->GetSelectedText().IsEmpty());
83   GetCPWLComboBox()->SetSelect(0);
84   GetCPWLComboBox()->SetSelectText();
85   EXPECT_EQ(L"Foo", GetCPWLComboBox()->GetSelectedText());
86 
87   // Select another option and then select last char of that option.
88   GetCPWLComboBox()->SetSelect(1);
89   EXPECT_EQ(L"Bar", GetCPWLComboBox()->GetSelectedText());
90   GetCPWLComboBox()->SetEditSelection(2, 3);
91   EXPECT_EQ(L"r", GetCPWLComboBox()->GetSelectedText());
92 
93   // Type into editable combobox text field and select new text.
94   EXPECT_TRUE(
95       GetCFFLFormField()->OnChar(GetCPDFSDKAnnotUserEditable(), 'a', {}));
96   EXPECT_TRUE(
97       GetCFFLFormField()->OnChar(GetCPDFSDKAnnotUserEditable(), 'b', {}));
98   EXPECT_TRUE(
99       GetCFFLFormField()->OnChar(GetCPDFSDKAnnotUserEditable(), 'c', {}));
100 
101   EXPECT_TRUE(GetCPWLComboBox()->GetSelectedText().IsEmpty());
102   GetCPWLComboBox()->SetEditSelection(0, 5);
103   EXPECT_EQ(L"Baabc", GetCPWLComboBox()->GetSelectedText());
104 }
105 
TEST_F(CPWLComboBoxEditEmbedderTest,GetSelectedTextFragmentsEditable)106 TEST_F(CPWLComboBoxEditEmbedderTest, GetSelectedTextFragmentsEditable) {
107   ScopedEmbedderTestPage page = CreateAndInitializeFormComboboxPDF();
108   ASSERT_TRUE(page);
109 
110   FormFillerAndWindowSetup(GetCPDFSDKAnnotUserEditable());
111   TypeTextIntoTextField(50);
112 
113   GetCPWLComboBox()->SetEditSelection(0, 0);
114   EXPECT_TRUE(GetCPWLComboBox()->GetSelectedText().IsEmpty());
115 
116   GetCPWLComboBox()->SetEditSelection(0, 1);
117   EXPECT_EQ(L"A", GetCPWLComboBox()->GetSelectedText());
118 
119   GetCPWLComboBox()->SetEditSelection(0, -1);
120   EXPECT_EQ(L"ABCDEFGHIJKLMNOPQRSTUVWXYZ[\\]^_`abcdefghijklmnopqr",
121             GetCPWLComboBox()->GetSelectedText());
122 
123   GetCPWLComboBox()->SetEditSelection(-8, -1);
124   EXPECT_TRUE(GetCPWLComboBox()->GetSelectedText().IsEmpty());
125 
126   GetCPWLComboBox()->SetEditSelection(23, 12);
127   EXPECT_EQ(L"MNOPQRSTUVW", GetCPWLComboBox()->GetSelectedText());
128 
129   GetCPWLComboBox()->SetEditSelection(12, 23);
130   EXPECT_EQ(L"MNOPQRSTUVW", GetCPWLComboBox()->GetSelectedText());
131 
132   GetCPWLComboBox()->SetEditSelection(49, 50);
133   EXPECT_EQ(L"r", GetCPWLComboBox()->GetSelectedText());
134 
135   GetCPWLComboBox()->SetEditSelection(49, 55);
136   EXPECT_EQ(L"r", GetCPWLComboBox()->GetSelectedText());
137 }
138 
TEST_F(CPWLComboBoxEditEmbedderTest,DeleteEntireTextSelection)139 TEST_F(CPWLComboBoxEditEmbedderTest, DeleteEntireTextSelection) {
140   ScopedEmbedderTestPage page = CreateAndInitializeFormComboboxPDF();
141   ASSERT_TRUE(page);
142 
143   FormFillerAndWindowSetup(GetCPDFSDKAnnotUserEditable());
144   TypeTextIntoTextField(50);
145 
146   GetCPWLComboBox()->SetEditSelection(0, -1);
147   EXPECT_EQ(L"ABCDEFGHIJKLMNOPQRSTUVWXYZ[\\]^_`abcdefghijklmnopqr",
148             GetCPWLComboBox()->GetSelectedText());
149 
150   GetCPWLComboBox()->ReplaceSelection(L"");
151   EXPECT_TRUE(GetCPWLComboBox()->GetText().IsEmpty());
152 }
153 
TEST_F(CPWLComboBoxEditEmbedderTest,DeleteTextSelectionMiddle)154 TEST_F(CPWLComboBoxEditEmbedderTest, DeleteTextSelectionMiddle) {
155   ScopedEmbedderTestPage page = CreateAndInitializeFormComboboxPDF();
156   ASSERT_TRUE(page);
157 
158   FormFillerAndWindowSetup(GetCPDFSDKAnnotUserEditable());
159   TypeTextIntoTextField(50);
160 
161   GetCPWLComboBox()->SetEditSelection(12, 23);
162   EXPECT_EQ(L"MNOPQRSTUVW", GetCPWLComboBox()->GetSelectedText());
163 
164   GetCPWLComboBox()->ReplaceSelection(L"");
165   EXPECT_EQ(L"ABCDEFGHIJKLXYZ[\\]^_`abcdefghijklmnopqr",
166             GetCPWLComboBox()->GetText());
167 }
168 
TEST_F(CPWLComboBoxEditEmbedderTest,DeleteTextSelectionLeft)169 TEST_F(CPWLComboBoxEditEmbedderTest, DeleteTextSelectionLeft) {
170   ScopedEmbedderTestPage page = CreateAndInitializeFormComboboxPDF();
171   ASSERT_TRUE(page);
172 
173   FormFillerAndWindowSetup(GetCPDFSDKAnnotUserEditable());
174   TypeTextIntoTextField(50);
175 
176   GetCPWLComboBox()->SetEditSelection(0, 5);
177   EXPECT_EQ(L"ABCDE", GetCPWLComboBox()->GetSelectedText());
178 
179   GetCPWLComboBox()->ReplaceSelection(L"");
180   EXPECT_EQ(L"FGHIJKLMNOPQRSTUVWXYZ[\\]^_`abcdefghijklmnopqr",
181             GetCPWLComboBox()->GetText());
182 }
183 
TEST_F(CPWLComboBoxEditEmbedderTest,DeleteTextSelectionRight)184 TEST_F(CPWLComboBoxEditEmbedderTest, DeleteTextSelectionRight) {
185   ScopedEmbedderTestPage page = CreateAndInitializeFormComboboxPDF();
186   ASSERT_TRUE(page);
187 
188   FormFillerAndWindowSetup(GetCPDFSDKAnnotUserEditable());
189   TypeTextIntoTextField(50);
190 
191   GetCPWLComboBox()->SetEditSelection(45, 50);
192   EXPECT_EQ(L"nopqr", GetCPWLComboBox()->GetSelectedText());
193 
194   GetCPWLComboBox()->ReplaceSelection(L"");
195   EXPECT_EQ(L"ABCDEFGHIJKLMNOPQRSTUVWXYZ[\\]^_`abcdefghijklm",
196             GetCPWLComboBox()->GetText());
197 }
198 
TEST_F(CPWLComboBoxEditEmbedderTest,DeleteEmptyTextSelection)199 TEST_F(CPWLComboBoxEditEmbedderTest, DeleteEmptyTextSelection) {
200   ScopedEmbedderTestPage page = CreateAndInitializeFormComboboxPDF();
201   ASSERT_TRUE(page);
202 
203   FormFillerAndWindowSetup(GetCPDFSDKAnnotUserEditable());
204   TypeTextIntoTextField(50);
205 
206   GetCPWLComboBox()->ReplaceSelection(L"");
207   EXPECT_EQ(L"ABCDEFGHIJKLMNOPQRSTUVWXYZ[\\]^_`abcdefghijklmnopqr",
208             GetCPWLComboBox()->GetText());
209 }
210 
TEST_F(CPWLComboBoxEditEmbedderTest,InsertTextInEmptyEditableComboBox)211 TEST_F(CPWLComboBoxEditEmbedderTest, InsertTextInEmptyEditableComboBox) {
212   ScopedEmbedderTestPage page = CreateAndInitializeFormComboboxPDF();
213   ASSERT_TRUE(page);
214 
215   FormFillerAndWindowSetup(GetCPDFSDKAnnotUserEditable());
216   GetCPWLComboBox()->ReplaceSelection(L"Hello");
217   EXPECT_EQ(L"Hello", GetCPWLComboBox()->GetText());
218 }
219 
TEST_F(CPWLComboBoxEditEmbedderTest,InsertTextInPopulatedEditableComboBoxLeft)220 TEST_F(CPWLComboBoxEditEmbedderTest,
221        InsertTextInPopulatedEditableComboBoxLeft) {
222   ScopedEmbedderTestPage page = CreateAndInitializeFormComboboxPDF();
223   ASSERT_TRUE(page);
224 
225   FormFillerAndWindowSetup(GetCPDFSDKAnnotUserEditable());
226   TypeTextIntoTextField(10);
227 
228   // Move cursor to beginning of user-editable combobox text field.
229   EXPECT_TRUE(GetCFFLFormField()->OnKeyDown(FWL_VKEY_Home, {}));
230 
231   GetCPWLComboBox()->ReplaceSelection(L"Hello");
232   EXPECT_EQ(L"HelloABCDEFGHIJ", GetCPWLComboBox()->GetText());
233 }
234 
TEST_F(CPWLComboBoxEditEmbedderTest,InsertTextInPopulatedEditableComboBoxMiddle)235 TEST_F(CPWLComboBoxEditEmbedderTest,
236        InsertTextInPopulatedEditableComboBoxMiddle) {
237   ScopedEmbedderTestPage page = CreateAndInitializeFormComboboxPDF();
238   ASSERT_TRUE(page);
239 
240   FormFillerAndWindowSetup(GetCPDFSDKAnnotUserEditable());
241   TypeTextIntoTextField(10);
242 
243   // Move cursor to middle of user-editable combobox text field.
244   for (int i = 0; i < 5; ++i) {
245     EXPECT_TRUE(GetCFFLFormField()->OnKeyDown(FWL_VKEY_Left, {}));
246   }
247 
248   GetCPWLComboBox()->ReplaceSelection(L"Hello");
249   EXPECT_EQ(L"ABCDEHelloFGHIJ", GetCPWLComboBox()->GetText());
250 }
251 
TEST_F(CPWLComboBoxEditEmbedderTest,InsertTextInPopulatedEditableComboBoxRight)252 TEST_F(CPWLComboBoxEditEmbedderTest,
253        InsertTextInPopulatedEditableComboBoxRight) {
254   ScopedEmbedderTestPage page = CreateAndInitializeFormComboboxPDF();
255   ASSERT_TRUE(page);
256 
257   FormFillerAndWindowSetup(GetCPDFSDKAnnotUserEditable());
258   TypeTextIntoTextField(10);
259 
260   GetCPWLComboBox()->ReplaceSelection(L"Hello");
261   EXPECT_EQ(L"ABCDEFGHIJHello", GetCPWLComboBox()->GetText());
262 }
263 
TEST_F(CPWLComboBoxEditEmbedderTest,InsertTextAndReplaceSelectionInPopulatedEditableComboBoxWhole)264 TEST_F(CPWLComboBoxEditEmbedderTest,
265        InsertTextAndReplaceSelectionInPopulatedEditableComboBoxWhole) {
266   ScopedEmbedderTestPage page = CreateAndInitializeFormComboboxPDF();
267   ASSERT_TRUE(page);
268 
269   FormFillerAndWindowSetup(GetCPDFSDKAnnotUserEditable());
270   TypeTextIntoTextField(10);
271 
272   GetCPWLComboBox()->SetEditSelection(0, -1);
273   EXPECT_EQ(L"ABCDEFGHIJ", GetCPWLComboBox()->GetSelectedText());
274   GetCPWLComboBox()->ReplaceSelection(L"Hello");
275   EXPECT_EQ(L"Hello", GetCPWLComboBox()->GetText());
276 }
277 
TEST_F(CPWLComboBoxEditEmbedderTest,InsertTextAndReplaceSelectionInPopulatedEditableComboBoxLeft)278 TEST_F(CPWLComboBoxEditEmbedderTest,
279        InsertTextAndReplaceSelectionInPopulatedEditableComboBoxLeft) {
280   ScopedEmbedderTestPage page = CreateAndInitializeFormComboboxPDF();
281   ASSERT_TRUE(page);
282 
283   FormFillerAndWindowSetup(GetCPDFSDKAnnotUserEditable());
284   TypeTextIntoTextField(10);
285 
286   GetCPWLComboBox()->SetEditSelection(0, 5);
287   EXPECT_EQ(L"ABCDE", GetCPWLComboBox()->GetSelectedText());
288   GetCPWLComboBox()->ReplaceSelection(L"Hello");
289   EXPECT_EQ(L"HelloFGHIJ", GetCPWLComboBox()->GetText());
290 }
291 
TEST_F(CPWLComboBoxEditEmbedderTest,InsertTextAndReplaceSelectionInPopulatedEditableComboBoxMiddle)292 TEST_F(CPWLComboBoxEditEmbedderTest,
293        InsertTextAndReplaceSelectionInPopulatedEditableComboBoxMiddle) {
294   ScopedEmbedderTestPage page = CreateAndInitializeFormComboboxPDF();
295   ASSERT_TRUE(page);
296 
297   FormFillerAndWindowSetup(GetCPDFSDKAnnotUserEditable());
298   TypeTextIntoTextField(10);
299 
300   GetCPWLComboBox()->SetEditSelection(2, 7);
301   EXPECT_EQ(L"CDEFG", GetCPWLComboBox()->GetSelectedText());
302   GetCPWLComboBox()->ReplaceSelection(L"Hello");
303   EXPECT_EQ(L"ABHelloHIJ", GetCPWLComboBox()->GetText());
304 }
305 
TEST_F(CPWLComboBoxEditEmbedderTest,InsertTextAndReplaceSelectionInPopulatedEditableComboBoxRight)306 TEST_F(CPWLComboBoxEditEmbedderTest,
307        InsertTextAndReplaceSelectionInPopulatedEditableComboBoxRight) {
308   ScopedEmbedderTestPage page = CreateAndInitializeFormComboboxPDF();
309   ASSERT_TRUE(page);
310 
311   FormFillerAndWindowSetup(GetCPDFSDKAnnotUserEditable());
312   TypeTextIntoTextField(10);
313 
314   GetCPWLComboBox()->SetEditSelection(5, 10);
315   EXPECT_EQ(L"FGHIJ", GetCPWLComboBox()->GetSelectedText());
316   GetCPWLComboBox()->ReplaceSelection(L"Hello");
317   EXPECT_EQ(L"ABCDEHello", GetCPWLComboBox()->GetText());
318 }
319 
TEST_F(CPWLComboBoxEditEmbedderTest,ReplaceAndKeepSelection)320 TEST_F(CPWLComboBoxEditEmbedderTest, ReplaceAndKeepSelection) {
321   ScopedEmbedderTestPage page = CreateAndInitializeFormComboboxPDF();
322   ASSERT_TRUE(page);
323 
324   FormFillerAndWindowSetup(GetCPDFSDKAnnotUserEditable());
325   TypeTextIntoTextField(10);
326 
327   GetCPWLComboBox()->SetEditSelection(1, 3);
328   EXPECT_EQ(L"ABCDEFGHIJ", GetCPWLComboBox()->GetText());
329   GetCPWLComboBox()->ReplaceAndKeepSelection(L"xyz");
330   EXPECT_EQ(L"AxyzDEFGHIJ", GetCPWLComboBox()->GetText());
331   EXPECT_EQ(L"xyz", GetCPWLComboBox()->GetSelectedText());
332 
333   GetCPWLComboBox()->SetEditSelection(4, 1);
334   GetCPWLComboBox()->ReplaceAndKeepSelection(L"12");
335   EXPECT_EQ(L"A12DEFGHIJ", GetCPWLComboBox()->GetText());
336   EXPECT_EQ(L"12", GetCPWLComboBox()->GetSelectedText());
337 }
338