InputDialogContainerTest.java revision 1320f92c476a1ad9d19dba2a48c72b75566198e9
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
5package org.chromium.content.browser.input;
6
7import android.content.Context;
8import android.test.AndroidTestCase;
9import android.test.suitebuilder.annotation.SmallTest;
10
11import org.chromium.base.test.util.Feature;
12import org.chromium.ui.picker.InputDialogContainer;
13
14public 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}
407