Upstream version 9.38.198.0
[platform/framework/web/crosswalk.git] / src / content / public / android / javatests / src / org / chromium / content / browser / input / InputDialogContainerTest.java
1 // Copyright 2013 The Chromium 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 package org.chromium.content.browser.input;
6
7 import android.content.Context;
8 import android.test.AndroidTestCase;
9 import android.test.suitebuilder.annotation.SmallTest;
10
11 import org.chromium.base.test.util.Feature;
12
13 public class InputDialogContainerTest extends AndroidTestCase {
14     private static final int TEXT_INPUT_TYPE_DATE = 0;
15     private static final int TEXT_INPUT_TYPE_DATETIME = 1;
16     private static final int TEXT_INPUT_TYPE_DATETIMELOCAL = 2;
17     private static final int TEXT_INPUT_TYPE_MONTH = 3;
18     private static final int TEXT_INPUT_TYPE_TIME = 4;
19     private static final int TEXT_INPUT_TYPE_WEEK = 5;
20
21     // Defined in third_party/WebKit/Source/platform/DateComponents.h
22     private static final double DATE_DIALOG_DEFAULT_MIN = -62135596800000.0;
23     private static final double DATE_DIALOG_DEFAULT_MAX = 8640000000000000.0;
24     private static final double DATETIMELOCAL_DIALOG_DEFAULT_MIN = -62135596800000.0;
25     private static final double DATETIMELOCAL_DIALOG_DEFAULT_MAX = 8640000000000000.0;
26     private static final double MONTH_DIALOG_DEFAULT_MIN = -23628.0;
27     private static final double MONTH_DIALOG_DEFAULT_MAX = 3285488.0;
28     private static final double TIME_DIALOG_DEFAULT_MIN = 0.0;
29     private static final double TIME_DIALOG_DEFAULT_MAX = 86399999.0;
30     private static final double WEEK_DIALOG_DEFAULT_MIN = -62135596800000.0;
31     private static final double WEEK_DIALOG_DEFAULT_MAX = 8639999568000000.0;
32
33     InputActionDelegateForTests mInputActionDelegate;
34     InputDialogContainerForTests mInputDialogContainer;
35
36     @Override
37     public void setUp() throws Exception {
38         super.setUp();
39         InputDialogContainer.initializeInputTypes(TEXT_INPUT_TYPE_DATE,
40                                                   TEXT_INPUT_TYPE_DATETIME,
41                                                   TEXT_INPUT_TYPE_DATETIMELOCAL,
42                                                   TEXT_INPUT_TYPE_MONTH,
43                                                   TEXT_INPUT_TYPE_TIME,
44                                                   TEXT_INPUT_TYPE_WEEK);
45         mInputActionDelegate = new InputActionDelegateForTests();
46         mInputDialogContainer = new InputDialogContainerForTests(getContext(),
47                                                                  mInputActionDelegate);
48     }
49
50     @SmallTest
51     @Feature({"DateTimeDialog"})
52     public void testDateValueParsing() {
53         mInputDialogContainer.setShowDialogExpectation(TEXT_INPUT_TYPE_DATE,
54                 1970, 0, 1,
55                 0, 0, 0, 0, 0,
56                 DATE_DIALOG_DEFAULT_MIN, DATE_DIALOG_DEFAULT_MAX, 1.0);
57         mInputDialogContainer.showPickerDialog(TEXT_INPUT_TYPE_DATE, 0.0,
58                 DATE_DIALOG_DEFAULT_MIN, DATE_DIALOG_DEFAULT_MAX, 1.0);
59
60         mInputDialogContainer.setShowDialogExpectation(TEXT_INPUT_TYPE_DATE,
61                 1, 0, 1,
62                 0, 0, 0, 0, 0,
63                 DATE_DIALOG_DEFAULT_MIN, DATE_DIALOG_DEFAULT_MAX, 1.0);
64         mInputDialogContainer.showPickerDialog(TEXT_INPUT_TYPE_DATE, -62135596800000.0,
65                 DATE_DIALOG_DEFAULT_MIN, DATE_DIALOG_DEFAULT_MAX, 1.0);
66
67         mInputDialogContainer.setShowDialogExpectation(TEXT_INPUT_TYPE_DATE,
68                 275760, 8, 13,
69                 0, 0, 0, 0, 0,
70                 DATE_DIALOG_DEFAULT_MIN, DATE_DIALOG_DEFAULT_MAX, 1.0);
71         mInputDialogContainer.showPickerDialog(TEXT_INPUT_TYPE_DATE, 8640000000000000.0,
72                 DATE_DIALOG_DEFAULT_MIN, DATE_DIALOG_DEFAULT_MAX, 1.0);
73
74         mInputDialogContainer.setShowDialogExpectation(TEXT_INPUT_TYPE_DATE,
75                 2013, 10, 7,
76                 0, 0, 0, 0, 0,
77                 DATE_DIALOG_DEFAULT_MIN, DATE_DIALOG_DEFAULT_MAX, 1.0);
78         mInputDialogContainer.showPickerDialog(TEXT_INPUT_TYPE_DATE, 1383782400000.0,
79                 DATE_DIALOG_DEFAULT_MIN, DATE_DIALOG_DEFAULT_MAX, 1.0);
80     }
81
82     @SmallTest
83     @Feature({"DateTimeDialog"})
84     public void testDatetimelocalValueParsing() {
85         mInputDialogContainer.setShowDialogExpectation(TEXT_INPUT_TYPE_DATETIMELOCAL,
86                 1970, 0, 1,
87                 0, 0, 0, 0, 0,
88                 DATETIMELOCAL_DIALOG_DEFAULT_MIN, DATETIMELOCAL_DIALOG_DEFAULT_MAX, 1.0);
89         mInputDialogContainer.showPickerDialog(TEXT_INPUT_TYPE_DATETIMELOCAL, 0,
90                 DATETIMELOCAL_DIALOG_DEFAULT_MIN, DATETIMELOCAL_DIALOG_DEFAULT_MAX, 1.0);
91
92         mInputDialogContainer.setShowDialogExpectation(TEXT_INPUT_TYPE_DATETIMELOCAL,
93                 1, 0, 1,
94                 0, 0, 0, 0, 0,
95                 DATETIMELOCAL_DIALOG_DEFAULT_MIN, DATETIMELOCAL_DIALOG_DEFAULT_MAX, 1.0);
96         mInputDialogContainer.showPickerDialog(TEXT_INPUT_TYPE_DATETIMELOCAL, -62135596800000.0,
97                 DATETIMELOCAL_DIALOG_DEFAULT_MIN, DATETIMELOCAL_DIALOG_DEFAULT_MAX, 1.0);
98
99         mInputDialogContainer.setShowDialogExpectation(TEXT_INPUT_TYPE_DATETIMELOCAL,
100                 275760, 8, 13,
101                 0, 0, 0, 0, 0,
102                 DATETIMELOCAL_DIALOG_DEFAULT_MIN, DATETIMELOCAL_DIALOG_DEFAULT_MAX, 1.0);
103         mInputDialogContainer.showPickerDialog(TEXT_INPUT_TYPE_DATETIMELOCAL, 8640000000000000.0,
104                 DATETIMELOCAL_DIALOG_DEFAULT_MIN, DATETIMELOCAL_DIALOG_DEFAULT_MAX, 1.0);
105
106         mInputDialogContainer.setShowDialogExpectation(TEXT_INPUT_TYPE_DATETIMELOCAL,
107                 2013, 10, 8,
108                 1, 1, 2, 196, 0,
109                 DATETIMELOCAL_DIALOG_DEFAULT_MIN, DATETIMELOCAL_DIALOG_DEFAULT_MAX, 0.001);
110         mInputDialogContainer.showPickerDialog(TEXT_INPUT_TYPE_DATETIMELOCAL, 1383872462196.0,
111                 DATETIMELOCAL_DIALOG_DEFAULT_MIN, DATETIMELOCAL_DIALOG_DEFAULT_MAX, 0.001);
112     }
113
114     @SmallTest
115     @Feature({"DateTimeDialog"})
116     public void testMonthValueParsing() {
117         mInputDialogContainer.setShowDialogExpectation(TEXT_INPUT_TYPE_MONTH,
118                 1970, 0, 0,
119                 0, 0, 0, 0, 0,
120                 MONTH_DIALOG_DEFAULT_MIN, MONTH_DIALOG_DEFAULT_MAX, 1.0);
121         mInputDialogContainer.showPickerDialog(TEXT_INPUT_TYPE_MONTH, 0.0,
122                 MONTH_DIALOG_DEFAULT_MIN, MONTH_DIALOG_DEFAULT_MAX, 1.0);
123
124         mInputDialogContainer.setShowDialogExpectation(TEXT_INPUT_TYPE_MONTH,
125                 1, 0, 0,
126                 0, 0, 0, 0, 0,
127                 MONTH_DIALOG_DEFAULT_MIN, MONTH_DIALOG_DEFAULT_MAX, 1.0);
128         mInputDialogContainer.showPickerDialog(TEXT_INPUT_TYPE_MONTH, -23628.0,
129                 MONTH_DIALOG_DEFAULT_MIN, MONTH_DIALOG_DEFAULT_MAX, 1.0);
130
131         mInputDialogContainer.setShowDialogExpectation(TEXT_INPUT_TYPE_MONTH,
132                 275760, 8, 0,
133                 0, 0, 0, 0, 0,
134                 MONTH_DIALOG_DEFAULT_MIN, MONTH_DIALOG_DEFAULT_MAX, 1.0);
135         mInputDialogContainer.showPickerDialog(TEXT_INPUT_TYPE_MONTH, 3285488.0,
136                 MONTH_DIALOG_DEFAULT_MIN, MONTH_DIALOG_DEFAULT_MAX, 1.0);
137
138         mInputDialogContainer.setShowDialogExpectation(TEXT_INPUT_TYPE_MONTH,
139                 2013, 10, 0,
140                 0, 0, 0, 0, 0,
141                 MONTH_DIALOG_DEFAULT_MIN, MONTH_DIALOG_DEFAULT_MAX, 1.0);
142         mInputDialogContainer.showPickerDialog(TEXT_INPUT_TYPE_MONTH, 526.0,
143                 MONTH_DIALOG_DEFAULT_MIN, MONTH_DIALOG_DEFAULT_MAX, 1.0);
144     }
145
146     @SmallTest
147     @Feature({"DateTimeDialog"})
148     public void testTimeValueParsing() {
149         mInputDialogContainer.setShowDialogExpectation(TEXT_INPUT_TYPE_TIME,
150                 0, 0, 0,
151                 0, 0, 0, 0, 0,
152                 TIME_DIALOG_DEFAULT_MIN, TIME_DIALOG_DEFAULT_MAX, 1.0);
153         mInputDialogContainer.showPickerDialog(TEXT_INPUT_TYPE_TIME, 0.0,
154                 TIME_DIALOG_DEFAULT_MIN, TIME_DIALOG_DEFAULT_MAX, 1.0);
155
156         // Time dialog only shows the hour and minute fields.
157         mInputDialogContainer.setShowDialogExpectation(TEXT_INPUT_TYPE_TIME,
158                 0, 0, 0,
159                 23, 59, 0, 0, 0,
160                 TIME_DIALOG_DEFAULT_MIN, TIME_DIALOG_DEFAULT_MAX, 1.0);
161         mInputDialogContainer.showPickerDialog(TEXT_INPUT_TYPE_TIME, 86399999.0,
162                 TIME_DIALOG_DEFAULT_MIN, TIME_DIALOG_DEFAULT_MAX, 1.0);
163
164         mInputDialogContainer.setShowDialogExpectation(TEXT_INPUT_TYPE_TIME,
165                 0, 0, 0,
166                 15, 23, 0, 0, 0,
167                 TIME_DIALOG_DEFAULT_MIN, TIME_DIALOG_DEFAULT_MAX, 1.0);
168         mInputDialogContainer.showPickerDialog(TEXT_INPUT_TYPE_TIME, 55425678.0,
169                 TIME_DIALOG_DEFAULT_MIN, TIME_DIALOG_DEFAULT_MAX, 1.0);
170     }
171
172     @SmallTest
173     @Feature({"DateTimeDialog"})
174     public void testWeekValueParsing() {
175         mInputDialogContainer.setShowDialogExpectation(TEXT_INPUT_TYPE_WEEK,
176                 1970, 0, 0,
177                 0, 0, 0, 0, 1,
178                 WEEK_DIALOG_DEFAULT_MIN, WEEK_DIALOG_DEFAULT_MAX, 1.0);
179         mInputDialogContainer.showPickerDialog(TEXT_INPUT_TYPE_WEEK, -259200000.0,
180                 WEEK_DIALOG_DEFAULT_MIN, WEEK_DIALOG_DEFAULT_MAX, 1.0);
181
182         mInputDialogContainer.setShowDialogExpectation(TEXT_INPUT_TYPE_WEEK,
183                 1, 0, 0,
184                 0, 0, 0, 0, 1,
185                 WEEK_DIALOG_DEFAULT_MIN, WEEK_DIALOG_DEFAULT_MAX, 1.0);
186         mInputDialogContainer.showPickerDialog(TEXT_INPUT_TYPE_WEEK, -62135596800000.0,
187                 WEEK_DIALOG_DEFAULT_MIN, WEEK_DIALOG_DEFAULT_MAX, 1.0);
188
189         mInputDialogContainer.setShowDialogExpectation(TEXT_INPUT_TYPE_WEEK,
190                 275760, 0, 0,
191                 0, 0, 0, 0, 37,
192                 WEEK_DIALOG_DEFAULT_MIN, WEEK_DIALOG_DEFAULT_MAX, 1.0);
193         mInputDialogContainer.showPickerDialog(TEXT_INPUT_TYPE_WEEK, 8639999568000000.0,
194                 WEEK_DIALOG_DEFAULT_MIN, WEEK_DIALOG_DEFAULT_MAX, 1.0);
195
196         mInputDialogContainer.setShowDialogExpectation(TEXT_INPUT_TYPE_WEEK,
197                 2013, 0, 0,
198                 0, 0, 0, 0, 44,
199                 WEEK_DIALOG_DEFAULT_MIN, WEEK_DIALOG_DEFAULT_MAX, 1.0);
200         mInputDialogContainer.showPickerDialog(TEXT_INPUT_TYPE_WEEK, 1382918400000.0,
201                 WEEK_DIALOG_DEFAULT_MIN, WEEK_DIALOG_DEFAULT_MAX, 1.0);
202     }
203
204     @SmallTest
205     @Feature({"DateTimeDialog"})
206     public void testDateValueGenerating() {
207         mInputActionDelegate.setReplaceDateTimeExpectation(0);
208         mInputDialogContainer.setFieldDateTimeValue(TEXT_INPUT_TYPE_DATE,
209                 1970, 0, 1,
210                 0, 0, 0, 0, 0);
211
212         mInputActionDelegate.setReplaceDateTimeExpectation(-62135596800000.0);
213         mInputDialogContainer.setFieldDateTimeValue(TEXT_INPUT_TYPE_DATE,
214                 1, 0, 1,
215                 0, 0, 0, 0, 0);
216
217         mInputActionDelegate.setReplaceDateTimeExpectation(8640000000000000.0);
218         mInputDialogContainer.setFieldDateTimeValue(TEXT_INPUT_TYPE_DATE,
219                 275760, 8, 13,
220                 0, 0, 0, 0, 0);
221
222         mInputActionDelegate.setReplaceDateTimeExpectation(1383782400000.0);
223         mInputDialogContainer.setFieldDateTimeValue(TEXT_INPUT_TYPE_DATE,
224                 2013, 10, 7,
225                 0, 0, 0, 0, 0);
226     }
227
228     @SmallTest
229     @Feature({"DateTimeDialog"})
230     public void testDatetimelocalValueGenerating() {
231         mInputActionDelegate.setReplaceDateTimeExpectation(0);
232         mInputDialogContainer.setFieldDateTimeValue(TEXT_INPUT_TYPE_DATETIMELOCAL,
233                 1970, 0, 1,
234                 0, 0, 0, 0, 0);
235
236         mInputActionDelegate.setReplaceDateTimeExpectation(-62135596800000.0);
237         mInputDialogContainer.setFieldDateTimeValue(TEXT_INPUT_TYPE_DATETIMELOCAL,
238                 1, 0, 1,
239                 0, 0, 0, 0, 0);
240
241         mInputActionDelegate.setReplaceDateTimeExpectation(8640000000000000.0);
242         mInputDialogContainer.setFieldDateTimeValue(TEXT_INPUT_TYPE_DATETIMELOCAL,
243                 275760, 8, 13,
244                 0, 0, 0, 0, 0);
245
246         mInputActionDelegate.setReplaceDateTimeExpectation(1383872462196.0);
247         mInputDialogContainer.setFieldDateTimeValue(TEXT_INPUT_TYPE_DATETIMELOCAL,
248                 2013, 10, 8,
249                 1, 1, 2, 196, 0);
250     }
251
252     @SmallTest
253     @Feature({"DateTimeDialog"})
254     public void testMonthValueGenerating() {
255         mInputActionDelegate.setReplaceDateTimeExpectation(0);
256         mInputDialogContainer.setFieldDateTimeValue(TEXT_INPUT_TYPE_MONTH,
257                 1970, 0, 0,
258                 0, 0, 0, 0, 0);
259
260         mInputActionDelegate.setReplaceDateTimeExpectation(-62135596800000.0);
261         mInputDialogContainer.setFieldDateTimeValue(TEXT_INPUT_TYPE_MONTH,
262                 1, 0, 1,
263                 0, 0, 0, 0, 0);
264
265         mInputActionDelegate.setReplaceDateTimeExpectation(8640000000000000.0);
266         mInputDialogContainer.setFieldDateTimeValue(TEXT_INPUT_TYPE_MONTH,
267                 275760, 8, 0,
268                 0, 0, 0, 0, 0);
269
270         mInputActionDelegate.setReplaceDateTimeExpectation(1383872462196.0);
271         mInputDialogContainer.setFieldDateTimeValue(TEXT_INPUT_TYPE_MONTH,
272                 2013, 10, 0,
273                 0, 0, 0, 0, 0);
274     }
275
276     @SmallTest
277     @Feature({"DateTimeDialog"})
278     public void testTimeValueGenerating() {
279         mInputActionDelegate.setReplaceDateTimeExpectation(0.0);
280         mInputDialogContainer.setFieldDateTimeValue(TEXT_INPUT_TYPE_TIME,
281                 0, 0, 0,
282                 0, 0, 0, 0, 0);
283
284         mInputActionDelegate.setReplaceDateTimeExpectation(86399999.0);
285         mInputDialogContainer.setFieldDateTimeValue(TEXT_INPUT_TYPE_TIME,
286                 0, 0, 0,
287                 23, 59, 59, 999, 0);
288
289         mInputActionDelegate.setReplaceDateTimeExpectation(55425678.0);
290         mInputDialogContainer.setFieldDateTimeValue(TEXT_INPUT_TYPE_TIME,
291                 2013, 10, 0,
292                 3, 23, 45, 678, 0);
293     }
294
295     @SmallTest
296     @Feature({"DateTimeDialog"})
297     public void testWeekValueGenerating() {
298         mInputActionDelegate.setReplaceDateTimeExpectation(-259200000.0);
299         mInputDialogContainer.setFieldDateTimeValue(TEXT_INPUT_TYPE_WEEK,
300                 1970, 0, 0,
301                 0, 0, 0, 0, 1);
302
303         mInputActionDelegate.setReplaceDateTimeExpectation(-62135596800000.0);
304         mInputDialogContainer.setFieldDateTimeValue(TEXT_INPUT_TYPE_WEEK,
305                 1, 0, 0,
306                 0, 0, 0, 0, 1);
307
308         mInputActionDelegate.setReplaceDateTimeExpectation(8639999568000000.0);
309         mInputDialogContainer.setFieldDateTimeValue(TEXT_INPUT_TYPE_WEEK,
310                 275760, 0, 0,
311                 0, 0, 0, 0, 37);
312
313         mInputActionDelegate.setReplaceDateTimeExpectation(1382918400000.0);
314         mInputDialogContainer.setFieldDateTimeValue(TEXT_INPUT_TYPE_WEEK,
315                 2013, 0, 0,
316                 0, 0, 0, 0, 44);
317     }
318
319     private static class InputActionDelegateForTests
320             implements InputDialogContainer.InputActionDelegate {
321         private double mExpectedDialogValue;
322
323         public void setReplaceDateTimeExpectation(double dialogValue) {
324             mExpectedDialogValue = dialogValue;
325         }
326
327         @Override
328         public void replaceDateTime(double dialogValue) {
329             assertEquals(mExpectedDialogValue, dialogValue);
330         }
331
332         @Override
333         public void cancelDateTimeDialog() {
334         }
335     }
336
337     private static class InputDialogContainerForTests extends InputDialogContainer {
338         private int mExpectedDialogType;
339         private int mExpectedYear;
340         private int mExpectedMonth;
341         private int mExpectedMonthDay;
342         private int mExpectedHourOfDay;
343         private int mExpectedMinute;
344         private int mExpectedSecond;
345         private int mExpectedMillis;
346         private int mExpectedWeek;
347         private double mExpectedMin;
348         private double mExpectedMax;
349         private double mExpectedStep;
350
351         public InputDialogContainerForTests(
352                 Context context,
353                 InputDialogContainer.InputActionDelegate inputActionDelegate) {
354             super(context, inputActionDelegate);
355         }
356
357         void setShowDialogExpectation(int dialogType,
358                 int year, int month, int monthDay,
359                 int hourOfDay, int minute, int second, int millis, int week,
360                 double min, double max, double step) {
361             mExpectedDialogType = dialogType;
362             mExpectedYear = year;
363             mExpectedMonth = month;
364             mExpectedMonthDay = monthDay;
365             mExpectedHourOfDay = hourOfDay;
366             mExpectedMinute = minute;
367             mExpectedSecond = second;
368             mExpectedMillis = millis;
369             mExpectedWeek = week;
370             mExpectedMin = min;
371             mExpectedMax = max;
372             mExpectedStep = step;
373         }
374
375         @Override
376         void showPickerDialog(final int dialogType,
377                 int year, int month, int monthDay,
378                 int hourOfDay, int minute, int second, int millis, int week,
379                 double min, double max, double step) {
380             assertEquals(mExpectedDialogType, dialogType);
381             assertEquals(mExpectedYear, year);
382             assertEquals(mExpectedMonth, month);
383             assertEquals(mExpectedMonthDay, monthDay);
384             assertEquals(mExpectedHourOfDay, hourOfDay);
385             assertEquals(mExpectedMinute, minute);
386             assertEquals(mExpectedSecond, second);
387             assertEquals(mExpectedMillis, millis);
388             assertEquals(mExpectedWeek, week);
389             assertEquals(mExpectedMin, min);
390             assertEquals(mExpectedMax, max);
391             assertEquals(mExpectedStep, step);
392         }
393
394         @Override
395         public void setFieldDateTimeValue(int dialogType,
396                                        int year, int month, int monthDay,
397                                        int hourOfDay, int minute, int second, int millis,
398                                        int week) {
399             super.setFieldDateTimeValue(dialogType,
400                                         year, month, monthDay,
401                                         hourOfDay, minute, second, millis,
402                                         week);
403         }
404     }
405 }