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