6.6.3 - Alpha2 - 本地化 Material Date Time Picker (版本 4.2.3)

This commit is contained in:
SuperMonster003
2025-05-07 23:47:22 +08:00
parent 6dc86a0668
commit 7a3891a14e
114 changed files with 14024 additions and 9 deletions

View File

@@ -0,0 +1,853 @@
package com.wdullaer.materialdatetimepicker.time;
import static com.wdullaer.materialdatetimepicker.time.TimePickerDialog.HOUR_INDEX;
import static com.wdullaer.materialdatetimepicker.time.TimePickerDialog.MINUTE_INDEX;
import org.junit.Test;
import org.junit.Assert;
/**
* Unit tests for the default implementation of TimepointLimiter
* Mostly used to assert that the rounding logic works
*
* Created by wdullaer on 22/06/17.
*/
public class DefaultTimepointLimiterTest {
@Test
public void isAmDisabledShouldReturnTrueWhenMinTimeIsInTheAfternoon() {
Timepoint minTime = new Timepoint(13);
DefaultTimepointLimiter limiter = new DefaultTimepointLimiter();
limiter.setMinTime(minTime);
Assert.assertTrue(limiter.isAmDisabled());
}
@Test
public void isAmDisabledShouldReturnFalseWhenMinTimeIsInTheMorning() {
Timepoint minTime = new Timepoint(8);
DefaultTimepointLimiter limiter = new DefaultTimepointLimiter();
limiter.setMinTime(minTime);
Assert.assertFalse(limiter.isAmDisabled());
}
@Test
public void isAmDisabledShouldReturnTrueWhenMinTimeIsMidday() {
Timepoint minTime = new Timepoint(12);
DefaultTimepointLimiter limiter = new DefaultTimepointLimiter();
limiter.setMinTime(minTime);
Assert.assertTrue(limiter.isAmDisabled());
}
@Test
public void isAmDisabledShouldReturnFalseWhenMaxTimeIsInTheMorning() {
Timepoint maxTime = new Timepoint(8);
DefaultTimepointLimiter limiter = new DefaultTimepointLimiter();
limiter.setMaxTime(maxTime);
Assert.assertFalse(limiter.isAmDisabled());
}
@Test
public void isAmDisabledShouldReturnFalseWhenMaxTimeIsMidday() {
Timepoint maxTime = new Timepoint(12);
DefaultTimepointLimiter limiter = new DefaultTimepointLimiter();
limiter.setMaxTime(maxTime);
Assert.assertFalse(limiter.isAmDisabled());
}
@Test
public void isPmDisabledShouldReturnTrueWhenMaxTimeIsInTheMorning() {
Timepoint maxTime = new Timepoint(9);
DefaultTimepointLimiter limiter = new DefaultTimepointLimiter();
limiter.setMaxTime(maxTime);
Assert.assertTrue(limiter.isPmDisabled());
}
@Test
public void isPmDisabledShouldReturnFalseWhenMinTimeIsInTheAfternoon() {
Timepoint minTime = new Timepoint(13);
DefaultTimepointLimiter limiter = new DefaultTimepointLimiter();
limiter.setMinTime(minTime);
Assert.assertFalse(limiter.isPmDisabled());
}
@Test
public void isPmDisabledShouldReturnFalseWhenMaxTimeIsMidday() {
Timepoint maxTime = new Timepoint(12);
DefaultTimepointLimiter limiter = new DefaultTimepointLimiter();
limiter.setMaxTime(maxTime);
Assert.assertFalse(limiter.isPmDisabled());
}
@Test
public void isAmDisabledShouldReturnTrueIfSelectableDaysAreInTheAfternoon() {
Timepoint[] selectableDays = {
new Timepoint(13),
new Timepoint(22)
};
DefaultTimepointLimiter limiter = new DefaultTimepointLimiter();
limiter.setSelectableTimes(selectableDays);
Assert.assertTrue(limiter.isAmDisabled());
}
@Test
public void isAmDisabledShouldReturnFalseIfSelectableDaysHasOneTimeInTheMorning() {
Timepoint[] selectableDays = {
new Timepoint(4),
new Timepoint(13),
new Timepoint(22)
};
DefaultTimepointLimiter limiter = new DefaultTimepointLimiter();
limiter.setSelectableTimes(selectableDays);
Assert.assertFalse(limiter.isAmDisabled());
}
@Test
public void isPmDisabledShouldReturnTrueIfSelectableDaysAreInTheMorning() {
Timepoint[] selectableDays = {
new Timepoint(4),
new Timepoint(9),
new Timepoint(11)
};
DefaultTimepointLimiter limiter = new DefaultTimepointLimiter();
limiter.setSelectableTimes(selectableDays);
Assert.assertTrue(limiter.isPmDisabled());
}
@Test
public void isPmDisabledShouldReturnFalseIfSelectableDaysHasOneTimeInTheAfternoon() {
Timepoint[] selectableDays = {
new Timepoint(4),
new Timepoint(22)
};
DefaultTimepointLimiter limiter = new DefaultTimepointLimiter();
limiter.setSelectableTimes(selectableDays);
Assert.assertFalse(limiter.isPmDisabled());
}
@Test
public void isPmDisabledShouldReturnFalseIfSelectableDaysContainsMidday() {
Timepoint[] selectableDays = {
new Timepoint(4),
new Timepoint(9),
new Timepoint(12)
};
DefaultTimepointLimiter limiter = new DefaultTimepointLimiter();
limiter.setSelectableTimes(selectableDays);
Assert.assertFalse(limiter.isPmDisabled());
}
@Test
public void isPmDisabledShouldReturnFalseWithoutConstraints() {
DefaultTimepointLimiter limiter = new DefaultTimepointLimiter();
Assert.assertFalse(limiter.isPmDisabled());
}
@Test
public void isAmDisabledShouldReturnFalseWithoutConstraints() {
DefaultTimepointLimiter limiter = new DefaultTimepointLimiter();
Assert.assertFalse(limiter.isAmDisabled());
}
@Test
public void setMinTimeShouldThrowExceptionWhenBiggerThanMaxTime() {
Timepoint maxTime = new Timepoint(2);
Timepoint minTime = new Timepoint(3);
DefaultTimepointLimiter limiter = new DefaultTimepointLimiter();
limiter.setMaxTime(maxTime);
try {
limiter.setMinTime(minTime);
Assert.fail("setMinTime() should throw IllegalArgumentException");
} catch (IllegalArgumentException e) {
Assert.assertNotNull(e);
}
}
@Test
public void setMaxTimeShouldThrowExceptionWhenSmallerThanMinTime() {
Timepoint maxTime = new Timepoint(2);
Timepoint minTime = new Timepoint(3);
DefaultTimepointLimiter limiter = new DefaultTimepointLimiter();
limiter.setMinTime(minTime);
try {
limiter.setMaxTime(maxTime);
Assert.fail("setMaxTime() should throw IllegalArgumentException");
} catch (IllegalArgumentException e) {
Assert.assertNotNull(e);
}
}
@Test
public void isOutOfRangeShouldReturnTrueIfInputSmallerThanMinTime() {
Timepoint minTime = new Timepoint(10);
Timepoint input = new Timepoint(2);
DefaultTimepointLimiter limiter = new DefaultTimepointLimiter();
limiter.setMinTime(minTime);
Assert.assertTrue(limiter.isOutOfRange(input));
}
@Test
public void isOutOfRangeShouldReturnTrueIfInputLargerThanMaxTime() {
Timepoint maxTime = new Timepoint(2);
Timepoint input = new Timepoint(12);
DefaultTimepointLimiter limiter = new DefaultTimepointLimiter();
limiter.setMaxTime(maxTime);
Assert.assertTrue(limiter.isOutOfRange(input));
}
@Test
public void isOutOfRangeShouldReturnFalseIfInputIsBetweenMinAndMaxTime() {
Timepoint minTime = new Timepoint(1);
Timepoint maxTime = new Timepoint(13);
Timepoint input = new Timepoint(4);
DefaultTimepointLimiter limiter = new DefaultTimepointLimiter();
limiter.setMinTime(minTime);
limiter.setMaxTime(maxTime);
Assert.assertFalse(limiter.isOutOfRange(input));
}
@Test
public void isOutOfRangeShouldReturnFalseWithoutRestraints() {
Timepoint input = new Timepoint(14);
DefaultTimepointLimiter limiter = new DefaultTimepointLimiter();
Assert.assertFalse(limiter.isOutOfRange(input));
}
@Test
public void isOutOfRangeShouldReturnTrueIfInputNotSelectable() {
Timepoint input = new Timepoint(1);
Timepoint[] selectableDays = {
new Timepoint(13),
new Timepoint(14)
};
DefaultTimepointLimiter limiter = new DefaultTimepointLimiter();
limiter.setSelectableTimes(selectableDays);
Assert.assertTrue(limiter.isOutOfRange(input));
}
@Test
public void isOutOfRangeShouldReturnFalseIfInputSelectable() {
Timepoint input = new Timepoint(15);
Timepoint[] selectableDays = {
new Timepoint(4),
new Timepoint(10),
new Timepoint(15)
};
DefaultTimepointLimiter limiter = new DefaultTimepointLimiter();
limiter.setSelectableTimes(selectableDays);
Assert.assertFalse(limiter.isOutOfRange(input));
}
@Test
public void isOutOfRangeWithIndexShouldHandleNull() {
DefaultTimepointLimiter limiter = new DefaultTimepointLimiter();
Assert.assertFalse(limiter.isOutOfRange(null, HOUR_INDEX, Timepoint.TYPE.SECOND));
}
@Test
public void isOutOfRangeMinuteShouldReturnFalseWhenMinTimeEqualsToTheMinute() {
Timepoint minTime = new Timepoint(12, 13, 14);
Timepoint input = new Timepoint(12, 13);
DefaultTimepointLimiter limiter = new DefaultTimepointLimiter();
limiter.setMinTime(minTime);
Assert.assertFalse(limiter.isOutOfRange(input, MINUTE_INDEX, Timepoint.TYPE.SECOND));
}
@Test
public void isOutOfRangeMinuteShouldReturnFalseWhenMaxTimeEqualsToTheMinute() {
Timepoint maxTime = new Timepoint(12, 13, 14);
Timepoint input = new Timepoint(12, 13);
DefaultTimepointLimiter limiter = new DefaultTimepointLimiter();
limiter.setMaxTime(maxTime);
Assert.assertFalse(limiter.isOutOfRange(input, MINUTE_INDEX, Timepoint.TYPE.SECOND));
}
@Test
public void isOutOfRangeMinuteShouldReturnFalseWhenTimeEqualsSelectableTimeToTheMinute() {
Timepoint[] selectableTimes = {
new Timepoint(11, 12, 13),
new Timepoint(12, 13, 14),
new Timepoint(13, 14, 15)
};
Timepoint input = new Timepoint(12, 13);
DefaultTimepointLimiter limiter = new DefaultTimepointLimiter();
limiter.setSelectableTimes(selectableTimes);
Assert.assertFalse(limiter.isOutOfRange(input, MINUTE_INDEX, Timepoint.TYPE.SECOND));
}
@Test
public void isOutOfRangeMinuteShouldReturnFalseWhenTimeEqualsSelectableTimeToTheMinute2() {
Timepoint[] selectableTimes = {
new Timepoint(11, 12, 13),
new Timepoint(12, 13, 14),
new Timepoint(13, 14, 15)
};
Timepoint input = new Timepoint(13, 14, 59);
DefaultTimepointLimiter limiter = new DefaultTimepointLimiter();
limiter.setSelectableTimes(selectableTimes);
Assert.assertFalse(limiter.isOutOfRange(input, MINUTE_INDEX, Timepoint.TYPE.SECOND));
}
@Test
public void isOutOfRangeMinuteShouldReturnFalseWhenTimeEqualsSelectableTimeToTheMinute3() {
Timepoint[] selectableTimes = {
new Timepoint(11, 12, 13),
new Timepoint(12, 13, 14),
new Timepoint(13, 14, 15)
};
Timepoint input = new Timepoint(11, 12, 0);
DefaultTimepointLimiter limiter = new DefaultTimepointLimiter();
limiter.setSelectableTimes(selectableTimes);
Assert.assertFalse(limiter.isOutOfRange(input, MINUTE_INDEX, Timepoint.TYPE.SECOND));
}
@Test
public void isOutOfRangeMinuteShouldReturnTrueWhenTimeDoesNotEqualSelectableTimeToTheMinute() {
Timepoint[] selectableTimes = {
new Timepoint(11, 12, 13),
new Timepoint(12, 13, 14),
new Timepoint(13, 14, 15)
};
Timepoint input = new Timepoint(11, 11, 0);
DefaultTimepointLimiter limiter = new DefaultTimepointLimiter();
limiter.setSelectableTimes(selectableTimes);
Assert.assertTrue(limiter.isOutOfRange(input, MINUTE_INDEX, Timepoint.TYPE.SECOND));
}
@Test
public void isOutOfRangeHourShouldReturnFalseWhenMinTimeEqualsToTheHour() {
Timepoint minTime = new Timepoint(12, 13, 14);
Timepoint input = new Timepoint(12);
DefaultTimepointLimiter limiter = new DefaultTimepointLimiter();
limiter.setMinTime(minTime);
Assert.assertFalse(limiter.isOutOfRange(input, HOUR_INDEX, Timepoint.TYPE.SECOND));
}
@Test
public void isOutOfRangeHourShouldReturnFalseWhenMaxTimeEqualsToTheHour() {
Timepoint maxTime = new Timepoint(12, 13, 14);
Timepoint input = new Timepoint(12);
DefaultTimepointLimiter limiter = new DefaultTimepointLimiter();
limiter.setMaxTime(maxTime);
Assert.assertFalse(limiter.isOutOfRange(input, HOUR_INDEX, Timepoint.TYPE.SECOND));
}
@Test
public void isOutOfRangeHourShouldReturnFalseWhenTimeEqualsSelectableTimeToTheHour() {
Timepoint[] selectableTimes = {
new Timepoint(11, 12, 13),
new Timepoint(12, 13, 14),
new Timepoint(13, 14, 15)
};
Timepoint input = new Timepoint(12);
DefaultTimepointLimiter limiter = new DefaultTimepointLimiter();
limiter.setSelectableTimes(selectableTimes);
Assert.assertFalse(limiter.isOutOfRange(input, HOUR_INDEX, Timepoint.TYPE.SECOND));
}
@Test
public void isOutOfRangeHourShouldReturnFalseWhenTimeEqualsSelectableTimeToTheHour2() {
Timepoint[] selectableTimes = {
new Timepoint(11, 12, 13),
new Timepoint(12, 13, 14),
new Timepoint(13, 14, 15)
};
Timepoint input = new Timepoint(13, 15, 15);
DefaultTimepointLimiter limiter = new DefaultTimepointLimiter();
limiter.setSelectableTimes(selectableTimes);
Assert.assertFalse(limiter.isOutOfRange(input, HOUR_INDEX, Timepoint.TYPE.SECOND));
}
@Test
public void isOutOfRangeHourShouldReturnFalseWhenTimeEqualsSelectableTimeToTheHour3() {
Timepoint[] selectableTimes = {
new Timepoint(11, 12, 13),
new Timepoint(12, 13, 14),
new Timepoint(13, 14, 15)
};
Timepoint input = new Timepoint(11);
DefaultTimepointLimiter limiter = new DefaultTimepointLimiter();
limiter.setSelectableTimes(selectableTimes);
Assert.assertFalse(limiter.isOutOfRange(input, HOUR_INDEX, Timepoint.TYPE.SECOND));
}
@Test
public void isOutOfRangeShouldWorkWhenSelectableTimesContainsDuplicateEntries() {
Timepoint[] selectableTimes = {
new Timepoint(11),
new Timepoint(12),
new Timepoint(12),
new Timepoint(13)
};
Timepoint input = new Timepoint(11, 30);
DefaultTimepointLimiter limiter = new DefaultTimepointLimiter();
limiter.setSelectableTimes(selectableTimes);
Assert.assertTrue(limiter.isOutOfRange(input));
}
@Test
public void isOutOfRangeShouldReturnTrueWhenInputIsInDisabledTimes() {
Timepoint[] disabledTimes = {
new Timepoint(11),
new Timepoint(12),
new Timepoint(13)
};
Timepoint input = disabledTimes[0];
DefaultTimepointLimiter limiter = new DefaultTimepointLimiter();
limiter.setDisabledTimes(disabledTimes);
Assert.assertTrue(limiter.isOutOfRange(input));
}
@Test
public void isOutOfRangeShouldUseDisabledOverSelectable() {
Timepoint[] disabledTimes = {
new Timepoint(11),
new Timepoint(12),
new Timepoint(13)
};
Timepoint[] selectableTimes = {
new Timepoint(12),
new Timepoint(14)
};
Timepoint input = new Timepoint(12);
DefaultTimepointLimiter limiter = new DefaultTimepointLimiter();
limiter.setDisabledTimes(disabledTimes);
limiter.setSelectableTimes(selectableTimes);
Assert.assertTrue(limiter.isOutOfRange(input));
}
@Test
public void isOutOfRangeHourShouldReturnFalseWhenADisabledTimeIsTestedWithSecondResolution() {
// If there are only disabledTimes, there will still be other times that are valid
Timepoint[] disabledTimes = {
new Timepoint(12),
new Timepoint(13),
new Timepoint(14)
};
Timepoint input = disabledTimes[0];
DefaultTimepointLimiter limiter = new DefaultTimepointLimiter();
limiter.setDisabledTimes(disabledTimes);
Assert.assertFalse(limiter.isOutOfRange(input, HOUR_INDEX, Timepoint.TYPE.SECOND));
}
@Test
public void isOutOfRangeHourShouldReturnFalseWhenADisabledTimeIsTestedWithMinuteResolution() {
// If there are only disabledTimes, there will still be other times that are valid
Timepoint[] disabledTimes = {
new Timepoint(12),
new Timepoint(13),
new Timepoint(14)
};
Timepoint input = disabledTimes[0];
DefaultTimepointLimiter limiter = new DefaultTimepointLimiter();
limiter.setDisabledTimes(disabledTimes);
Assert.assertFalse(limiter.isOutOfRange(input, HOUR_INDEX, Timepoint.TYPE.MINUTE));
}
@Test
public void isOutOfRangeHourShouldReturnTrueWhenADisabledTimeIsTestedWithHourResolution() {
// If there are only disabledTimes, there will still be other times that are valid
Timepoint[] disabledTimes = {
new Timepoint(12),
new Timepoint(13),
new Timepoint(14)
};
Timepoint input = disabledTimes[0];
DefaultTimepointLimiter limiter = new DefaultTimepointLimiter();
limiter.setDisabledTimes(disabledTimes);
Assert.assertTrue(limiter.isOutOfRange(input, HOUR_INDEX, Timepoint.TYPE.HOUR));
}
@Test
public void isOutOfRangeMinuteShouldReturnFalseWhenADisabledTimeIsTestedWithSecondResolution() {
// If there are only disabledTimes, there will still be other times that are valid
Timepoint[] disabledTimes = {
new Timepoint(12, 15),
new Timepoint(13, 16),
new Timepoint(14, 17)
};
Timepoint input = disabledTimes[0];
DefaultTimepointLimiter limiter = new DefaultTimepointLimiter();
limiter.setDisabledTimes(disabledTimes);
Assert.assertFalse(limiter.isOutOfRange(input, MINUTE_INDEX, Timepoint.TYPE.SECOND));
}
@Test
public void isOutOfRangeMinuteShouldReturnFalseWhenADisabledTimeIsTestedWithMinuteResolution() {
// If there are only disabledTimes, there will still be other times that are valid
Timepoint[] disabledTimes = {
new Timepoint(12, 15),
new Timepoint(13, 16),
new Timepoint(14, 17)
};
Timepoint input = disabledTimes[0];
DefaultTimepointLimiter limiter = new DefaultTimepointLimiter();
limiter.setDisabledTimes(disabledTimes);
Assert.assertTrue(limiter.isOutOfRange(input, MINUTE_INDEX, Timepoint.TYPE.MINUTE));
}
@Test
public void isOutOfRangeHourShouldReturnTrueWhenADisabledTimeCancelsASelectableTime() {
Timepoint[] disabledTimes = {
new Timepoint(12),
new Timepoint(13)
};
Timepoint[] selectableTimes = {
new Timepoint(12),
new Timepoint(14),
new Timepoint(15)
};
Timepoint input = new Timepoint(12);
DefaultTimepointLimiter limiter = new DefaultTimepointLimiter();
limiter.setDisabledTimes(disabledTimes);
limiter.setSelectableTimes(selectableTimes);
Assert.assertTrue(limiter.isOutOfRange(input, HOUR_INDEX, Timepoint.TYPE.SECOND));
}
@Test
public void roundToNearestShouldWorkWhenSelectableTimesContainsDuplicateEntries() {
Timepoint[] selectableTimes = {
new Timepoint(11),
new Timepoint(12),
new Timepoint(12),
new Timepoint(13)
};
Timepoint input = new Timepoint(12, 29);
Timepoint expected = new Timepoint(12);
DefaultTimepointLimiter limiter = new DefaultTimepointLimiter();
limiter.setSelectableTimes(selectableTimes);
Assert.assertEquals(limiter.roundToNearest(input, null, Timepoint.TYPE.SECOND), expected);
}
@Test
public void roundToNearestShouldReturnMaxTimeIfBiggerThanMaxTime() {
Timepoint maxTime = new Timepoint(8);
Timepoint input = new Timepoint(12);
DefaultTimepointLimiter limiter = new DefaultTimepointLimiter();
limiter.setMaxTime(maxTime);
Assert.assertEquals(limiter.roundToNearest(input, null, Timepoint.TYPE.SECOND), maxTime);
}
@Test
public void roundToNearestShouldReturnMinTimeIfSmallerThanMinTime() {
Timepoint minTime = new Timepoint(8);
Timepoint input = new Timepoint(7);
DefaultTimepointLimiter limiter = new DefaultTimepointLimiter();
limiter.setMinTime(minTime);
Assert.assertEquals(limiter.roundToNearest(input, null, Timepoint.TYPE.SECOND), minTime);
}
@Test
public void roundToNearestShouldReturnInputIfNotOutOfRange() {
Timepoint input = new Timepoint(12, 13, 14);
DefaultTimepointLimiter limiter = new DefaultTimepointLimiter();
Assert.assertEquals(limiter.roundToNearest(input, null, Timepoint.TYPE.SECOND), input);
}
@Test
public void roundToNearestShouldReturnSelectableTime() {
Timepoint[] selectableTimes = {
new Timepoint(11, 12, 14),
new Timepoint(12, 13, 14),
new Timepoint(13, 14, 15)
};
Timepoint input = new Timepoint(11);
DefaultTimepointLimiter limiter = new DefaultTimepointLimiter();
limiter.setSelectableTimes(selectableTimes);
Assert.assertEquals(limiter.roundToNearest(input, null, Timepoint.TYPE.SECOND), selectableTimes[0]);
}
@Test
public void roundToNearestShouldNotChangeTheMinutesWhenOptionIsSet() {
Timepoint[] selectableTimes = {
new Timepoint(11, 12, 13),
new Timepoint(12),
new Timepoint(12, 13, 14),
new Timepoint(15, 16, 17)
};
Timepoint input = new Timepoint(11, 12, 59);
DefaultTimepointLimiter limiter = new DefaultTimepointLimiter();
limiter.setSelectableTimes(selectableTimes);
Assert.assertEquals(limiter.roundToNearest(input, Timepoint.TYPE.MINUTE, Timepoint.TYPE.SECOND).getHour(), input.getHour());
Assert.assertEquals(limiter.roundToNearest(input, Timepoint.TYPE.MINUTE, Timepoint.TYPE.SECOND).getMinute(), input.getMinute());
}
@Test
public void roundToNearestShouldNotChangeTheHourWhenOptionIsSet() {
Timepoint[] selectableTimes = {
new Timepoint(11, 12, 13),
new Timepoint(12),
new Timepoint(12, 13, 14),
new Timepoint(13),
new Timepoint(15, 16, 17)
};
Timepoint input = new Timepoint(12, 59, 59);
DefaultTimepointLimiter limiter = new DefaultTimepointLimiter();
limiter.setSelectableTimes(selectableTimes);
Assert.assertEquals(limiter.roundToNearest(input, Timepoint.TYPE.HOUR, Timepoint.TYPE.SECOND).getHour(), input.getHour());
}
@Test
public void roundToNearestShouldNotChangeTheHourWhenOptionIsSet2() {
Timepoint[] selectableTimes = {
new Timepoint(11, 12, 13),
new Timepoint(12),
new Timepoint(12, 13, 14),
new Timepoint(13),
new Timepoint(15, 16, 17)
};
Timepoint input = new Timepoint(15, 59, 59);
DefaultTimepointLimiter limiter = new DefaultTimepointLimiter();
limiter.setSelectableTimes(selectableTimes);
Assert.assertEquals(limiter.roundToNearest(input, Timepoint.TYPE.HOUR, Timepoint.TYPE.SECOND).getHour(), input.getHour());
}
@Test
public void roundToNearestShouldNotChangeAnythingWhenSecondOptionIsSet() {
Timepoint[] selectableTimes = {
new Timepoint(11, 12, 13),
new Timepoint(12),
new Timepoint(12, 13, 14),
new Timepoint(13),
new Timepoint(15, 16, 17)
};
Timepoint input = new Timepoint(12, 59, 59);
DefaultTimepointLimiter limiter = new DefaultTimepointLimiter();
limiter.setSelectableTimes(selectableTimes);
Assert.assertEquals(limiter.roundToNearest(input, Timepoint.TYPE.SECOND, Timepoint.TYPE.SECOND), input);
}
@Test
public void roundToNearestShouldRoundToNearest() {
Timepoint[] selectableTimes = {
new Timepoint(11, 12, 13),
new Timepoint(11, 12, 16),
new Timepoint(12)
};
Timepoint input = new Timepoint(11, 12, 14);
DefaultTimepointLimiter limiter = new DefaultTimepointLimiter();
limiter.setSelectableTimes(selectableTimes);
Assert.assertEquals(limiter.roundToNearest(input, null, Timepoint.TYPE.SECOND), selectableTimes[0]);
}
@Test
public void roundToNearestShouldRoundToNearestSelectableThatIsNotDisabled() {
Timepoint[] selectableTimes = {
new Timepoint(11, 12, 13),
new Timepoint(12, 13, 14),
new Timepoint(13)
};
Timepoint[] disabledTimes = {
new Timepoint(12, 13, 14)
};
Timepoint input = new Timepoint(12, 13, 15);
DefaultTimepointLimiter limiter = new DefaultTimepointLimiter();
limiter.setSelectableTimes(selectableTimes);
limiter.setDisabledTimes(disabledTimes);
Assert.assertEquals(limiter.roundToNearest(input, null, Timepoint.TYPE.SECOND), selectableTimes[2]);
}
@Test
public void roundToNearestShouldRoundWithSecondIncrementsIfInputIsDisabled() {
Timepoint[] disabledTimes = {
new Timepoint(11, 12, 13),
new Timepoint(12, 13, 14),
new Timepoint(13, 14, 15)
};
Timepoint input = disabledTimes[0];
DefaultTimepointLimiter limiter = new DefaultTimepointLimiter();
Timepoint expected = new Timepoint(11, 12, 14);
limiter.setDisabledTimes(disabledTimes);
Assert.assertEquals(limiter.roundToNearest(input, null, Timepoint.TYPE.SECOND), expected);
}
@Test
public void roundToNearestShouldRoundWithSecondIncrementsIfInputIsDisabled2() {
Timepoint[] disabledTimes = {
new Timepoint(11, 12, 13),
new Timepoint(11, 12, 14),
new Timepoint(12, 13, 14),
new Timepoint(13, 14, 15)
};
Timepoint input = disabledTimes[0];
DefaultTimepointLimiter limiter = new DefaultTimepointLimiter();
Timepoint expected = new Timepoint(11, 12, 12);
limiter.setDisabledTimes(disabledTimes);
Assert.assertEquals(limiter.roundToNearest(input, null, Timepoint.TYPE.SECOND), expected);
}
@Test
public void roundToNearestShouldRoundWithSecondIncrementsIfInputIsDisabled3() {
Timepoint[] disabledTimes = {
new Timepoint(11, 12, 13),
new Timepoint(11, 12, 12),
new Timepoint(11, 12, 14),
new Timepoint(12, 13, 14),
new Timepoint(13, 14, 15)
};
Timepoint input = disabledTimes[0];
DefaultTimepointLimiter limiter = new DefaultTimepointLimiter();
Timepoint expected = new Timepoint(11, 12, 15);
limiter.setDisabledTimes(disabledTimes);
Assert.assertEquals(limiter.roundToNearest(input, null, Timepoint.TYPE.SECOND), expected);
}
@Test
public void roundToNearestShouldRoundWithMinuteIncrementsIfInputIsDisabled() {
Timepoint[] disabledTimes = {
new Timepoint(11, 12, 13),
new Timepoint(12, 13, 14),
new Timepoint(13, 14, 15)
};
Timepoint input = disabledTimes[0];
DefaultTimepointLimiter limiter = new DefaultTimepointLimiter();
Timepoint expected = new Timepoint(11, 13, 13);
limiter.setDisabledTimes(disabledTimes);
Assert.assertEquals(limiter.roundToNearest(input, null, Timepoint.TYPE.MINUTE), expected);
}
@Test
public void roundToNearestShouldRoundWithHourIncrementsIfInputIsDisabled() {
Timepoint[] disabledTimes = {
new Timepoint(11, 12, 13),
new Timepoint(12, 13, 14),
new Timepoint(13, 14, 15)
};
Timepoint input = disabledTimes[0];
DefaultTimepointLimiter limiter = new DefaultTimepointLimiter();
Timepoint expected = new Timepoint(10, 12, 13);
limiter.setDisabledTimes(disabledTimes);
Assert.assertEquals(limiter.roundToNearest(input, null, Timepoint.TYPE.HOUR), expected);
}
@Test
public void roundToNearestIfInputDisablesAtLowerAndUpperTime() {
Timepoint[] disabledTimes = new Timepoint[180];
for(int l=0; l<=59; l++){ disabledTimes[l] = new Timepoint(0, l); }
for(int l=0; l<=59; l++){ disabledTimes[60+l] = new Timepoint(1, l); }
for(int l=0; l<=59; l++){ disabledTimes[120+l] = new Timepoint(23, l); }
Timepoint input = new Timepoint(0, 29, 0);
DefaultTimepointLimiter limiter = new DefaultTimepointLimiter();
Timepoint expected = new Timepoint(2, 0, 0);
Timepoint expected2 = new Timepoint(2, 29, 0);
limiter.setDisabledTimes(disabledTimes);
Assert.assertEquals(limiter.roundToNearest(input, null, Timepoint.TYPE.MINUTE), expected);
Assert.assertEquals(limiter.roundToNearest(input, null, Timepoint.TYPE.HOUR), expected2);
}
}

