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