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;
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;
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;
33 InputActionDelegateForTests mInputActionDelegate;
34 InputDialogContainerForTests mInputDialogContainer;
37 public void setUp() throws Exception {
39 InputDialogContainer.initializeInputTypes(TEXT_INPUT_TYPE_DATE,
40 TEXT_INPUT_TYPE_DATETIME,
41 TEXT_INPUT_TYPE_DATETIMELOCAL,
42 TEXT_INPUT_TYPE_MONTH,
44 TEXT_INPUT_TYPE_WEEK);
45 mInputActionDelegate = new InputActionDelegateForTests();
46 mInputDialogContainer = new InputDialogContainerForTests(getContext(),
47 mInputActionDelegate);
51 @Feature({"DateTimeDialog"})
52 public void testDateValueParsing() {
53 mInputDialogContainer.setShowDialogExpectation(TEXT_INPUT_TYPE_DATE,
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);
60 mInputDialogContainer.setShowDialogExpectation(TEXT_INPUT_TYPE_DATE,
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);
67 mInputDialogContainer.setShowDialogExpectation(TEXT_INPUT_TYPE_DATE,
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);
74 mInputDialogContainer.setShowDialogExpectation(TEXT_INPUT_TYPE_DATE,
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);
83 @Feature({"DateTimeDialog"})
84 public void testDatetimelocalValueParsing() {
85 mInputDialogContainer.setShowDialogExpectation(TEXT_INPUT_TYPE_DATETIMELOCAL,
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);
92 mInputDialogContainer.setShowDialogExpectation(TEXT_INPUT_TYPE_DATETIMELOCAL,
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);
99 mInputDialogContainer.setShowDialogExpectation(TEXT_INPUT_TYPE_DATETIMELOCAL,
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);
106 mInputDialogContainer.setShowDialogExpectation(TEXT_INPUT_TYPE_DATETIMELOCAL,
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);
115 @Feature({"DateTimeDialog"})
116 public void testMonthValueParsing() {
117 mInputDialogContainer.setShowDialogExpectation(TEXT_INPUT_TYPE_MONTH,
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);
124 mInputDialogContainer.setShowDialogExpectation(TEXT_INPUT_TYPE_MONTH,
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);
131 mInputDialogContainer.setShowDialogExpectation(TEXT_INPUT_TYPE_MONTH,
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);
138 mInputDialogContainer.setShowDialogExpectation(TEXT_INPUT_TYPE_MONTH,
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);
147 @Feature({"DateTimeDialog"})
148 public void testTimeValueParsing() {
149 mInputDialogContainer.setShowDialogExpectation(TEXT_INPUT_TYPE_TIME,
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);
156 // Time dialog only shows the hour and minute fields.
157 mInputDialogContainer.setShowDialogExpectation(TEXT_INPUT_TYPE_TIME,
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);
164 mInputDialogContainer.setShowDialogExpectation(TEXT_INPUT_TYPE_TIME,
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);
173 @Feature({"DateTimeDialog"})
174 public void testWeekValueParsing() {
175 mInputDialogContainer.setShowDialogExpectation(TEXT_INPUT_TYPE_WEEK,
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);
182 mInputDialogContainer.setShowDialogExpectation(TEXT_INPUT_TYPE_WEEK,
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);
189 mInputDialogContainer.setShowDialogExpectation(TEXT_INPUT_TYPE_WEEK,
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);
196 mInputDialogContainer.setShowDialogExpectation(TEXT_INPUT_TYPE_WEEK,
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);
205 @Feature({"DateTimeDialog"})
206 public void testDateValueGenerating() {
207 mInputActionDelegate.setReplaceDateTimeExpectation(0);
208 mInputDialogContainer.setFieldDateTimeValue(TEXT_INPUT_TYPE_DATE,
212 mInputActionDelegate.setReplaceDateTimeExpectation(-62135596800000.0);
213 mInputDialogContainer.setFieldDateTimeValue(TEXT_INPUT_TYPE_DATE,
217 mInputActionDelegate.setReplaceDateTimeExpectation(8640000000000000.0);
218 mInputDialogContainer.setFieldDateTimeValue(TEXT_INPUT_TYPE_DATE,
222 mInputActionDelegate.setReplaceDateTimeExpectation(1383782400000.0);
223 mInputDialogContainer.setFieldDateTimeValue(TEXT_INPUT_TYPE_DATE,
229 @Feature({"DateTimeDialog"})
230 public void testDatetimelocalValueGenerating() {
231 mInputActionDelegate.setReplaceDateTimeExpectation(0);
232 mInputDialogContainer.setFieldDateTimeValue(TEXT_INPUT_TYPE_DATETIMELOCAL,
236 mInputActionDelegate.setReplaceDateTimeExpectation(-62135596800000.0);
237 mInputDialogContainer.setFieldDateTimeValue(TEXT_INPUT_TYPE_DATETIMELOCAL,
241 mInputActionDelegate.setReplaceDateTimeExpectation(8640000000000000.0);
242 mInputDialogContainer.setFieldDateTimeValue(TEXT_INPUT_TYPE_DATETIMELOCAL,
246 mInputActionDelegate.setReplaceDateTimeExpectation(1383872462196.0);
247 mInputDialogContainer.setFieldDateTimeValue(TEXT_INPUT_TYPE_DATETIMELOCAL,
253 @Feature({"DateTimeDialog"})
254 public void testMonthValueGenerating() {
255 mInputActionDelegate.setReplaceDateTimeExpectation(0);
256 mInputDialogContainer.setFieldDateTimeValue(TEXT_INPUT_TYPE_MONTH,
260 mInputActionDelegate.setReplaceDateTimeExpectation(-62135596800000.0);
261 mInputDialogContainer.setFieldDateTimeValue(TEXT_INPUT_TYPE_MONTH,
265 mInputActionDelegate.setReplaceDateTimeExpectation(8640000000000000.0);
266 mInputDialogContainer.setFieldDateTimeValue(TEXT_INPUT_TYPE_MONTH,
270 mInputActionDelegate.setReplaceDateTimeExpectation(1383872462196.0);
271 mInputDialogContainer.setFieldDateTimeValue(TEXT_INPUT_TYPE_MONTH,
277 @Feature({"DateTimeDialog"})
278 public void testTimeValueGenerating() {
279 mInputActionDelegate.setReplaceDateTimeExpectation(0.0);
280 mInputDialogContainer.setFieldDateTimeValue(TEXT_INPUT_TYPE_TIME,
284 mInputActionDelegate.setReplaceDateTimeExpectation(86399999.0);
285 mInputDialogContainer.setFieldDateTimeValue(TEXT_INPUT_TYPE_TIME,
289 mInputActionDelegate.setReplaceDateTimeExpectation(55425678.0);
290 mInputDialogContainer.setFieldDateTimeValue(TEXT_INPUT_TYPE_TIME,
296 @Feature({"DateTimeDialog"})
297 public void testWeekValueGenerating() {
298 mInputActionDelegate.setReplaceDateTimeExpectation(-259200000.0);
299 mInputDialogContainer.setFieldDateTimeValue(TEXT_INPUT_TYPE_WEEK,
303 mInputActionDelegate.setReplaceDateTimeExpectation(-62135596800000.0);
304 mInputDialogContainer.setFieldDateTimeValue(TEXT_INPUT_TYPE_WEEK,
308 mInputActionDelegate.setReplaceDateTimeExpectation(8639999568000000.0);
309 mInputDialogContainer.setFieldDateTimeValue(TEXT_INPUT_TYPE_WEEK,
313 mInputActionDelegate.setReplaceDateTimeExpectation(1382918400000.0);
314 mInputDialogContainer.setFieldDateTimeValue(TEXT_INPUT_TYPE_WEEK,
319 private static class InputActionDelegateForTests
320 implements InputDialogContainer.InputActionDelegate {
321 private double mExpectedDialogValue;
323 public void setReplaceDateTimeExpectation(double dialogValue) {
324 mExpectedDialogValue = dialogValue;
328 public void replaceDateTime(double dialogValue) {
329 assertEquals(mExpectedDialogValue, dialogValue);
333 public void cancelDateTimeDialog() {
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;
351 public InputDialogContainerForTests(
353 InputDialogContainer.InputActionDelegate inputActionDelegate) {
354 super(context, inputActionDelegate);
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;
372 mExpectedStep = step;
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);
395 public void setFieldDateTimeValue(int dialogType,
396 int year, int month, int monthDay,
397 int hourOfDay, int minute, int second, int millis,
399 super.setFieldDateTimeValue(dialogType,
400 year, month, monthDay,
401 hourOfDay, minute, second, millis,