View File

@@ -0,0 +1,28 @@
package com.wdullaer.materialdatetimepicker.time;
import org.junit.Assert;
import org.junit.Test;
public class TimePickerDialogTest {
@Test
public void getPickerResolutionShouldReturnSecondIfSecondsAreEnabled() {
TimePickerDialog tpd = TimePickerDialog.newInstance(null, false);
tpd.enableSeconds(true);
Assert.assertEquals(tpd.getPickerResolution(), Timepoint.TYPE.SECOND);
}
@Test
public void getPickerResolutionShouldReturnMinuteIfMinutesAreEnabled() {
TimePickerDialog tpd = TimePickerDialog.newInstance(null, false);
tpd.enableSeconds(false);
tpd.enableMinutes(true);
Assert.assertEquals(tpd.getPickerResolution(), Timepoint.TYPE.MINUTE);
}
@Test
public void getPickerResolutionShouldReturnHourIfMinutesAndSecondsAreDisabled() {
TimePickerDialog tpd = TimePickerDialog.newInstance(null, false);
tpd.enableMinutes(false);
Assert.assertEquals(tpd.getPickerResolution(), Timepoint.TYPE.HOUR);
}
}

View File

@@ -0,0 +1,233 @@
package com.wdullaer.materialdatetimepicker.time;
import org.junit.Test;
import org.junit.Assert;
import java.util.HashSet;
public class TimepointTest {
@Test
public void timepointsWithSameFieldsShouldHaveSameHashCode() {
Timepoint first = new Timepoint(12, 0, 0);
Timepoint second = new Timepoint(12, 0, 0);
Assert.assertEquals(first.hashCode(), second.hashCode());
}
@Test
public void timepointsWithSameFieldsShouldBeEquals() {
Timepoint first = new Timepoint(12, 0, 0);
Timepoint second = new Timepoint(12, 0, 0);
Assert.assertEquals(first, second);
}
@Test
public void timepointsWithSameFieldsShouldBeDistinctInHashSet() {
HashSet<Timepoint> timepoints = new HashSet<>(4);
timepoints.add(new Timepoint(12, 0, 0));
timepoints.add(new Timepoint(12, 0, 0));
timepoints.add(new Timepoint(12, 0, 0));
timepoints.add(new Timepoint(12, 0, 0));
Assert.assertEquals(timepoints.size(), 1);
}
@Test
public void timepointsWithDifferentFieldsShouldNotBeDistinctInHashSet() {
HashSet<Timepoint> timepoints = new HashSet<>(4);
timepoints.add(new Timepoint(12, 1, 0));
timepoints.add(new Timepoint(12, 2, 0));
timepoints.add(new Timepoint(12, 3, 0));
timepoints.add(new Timepoint(12, 4, 0));
Assert.assertEquals(timepoints.size(), 4);
}
@Test
public void compareToShouldReturnNegativeIfArgumentIsBigger() {
Timepoint orig = new Timepoint(12, 11, 10);
Timepoint arg = new Timepoint(13, 14, 15);
Assert.assertTrue(orig.compareTo(arg) < 0);
}
@Test
public void compareToShouldReturnPositiveIfArgumentIsSmaller() {
Timepoint orig = new Timepoint(12, 11, 10);
Timepoint arg = new Timepoint(10, 14, 15);
Assert.assertTrue(orig.compareTo(arg) > 0);
}
@Test
public void compareToShouldReturnZeroIfArgumentIsEqual() {
Timepoint orig = new Timepoint(12, 11, 10);
Timepoint arg = new Timepoint(12, 11, 10);
Assert.assertEquals(0, orig.compareTo(arg));
}
@Test
public void isAMShouldReturnTrueIfTimepointIsBeforeMidday() {
Timepoint timepoint = new Timepoint(11);
Assert.assertTrue(timepoint.isAM());
}
@Test
public void isAMShouldReturnFalseIfTimepointIsMidday() {
Timepoint timepoint = new Timepoint(12);
Assert.assertFalse(timepoint.isAM());
}
@Test
public void isAMShouldReturnFalseIfTimepointIsAfterMidday() {
Timepoint timepoint = new Timepoint(13);
Assert.assertFalse(timepoint.isAM());
}
@Test
public void isAMShouldReturnTrueIfTimepointIsMidnight() {
Timepoint timepoint = new Timepoint(0);
Assert.assertTrue(timepoint.isAM());
}
@Test
public void isPMShouldReturnFalseIfTimepointIsBeforeMidday() {
Timepoint timepoint = new Timepoint(11);
Assert.assertFalse(timepoint.isPM());
}
@Test
public void isPMShouldReturnTrueIfTimepointIsMidday() {
Timepoint timepoint = new Timepoint(12);
Assert.assertTrue(timepoint.isPM());
}
@Test
public void isPMShouldReturnTrueIfTimepointIsAfterMidday() {
Timepoint timepoint = new Timepoint(13);
Assert.assertTrue(timepoint.isPM());
}
@Test
public void isPMShouldReturnFalseIfTimepointIsMidnight() {
Timepoint timepoint = new Timepoint(0);
Assert.assertFalse(timepoint.isPM());
}
@Test
public void setAMShouldDoNothingIfTimepointIsBeforeMidday() {
Timepoint timepoint = new Timepoint(11);
timepoint.setAM();
Assert.assertEquals(timepoint.getHour(), 11);
}
@Test
public void setAMShouldSetToMidnightIfTimepointIsMidday() {
Timepoint timepoint = new Timepoint(12);
timepoint.setAM();
Assert.assertEquals(timepoint.getHour(), 0);
}
@Test
public void setAMShouldSetBeforeMiddayIfTimepointIsAfterMidday() {
Timepoint timepoint = new Timepoint(13);
timepoint.setAM();
Assert.assertEquals(timepoint.getHour(), 1);
}
@Test
public void setAMShouldDoNothingIfTimepointIsMidnight() {
Timepoint timepoint = new Timepoint(0);
timepoint.setAM();
Assert.assertEquals(timepoint.getHour(), 0);
}
@Test
public void setAMShouldNotChangeMinutesOrSeconds() {
Timepoint timepoint = new Timepoint(13, 14, 15);
timepoint.setAM();
Assert.assertEquals(timepoint.getMinute(), 14);
Assert.assertEquals(timepoint.getSecond(), 15);
}
@Test
public void setPMShouldDoNothingIfTimepointIsAfterMidday() {
Timepoint timepoint = new Timepoint(13);
timepoint.setPM();
Assert.assertEquals(timepoint.getHour(), 13);
}
@Test
public void setPMShouldSetToMiddayIfTimepointIsMidnight() {
Timepoint timepoint = new Timepoint(0);
timepoint.setPM();
Assert.assertEquals(timepoint.getHour(), 12);
}
@Test
public void setPMShouldSetAfterMiddayIfTimepointIsBeforeMidday() {
Timepoint timepoint = new Timepoint(5);
timepoint.setPM();
Assert.assertEquals(timepoint.getHour(), 17);
}
@Test
public void setPMShouldDoNothingIfTimepointIsMidday() {
Timepoint timepoint = new Timepoint(12);
timepoint.setPM();
Assert.assertEquals(timepoint.getHour(), 12);
}
@Test
public void setPMShouldNotChangeMinutesOrSeconds() {
Timepoint timepoint = new Timepoint(1, 14, 15);
timepoint.setPM();
Assert.assertEquals(timepoint.getMinute(), 14);
Assert.assertEquals(timepoint.getSecond(), 15);
}
@Test
public void equalsShouldReturnTrueWhenInputsAreEqualWithSecondsResolution() {
Timepoint timepoint1 = new Timepoint(1, 14, 15);
Timepoint timepoint2 = new Timepoint(1, 14, 15);
Assert.assertTrue(timepoint1.equals(timepoint2, Timepoint.TYPE.SECOND));
}
@Test
public void equalsShouldReturnFalseWhenInputsDifferWithSecondsResolution() {
Timepoint timepoint1 = new Timepoint(1, 14, 15);
Timepoint timepoint2 = new Timepoint(1, 14, 16);
Assert.assertFalse(timepoint1.equals(timepoint2, Timepoint.TYPE.SECOND));
}
@Test
public void equalsShouldIgnoreSecondsWithMinuteResolution() {
Timepoint timepoint1 = new Timepoint(1, 14, 15);
Timepoint timepoint2 = new Timepoint(1, 14, 16);
Assert.assertTrue(timepoint1.equals(timepoint2, Timepoint.TYPE.MINUTE));
}
@Test
public void equalsShouldReturnFalseWhenInputsDifferWithMinuteResolution() {
Timepoint timepoint1 = new Timepoint(1, 14, 15);
Timepoint timepoint2 = new Timepoint(1, 15, 15);
Assert.assertFalse(timepoint1.equals(timepoint2, Timepoint.TYPE.MINUTE));
}
@Test
public void equalsShouldIgnoreSecondsWithHourResolution() {
Timepoint timepoint1 = new Timepoint(1, 14, 15);
Timepoint timepoint2 = new Timepoint(1, 14, 16);
Assert.assertTrue(timepoint1.equals(timepoint2, Timepoint.TYPE.HOUR));
}
@Test
public void equalsShouldIgnoreMinutesWithHourResolution() {
Timepoint timepoint1 = new Timepoint(1, 14, 15);
Timepoint timepoint2 = new Timepoint(1, 15, 16);
Assert.assertTrue(timepoint1.equals(timepoint2, Timepoint.TYPE.HOUR));
}
@Test
public void equalsShouldReturnFalseWhenInputsDifferWithHourResolution() {
Timepoint timepoint1 = new Timepoint(1, 14, 15);
Timepoint timepoint2 = new Timepoint(2, 14, 15);
Assert.assertFalse(timepoint1.equals(timepoint2, Timepoint.TYPE.HOUR));
}
}