// Copyright 2013 The Chromium Authors
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
package org.chromium.content.browser.input;
import android.content.Context;
import androidx.test.InstrumentationRegistry;
import androidx.test.filters.SmallTest;
import org.junit.Assert;
import org.junit.Before;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.chromium.base.test.BaseJUnit4ClassRunner;
import org.chromium.base.test.util.Batch;
import org.chromium.base.test.util.Feature;
import org.chromium.content.browser.picker.InputDialogContainer;
import org.chromium.ui.base.ime.TextInputType;
/** Unittests for the {@link org.chromium.content.browser.picker.InputDialogContainer} class. */
@RunWith(BaseJUnit4ClassRunner.class)
@Batch(Batch.UNIT_TESTS)
public class InputDialogContainerTest {
// Defined in third_party/WebKit/Source/platform/DateComponents.h
private static final double DATE_DIALOG_DEFAULT_MIN = -62135596800000.0;
private static final double DATE_DIALOG_DEFAULT_MAX = 8640000000000000.0;
private static final double DATETIMELOCAL_DIALOG_DEFAULT_MIN = -62135596800000.0;
private static final double DATETIMELOCAL_DIALOG_DEFAULT_MAX = 8640000000000000.0;
private static final double MONTH_DIALOG_DEFAULT_MIN = -23628.0;
private static final double MONTH_DIALOG_DEFAULT_MAX = 3285488.0;
private static final double TIME_DIALOG_DEFAULT_MIN = 0.0;
private static final double TIME_DIALOG_DEFAULT_MAX = 86399999.0;
private static final double WEEK_DIALOG_DEFAULT_MIN = -62135596800000.0;
private static final double WEEK_DIALOG_DEFAULT_MAX = 8639999568000000.0;
private static final double ASSERTION_DELTA = 0;
InputActionDelegateForTests mInputActionDelegate;
InputDialogContainerForTests mInputDialogContainer;
@Before
public void setUp() {
mInputActionDelegate = new InputActionDelegateForTests();
mInputDialogContainer =
new InputDialogContainerForTests(
InstrumentationRegistry.getContext(), mInputActionDelegate);
}
@Test
@SmallTest
@Feature({"DateTimeDialog"})
public void testDateValueParsing() {
mInputDialogContainer.setShowDialogExpectation(
TextInputType.DATE,
1970,
0,
1,
0,
0,
0,
0,
0,
DATE_DIALOG_DEFAULT_MIN,
DATE_DIALOG_DEFAULT_MAX,
1.0);
mInputDialogContainer.showPickerDialog(
TextInputType.DATE, 0.0, DATE_DIALOG_DEFAULT_MIN, DATE_DIALOG_DEFAULT_MAX, 1.0);
mInputDialogContainer.setShowDialogExpectation(
TextInputType.DATE,
1,
0,
1,
0,
0,
0,
0,
0,
DATE_DIALOG_DEFAULT_MIN,
DATE_DIALOG_DEFAULT_MAX,
1.0);
mInputDialogContainer.showPickerDialog(
TextInputType.DATE,
-62135596800000.0,
DATE_DIALOG_DEFAULT_MIN,
DATE_DIALOG_DEFAULT_MAX,
1.0);
mInputDialogContainer.setShowDialogExpectation(
TextInputType.DATE,
275760,
8,
13,
0,
0,
0,
0,
0,
DATE_DIALOG_DEFAULT_MIN,
DATE_DIALOG_DEFAULT_MAX,
1.0);
mInputDialogContainer.showPickerDialog(
TextInputType.DATE,
8640000000000000.0,
DATE_DIALOG_DEFAULT_MIN,
DATE_DIALOG_DEFAULT_MAX,
1.0);
mInputDialogContainer.setShowDialogExpectation(
TextInputType.DATE,
2013,
10,
7,
0,
0,
0,
0,
0,
DATE_DIALOG_DEFAULT_MIN,
DATE_DIALOG_DEFAULT_MAX,
1.0);
mInputDialogContainer.showPickerDialog(
TextInputType.DATE,
1383782400000.0,
DATE_DIALOG_DEFAULT_MIN,
DATE_DIALOG_DEFAULT_MAX,
1.0);
}
@Test
@SmallTest
@Feature({"DateTimeDialog"})
public void testDatetimelocalValueParsing() {
mInputDialogContainer.setShowDialogExpectation(
TextInputType.DATE_TIME_LOCAL,
1970,
0,
1,
0,
0,
0,
0,
0,
DATETIMELOCAL_DIALOG_DEFAULT_MIN,
DATETIMELOCAL_DIALOG_DEFAULT_MAX,
1.0);
mInputDialogContainer.showPickerDialog(
TextInputType.DATE_TIME_LOCAL,
0,
DATETIMELOCAL_DIALOG_DEFAULT_MIN,
DATETIMELOCAL_DIALOG_DEFAULT_MAX,
1.0);
mInputDialogContainer.setShowDialogExpectation(
TextInputType.DATE_TIME_LOCAL,
1,
0,
1,
0,
0,
0,
0,
0,
DATETIMELOCAL_DIALOG_DEFAULT_MIN,
DATETIMELOCAL_DIALOG_DEFAULT_MAX,
1.0);
mInputDialogContainer.showPickerDialog(
TextInputType.DATE_TIME_LOCAL,
-62135596800000.0,
DATETIMELOCAL_DIALOG_DEFAULT_MIN,
DATETIMELOCAL_DIALOG_DEFAULT_MAX,
1.0);
mInputDialogContainer.setShowDialogExpectation(
TextInputType.DATE_TIME_LOCAL,
275760,
8,
13,
0,
0,
0,
0,
0,
DATETIMELOCAL_DIALOG_DEFAULT_MIN,
DATETIMELOCAL_DIALOG_DEFAULT_MAX,
1.0);
mInputDialogContainer.showPickerDialog(
TextInputType.DATE_TIME_LOCAL,
8640000000000000.0,
DATETIMELOCAL_DIALOG_DEFAULT_MIN,
DATETIMELOCAL_DIALOG_DEFAULT_MAX,
1.0);
mInputDialogContainer.setShowDialogExpectation(
TextInputType.DATE_TIME_LOCAL,
2013,
10,
8,
1,
1,
2,
196,
0,
DATETIMELOCAL_DIALOG_DEFAULT_MIN,
DATETIMELOCAL_DIALOG_DEFAULT_MAX,
0.001);
mInputDialogContainer.showPickerDialog(
TextInputType.DATE_TIME_LOCAL,
1383872462196.0,
DATETIMELOCAL_DIALOG_DEFAULT_MIN,
DATETIMELOCAL_DIALOG_DEFAULT_MAX,
0.001);
}
@Test
@SmallTest
@Feature({"DateTimeDialog"})
public void testMonthValueParsing() {
mInputDialogContainer.setShowDialogExpectation(
TextInputType.MONTH,
1970,
0,
0,
0,
0,
0,
0,
0,
MONTH_DIALOG_DEFAULT_MIN,
MONTH_DIALOG_DEFAULT_MAX,
1.0);
mInputDialogContainer.showPickerDialog(
TextInputType.MONTH, 0.0, MONTH_DIALOG_DEFAULT_MIN, MONTH_DIALOG_DEFAULT_MAX, 1.0);
mInputDialogContainer.setShowDialogExpectation(
TextInputType.MONTH,
1,
0,
0,
0,
0,
0,
0,
0,
MONTH_DIALOG_DEFAULT_MIN,
MONTH_DIALOG_DEFAULT_MAX,
1.0);
mInputDialogContainer.showPickerDialog(
TextInputType.MONTH,
-23628.0,
MONTH_DIALOG_DEFAULT_MIN,
MONTH_DIALOG_DEFAULT_MAX,
1.0);
mInputDialogContainer.setShowDialogExpectation(
TextInputType.MONTH,
275760,
8,
0,
0,
0,
0,
0,
0,
MONTH_DIALOG_DEFAULT_MIN,
MONTH_DIALOG_DEFAULT_MAX,
1.0);
mInputDialogContainer.showPickerDialog(
TextInputType.MONTH,
3285488.0,
MONTH_DIALOG_DEFAULT_MIN,
MONTH_DIALOG_DEFAULT_MAX,
1.0);
mInputDialogContainer.setShowDialogExpectation(
TextInputType.MONTH,
2013,
10,
0,
0,
0,
0,
0,
0,
MONTH_DIALOG_DEFAULT_MIN,
MONTH_DIALOG_DEFAULT_MAX,
1.0);
mInputDialogContainer.showPickerDialog(
TextInputType.MONTH,
526.0,
MONTH_DIALOG_DEFAULT_MIN,
MONTH_DIALOG_DEFAULT_MAX,
1.0);
}
@Test
@SmallTest
@Feature({"DateTimeDialog"})
public void testTimeValueParsing() {
mInputDialogContainer.setShowDialogExpectation(
TextInputType.TIME,
0,
0,
0,
0,
0,
0,
0,
0,
TIME_DIALOG_DEFAULT_MIN,
TIME_DIALOG_DEFAULT_MAX,
1.0);
mInputDialogContainer.showPickerDialog(
TextInputType.TIME, 0.0, TIME_DIALOG_DEFAULT_MIN, TIME_DIALOG_DEFAULT_MAX, 1.0);
// Time dialog only shows the hour and minute fields.
mInputDialogContainer.setShowDialogExpectation(
TextInputType.TIME,
0,
0,
0,
23,
59,
0,
0,
0,
TIME_DIALOG_DEFAULT_MIN,
TIME_DIALOG_DEFAULT_MAX,
1.0);
mInputDialogContainer.showPickerDialog(
TextInputType.TIME,
86399999.0,
TIME_DIALOG_DEFAULT_MIN,
TIME_DIALOG_DEFAULT_MAX,
1.0);
mInputDialogContainer.setShowDialogExpectation(
TextInputType.TIME,
0,
0,
0,
15,
23,
0,
0,
0,
TIME_DIALOG_DEFAULT_MIN,
TIME_DIALOG_DEFAULT_MAX,
1.0);
mInputDialogContainer.showPickerDialog(
TextInputType.TIME,
55425678.0,
TIME_DIALOG_DEFAULT_MIN,
TIME_DIALOG_DEFAULT_MAX,
1.0);
}
@Test
@SmallTest
@Feature({"DateTimeDialog"})
public void testWeekValueParsing() {
mInputDialogContainer.setShowDialogExpectation(
TextInputType.WEEK,
1970,
0,
0,
0,
0,
0,
0,
1,
WEEK_DIALOG_DEFAULT_MIN,
WEEK_DIALOG_DEFAULT_MAX,
1.0);
mInputDialogContainer.showPickerDialog(
TextInputType.WEEK,
-259200000.0,
WEEK_DIALOG_DEFAULT_MIN,
WEEK_DIALOG_DEFAULT_MAX,
1.0);
mInputDialogContainer.setShowDialogExpectation(
TextInputType.WEEK,
1,
0,
0,
0,
0,
0,
0,
1,
WEEK_DIALOG_DEFAULT_MIN,
WEEK_DIALOG_DEFAULT_MAX,
1.0);
mInputDialogContainer.showPickerDialog(
TextInputType.WEEK,
-62135596800000.0,
WEEK_DIALOG_DEFAULT_MIN,
WEEK_DIALOG_DEFAULT_MAX,
1.0);
mInputDialogContainer.setShowDialogExpectation(
TextInputType.WEEK,
275760,
0,
0,
0,
0,
0,
0,
37,
WEEK_DIALOG_DEFAULT_MIN,
WEEK_DIALOG_DEFAULT_MAX,
1.0);
mInputDialogContainer.showPickerDialog(
TextInputType.WEEK,
8639999568000000.0,
WEEK_DIALOG_DEFAULT_MIN,
WEEK_DIALOG_DEFAULT_MAX,
1.0);
mInputDialogContainer.setShowDialogExpectation(
TextInputType.WEEK,
2013,
0,
0,
0,
0,
0,
0,
44,
WEEK_DIALOG_DEFAULT_MIN,
WEEK_DIALOG_DEFAULT_MAX,
1.0);
mInputDialogContainer.showPickerDialog(
TextInputType.WEEK,
1382918400000.0,
WEEK_DIALOG_DEFAULT_MIN,
WEEK_DIALOG_DEFAULT_MAX,
1.0);
}
@Test
@SmallTest
@Feature({"DateTimeDialog"})
public void testDateValueGenerating() {
mInputActionDelegate.setReplaceDateTimeExpectation(0);
mInputDialogContainer.setFieldDateTimeValue(TextInputType.DATE, 1970, 0, 1, 0, 0, 0, 0, 0);
mInputActionDelegate.setReplaceDateTimeExpectation(-62135596800000.0);
mInputDialogContainer.setFieldDateTimeValue(TextInputType.DATE, 1, 0, 1, 0, 0, 0, 0, 0);
mInputActionDelegate.setReplaceDateTimeExpectation(8640000000000000.0);
mInputDialogContainer.setFieldDateTimeValue(
TextInputType.DATE, 275760, 8, 13, 0, 0, 0, 0, 0);
mInputActionDelegate.setReplaceDateTimeExpectation(1383782400000.0);
mInputDialogContainer.setFieldDateTimeValue(TextInputType.DATE, 2013, 10, 7, 0, 0, 0, 0, 0);
}
@Test
@SmallTest
@Feature({"DateTimeDialog"})
public void testDatetimelocalValueGenerating() {
mInputActionDelegate.setReplaceDateTimeExpectation(0);
mInputDialogContainer.setFieldDateTimeValue(
TextInputType.DATE_TIME_LOCAL, 1970, 0, 1, 0, 0, 0, 0, 0);
mInputActionDelegate.setReplaceDateTimeExpectation(-62135596800000.0);
mInputDialogContainer.setFieldDateTimeValue(
TextInputType.DATE_TIME_LOCAL, 1, 0, 1, 0, 0, 0, 0, 0);
mInputActionDelegate.setReplaceDateTimeExpectation(8640000000000000.0);
mInputDialogContainer.setFieldDateTimeValue(
TextInputType.DATE_TIME_LOCAL, 275760, 8, 13, 0, 0, 0, 0, 0);
mInputActionDelegate.setReplaceDateTimeExpectation(1383872462196.0);
mInputDialogContainer.setFieldDateTimeValue(
TextInputType.DATE_TIME_LOCAL, 2013, 10, 8, 1, 1, 2, 196, 0);
}
@Test
@SmallTest
@Feature({"DateTimeDialog"})
public void testMonthValueGenerating() {
mInputActionDelegate.setReplaceDateTimeExpectation(0);
mInputDialogContainer.setFieldDateTimeValue(TextInputType.MONTH, 1970, 0, 0, 0, 0, 0, 0, 0);
mInputActionDelegate.setReplaceDateTimeExpectation(-62135596800000.0);
mInputDialogContainer.setFieldDateTimeValue(TextInputType.MONTH, 1, 0, 1, 0, 0, 0, 0, 0);
mInputActionDelegate.setReplaceDateTimeExpectation(8640000000000000.0);
mInputDialogContainer.setFieldDateTimeValue(
TextInputType.MONTH, 275760, 8, 0, 0, 0, 0, 0, 0);
mInputActionDelegate.setReplaceDateTimeExpectation(1383872462196.0);
mInputDialogContainer.setFieldDateTimeValue(
TextInputType.MONTH, 2013, 10, 0, 0, 0, 0, 0, 0);
}
@Test
@SmallTest
@Feature({"DateTimeDialog"})
public void testTimeValueGenerating() {
mInputActionDelegate.setReplaceDateTimeExpectation(0.0);
mInputDialogContainer.setFieldDateTimeValue(TextInputType.TIME, 0, 0, 0, 0, 0, 0, 0, 0);
mInputActionDelegate.setReplaceDateTimeExpectation(86399999.0);
mInputDialogContainer.setFieldDateTimeValue(
TextInputType.TIME, 0, 0, 0, 23, 59, 59, 999, 0);
mInputActionDelegate.setReplaceDateTimeExpectation(55425678.0);
mInputDialogContainer.setFieldDateTimeValue(
TextInputType.TIME, 2013, 10, 0, 3, 23, 45, 678, 0);
}
@Test
@SmallTest
@Feature({"DateTimeDialog"})
public void testWeekValueGenerating() {
mInputActionDelegate.setReplaceDateTimeExpectation(-259200000.0);
mInputDialogContainer.setFieldDateTimeValue(TextInputType.WEEK, 1970, 0, 0, 0, 0, 0, 0, 1);
mInputActionDelegate.setReplaceDateTimeExpectation(-62135596800000.0);
mInputDialogContainer.setFieldDateTimeValue(TextInputType.WEEK, 1, 0, 0, 0, 0, 0, 0, 1);
mInputActionDelegate.setReplaceDateTimeExpectation(8639999568000000.0);
mInputDialogContainer.setFieldDateTimeValue(
TextInputType.WEEK, 275760, 0, 0, 0, 0, 0, 0, 37);
mInputActionDelegate.setReplaceDateTimeExpectation(1382918400000.0);
mInputDialogContainer.setFieldDateTimeValue(TextInputType.WEEK, 2013, 0, 0, 0, 0, 0, 0, 44);
}
private static class InputActionDelegateForTests
implements InputDialogContainer.InputActionDelegate {
private double mExpectedDialogValue;
public void setReplaceDateTimeExpectation(double dialogValue) {
mExpectedDialogValue = dialogValue;
}
@Override
public void replaceDateTime(double dialogValue) {
Assert.assertEquals(mExpectedDialogValue, dialogValue, ASSERTION_DELTA);
}
@Override
public void cancelDateTimeDialog() {}
}
private static class InputDialogContainerForTests extends InputDialogContainer {
private int mExpectedDialogType;
private int mExpectedYear;
private int mExpectedMonth;
private int mExpectedMonthDay;
private int mExpectedHourOfDay;
private int mExpectedMinute;
private int mExpectedSecond;
private int mExpectedMillis;
private int mExpectedWeek;
private double mExpectedMin;
private double mExpectedMax;
private double mExpectedStep;
public InputDialogContainerForTests(
Context context, InputDialogContainer.InputActionDelegate inputActionDelegate) {
super(context, inputActionDelegate);
}
void setShowDialogExpectation(
int dialogType,
int year,
int month,
int monthDay,
int hourOfDay,
int minute,
int second,
int millis,
int week,
double min,
double max,
double step) {
mExpectedDialogType = dialogType;
mExpectedYear = year;
mExpectedMonth = month;
mExpectedMonthDay = monthDay;
mExpectedHourOfDay = hourOfDay;
mExpectedMinute = minute;
mExpectedSecond = second;
mExpectedMillis = millis;
mExpectedWeek = week;
mExpectedMin = min;
mExpectedMax = max;
mExpectedStep = step;
}
@Override
public void showPickerDialog(
final int dialogType, double dialogValue, double min, double max, double step) {
super.showPickerDialog(dialogType, dialogValue, min, max, step);
}
@Override
protected void showPickerDialog(
final int dialogType,
int year,
int month,
int monthDay,
int hourOfDay,
int minute,
int second,
int millis,
int week,
double min,
double max,
double step) {
Assert.assertEquals(mExpectedDialogType, dialogType);
Assert.assertEquals(mExpectedYear, year);
Assert.assertEquals(mExpectedMonth, month);
Assert.assertEquals(mExpectedMonthDay, monthDay);
Assert.assertEquals(mExpectedHourOfDay, hourOfDay);
Assert.assertEquals(mExpectedMinute, minute);
Assert.assertEquals(mExpectedSecond, second);
Assert.assertEquals(mExpectedMillis, millis);
Assert.assertEquals(mExpectedWeek, week);
Assert.assertEquals(mExpectedMin, min, ASSERTION_DELTA);
Assert.assertEquals(mExpectedMax, max, ASSERTION_DELTA);
Assert.assertEquals(mExpectedStep, step, ASSERTION_DELTA);
}
@Override
public void setFieldDateTimeValue(
int dialogType,
int year,
int month,
int monthDay,
int hourOfDay,
int minute,
int second,
int millis,
int week) {
super.setFieldDateTimeValue(
dialogType, year, month, monthDay, hourOfDay, minute, second, millis, week);
}
}
}