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.
5 package org.chromium.content.browser.input;
7 import android.content.Context;
8 import android.test.AndroidTestCase;
9 import android.test.suitebuilder.annotation.SmallTest;
11 import org.chromium.base.test.util.Feature;
12 import org.chromium.ui.picker.InputDialogContainer;
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;
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;
34 InputActionDelegateForTests mInputActionDelegate;
35 InputDialogContainerForTests mInputDialogContainer;
38 public void setUp() throws Exception {
40 InputDialogContainer.initializeInputTypes(TEXT_INPUT_TYPE_DATE,
41 TEXT_INPUT_TYPE_DATETIME,
42 TEXT_INPUT_TYPE_DATETIMELOCAL,
43 TEXT_INPUT_TYPE_MONTH,
45 TEXT_INPUT_TYPE_WEEK);
46 mInputActionDelegate = new InputActionDelegateForTests();
47 mInputDialogContainer = new InputDialogContainerForTests(getContext(),
48 mInputActionDelegate);
52 @Feature({"DateTimeDialog"})
53 public void testDateValueParsing() {
54 mInputDialogContainer.setShowDialogExpectation(TEXT_INPUT_TYPE_DATE,
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);
61 mInputDialogContainer.setShowDialogExpectation(TEXT_INPUT_TYPE_DATE,
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);
68 mInputDialogContainer.setShowDialogExpectation(TEXT_INPUT_TYPE_DATE,
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);
75 mInputDialogContainer.setShowDialogExpectation(TEXT_INPUT_TYPE_DATE,
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);
84 @Feature({"DateTimeDialog"})
85 public void testDatetimelocalValueParsing() {
86 mInputDialogContainer.setShowDialogExpectation(TEXT_INPUT_TYPE_DATETIMELOCAL,
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);
93 mInputDialogContainer.setShowDialogExpectation(TEXT_INPUT_TYPE_DATETIMELOCAL,
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);
100 mInputDialogContainer.setShowDialogExpectation(TEXT_INPUT_TYPE_DATETIMELOCAL,
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);
107 mInputDialogContainer.setShowDialogExpectation(TEXT_INPUT_TYPE_DATETIMELOCAL,
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);
116 @Feature({"DateTimeDialog"})
117 public void testMonthValueParsing() {
118 mInputDialogContainer.setShowDialogExpectation(TEXT_INPUT_TYPE_MONTH,
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);
125 mInputDialogContainer.setShowDialogExpectation(TEXT_INPUT_TYPE_MONTH,
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);
132 mInputDialogContainer.setShowDialogExpectation(TEXT_INPUT_TYPE_MONTH,
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);
139 mInputDialogContainer.setShowDialogExpectation(TEXT_INPUT_TYPE_MONTH,
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);
148 @Feature({"DateTimeDialog"})
149 public void testTimeValueParsing() {
150 mInputDialogContainer.setShowDialogExpectation(TEXT_INPUT_TYPE_TIME,
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);
157 // Time dialog only shows the hour and minute fields.
158 mInputDialogContainer.setShowDialogExpectation(TEXT_INPUT_TYPE_TIME,
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);
165 mInputDialogContainer.setShowDialogExpectation(TEXT_INPUT_TYPE_TIME,
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);
174 @Feature({"DateTimeDialog"})
175 public void testWeekValueParsing() {
176 mInputDialogContainer.setShowDialogExpectation(TEXT_INPUT_TYPE_WEEK,
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);
183 mInputDialogContainer.setShowDialogExpectation(TEXT_INPUT_TYPE_WEEK,
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);
190 mInputDialogContainer.setShowDialogExpectation(TEXT_INPUT_TYPE_WEEK,
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);
197 mInputDialogContainer.setShowDialogExpectation(TEXT_INPUT_TYPE_WEEK,
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);
206 @Feature({"DateTimeDialog"})
207 public void testDateValueGenerating() {
208 mInputActionDelegate.setReplaceDateTimeExpectation(0);
209 mInputDialogContainer.setFieldDateTimeValue(TEXT_INPUT_TYPE_DATE,
213 mInputActionDelegate.setReplaceDateTimeExpectation(-62135596800000.0);
214 mInputDialogContainer.setFieldDateTimeValue(TEXT_INPUT_TYPE_DATE,
218 mInputActionDelegate.setReplaceDateTimeExpectation(8640000000000000.0);
219 mInputDialogContainer.setFieldDateTimeValue(TEXT_INPUT_TYPE_DATE,
223 mInputActionDelegate.setReplaceDateTimeExpectation(1383782400000.0);
224 mInputDialogContainer.setFieldDateTimeValue(TEXT_INPUT_TYPE_DATE,
230 @Feature({"DateTimeDialog"})
231 public void testDatetimelocalValueGenerating() {
232 mInputActionDelegate.setReplaceDateTimeExpectation(0);
233 mInputDialogContainer.setFieldDateTimeValue(TEXT_INPUT_TYPE_DATETIMELOCAL,
237 mInputActionDelegate.setReplaceDateTimeExpectation(-62135596800000.0);
238 mInputDialogContainer.setFieldDateTimeValue(TEXT_INPUT_TYPE_DATETIMELOCAL,
242 mInputActionDelegate.setReplaceDateTimeExpectation(8640000000000000.0);
243 mInputDialogContainer.setFieldDateTimeValue(TEXT_INPUT_TYPE_DATETIMELOCAL,
247 mInputActionDelegate.setReplaceDateTimeExpectation(1383872462196.0);
248 mInputDialogContainer.setFieldDateTimeValue(TEXT_INPUT_TYPE_DATETIMELOCAL,
254 @Feature({"DateTimeDialog"})
255 public void testMonthValueGenerating() {
256 mInputActionDelegate.setReplaceDateTimeExpectation(0);
257 mInputDialogContainer.setFieldDateTimeValue(TEXT_INPUT_TYPE_MONTH,
261 mInputActionDelegate.setReplaceDateTimeExpectation(-62135596800000.0);
262 mInputDialogContainer.setFieldDateTimeValue(TEXT_INPUT_TYPE_MONTH,
266 mInputActionDelegate.setReplaceDateTimeExpectation(8640000000000000.0);
267 mInputDialogContainer.setFieldDateTimeValue(TEXT_INPUT_TYPE_MONTH,
271 mInputActionDelegate.setReplaceDateTimeExpectation(1383872462196.0);
272 mInputDialogContainer.setFieldDateTimeValue(TEXT_INPUT_TYPE_MONTH,
278 @Feature({"DateTimeDialog"})
279 public void testTimeValueGenerating() {
280 mInputActionDelegate.setReplaceDateTimeExpectation(0.0);
281 mInputDialogContainer.setFieldDateTimeValue(TEXT_INPUT_TYPE_TIME,
285 mInputActionDelegate.setReplaceDateTimeExpectation(86399999.0);
286 mInputDialogContainer.setFieldDateTimeValue(TEXT_INPUT_TYPE_TIME,
290 mInputActionDelegate.setReplaceDateTimeExpectation(55425678.0);
291 mInputDialogContainer.setFieldDateTimeValue(TEXT_INPUT_TYPE_TIME,
297 @Feature({"DateTimeDialog"})
298 public void testWeekValueGenerating() {
299 mInputActionDelegate.setReplaceDateTimeExpectation(-259200000.0);
300 mInputDialogContainer.setFieldDateTimeValue(TEXT_INPUT_TYPE_WEEK,
304 mInputActionDelegate.setReplaceDateTimeExpectation(-62135596800000.0);
305 mInputDialogContainer.setFieldDateTimeValue(TEXT_INPUT_TYPE_WEEK,
309 mInputActionDelegate.setReplaceDateTimeExpectation(8639999568000000.0);
310 mInputDialogContainer.setFieldDateTimeValue(TEXT_INPUT_TYPE_WEEK,
314 mInputActionDelegate.setReplaceDateTimeExpectation(1382918400000.0);
315 mInputDialogContainer.setFieldDateTimeValue(TEXT_INPUT_TYPE_WEEK,
320 private static class InputActionDelegateForTests
321 implements InputDialogContainer.InputActionDelegate {
322 private double mExpectedDialogValue;
324 public void setReplaceDateTimeExpectation(double dialogValue) {
325 mExpectedDialogValue = dialogValue;
329 public void replaceDateTime(double dialogValue) {
330 assertEquals(mExpectedDialogValue, dialogValue);
334 public void cancelDateTimeDialog() {
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;
352 public InputDialogContainerForTests(
354 InputDialogContainer.InputActionDelegate inputActionDelegate) {
355 super(context, inputActionDelegate);
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;
373 mExpectedStep = step;
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);
396 public void setFieldDateTimeValue(int dialogType,
397 int year, int month, int monthDay,
398 int hourOfDay, int minute, int second, int millis,
400 super.setFieldDateTimeValue(dialogType,
401 year, month, monthDay,
402 hourOfDay, minute, second, millis,