diff --git a/src/test/java/org/apache/commons/lang3/time/CalendarUtilsTest.java b/src/test/java/org/apache/commons/lang3/time/CalendarUtilsTest.java
index 74ac0097f..3ae5a9651 100644
--- a/src/test/java/org/apache/commons/lang3/time/CalendarUtilsTest.java
+++ b/src/test/java/org/apache/commons/lang3/time/CalendarUtilsTest.java
@@ -26,8 +26,8 @@
public class CalendarUtilsTest {
@Test
- public void testGetYear() {
- assertEquals(Calendar.getInstance().get(Calendar.YEAR), CalendarUtils.INSTANCE.getYear());
+ public void testGetDayOfMonth() {
+ assertEquals(Calendar.getInstance().get(Calendar.DAY_OF_MONTH), CalendarUtils.INSTANCE.getDayOfMonth());
}
@Test
@@ -36,8 +36,8 @@ public void testGetMonth() {
}
@Test
- public void testGetDayOfMonth() {
- assertEquals(Calendar.getInstance().get(Calendar.DAY_OF_MONTH), CalendarUtils.INSTANCE.getDayOfMonth());
+ public void testGetYear() {
+ assertEquals(Calendar.getInstance().get(Calendar.YEAR), CalendarUtils.INSTANCE.getYear());
}
}
diff --git a/src/test/java/org/apache/commons/lang3/time/DateFormatUtilsTest.java b/src/test/java/org/apache/commons/lang3/time/DateFormatUtilsTest.java
index 31679de72..cff1aac5e 100644
--- a/src/test/java/org/apache/commons/lang3/time/DateFormatUtilsTest.java
+++ b/src/test/java/org/apache/commons/lang3/time/DateFormatUtilsTest.java
@@ -38,6 +38,24 @@
*/
@SuppressWarnings("deprecation") // tests lots of deprecated items
public class DateFormatUtilsTest {
+ private void assertFormats(final String expectedValue, final String pattern, final TimeZone timeZone, final Calendar cal) {
+ assertEquals(expectedValue, DateFormatUtils.format(cal.getTime(), pattern, timeZone));
+ assertEquals(expectedValue, DateFormatUtils.format(cal.getTime().getTime(), pattern, timeZone));
+ assertEquals(expectedValue, DateFormatUtils.format(cal, pattern, timeZone));
+ }
+
+ private Calendar createFebruaryTestDate(final TimeZone timeZone) {
+ final Calendar cal = Calendar.getInstance(timeZone);
+ cal.set(2002, Calendar.FEBRUARY, 23, 9, 11, 12);
+ return cal;
+ }
+
+ private Calendar createJuneTestDate(final TimeZone timeZone) {
+ final Calendar cal = Calendar.getInstance(timeZone);
+ cal.set(2003, Calendar.JUNE, 8, 10, 11, 12);
+ return cal;
+ }
+
//-----------------------------------------------------------------------
@Test
public void testConstructor() {
@@ -49,6 +67,20 @@ public void testConstructor() {
assertFalse(Modifier.isFinal(DateFormatUtils.class.getModifiers()));
}
+ @Test
+ public void testDateISO() {
+ testGmtMinus3("2002-02-23", DateFormatUtils.ISO_DATE_FORMAT.getPattern());
+ testGmtMinus3("2002-02-23-03:00", DateFormatUtils.ISO_DATE_TIME_ZONE_FORMAT.getPattern());
+ testUTC("2002-02-23Z", DateFormatUtils.ISO_DATE_TIME_ZONE_FORMAT.getPattern());
+ }
+
+ @Test
+ public void testDateTimeISO() {
+ testGmtMinus3("2002-02-23T09:11:12", DateFormatUtils.ISO_DATETIME_FORMAT.getPattern());
+ testGmtMinus3("2002-02-23T09:11:12-03:00", DateFormatUtils.ISO_DATETIME_TIME_ZONE_FORMAT.getPattern());
+ testUTC("2002-02-23T09:11:12Z", DateFormatUtils.ISO_DATETIME_TIME_ZONE_FORMAT.getPattern());
+ }
+
//-----------------------------------------------------------------------
@Test
public void testFormat() {
@@ -110,77 +142,11 @@ public void testFormatUTC() {
assertEquals ("2005-01-01T12:00:00", DateFormatUtils.formatUTC(c.getTime().getTime(), DateFormatUtils.ISO_DATETIME_FORMAT.getPattern(), Locale.US));
}
- private void assertFormats(final String expectedValue, final String pattern, final TimeZone timeZone, final Calendar cal) {
- assertEquals(expectedValue, DateFormatUtils.format(cal.getTime(), pattern, timeZone));
- assertEquals(expectedValue, DateFormatUtils.format(cal.getTime().getTime(), pattern, timeZone));
- assertEquals(expectedValue, DateFormatUtils.format(cal, pattern, timeZone));
- }
-
- private Calendar createFebruaryTestDate(final TimeZone timeZone) {
- final Calendar cal = Calendar.getInstance(timeZone);
- cal.set(2002, Calendar.FEBRUARY, 23, 9, 11, 12);
- return cal;
- }
-
- private Calendar createJuneTestDate(final TimeZone timeZone) {
- final Calendar cal = Calendar.getInstance(timeZone);
- cal.set(2003, Calendar.JUNE, 8, 10, 11, 12);
- return cal;
- }
-
private void testGmtMinus3(final String expectedValue, final String pattern) {
final TimeZone timeZone = TimeZone.getTimeZone("GMT-3");
assertFormats(expectedValue, pattern, timeZone, createFebruaryTestDate(timeZone));
}
- private void testUTC(final String expectedValue, final String pattern) {
- final TimeZone timeZone = FastTimeZone.getGmtTimeZone();
- assertFormats(expectedValue, pattern, timeZone, createFebruaryTestDate(timeZone));
- }
-
- @Test
- public void testDateTimeISO() {
- testGmtMinus3("2002-02-23T09:11:12", DateFormatUtils.ISO_DATETIME_FORMAT.getPattern());
- testGmtMinus3("2002-02-23T09:11:12-03:00", DateFormatUtils.ISO_DATETIME_TIME_ZONE_FORMAT.getPattern());
- testUTC("2002-02-23T09:11:12Z", DateFormatUtils.ISO_DATETIME_TIME_ZONE_FORMAT.getPattern());
- }
-
- @Test
- public void testDateISO() {
- testGmtMinus3("2002-02-23", DateFormatUtils.ISO_DATE_FORMAT.getPattern());
- testGmtMinus3("2002-02-23-03:00", DateFormatUtils.ISO_DATE_TIME_ZONE_FORMAT.getPattern());
- testUTC("2002-02-23Z", DateFormatUtils.ISO_DATE_TIME_ZONE_FORMAT.getPattern());
- }
-
- @Test
- public void testTimeISO() {
- testGmtMinus3("T09:11:12", DateFormatUtils.ISO_TIME_FORMAT.getPattern());
- testGmtMinus3("T09:11:12-03:00", DateFormatUtils.ISO_TIME_TIME_ZONE_FORMAT.getPattern());
- testUTC("T09:11:12Z", DateFormatUtils.ISO_TIME_TIME_ZONE_FORMAT.getPattern());
- }
-
- @Test
- public void testTimeNoTISO() {
- testGmtMinus3("09:11:12", DateFormatUtils.ISO_TIME_NO_T_FORMAT.getPattern());
- testGmtMinus3("09:11:12-03:00", DateFormatUtils.ISO_TIME_NO_T_TIME_ZONE_FORMAT.getPattern());
- testUTC("09:11:12Z", DateFormatUtils.ISO_TIME_NO_T_TIME_ZONE_FORMAT.getPattern());
- }
-
- @DefaultLocale(language = "en")
- @Test
- public void testSMTP() {
- TimeZone timeZone = TimeZone.getTimeZone("GMT-3");
- Calendar june = createJuneTestDate(timeZone);
-
- assertFormats("Sun, 08 Jun 2003 10:11:12 -0300", DateFormatUtils.SMTP_DATETIME_FORMAT.getPattern(),
- timeZone, june);
-
- timeZone = FastTimeZone.getGmtTimeZone();
- june = createJuneTestDate(timeZone);
- assertFormats("Sun, 08 Jun 2003 10:11:12 +0000", DateFormatUtils.SMTP_DATETIME_FORMAT.getPattern(),
- timeZone, june);
- }
-
@Test
public void testLANG1000() throws Exception {
final String date = "2013-11-18T12:48:05Z";
@@ -238,4 +204,38 @@ public void testLang916() {
assertEquals("2009-10-16T07:42:16+01:00", value, "calendar");
}
}
+
+ @DefaultLocale(language = "en")
+ @Test
+ public void testSMTP() {
+ TimeZone timeZone = TimeZone.getTimeZone("GMT-3");
+ Calendar june = createJuneTestDate(timeZone);
+
+ assertFormats("Sun, 08 Jun 2003 10:11:12 -0300", DateFormatUtils.SMTP_DATETIME_FORMAT.getPattern(),
+ timeZone, june);
+
+ timeZone = FastTimeZone.getGmtTimeZone();
+ june = createJuneTestDate(timeZone);
+ assertFormats("Sun, 08 Jun 2003 10:11:12 +0000", DateFormatUtils.SMTP_DATETIME_FORMAT.getPattern(),
+ timeZone, june);
+ }
+
+ @Test
+ public void testTimeISO() {
+ testGmtMinus3("T09:11:12", DateFormatUtils.ISO_TIME_FORMAT.getPattern());
+ testGmtMinus3("T09:11:12-03:00", DateFormatUtils.ISO_TIME_TIME_ZONE_FORMAT.getPattern());
+ testUTC("T09:11:12Z", DateFormatUtils.ISO_TIME_TIME_ZONE_FORMAT.getPattern());
+ }
+
+ @Test
+ public void testTimeNoTISO() {
+ testGmtMinus3("09:11:12", DateFormatUtils.ISO_TIME_NO_T_FORMAT.getPattern());
+ testGmtMinus3("09:11:12-03:00", DateFormatUtils.ISO_TIME_NO_T_TIME_ZONE_FORMAT.getPattern());
+ testUTC("09:11:12Z", DateFormatUtils.ISO_TIME_NO_T_TIME_ZONE_FORMAT.getPattern());
+ }
+
+ private void testUTC(final String expectedValue, final String pattern) {
+ final TimeZone timeZone = FastTimeZone.getGmtTimeZone();
+ assertFormats(expectedValue, pattern, timeZone, createFebruaryTestDate(timeZone));
+ }
}
diff --git a/src/test/java/org/apache/commons/lang3/time/DateUtilsFragmentTest.java b/src/test/java/org/apache/commons/lang3/time/DateUtilsFragmentTest.java
index a920455a7..8e2913fde 100644
--- a/src/test/java/org/apache/commons/lang3/time/DateUtilsFragmentTest.java
+++ b/src/test/java/org/apache/commons/lang3/time/DateUtilsFragmentTest.java
@@ -47,137 +47,8 @@ public void setUp() {
}
@Test
- public void testNullDate() {
- assertThrows(
- NullPointerException.class,
- () -> DateUtils.getFragmentInMilliseconds((Date) null, Calendar.MILLISECOND));
-
- assertThrows(
- NullPointerException.class,
- () -> DateUtils.getFragmentInSeconds((Date) null, Calendar.MILLISECOND));
-
- assertThrows(
- NullPointerException.class,
- () -> DateUtils.getFragmentInMinutes((Date) null, Calendar.MILLISECOND));
-
- assertThrows(
- NullPointerException.class,
- () -> DateUtils.getFragmentInHours((Date) null, Calendar.MILLISECOND));
-
- assertThrows(
- NullPointerException.class,
- () -> DateUtils.getFragmentInDays((Date) null, Calendar.MILLISECOND));
- }
-
- @Test
- public void testNullCalendar() {
- assertThrows(
- IllegalArgumentException.class,
- () -> DateUtils.getFragmentInMilliseconds((Calendar) null, Calendar.MILLISECOND));
-
- assertThrows(
- IllegalArgumentException.class,
- () -> DateUtils.getFragmentInSeconds((Calendar) null, Calendar.MILLISECOND));
-
- assertThrows(
- IllegalArgumentException.class,
- () -> DateUtils.getFragmentInMinutes((Calendar) null, Calendar.MILLISECOND));
-
- assertThrows(
- IllegalArgumentException.class,
- () -> DateUtils.getFragmentInHours((Calendar) null, Calendar.MILLISECOND));
-
- assertThrows(
- IllegalArgumentException.class,
- () -> DateUtils.getFragmentInDays((Calendar) null, Calendar.MILLISECOND));
- }
-
- @Test
- public void testInvalidFragmentWithDate() {
- assertThrows(IllegalArgumentException.class, () -> DateUtils.getFragmentInMilliseconds(aDate, 0));
- assertThrows(IllegalArgumentException.class, () -> DateUtils.getFragmentInSeconds(aDate, 0));
- assertThrows(IllegalArgumentException.class, () -> DateUtils.getFragmentInMinutes(aDate, 0));
- assertThrows(IllegalArgumentException.class, () -> DateUtils.getFragmentInHours(aDate, 0));
- assertThrows(IllegalArgumentException.class, () -> DateUtils.getFragmentInDays(aDate, 0));
- }
-
- @Test
- public void testInvalidFragmentWithCalendar() {
- assertThrows(IllegalArgumentException.class, () -> DateUtils.getFragmentInMilliseconds(aCalendar, 0));
- assertThrows(IllegalArgumentException.class, () -> DateUtils.getFragmentInSeconds(aCalendar, 0));
- assertThrows(IllegalArgumentException.class, () -> DateUtils.getFragmentInMinutes(aCalendar, 0));
- assertThrows(IllegalArgumentException.class, () -> DateUtils.getFragmentInHours(aCalendar, 0));
- assertThrows(IllegalArgumentException.class, () -> DateUtils.getFragmentInDays(aCalendar, 0));
- }
-
- @Test
- public void testMillisecondFragmentInLargerUnitWithDate() {
- assertEquals(0, DateUtils.getFragmentInMilliseconds(aDate, Calendar.MILLISECOND));
- assertEquals(0, DateUtils.getFragmentInSeconds(aDate, Calendar.MILLISECOND));
- assertEquals(0, DateUtils.getFragmentInMinutes(aDate, Calendar.MILLISECOND));
- assertEquals(0, DateUtils.getFragmentInHours(aDate, Calendar.MILLISECOND));
- assertEquals(0, DateUtils.getFragmentInDays(aDate, Calendar.MILLISECOND));
- }
-
- @Test
- public void testMillisecondFragmentInLargerUnitWithCalendar() {
- assertEquals(0, DateUtils.getFragmentInMilliseconds(aCalendar, Calendar.MILLISECOND));
- assertEquals(0, DateUtils.getFragmentInSeconds(aCalendar, Calendar.MILLISECOND));
- assertEquals(0, DateUtils.getFragmentInMinutes(aCalendar, Calendar.MILLISECOND));
- assertEquals(0, DateUtils.getFragmentInHours(aCalendar, Calendar.MILLISECOND));
- assertEquals(0, DateUtils.getFragmentInDays(aCalendar, Calendar.MILLISECOND));
- }
-
- @Test
- public void testSecondFragmentInLargerUnitWithDate() {
- assertEquals(0, DateUtils.getFragmentInSeconds(aDate, Calendar.SECOND));
- assertEquals(0, DateUtils.getFragmentInMinutes(aDate, Calendar.SECOND));
- assertEquals(0, DateUtils.getFragmentInHours(aDate, Calendar.SECOND));
- assertEquals(0, DateUtils.getFragmentInDays(aDate, Calendar.SECOND));
- }
-
- @Test
- public void testSecondFragmentInLargerUnitWithCalendar() {
- assertEquals(0, DateUtils.getFragmentInSeconds(aCalendar, Calendar.SECOND));
- assertEquals(0, DateUtils.getFragmentInMinutes(aCalendar, Calendar.SECOND));
- assertEquals(0, DateUtils.getFragmentInHours(aCalendar, Calendar.SECOND));
- assertEquals(0, DateUtils.getFragmentInDays(aCalendar, Calendar.SECOND));
- }
-
- @Test
- public void testMinuteFragmentInLargerUnitWithDate() {
- assertEquals(0, DateUtils.getFragmentInMinutes(aDate, Calendar.MINUTE));
- assertEquals(0, DateUtils.getFragmentInHours(aDate, Calendar.MINUTE));
- assertEquals(0, DateUtils.getFragmentInDays(aDate, Calendar.MINUTE));
- }
-
- @Test
- public void testMinuteFragmentInLargerUnitWithCalendar() {
- assertEquals(0, DateUtils.getFragmentInMinutes(aCalendar, Calendar.MINUTE));
- assertEquals(0, DateUtils.getFragmentInHours(aCalendar, Calendar.MINUTE));
- assertEquals(0, DateUtils.getFragmentInDays(aCalendar, Calendar.MINUTE));
- }
-
- @Test
- public void testHourOfDayFragmentInLargerUnitWithDate() {
- assertEquals(0, DateUtils.getFragmentInHours(aDate, Calendar.HOUR_OF_DAY));
- assertEquals(0, DateUtils.getFragmentInDays(aDate, Calendar.HOUR_OF_DAY));
- }
-
- @Test
- public void testHourOfDayFragmentInLargerUnitWithCalendar() {
- assertEquals(0, DateUtils.getFragmentInHours(aCalendar, Calendar.HOUR_OF_DAY));
- assertEquals(0, DateUtils.getFragmentInDays(aCalendar, Calendar.HOUR_OF_DAY));
- }
-
- @Test
- public void testDayOfYearFragmentInLargerUnitWithDate() {
- assertEquals(0, DateUtils.getFragmentInDays(aDate, Calendar.DAY_OF_YEAR));
- }
-
- @Test
- public void testDayOfYearFragmentInLargerUnitWithCalendar() {
- assertEquals(0, DateUtils.getFragmentInDays(aCalendar, Calendar.DAY_OF_YEAR));
+ public void testDateFragmentInLargerUnitWithCalendar() {
+ assertEquals(0, DateUtils.getFragmentInDays(aCalendar, Calendar.DATE));
}
@Test
@@ -186,335 +57,13 @@ public void testDateFragmentInLargerUnitWithDate() {
}
@Test
- public void testDateFragmentInLargerUnitWithCalendar() {
- assertEquals(0, DateUtils.getFragmentInDays(aCalendar, Calendar.DATE));
- }
-
- //Calendar.SECOND as useful fragment
-
- @Test
- public void testMillisecondsOfSecondWithDate() {
- final long testResult = DateUtils.getFragmentInMilliseconds(aDate, Calendar.SECOND);
- assertEquals(millis, testResult);
+ public void testDayOfYearFragmentInLargerUnitWithCalendar() {
+ assertEquals(0, DateUtils.getFragmentInDays(aCalendar, Calendar.DAY_OF_YEAR));
}
@Test
- public void testMillisecondsOfSecondWithCalendar() {
- final long testResult = DateUtils.getFragmentInMilliseconds(aCalendar, Calendar.SECOND);
- assertEquals(millis, testResult);
- assertEquals(aCalendar.get(Calendar.MILLISECOND), testResult);
- }
-
- //Calendar.MINUTE as useful fragment
-
- @Test
- public void testMillisecondsOfMinuteWithDate() {
- final long testResult = DateUtils.getFragmentInMilliseconds(aDate, Calendar.MINUTE);
- assertEquals(millis + (seconds * DateUtils.MILLIS_PER_SECOND), testResult);
- }
-
- @Test
- public void testMillisecondsOfMinuteWithCalender() {
- final long testResult = DateUtils.getFragmentInMilliseconds(aCalendar, Calendar.MINUTE);
- assertEquals(millis + (seconds * DateUtils.MILLIS_PER_SECOND), testResult);
- }
-
- @Test
- public void testSecondsofMinuteWithDate() {
- final long testResult = DateUtils.getFragmentInSeconds(aDate, Calendar.MINUTE);
- assertEquals(seconds, testResult);
- }
-
- @Test
- public void testSecondsofMinuteWithCalendar() {
- final long testResult = DateUtils.getFragmentInSeconds(aCalendar, Calendar.MINUTE);
- assertEquals(seconds, testResult);
- assertEquals(aCalendar.get(Calendar.SECOND), testResult);
- }
-
- //Calendar.HOUR_OF_DAY as useful fragment
-
- @Test
- public void testMillisecondsOfHourWithDate() {
- final long testResult = DateUtils.getFragmentInMilliseconds(aDate, Calendar.HOUR_OF_DAY);
- assertEquals(millis + (seconds * DateUtils.MILLIS_PER_SECOND) + (minutes * DateUtils.MILLIS_PER_MINUTE), testResult);
- }
-
- @Test
- public void testMillisecondsOfHourWithCalendar() {
- final long testResult = DateUtils.getFragmentInMilliseconds(aCalendar, Calendar.HOUR_OF_DAY);
- assertEquals(millis + (seconds * DateUtils.MILLIS_PER_SECOND) + (minutes * DateUtils.MILLIS_PER_MINUTE), testResult);
- }
-
- @Test
- public void testSecondsofHourWithDate() {
- final long testResult = DateUtils.getFragmentInSeconds(aDate, Calendar.HOUR_OF_DAY);
- assertEquals(
- seconds
- + (minutes
- * DateUtils.MILLIS_PER_MINUTE / DateUtils.MILLIS_PER_SECOND),
- testResult);
- }
-
- @Test
- public void testSecondsofHourWithCalendar() {
- final long testResult = DateUtils.getFragmentInSeconds(aCalendar, Calendar.HOUR_OF_DAY);
- assertEquals(
- seconds
- + (minutes
- * DateUtils.MILLIS_PER_MINUTE / DateUtils.MILLIS_PER_SECOND),
- testResult);
- }
-
- @Test
- public void testMinutesOfHourWithDate() {
- final long testResult = DateUtils.getFragmentInMinutes(aDate, Calendar.HOUR_OF_DAY);
- assertEquals(minutes, testResult);
- }
-
- @Test
- public void testMinutesOfHourWithCalendar() {
- final long testResult = DateUtils.getFragmentInMinutes(aCalendar, Calendar.HOUR_OF_DAY);
- assertEquals(minutes, testResult);
- }
-
- //Calendar.DATE and Calendar.DAY_OF_YEAR as useful fragment
- @Test
- public void testMillisecondsOfDayWithDate() {
- long testresult = DateUtils.getFragmentInMilliseconds(aDate, Calendar.DATE);
- final long expectedValue = millis + (seconds * DateUtils.MILLIS_PER_SECOND) + (minutes * DateUtils.MILLIS_PER_MINUTE) + (hours * DateUtils.MILLIS_PER_HOUR);
- assertEquals(expectedValue, testresult);
- testresult = DateUtils.getFragmentInMilliseconds(aDate, Calendar.DAY_OF_YEAR);
- assertEquals(expectedValue, testresult);
- }
-
- @Test
- public void testMillisecondsOfDayWithCalendar() {
- long testresult = DateUtils.getFragmentInMilliseconds(aCalendar, Calendar.DATE);
- final long expectedValue = millis + (seconds * DateUtils.MILLIS_PER_SECOND) + (minutes * DateUtils.MILLIS_PER_MINUTE) + (hours * DateUtils.MILLIS_PER_HOUR);
- assertEquals(expectedValue, testresult);
- testresult = DateUtils.getFragmentInMilliseconds(aCalendar, Calendar.DAY_OF_YEAR);
- assertEquals(expectedValue, testresult);
- }
-
- @Test
- public void testSecondsOfDayWithDate() {
- long testresult = DateUtils.getFragmentInSeconds(aDate, Calendar.DATE);
- final long expectedValue = seconds + ((minutes * DateUtils.MILLIS_PER_MINUTE) + (hours * DateUtils.MILLIS_PER_HOUR))/ DateUtils.MILLIS_PER_SECOND;
- assertEquals(expectedValue, testresult);
- testresult = DateUtils.getFragmentInSeconds(aDate, Calendar.DAY_OF_YEAR);
- assertEquals(expectedValue, testresult);
- }
-
- @Test
- public void testSecondsOfDayWithCalendar() {
- long testresult = DateUtils.getFragmentInSeconds(aCalendar, Calendar.DATE);
- final long expectedValue = seconds + ((minutes * DateUtils.MILLIS_PER_MINUTE) + (hours * DateUtils.MILLIS_PER_HOUR))/ DateUtils.MILLIS_PER_SECOND;
- assertEquals(expectedValue, testresult);
- testresult = DateUtils.getFragmentInSeconds(aCalendar, Calendar.DAY_OF_YEAR);
- assertEquals(expectedValue, testresult);
- }
-
- @Test
- public void testMinutesOfDayWithDate() {
- long testResult = DateUtils.getFragmentInMinutes(aDate, Calendar.DATE);
- final long expectedValue = minutes + ((hours * DateUtils.MILLIS_PER_HOUR))/ DateUtils.MILLIS_PER_MINUTE;
- assertEquals(expectedValue, testResult);
- testResult = DateUtils.getFragmentInMinutes(aDate, Calendar.DAY_OF_YEAR);
- assertEquals(expectedValue, testResult);
- }
-
- @Test
- public void testMinutesOfDayWithCalendar() {
- long testResult = DateUtils.getFragmentInMinutes(aCalendar, Calendar.DATE);
- final long expectedValue = minutes + ((hours * DateUtils.MILLIS_PER_HOUR))/ DateUtils.MILLIS_PER_MINUTE;
- assertEquals(expectedValue, testResult);
- testResult = DateUtils.getFragmentInMinutes(aCalendar, Calendar.DAY_OF_YEAR);
- assertEquals(expectedValue, testResult);
- }
-
- @Test
- public void testHoursOfDayWithDate() {
- long testResult = DateUtils.getFragmentInHours(aDate, Calendar.DATE);
- final long expectedValue = hours;
- assertEquals(expectedValue, testResult);
- testResult = DateUtils.getFragmentInHours(aDate, Calendar.DAY_OF_YEAR);
- assertEquals(expectedValue, testResult);
- }
-
- @Test
- public void testHoursOfDayWithCalendar() {
- long testResult = DateUtils.getFragmentInHours(aCalendar, Calendar.DATE);
- final long expectedValue = hours;
- assertEquals(expectedValue, testResult);
- testResult = DateUtils.getFragmentInHours(aCalendar, Calendar.DAY_OF_YEAR);
- assertEquals(expectedValue, testResult);
- }
-
-
- //Calendar.MONTH as useful fragment
- @Test
- public void testMillisecondsOfMonthWithDate() {
- final long testResult = DateUtils.getFragmentInMilliseconds(aDate, Calendar.MONTH);
- assertEquals(millis + (seconds * DateUtils.MILLIS_PER_SECOND) + (minutes * DateUtils.MILLIS_PER_MINUTE)
- + (hours * DateUtils.MILLIS_PER_HOUR) + ((days - 1) * DateUtils.MILLIS_PER_DAY),
- testResult);
- }
-
- @Test
- public void testMillisecondsOfMonthWithCalendar() {
- final long testResult = DateUtils.getFragmentInMilliseconds(aCalendar, Calendar.MONTH);
- assertEquals(millis + (seconds * DateUtils.MILLIS_PER_SECOND) + (minutes * DateUtils.MILLIS_PER_MINUTE)
- + (hours * DateUtils.MILLIS_PER_HOUR) + ((days - 1) * DateUtils.MILLIS_PER_DAY),
-testResult);
- }
-
- @Test
- public void testSecondsOfMonthWithDate() {
- final long testResult = DateUtils.getFragmentInSeconds(aDate, Calendar.MONTH);
- assertEquals(
- seconds
- + ((minutes * DateUtils.MILLIS_PER_MINUTE)
- + (hours * DateUtils.MILLIS_PER_HOUR) + ((days - 1) * DateUtils.MILLIS_PER_DAY))
- / DateUtils.MILLIS_PER_SECOND,
- testResult);
- }
-
- @Test
- public void testSecondsOfMonthWithCalendar() {
- final long testResult = DateUtils.getFragmentInSeconds(aCalendar, Calendar.MONTH);
- assertEquals(
- seconds
- + ((minutes * DateUtils.MILLIS_PER_MINUTE)
- + (hours * DateUtils.MILLIS_PER_HOUR) + ((days - 1) * DateUtils.MILLIS_PER_DAY))
- / DateUtils.MILLIS_PER_SECOND,
- testResult);
- }
-
- @Test
- public void testMinutesOfMonthWithDate() {
- final long testResult = DateUtils.getFragmentInMinutes(aDate, Calendar.MONTH);
- assertEquals(minutes
- + ((hours * DateUtils.MILLIS_PER_HOUR) + ((days - 1) * DateUtils.MILLIS_PER_DAY))
- / DateUtils.MILLIS_PER_MINUTE,
- testResult);
- }
-
- @Test
- public void testMinutesOfMonthWithCalendar() {
- final long testResult = DateUtils.getFragmentInMinutes(aCalendar, Calendar.MONTH);
- assertEquals( minutes +((hours * DateUtils.MILLIS_PER_HOUR) + ((days - 1) * DateUtils.MILLIS_PER_DAY))
- / DateUtils.MILLIS_PER_MINUTE,
- testResult);
- }
-
- @Test
- public void testHoursOfMonthWithDate() {
- final long testResult = DateUtils.getFragmentInHours(aDate, Calendar.MONTH);
- assertEquals(hours + (((days - 1) * DateUtils.MILLIS_PER_DAY))
- / DateUtils.MILLIS_PER_HOUR,
- testResult);
- }
-
- @Test
- public void testHoursOfMonthWithCalendar() {
- final long testResult = DateUtils.getFragmentInHours(aCalendar, Calendar.MONTH);
- assertEquals( hours +(((days - 1) * DateUtils.MILLIS_PER_DAY))
- / DateUtils.MILLIS_PER_HOUR,
- testResult);
- }
-
- //Calendar.YEAR as useful fragment
- @Test
- public void testMillisecondsOfYearWithDate() {
- final long testResult = DateUtils.getFragmentInMilliseconds(aDate, Calendar.YEAR);
- final Calendar cal = Calendar.getInstance();
- cal.setTime(aDate);
- assertEquals(millis + (seconds * DateUtils.MILLIS_PER_SECOND) + (minutes * DateUtils.MILLIS_PER_MINUTE)
- + (hours * DateUtils.MILLIS_PER_HOUR) + ((cal.get(Calendar.DAY_OF_YEAR) - 1)* DateUtils.MILLIS_PER_DAY),
- testResult);
- }
-
- @Test
- public void testMillisecondsOfYearWithCalendar() {
- final long testResult = DateUtils.getFragmentInMilliseconds(aCalendar, Calendar.YEAR);
- assertEquals(millis + (seconds * DateUtils.MILLIS_PER_SECOND) + (minutes * DateUtils.MILLIS_PER_MINUTE)
- + (hours * DateUtils.MILLIS_PER_HOUR) + ((aCalendar.get(Calendar.DAY_OF_YEAR) - 1) * DateUtils.MILLIS_PER_DAY),
-testResult);
- }
-
- @Test
- public void testSecondsOfYearWithDate() {
- final long testResult = DateUtils.getFragmentInSeconds(aDate, Calendar.YEAR);
- final Calendar cal = Calendar.getInstance();
- cal.setTime(aDate);
- assertEquals(
- seconds
- + ((minutes * DateUtils.MILLIS_PER_MINUTE)
- + (hours * DateUtils.MILLIS_PER_HOUR) + ((cal.get(Calendar.DAY_OF_YEAR) - 1) * DateUtils.MILLIS_PER_DAY))
- / DateUtils.MILLIS_PER_SECOND,
- testResult);
- }
-
- @Test
- public void testSecondsOfYearWithCalendar() {
- final long testResult = DateUtils.getFragmentInSeconds(aCalendar, Calendar.YEAR);
- assertEquals(
- seconds
- + ((minutes * DateUtils.MILLIS_PER_MINUTE)
- + (hours * DateUtils.MILLIS_PER_HOUR) + ((aCalendar.get(Calendar.DAY_OF_YEAR) - 1) * DateUtils.MILLIS_PER_DAY))
- / DateUtils.MILLIS_PER_SECOND,
- testResult);
- }
-
- @Test
- public void testMinutesOfYearWithDate() {
- final long testResult = DateUtils.getFragmentInMinutes(aDate, Calendar.YEAR);
- final Calendar cal = Calendar.getInstance();
- cal.setTime(aDate);
- assertEquals(minutes
- + ((hours * DateUtils.MILLIS_PER_HOUR) + ((cal.get(Calendar.DAY_OF_YEAR) - 1) * DateUtils.MILLIS_PER_DAY))
- / DateUtils.MILLIS_PER_MINUTE,
- testResult);
- }
-
- @Test
- public void testMinutesOfYearWithCalendar() {
- final long testResult = DateUtils.getFragmentInMinutes(aCalendar, Calendar.YEAR);
- assertEquals( minutes +((hours * DateUtils.MILLIS_PER_HOUR) + ((aCalendar.get(Calendar.DAY_OF_YEAR) - 1) * DateUtils.MILLIS_PER_DAY))
- / DateUtils.MILLIS_PER_MINUTE,
- testResult);
- }
-
- @Test
- public void testMinutesOfYearWithWrongOffsetBugWithCalendar() {
- final Calendar c = Calendar.getInstance();
- c.set(Calendar.MONTH, Calendar.JANUARY);
- c.set(Calendar.DAY_OF_YEAR, 1);
- c.set(Calendar.HOUR_OF_DAY, 0);
- c.set(Calendar.MINUTE, 0);
- c.set(Calendar.SECOND, 0);
- c.set(Calendar.MILLISECOND, 0);
- final long testResult = DateUtils.getFragmentInMinutes(c, Calendar.YEAR);
- assertEquals( 0, testResult);
- }
-
- @Test
- public void testHoursOfYearWithDate() {
- final long testResult = DateUtils.getFragmentInHours(aDate, Calendar.YEAR);
- final Calendar cal = Calendar.getInstance();
- cal.setTime(aDate);
- assertEquals(hours + (((cal.get(Calendar.DAY_OF_YEAR) - 1) * DateUtils.MILLIS_PER_DAY))
- / DateUtils.MILLIS_PER_HOUR,
- testResult);
- }
-
- @Test
- public void testHoursOfYearWithCalendar() {
- final long testResult = DateUtils.getFragmentInHours(aCalendar, Calendar.YEAR);
- assertEquals( hours +(((aCalendar.get(Calendar.DAY_OF_YEAR) - 1) * DateUtils.MILLIS_PER_DAY))
- / DateUtils.MILLIS_PER_HOUR,
- testResult);
+ public void testDayOfYearFragmentInLargerUnitWithDate() {
+ assertEquals(0, DateUtils.getFragmentInDays(aDate, Calendar.DAY_OF_YEAR));
}
@Test
@@ -544,4 +93,455 @@ public void testDaysOfYearWithDate() {
cal.setTime(aDate);
assertEquals(cal.get(Calendar.DAY_OF_YEAR), testResult);
}
+
+ @Test
+ public void testHourOfDayFragmentInLargerUnitWithCalendar() {
+ assertEquals(0, DateUtils.getFragmentInHours(aCalendar, Calendar.HOUR_OF_DAY));
+ assertEquals(0, DateUtils.getFragmentInDays(aCalendar, Calendar.HOUR_OF_DAY));
+ }
+
+ @Test
+ public void testHourOfDayFragmentInLargerUnitWithDate() {
+ assertEquals(0, DateUtils.getFragmentInHours(aDate, Calendar.HOUR_OF_DAY));
+ assertEquals(0, DateUtils.getFragmentInDays(aDate, Calendar.HOUR_OF_DAY));
+ }
+
+ @Test
+ public void testHoursOfDayWithCalendar() {
+ long testResult = DateUtils.getFragmentInHours(aCalendar, Calendar.DATE);
+ final long expectedValue = hours;
+ assertEquals(expectedValue, testResult);
+ testResult = DateUtils.getFragmentInHours(aCalendar, Calendar.DAY_OF_YEAR);
+ assertEquals(expectedValue, testResult);
+ }
+
+ @Test
+ public void testHoursOfDayWithDate() {
+ long testResult = DateUtils.getFragmentInHours(aDate, Calendar.DATE);
+ final long expectedValue = hours;
+ assertEquals(expectedValue, testResult);
+ testResult = DateUtils.getFragmentInHours(aDate, Calendar.DAY_OF_YEAR);
+ assertEquals(expectedValue, testResult);
+ }
+
+ @Test
+ public void testHoursOfMonthWithCalendar() {
+ final long testResult = DateUtils.getFragmentInHours(aCalendar, Calendar.MONTH);
+ assertEquals( hours +(((days - 1) * DateUtils.MILLIS_PER_DAY))
+ / DateUtils.MILLIS_PER_HOUR,
+ testResult);
+ }
+
+ @Test
+ public void testHoursOfMonthWithDate() {
+ final long testResult = DateUtils.getFragmentInHours(aDate, Calendar.MONTH);
+ assertEquals(hours + (((days - 1) * DateUtils.MILLIS_PER_DAY))
+ / DateUtils.MILLIS_PER_HOUR,
+ testResult);
+ }
+
+ @Test
+ public void testHoursOfYearWithCalendar() {
+ final long testResult = DateUtils.getFragmentInHours(aCalendar, Calendar.YEAR);
+ assertEquals( hours +(((aCalendar.get(Calendar.DAY_OF_YEAR) - 1) * DateUtils.MILLIS_PER_DAY))
+ / DateUtils.MILLIS_PER_HOUR,
+ testResult);
+ }
+
+ @Test
+ public void testHoursOfYearWithDate() {
+ final long testResult = DateUtils.getFragmentInHours(aDate, Calendar.YEAR);
+ final Calendar cal = Calendar.getInstance();
+ cal.setTime(aDate);
+ assertEquals(hours + (((cal.get(Calendar.DAY_OF_YEAR) - 1) * DateUtils.MILLIS_PER_DAY))
+ / DateUtils.MILLIS_PER_HOUR,
+ testResult);
+ }
+
+ //Calendar.SECOND as useful fragment
+
+ @Test
+ public void testInvalidFragmentWithCalendar() {
+ assertThrows(IllegalArgumentException.class, () -> DateUtils.getFragmentInMilliseconds(aCalendar, 0));
+ assertThrows(IllegalArgumentException.class, () -> DateUtils.getFragmentInSeconds(aCalendar, 0));
+ assertThrows(IllegalArgumentException.class, () -> DateUtils.getFragmentInMinutes(aCalendar, 0));
+ assertThrows(IllegalArgumentException.class, () -> DateUtils.getFragmentInHours(aCalendar, 0));
+ assertThrows(IllegalArgumentException.class, () -> DateUtils.getFragmentInDays(aCalendar, 0));
+ }
+
+ @Test
+ public void testInvalidFragmentWithDate() {
+ assertThrows(IllegalArgumentException.class, () -> DateUtils.getFragmentInMilliseconds(aDate, 0));
+ assertThrows(IllegalArgumentException.class, () -> DateUtils.getFragmentInSeconds(aDate, 0));
+ assertThrows(IllegalArgumentException.class, () -> DateUtils.getFragmentInMinutes(aDate, 0));
+ assertThrows(IllegalArgumentException.class, () -> DateUtils.getFragmentInHours(aDate, 0));
+ assertThrows(IllegalArgumentException.class, () -> DateUtils.getFragmentInDays(aDate, 0));
+ }
+
+ //Calendar.MINUTE as useful fragment
+
+ @Test
+ public void testMillisecondFragmentInLargerUnitWithCalendar() {
+ assertEquals(0, DateUtils.getFragmentInMilliseconds(aCalendar, Calendar.MILLISECOND));
+ assertEquals(0, DateUtils.getFragmentInSeconds(aCalendar, Calendar.MILLISECOND));
+ assertEquals(0, DateUtils.getFragmentInMinutes(aCalendar, Calendar.MILLISECOND));
+ assertEquals(0, DateUtils.getFragmentInHours(aCalendar, Calendar.MILLISECOND));
+ assertEquals(0, DateUtils.getFragmentInDays(aCalendar, Calendar.MILLISECOND));
+ }
+
+ @Test
+ public void testMillisecondFragmentInLargerUnitWithDate() {
+ assertEquals(0, DateUtils.getFragmentInMilliseconds(aDate, Calendar.MILLISECOND));
+ assertEquals(0, DateUtils.getFragmentInSeconds(aDate, Calendar.MILLISECOND));
+ assertEquals(0, DateUtils.getFragmentInMinutes(aDate, Calendar.MILLISECOND));
+ assertEquals(0, DateUtils.getFragmentInHours(aDate, Calendar.MILLISECOND));
+ assertEquals(0, DateUtils.getFragmentInDays(aDate, Calendar.MILLISECOND));
+ }
+
+ @Test
+ public void testMillisecondsOfDayWithCalendar() {
+ long testresult = DateUtils.getFragmentInMilliseconds(aCalendar, Calendar.DATE);
+ final long expectedValue = millis + (seconds * DateUtils.MILLIS_PER_SECOND) + (minutes * DateUtils.MILLIS_PER_MINUTE) + (hours * DateUtils.MILLIS_PER_HOUR);
+ assertEquals(expectedValue, testresult);
+ testresult = DateUtils.getFragmentInMilliseconds(aCalendar, Calendar.DAY_OF_YEAR);
+ assertEquals(expectedValue, testresult);
+ }
+
+ //Calendar.DATE and Calendar.DAY_OF_YEAR as useful fragment
+ @Test
+ public void testMillisecondsOfDayWithDate() {
+ long testresult = DateUtils.getFragmentInMilliseconds(aDate, Calendar.DATE);
+ final long expectedValue = millis + (seconds * DateUtils.MILLIS_PER_SECOND) + (minutes * DateUtils.MILLIS_PER_MINUTE) + (hours * DateUtils.MILLIS_PER_HOUR);
+ assertEquals(expectedValue, testresult);
+ testresult = DateUtils.getFragmentInMilliseconds(aDate, Calendar.DAY_OF_YEAR);
+ assertEquals(expectedValue, testresult);
+ }
+
+ //Calendar.HOUR_OF_DAY as useful fragment
+
+ @Test
+ public void testMillisecondsOfHourWithCalendar() {
+ final long testResult = DateUtils.getFragmentInMilliseconds(aCalendar, Calendar.HOUR_OF_DAY);
+ assertEquals(millis + (seconds * DateUtils.MILLIS_PER_SECOND) + (minutes * DateUtils.MILLIS_PER_MINUTE), testResult);
+ }
+
+ @Test
+ public void testMillisecondsOfHourWithDate() {
+ final long testResult = DateUtils.getFragmentInMilliseconds(aDate, Calendar.HOUR_OF_DAY);
+ assertEquals(millis + (seconds * DateUtils.MILLIS_PER_SECOND) + (minutes * DateUtils.MILLIS_PER_MINUTE), testResult);
+ }
+
+ @Test
+ public void testMillisecondsOfMinuteWithCalender() {
+ final long testResult = DateUtils.getFragmentInMilliseconds(aCalendar, Calendar.MINUTE);
+ assertEquals(millis + (seconds * DateUtils.MILLIS_PER_SECOND), testResult);
+ }
+
+ @Test
+ public void testMillisecondsOfMinuteWithDate() {
+ final long testResult = DateUtils.getFragmentInMilliseconds(aDate, Calendar.MINUTE);
+ assertEquals(millis + (seconds * DateUtils.MILLIS_PER_SECOND), testResult);
+ }
+
+ @Test
+ public void testMillisecondsOfMonthWithCalendar() {
+ final long testResult = DateUtils.getFragmentInMilliseconds(aCalendar, Calendar.MONTH);
+ assertEquals(millis + (seconds * DateUtils.MILLIS_PER_SECOND) + (minutes * DateUtils.MILLIS_PER_MINUTE)
+ + (hours * DateUtils.MILLIS_PER_HOUR) + ((days - 1) * DateUtils.MILLIS_PER_DAY),
+testResult);
+ }
+
+ //Calendar.MONTH as useful fragment
+ @Test
+ public void testMillisecondsOfMonthWithDate() {
+ final long testResult = DateUtils.getFragmentInMilliseconds(aDate, Calendar.MONTH);
+ assertEquals(millis + (seconds * DateUtils.MILLIS_PER_SECOND) + (minutes * DateUtils.MILLIS_PER_MINUTE)
+ + (hours * DateUtils.MILLIS_PER_HOUR) + ((days - 1) * DateUtils.MILLIS_PER_DAY),
+ testResult);
+ }
+
+ @Test
+ public void testMillisecondsOfSecondWithCalendar() {
+ final long testResult = DateUtils.getFragmentInMilliseconds(aCalendar, Calendar.SECOND);
+ assertEquals(millis, testResult);
+ assertEquals(aCalendar.get(Calendar.MILLISECOND), testResult);
+ }
+
+ @Test
+ public void testMillisecondsOfSecondWithDate() {
+ final long testResult = DateUtils.getFragmentInMilliseconds(aDate, Calendar.SECOND);
+ assertEquals(millis, testResult);
+ }
+
+ @Test
+ public void testMillisecondsOfYearWithCalendar() {
+ final long testResult = DateUtils.getFragmentInMilliseconds(aCalendar, Calendar.YEAR);
+ assertEquals(millis + (seconds * DateUtils.MILLIS_PER_SECOND) + (minutes * DateUtils.MILLIS_PER_MINUTE)
+ + (hours * DateUtils.MILLIS_PER_HOUR) + ((aCalendar.get(Calendar.DAY_OF_YEAR) - 1) * DateUtils.MILLIS_PER_DAY),
+testResult);
+ }
+
+ //Calendar.YEAR as useful fragment
+ @Test
+ public void testMillisecondsOfYearWithDate() {
+ final long testResult = DateUtils.getFragmentInMilliseconds(aDate, Calendar.YEAR);
+ final Calendar cal = Calendar.getInstance();
+ cal.setTime(aDate);
+ assertEquals(millis + (seconds * DateUtils.MILLIS_PER_SECOND) + (minutes * DateUtils.MILLIS_PER_MINUTE)
+ + (hours * DateUtils.MILLIS_PER_HOUR) + ((cal.get(Calendar.DAY_OF_YEAR) - 1)* DateUtils.MILLIS_PER_DAY),
+ testResult);
+ }
+
+ @Test
+ public void testMinuteFragmentInLargerUnitWithCalendar() {
+ assertEquals(0, DateUtils.getFragmentInMinutes(aCalendar, Calendar.MINUTE));
+ assertEquals(0, DateUtils.getFragmentInHours(aCalendar, Calendar.MINUTE));
+ assertEquals(0, DateUtils.getFragmentInDays(aCalendar, Calendar.MINUTE));
+ }
+
+ @Test
+ public void testMinuteFragmentInLargerUnitWithDate() {
+ assertEquals(0, DateUtils.getFragmentInMinutes(aDate, Calendar.MINUTE));
+ assertEquals(0, DateUtils.getFragmentInHours(aDate, Calendar.MINUTE));
+ assertEquals(0, DateUtils.getFragmentInDays(aDate, Calendar.MINUTE));
+ }
+
+ @Test
+ public void testMinutesOfDayWithCalendar() {
+ long testResult = DateUtils.getFragmentInMinutes(aCalendar, Calendar.DATE);
+ final long expectedValue = minutes + ((hours * DateUtils.MILLIS_PER_HOUR))/ DateUtils.MILLIS_PER_MINUTE;
+ assertEquals(expectedValue, testResult);
+ testResult = DateUtils.getFragmentInMinutes(aCalendar, Calendar.DAY_OF_YEAR);
+ assertEquals(expectedValue, testResult);
+ }
+
+ @Test
+ public void testMinutesOfDayWithDate() {
+ long testResult = DateUtils.getFragmentInMinutes(aDate, Calendar.DATE);
+ final long expectedValue = minutes + ((hours * DateUtils.MILLIS_PER_HOUR))/ DateUtils.MILLIS_PER_MINUTE;
+ assertEquals(expectedValue, testResult);
+ testResult = DateUtils.getFragmentInMinutes(aDate, Calendar.DAY_OF_YEAR);
+ assertEquals(expectedValue, testResult);
+ }
+
+
+ @Test
+ public void testMinutesOfHourWithCalendar() {
+ final long testResult = DateUtils.getFragmentInMinutes(aCalendar, Calendar.HOUR_OF_DAY);
+ assertEquals(minutes, testResult);
+ }
+
+ @Test
+ public void testMinutesOfHourWithDate() {
+ final long testResult = DateUtils.getFragmentInMinutes(aDate, Calendar.HOUR_OF_DAY);
+ assertEquals(minutes, testResult);
+ }
+
+ @Test
+ public void testMinutesOfMonthWithCalendar() {
+ final long testResult = DateUtils.getFragmentInMinutes(aCalendar, Calendar.MONTH);
+ assertEquals( minutes +((hours * DateUtils.MILLIS_PER_HOUR) + ((days - 1) * DateUtils.MILLIS_PER_DAY))
+ / DateUtils.MILLIS_PER_MINUTE,
+ testResult);
+ }
+
+ @Test
+ public void testMinutesOfMonthWithDate() {
+ final long testResult = DateUtils.getFragmentInMinutes(aDate, Calendar.MONTH);
+ assertEquals(minutes
+ + ((hours * DateUtils.MILLIS_PER_HOUR) + ((days - 1) * DateUtils.MILLIS_PER_DAY))
+ / DateUtils.MILLIS_PER_MINUTE,
+ testResult);
+ }
+
+ @Test
+ public void testMinutesOfYearWithCalendar() {
+ final long testResult = DateUtils.getFragmentInMinutes(aCalendar, Calendar.YEAR);
+ assertEquals( minutes +((hours * DateUtils.MILLIS_PER_HOUR) + ((aCalendar.get(Calendar.DAY_OF_YEAR) - 1) * DateUtils.MILLIS_PER_DAY))
+ / DateUtils.MILLIS_PER_MINUTE,
+ testResult);
+ }
+
+ @Test
+ public void testMinutesOfYearWithDate() {
+ final long testResult = DateUtils.getFragmentInMinutes(aDate, Calendar.YEAR);
+ final Calendar cal = Calendar.getInstance();
+ cal.setTime(aDate);
+ assertEquals(minutes
+ + ((hours * DateUtils.MILLIS_PER_HOUR) + ((cal.get(Calendar.DAY_OF_YEAR) - 1) * DateUtils.MILLIS_PER_DAY))
+ / DateUtils.MILLIS_PER_MINUTE,
+ testResult);
+ }
+
+ @Test
+ public void testMinutesOfYearWithWrongOffsetBugWithCalendar() {
+ final Calendar c = Calendar.getInstance();
+ c.set(Calendar.MONTH, Calendar.JANUARY);
+ c.set(Calendar.DAY_OF_YEAR, 1);
+ c.set(Calendar.HOUR_OF_DAY, 0);
+ c.set(Calendar.MINUTE, 0);
+ c.set(Calendar.SECOND, 0);
+ c.set(Calendar.MILLISECOND, 0);
+ final long testResult = DateUtils.getFragmentInMinutes(c, Calendar.YEAR);
+ assertEquals( 0, testResult);
+ }
+
+ @Test
+ public void testNullCalendar() {
+ assertThrows(
+ IllegalArgumentException.class,
+ () -> DateUtils.getFragmentInMilliseconds((Calendar) null, Calendar.MILLISECOND));
+
+ assertThrows(
+ IllegalArgumentException.class,
+ () -> DateUtils.getFragmentInSeconds((Calendar) null, Calendar.MILLISECOND));
+
+ assertThrows(
+ IllegalArgumentException.class,
+ () -> DateUtils.getFragmentInMinutes((Calendar) null, Calendar.MILLISECOND));
+
+ assertThrows(
+ IllegalArgumentException.class,
+ () -> DateUtils.getFragmentInHours((Calendar) null, Calendar.MILLISECOND));
+
+ assertThrows(
+ IllegalArgumentException.class,
+ () -> DateUtils.getFragmentInDays((Calendar) null, Calendar.MILLISECOND));
+ }
+
+ @Test
+ public void testNullDate() {
+ assertThrows(
+ NullPointerException.class,
+ () -> DateUtils.getFragmentInMilliseconds((Date) null, Calendar.MILLISECOND));
+
+ assertThrows(
+ NullPointerException.class,
+ () -> DateUtils.getFragmentInSeconds((Date) null, Calendar.MILLISECOND));
+
+ assertThrows(
+ NullPointerException.class,
+ () -> DateUtils.getFragmentInMinutes((Date) null, Calendar.MILLISECOND));
+
+ assertThrows(
+ NullPointerException.class,
+ () -> DateUtils.getFragmentInHours((Date) null, Calendar.MILLISECOND));
+
+ assertThrows(
+ NullPointerException.class,
+ () -> DateUtils.getFragmentInDays((Date) null, Calendar.MILLISECOND));
+ }
+
+ @Test
+ public void testSecondFragmentInLargerUnitWithCalendar() {
+ assertEquals(0, DateUtils.getFragmentInSeconds(aCalendar, Calendar.SECOND));
+ assertEquals(0, DateUtils.getFragmentInMinutes(aCalendar, Calendar.SECOND));
+ assertEquals(0, DateUtils.getFragmentInHours(aCalendar, Calendar.SECOND));
+ assertEquals(0, DateUtils.getFragmentInDays(aCalendar, Calendar.SECOND));
+ }
+
+ @Test
+ public void testSecondFragmentInLargerUnitWithDate() {
+ assertEquals(0, DateUtils.getFragmentInSeconds(aDate, Calendar.SECOND));
+ assertEquals(0, DateUtils.getFragmentInMinutes(aDate, Calendar.SECOND));
+ assertEquals(0, DateUtils.getFragmentInHours(aDate, Calendar.SECOND));
+ assertEquals(0, DateUtils.getFragmentInDays(aDate, Calendar.SECOND));
+ }
+
+ @Test
+ public void testSecondsOfDayWithCalendar() {
+ long testresult = DateUtils.getFragmentInSeconds(aCalendar, Calendar.DATE);
+ final long expectedValue = seconds + ((minutes * DateUtils.MILLIS_PER_MINUTE) + (hours * DateUtils.MILLIS_PER_HOUR))/ DateUtils.MILLIS_PER_SECOND;
+ assertEquals(expectedValue, testresult);
+ testresult = DateUtils.getFragmentInSeconds(aCalendar, Calendar.DAY_OF_YEAR);
+ assertEquals(expectedValue, testresult);
+ }
+
+ @Test
+ public void testSecondsOfDayWithDate() {
+ long testresult = DateUtils.getFragmentInSeconds(aDate, Calendar.DATE);
+ final long expectedValue = seconds + ((minutes * DateUtils.MILLIS_PER_MINUTE) + (hours * DateUtils.MILLIS_PER_HOUR))/ DateUtils.MILLIS_PER_SECOND;
+ assertEquals(expectedValue, testresult);
+ testresult = DateUtils.getFragmentInSeconds(aDate, Calendar.DAY_OF_YEAR);
+ assertEquals(expectedValue, testresult);
+ }
+
+ @Test
+ public void testSecondsofHourWithCalendar() {
+ final long testResult = DateUtils.getFragmentInSeconds(aCalendar, Calendar.HOUR_OF_DAY);
+ assertEquals(
+ seconds
+ + (minutes
+ * DateUtils.MILLIS_PER_MINUTE / DateUtils.MILLIS_PER_SECOND),
+ testResult);
+ }
+
+ @Test
+ public void testSecondsofHourWithDate() {
+ final long testResult = DateUtils.getFragmentInSeconds(aDate, Calendar.HOUR_OF_DAY);
+ assertEquals(
+ seconds
+ + (minutes
+ * DateUtils.MILLIS_PER_MINUTE / DateUtils.MILLIS_PER_SECOND),
+ testResult);
+ }
+
+ @Test
+ public void testSecondsofMinuteWithCalendar() {
+ final long testResult = DateUtils.getFragmentInSeconds(aCalendar, Calendar.MINUTE);
+ assertEquals(seconds, testResult);
+ assertEquals(aCalendar.get(Calendar.SECOND), testResult);
+ }
+
+ @Test
+ public void testSecondsofMinuteWithDate() {
+ final long testResult = DateUtils.getFragmentInSeconds(aDate, Calendar.MINUTE);
+ assertEquals(seconds, testResult);
+ }
+
+ @Test
+ public void testSecondsOfMonthWithCalendar() {
+ final long testResult = DateUtils.getFragmentInSeconds(aCalendar, Calendar.MONTH);
+ assertEquals(
+ seconds
+ + ((minutes * DateUtils.MILLIS_PER_MINUTE)
+ + (hours * DateUtils.MILLIS_PER_HOUR) + ((days - 1) * DateUtils.MILLIS_PER_DAY))
+ / DateUtils.MILLIS_PER_SECOND,
+ testResult);
+ }
+
+ @Test
+ public void testSecondsOfMonthWithDate() {
+ final long testResult = DateUtils.getFragmentInSeconds(aDate, Calendar.MONTH);
+ assertEquals(
+ seconds
+ + ((minutes * DateUtils.MILLIS_PER_MINUTE)
+ + (hours * DateUtils.MILLIS_PER_HOUR) + ((days - 1) * DateUtils.MILLIS_PER_DAY))
+ / DateUtils.MILLIS_PER_SECOND,
+ testResult);
+ }
+
+ @Test
+ public void testSecondsOfYearWithCalendar() {
+ final long testResult = DateUtils.getFragmentInSeconds(aCalendar, Calendar.YEAR);
+ assertEquals(
+ seconds
+ + ((minutes * DateUtils.MILLIS_PER_MINUTE)
+ + (hours * DateUtils.MILLIS_PER_HOUR) + ((aCalendar.get(Calendar.DAY_OF_YEAR) - 1) * DateUtils.MILLIS_PER_DAY))
+ / DateUtils.MILLIS_PER_SECOND,
+ testResult);
+ }
+
+ @Test
+ public void testSecondsOfYearWithDate() {
+ final long testResult = DateUtils.getFragmentInSeconds(aDate, Calendar.YEAR);
+ final Calendar cal = Calendar.getInstance();
+ cal.setTime(aDate);
+ assertEquals(
+ seconds
+ + ((minutes * DateUtils.MILLIS_PER_MINUTE)
+ + (hours * DateUtils.MILLIS_PER_HOUR) + ((cal.get(Calendar.DAY_OF_YEAR) - 1) * DateUtils.MILLIS_PER_DAY))
+ / DateUtils.MILLIS_PER_SECOND,
+ testResult);
+ }
}
diff --git a/src/test/java/org/apache/commons/lang3/time/DateUtilsRoundingTest.java b/src/test/java/org/apache/commons/lang3/time/DateUtilsRoundingTest.java
index a13b161a2..e12d58d48 100644
--- a/src/test/java/org/apache/commons/lang3/time/DateUtilsRoundingTest.java
+++ b/src/test/java/org/apache/commons/lang3/time/DateUtilsRoundingTest.java
@@ -58,548 +58,6 @@ public class DateUtilsRoundingTest {
FastDateFormat fdf = DateFormatUtils.ISO_DATETIME_FORMAT;
- @BeforeEach
- public void setUp() throws Exception {
-
- dateTimeParser = new SimpleDateFormat("MMM dd, yyyy H:mm:ss.SSS", Locale.ENGLISH);
-
- targetYearDate = dateTimeParser.parse("January 1, 2007 0:00:00.000");
- targetDateDate = targetDayOfMonthDate = dateTimeParser.parse("June 1, 2008 0:00:00.000");
- targetAmDate = dateTimeParser.parse("June 1, 2008 0:00:00.000");
- targetPmDate = dateTimeParser.parse("June 1, 2008 12:00:00.000");
- targetHourDate = dateTimeParser.parse("June 1, 2008 8:00:00.000");
- targetHourOfDayDate = dateTimeParser.parse("June 1, 2008 8:00:00.000");
- targetMinuteDate = dateTimeParser.parse("June 1, 2008 8:15:00.000");
- targetSecondDate = dateTimeParser.parse("June 1, 2008 8:15:14.000");
- targetMilliSecondDate = dateTimeParser.parse("June 1, 2008 8:15:14.231");
-
- januaryOneDate = dateTimeParser.parse("January 1, 2008 0:00:00.000");
- januaryOneCalendar = Calendar.getInstance();
- januaryOneCalendar.setTime(januaryOneDate);
- }
-
- /**
- * Tests DateUtils.round()-method with Calendar.Year
- *
- * @throws Exception so we don't have to catch it
- * @since 3.0
- */
- @Test
- public void testRoundYear() throws Exception {
- final int calendarField = Calendar.YEAR;
- final Date roundedUpDate = dateTimeParser.parse("January 1, 2008 0:00:00.000");
- final Date roundedDownDate = targetYearDate;
- final Date lastRoundedDownDate = dateTimeParser.parse("June 30, 2007 23:59:59.999");
- baseRoundTest(roundedUpDate, roundedDownDate, lastRoundedDownDate, calendarField);
- }
-
- /**
- * Tests DateUtils.round()-method with Calendar.MONTH
- * Includes rounding months with 28, 29, 30 and 31 days
- * Includes rounding to January 1
- *
- * @throws Exception so we don't have to catch it
- * @since 3.0
- */
- @Test
- public void testRoundMonth() throws Exception {
- final int calendarField = Calendar.MONTH;
- Date roundedUpDate, roundedDownDate, lastRoundedDownDate;
- Date minDate, maxDate;
-
- //month with 28 days
- roundedUpDate = dateTimeParser.parse("March 1, 2007 0:00:00.000");
- roundedDownDate = dateTimeParser.parse("February 1, 2007 0:00:00.000");
- lastRoundedDownDate = dateTimeParser.parse("February 14, 2007 23:59:59.999");
- baseRoundTest(roundedUpDate, roundedDownDate, lastRoundedDownDate, calendarField);
-
- //month with 29 days
- roundedUpDate = dateTimeParser.parse("March 1, 2008 0:00:00.000");
- roundedDownDate = dateTimeParser.parse("February 1, 2008 0:00:00.000");
- lastRoundedDownDate = dateTimeParser.parse("February 15, 2008 23:59:59.999");
- baseRoundTest(roundedUpDate, roundedDownDate, lastRoundedDownDate, calendarField);
-
- //month with 30 days
- roundedUpDate = dateTimeParser.parse("May 1, 2008 0:00:00.000");
- roundedDownDate = dateTimeParser.parse("April 1, 2008 0:00:00.000");
- lastRoundedDownDate = dateTimeParser.parse("April 15, 2008 23:59:59.999");
- baseRoundTest(roundedUpDate, roundedDownDate, lastRoundedDownDate, calendarField);
-
- //month with 31 days
- roundedUpDate = dateTimeParser.parse("June 1, 2008 0:00:00.000");
- roundedDownDate = dateTimeParser.parse("May 1, 2008 0:00:00.000");
- lastRoundedDownDate = dateTimeParser.parse("May 16, 2008 23:59:59.999");
- baseRoundTest(roundedUpDate, roundedDownDate, lastRoundedDownDate, calendarField);
-
- //round to January 1
- minDate = dateTimeParser.parse("December 17, 2007 00:00:00.000");
- maxDate = dateTimeParser.parse("January 16, 2008 23:59:59.999");
- roundToJanuaryFirst(minDate, maxDate, calendarField);
- }
-
- /**
- * Tests DateUtils.round()-method with DateUtils.SEMI_MONTH
- * Includes rounding months with 28, 29, 30 and 31 days, each with first and second half
- * Includes rounding to January 1
- *
- * @throws Exception so we don't have to catch it
- * @since 3.0
- */
- @Test
- public void testRoundSemiMonth() throws Exception {
- final int calendarField = DateUtils.SEMI_MONTH;
- Date roundedUpDate, roundedDownDate, lastRoundedDownDate;
- Date minDate, maxDate;
-
- //month with 28 days (1)
- roundedUpDate = dateTimeParser.parse("February 16, 2007 0:00:00.000");
- roundedDownDate = dateTimeParser.parse("February 1, 2007 0:00:00.000");
- lastRoundedDownDate = dateTimeParser.parse("February 8, 2007 23:59:59.999");
- baseRoundTest(roundedUpDate, roundedDownDate, lastRoundedDownDate, calendarField);
-
- //month with 28 days (2)
- roundedUpDate = dateTimeParser.parse("March 1, 2007 0:00:00.000");
- roundedDownDate = dateTimeParser.parse("February 16, 2007 0:00:00.000");
- lastRoundedDownDate = dateTimeParser.parse("February 23, 2007 23:59:59.999");
- baseRoundTest(roundedUpDate, roundedDownDate, lastRoundedDownDate, calendarField);
-
- //month with 29 days (1)
- roundedUpDate = dateTimeParser.parse("February 16, 2008 0:00:00.000");
- roundedDownDate = dateTimeParser.parse("February 1, 2008 0:00:00.000");
- lastRoundedDownDate = dateTimeParser.parse("February 8, 2008 23:59:59.999");
- baseRoundTest(roundedUpDate, roundedDownDate, lastRoundedDownDate, calendarField);
-
- //month with 29 days (2)
- roundedUpDate = dateTimeParser.parse("March 1, 2008 0:00:00.000");
- roundedDownDate = dateTimeParser.parse("February 16, 2008 0:00:00.000");
- lastRoundedDownDate = dateTimeParser.parse("February 23, 2008 23:59:59.999");
- baseRoundTest(roundedUpDate, roundedDownDate, lastRoundedDownDate, calendarField);
-
- //month with 30 days (1)
- roundedUpDate = dateTimeParser.parse("April 16, 2008 0:00:00.000");
- roundedDownDate = dateTimeParser.parse("April 1, 2008 0:00:00.000");
- lastRoundedDownDate = dateTimeParser.parse("April 8, 2008 23:59:59.999");
- baseRoundTest(roundedUpDate, roundedDownDate, lastRoundedDownDate, calendarField);
-
- //month with 30 days (2)
- roundedUpDate = dateTimeParser.parse("May 1, 2008 0:00:00.000");
- roundedDownDate = dateTimeParser.parse("April 16, 2008 0:00:00.000");
- lastRoundedDownDate = dateTimeParser.parse("April 23, 2008 23:59:59.999");
- baseRoundTest(roundedUpDate, roundedDownDate, lastRoundedDownDate, calendarField);
-
- //month with 31 days (1)
- roundedUpDate = dateTimeParser.parse("May 16, 2008 0:00:00.000");
- roundedDownDate = dateTimeParser.parse("May 1, 2008 0:00:00.000");
- lastRoundedDownDate = dateTimeParser.parse("May 8, 2008 23:59:59.999");
- baseRoundTest(roundedUpDate, roundedDownDate, lastRoundedDownDate, calendarField);
-
- //month with 31 days (2)
- roundedUpDate = dateTimeParser.parse("June 1, 2008 0:00:00.000");
- roundedDownDate = dateTimeParser.parse("May 16, 2008 0:00:00.000");
- lastRoundedDownDate = dateTimeParser.parse("May 23, 2008 23:59:59.999");
- baseRoundTest(roundedUpDate, roundedDownDate, lastRoundedDownDate, calendarField);
-
- //round to January 1
- minDate = dateTimeParser.parse("December 24, 2007 00:00:00.000");
- maxDate = dateTimeParser.parse("January 8, 2008 23:59:59.999");
- roundToJanuaryFirst(minDate, maxDate, calendarField);
- }
-
- /**
- * Tests DateUtils.round()-method with Calendar.DATE
- * Includes rounding the extremes of one day
- * Includes rounding to January 1
- *
- * @throws Exception so we don't have to catch it
- * @since 3.0
- */
- @Test
- public void testRoundDate() throws Exception {
- final int calendarField = Calendar.DATE;
- Date roundedUpDate, roundedDownDate, lastRoundedDownDate;
- Date minDate, maxDate;
-
- roundedUpDate = dateTimeParser.parse("June 2, 2008 0:00:00.000");
- roundedDownDate = targetDateDate;
- lastRoundedDownDate = dateTimeParser.parse("June 1, 2008 11:59:59.999");
- baseRoundTest(roundedUpDate, roundedDownDate, lastRoundedDownDate, calendarField);
-
- //round to January 1
- minDate = dateTimeParser.parse("December 31, 2007 12:00:00.000");
- maxDate = dateTimeParser.parse("January 1, 2008 11:59:59.999");
- roundToJanuaryFirst(minDate, maxDate, calendarField);
- }
-
- /**
- * Tests DateUtils.round()-method with Calendar.DAY_OF_MONTH
- * Includes rounding the extremes of one day
- * Includes rounding to January 1
- *
- * @throws Exception so we don't have to catch it
- * @since 3.0
- */
- @Test
- public void testRoundDayOfMonth() throws Exception {
- final int calendarField = Calendar.DAY_OF_MONTH;
- Date roundedUpDate, roundedDownDate, lastRoundedDownDate;
- Date minDate, maxDate;
-
- roundedUpDate = dateTimeParser.parse("June 2, 2008 0:00:00.000");
- roundedDownDate = targetDayOfMonthDate;
- lastRoundedDownDate = dateTimeParser.parse("June 1, 2008 11:59:59.999");
- baseRoundTest(roundedUpDate, roundedDownDate, lastRoundedDownDate, calendarField);
-
- //round to January 1
- minDate = dateTimeParser.parse("December 31, 2007 12:00:00.000");
- maxDate = dateTimeParser.parse("January 1, 2008 11:59:59.999");
- roundToJanuaryFirst(minDate, maxDate, calendarField);
- }
-
- /**
- * Tests DateUtils.round()-method with Calendar.AM_PM
- * Includes rounding the extremes of both AM and PM of one day
- * Includes rounding to January 1
- *
- * @throws Exception so we don't have to catch it
- * @since 3.0
- */
- @Test
- public void testRoundAmPm() throws Exception {
- final int calendarField = Calendar.AM_PM;
- Date roundedUpDate, roundedDownDate, lastRoundedDownDate;
- Date minDate, maxDate;
-
- //AM
- roundedUpDate = dateTimeParser.parse("June 1, 2008 12:00:00.000");
- roundedDownDate = targetAmDate;
- lastRoundedDownDate = dateTimeParser.parse("June 1, 2008 5:59:59.999");
- baseRoundTest(roundedUpDate, roundedDownDate, lastRoundedDownDate, calendarField);
-
- //PM
- roundedUpDate = dateTimeParser.parse("June 2, 2008 0:00:00.000");
- roundedDownDate = targetPmDate;
- lastRoundedDownDate = dateTimeParser.parse("June 1, 2008 17:59:59.999");
- baseRoundTest(roundedUpDate, roundedDownDate, lastRoundedDownDate, calendarField);
-
- //round to January 1
- minDate = dateTimeParser.parse("December 31, 2007 18:00:00.000");
- maxDate = dateTimeParser.parse("January 1, 2008 5:59:59.999");
- roundToJanuaryFirst(minDate, maxDate, calendarField);
- }
-
- /**
- * Tests DateUtils.round()-method with Calendar.HOUR_OF_DAY
- * Includes rounding the extremes of one hour
- * Includes rounding to January 1
- *
- * @throws Exception so we don't have to catch it
- * @since 3.0
- */
- @Test
- public void testRoundHourOfDay() throws Exception {
- final int calendarField = Calendar.HOUR_OF_DAY;
- Date roundedUpDate, roundedDownDate, lastRoundedDownDate;
- Date minDate, maxDate;
-
- roundedUpDate = dateTimeParser.parse("June 1, 2008 9:00:00.000");
- roundedDownDate = targetHourOfDayDate;
- lastRoundedDownDate = dateTimeParser.parse("June 1, 2008 8:29:59.999");
- baseRoundTest(roundedUpDate, roundedDownDate, lastRoundedDownDate, calendarField);
-
- //round to January 1
- minDate = dateTimeParser.parse("December 31, 2007 23:30:00.000");
- maxDate = dateTimeParser.parse("January 1, 2008 0:29:59.999");
- roundToJanuaryFirst(minDate, maxDate, calendarField);
- }
-
- /**
- * Tests DateUtils.round()-method with Calendar.HOUR
- * Includes rounding the extremes of one hour
- * Includes rounding to January 1
- *
- * @throws Exception so we don't have to catch it
- * @since 3.0
- */
- @Test
- public void testRoundHour() throws Exception {
- final int calendarField = Calendar.HOUR;
- Date roundedUpDate, roundedDownDate, lastRoundedDownDate;
- Date minDate, maxDate;
-
- roundedUpDate = dateTimeParser.parse("June 1, 2008 9:00:00.000");
- roundedDownDate = targetHourDate;
- lastRoundedDownDate = dateTimeParser.parse("June 1, 2008 8:29:59.999");
- baseRoundTest(roundedUpDate, roundedDownDate, lastRoundedDownDate, calendarField);
-
- //round to January 1
- minDate = dateTimeParser.parse("December 31, 2007 23:30:00.000");
- maxDate = dateTimeParser.parse("January 1, 2008 0:29:59.999");
- roundToJanuaryFirst(minDate, maxDate, calendarField);
- }
-
- /**
- * Tests DateUtils.round()-method with Calendar.MINUTE
- * Includes rounding the extremes of one minute
- * Includes rounding to January 1
- *
- * @throws Exception so we don't have to catch it
- * @since 3.0
- */
- @Test
- public void testRoundMinute() throws Exception {
- final int calendarField = Calendar.MINUTE;
- Date roundedUpDate, roundedDownDate, lastRoundedDownDate;
- Date minDate, maxDate;
-
- roundedUpDate = dateTimeParser.parse("June 1, 2008 8:16:00.000");
- roundedDownDate = targetMinuteDate;
- lastRoundedDownDate = dateTimeParser.parse("June 1, 2008 8:15:29.999");
- baseRoundTest(roundedUpDate, roundedDownDate, lastRoundedDownDate, calendarField);
-
- //round to January 1
- minDate = dateTimeParser.parse("December 31, 2007 23:59:30.000");
- maxDate = dateTimeParser.parse("January 1, 2008 0:00:29.999");
- roundToJanuaryFirst(minDate, maxDate, calendarField);
- }
-
- /**
- * Tests DateUtils.round()-method with Calendar.SECOND
- * Includes rounding the extremes of one second
- * Includes rounding to January 1
- *
- * @throws Exception so we don't have to catch it
- * @since 3.0
- */
- @Test
- public void testRoundSecond() throws Exception {
- final int calendarField = Calendar.SECOND;
- Date roundedUpDate, roundedDownDate, lastRoundedDownDate;
- Date minDate, maxDate;
-
- roundedUpDate = dateTimeParser.parse("June 1, 2008 8:15:15.000");
- roundedDownDate = targetSecondDate;
- lastRoundedDownDate = dateTimeParser.parse("June 1, 2008 8:15:14.499");
- baseRoundTest(roundedUpDate, roundedDownDate, lastRoundedDownDate, calendarField);
-
- //round to January 1
- minDate = dateTimeParser.parse("December 31, 2007 23:59:59.500");
- maxDate = dateTimeParser.parse("January 1, 2008 0:00:00.499");
- roundToJanuaryFirst(minDate, maxDate, calendarField);
- }
-
- /**
- * Tests DateUtils.round()-method with Calendar.MILLISECOND
- * Includes rounding the extremes of one second
- * Includes rounding to January 1
- *
- * @throws Exception so we don't have to catch it
- * @since 3.0
- */
- @Test
- public void testRoundMilliSecond() throws Exception {
- final int calendarField = Calendar.MILLISECOND;
- Date roundedUpDate, roundedDownDate, lastRoundedDownDate;
- Date minDate, maxDate;
-
- roundedDownDate = lastRoundedDownDate = targetMilliSecondDate;
- roundedUpDate = dateTimeParser.parse("June 1, 2008 8:15:14.232");
- baseRoundTest(roundedUpDate, roundedDownDate, lastRoundedDownDate, calendarField);
-
- //round to January 1
- minDate = maxDate = januaryOneDate;
- roundToJanuaryFirst(minDate, maxDate, calendarField);
- }
-
- /**
- * Test DateUtils.truncate()-method with Calendar.YEAR
- *
- * @throws Exception so we don't have to catch it
- * @since 3.0
- */
- @Test
- public void testTruncateYear() throws Exception {
- final int calendarField = Calendar.YEAR;
- final Date lastTruncateDate = dateTimeParser.parse("December 31, 2007 23:59:59.999");
- baseTruncateTest(targetYearDate, lastTruncateDate, calendarField);
- }
-
- /**
- * Test DateUtils.truncate()-method with Calendar.MONTH
- *
- * @throws Exception so we don't have to catch it
- * @since 3.0
- */
- @Test
- public void testTruncateMonth() throws Exception {
- final int calendarField = Calendar.MONTH;
- final Date truncatedDate = dateTimeParser.parse("March 1, 2008 0:00:00.000");
- final Date lastTruncateDate = dateTimeParser.parse("March 31, 2008 23:59:59.999");
- baseTruncateTest(truncatedDate, lastTruncateDate, calendarField);
- }
-
- /**
- * Test DateUtils.truncate()-method with DateUtils.SEMI_MONTH
- * Includes truncating months with 28, 29, 30 and 31 days, each with first and second half
- *
- * @throws Exception so we don't have to catch it
- * @since 3.0
- */
- @Test
- public void testTruncateSemiMonth() throws Exception {
- final int calendarField = DateUtils.SEMI_MONTH;
- Date truncatedDate, lastTruncateDate;
-
- //month with 28 days (1)
- truncatedDate = dateTimeParser.parse("February 1, 2007 0:00:00.000");
- lastTruncateDate = dateTimeParser.parse("February 15, 2007 23:59:59.999");
- baseTruncateTest(truncatedDate, lastTruncateDate, calendarField);
-
- //month with 28 days (2)
- truncatedDate = dateTimeParser.parse("February 16, 2007 0:00:00.000");
- lastTruncateDate = dateTimeParser.parse("February 28, 2007 23:59:59.999");
- baseTruncateTest(truncatedDate, lastTruncateDate, calendarField);
-
- //month with 29 days (1)
- truncatedDate = dateTimeParser.parse("February 1, 2008 0:00:00.000");
- lastTruncateDate = dateTimeParser.parse("February 15, 2008 23:59:59.999");
- baseTruncateTest(truncatedDate, lastTruncateDate, calendarField);
-
- //month with 29 days (2)
- truncatedDate = dateTimeParser.parse("February 16, 2008 0:00:00.000");
- lastTruncateDate = dateTimeParser.parse("February 29, 2008 23:59:59.999");
- baseTruncateTest(truncatedDate, lastTruncateDate, calendarField);
-
- //month with 30 days (1)
- truncatedDate = dateTimeParser.parse("April 1, 2008 0:00:00.000");
- lastTruncateDate = dateTimeParser.parse("April 15, 2008 23:59:59.999");
- baseTruncateTest(truncatedDate, lastTruncateDate, calendarField);
-
- //month with 30 days (2)
- truncatedDate = dateTimeParser.parse("April 16, 2008 0:00:00.000");
- lastTruncateDate = dateTimeParser.parse("April 30, 2008 23:59:59.999");
- baseTruncateTest(truncatedDate, lastTruncateDate, calendarField);
-
- //month with 31 days (1)
- truncatedDate = dateTimeParser.parse("March 1, 2008 0:00:00.000");
- lastTruncateDate = dateTimeParser.parse("March 15, 2008 23:59:59.999");
- baseTruncateTest(truncatedDate, lastTruncateDate, calendarField);
-
- //month with 31 days (2)
- truncatedDate = dateTimeParser.parse("March 16, 2008 0:00:00.000");
- lastTruncateDate = dateTimeParser.parse("March 31, 2008 23:59:59.999");
- baseTruncateTest(truncatedDate, lastTruncateDate, calendarField);
-
- }
-
- /**
- * Test DateUtils.truncate()-method with Calendar.DATE
- *
- * @throws Exception so we don't have to catch it
- * @since 3.0
- */
- @Test
- public void testTruncateDate() throws Exception {
- final int calendarField = Calendar.DATE;
- final Date lastTruncateDate = dateTimeParser.parse("June 1, 2008 23:59:59.999");
- baseTruncateTest(targetDateDate, lastTruncateDate, calendarField);
- }
-
- /**
- * Test DateUtils.truncate()-method with Calendar.DAY_OF_MONTH
- *
- * @throws Exception so we don't have to catch it
- * @since 3.0
- */
- @Test
- public void testTruncateDayOfMonth() throws Exception {
- final int calendarField = Calendar.DAY_OF_MONTH;
- final Date lastTruncateDate = dateTimeParser.parse("June 1, 2008 23:59:59.999");
- baseTruncateTest(targetDayOfMonthDate, lastTruncateDate, calendarField);
- }
-
- /**
- * Test DateUtils.truncate()-method with Calendar.AM_PM
- * Includes truncating the extremes of both AM and PM of one day
- *
- * @throws Exception so we don't have to catch it
- * @since 3.0
- */
- @Test
- public void testTruncateAmPm() throws Exception {
- final int calendarField = Calendar.AM_PM;
-
- //AM
- Date lastTruncateDate = dateTimeParser.parse("June 1, 2008 11:59:59.999");
- baseTruncateTest(targetAmDate, lastTruncateDate, calendarField);
-
- //PM
- lastTruncateDate = dateTimeParser.parse("June 1, 2008 23:59:59.999");
- baseTruncateTest(targetPmDate, lastTruncateDate, calendarField);
- }
-
- /**
- * Test DateUtils.truncate()-method with Calendar.HOUR
- *
- * @throws Exception so we don't have to catch it
- * @since 3.0
- */
- @Test
- public void testTruncateHour() throws Exception {
- final int calendarField = Calendar.HOUR;
- final Date lastTruncateDate = dateTimeParser.parse("June 1, 2008 8:59:59.999");
- baseTruncateTest(targetHourDate, lastTruncateDate, calendarField);
- }
-
- /**
- * Test DateUtils.truncate()-method with Calendar.HOUR_OF_DAY
- *
- * @throws Exception so we don't have to catch it
- * @since 3.0
- */
- @Test
- public void testTruncateHourOfDay() throws Exception {
- final int calendarField = Calendar.HOUR_OF_DAY;
- final Date lastTruncateDate = dateTimeParser.parse("June 1, 2008 8:59:59.999");
- baseTruncateTest(targetHourOfDayDate, lastTruncateDate, calendarField);
- }
-
- /**
- * Test DateUtils.truncate()-method with Calendar.MINUTE
- *
- * @throws Exception so we don't have to catch it
- * @since 3.0
- */
- @Test
- public void testTruncateMinute() throws Exception {
- final int calendarField = Calendar.MINUTE;
- final Date lastTruncateDate = dateTimeParser.parse("June 1, 2008 8:15:59.999");
- baseTruncateTest(targetMinuteDate, lastTruncateDate, calendarField);
- }
-
- /**
- * Test DateUtils.truncate()-method with Calendar.SECOND
- *
- * @throws Exception so we don't have to catch it
- * @since 3.0
- */
- @Test
- public void testTruncateSecond() throws Exception {
- final int calendarField = Calendar.SECOND;
- final Date lastTruncateDate = dateTimeParser.parse("June 1, 2008 8:15:14.999");
- baseTruncateTest(targetSecondDate, lastTruncateDate, calendarField);
- }
-
- /**
- * Test DateUtils.truncate()-method with Calendar.SECOND
- *
- * @since 3.0
- */
- @Test
- public void testTruncateMilliSecond() {
- final int calendarField = Calendar.MILLISECOND;
- baseTruncateTest(targetMilliSecondDate, targetMilliSecondDate, calendarField);
- }
-
/**
* When using this basetest all extremes are tested.
* It will test the Date, Calendar and Object-implementation
@@ -726,4 +184,546 @@ protected void roundToJanuaryFirst(final Date minDate, final Date maxDate, final
assertNotEquals(januaryOneDate, DateUtils.round(toPrevRoundDate, calendarField), fdf.format(minCalendar) + " is not an lower-extreme when rounding as Date with CalendarField-value " + calendarField);
assertNotEquals(januaryOneDate, DateUtils.round(toNextRoundDate, calendarField), fdf.format(maxCalendar) + " is not an upper-extreme when rounding as Date with CalendarField-value " + calendarField);
}
+
+ @BeforeEach
+ public void setUp() throws Exception {
+
+ dateTimeParser = new SimpleDateFormat("MMM dd, yyyy H:mm:ss.SSS", Locale.ENGLISH);
+
+ targetYearDate = dateTimeParser.parse("January 1, 2007 0:00:00.000");
+ targetDateDate = targetDayOfMonthDate = dateTimeParser.parse("June 1, 2008 0:00:00.000");
+ targetAmDate = dateTimeParser.parse("June 1, 2008 0:00:00.000");
+ targetPmDate = dateTimeParser.parse("June 1, 2008 12:00:00.000");
+ targetHourDate = dateTimeParser.parse("June 1, 2008 8:00:00.000");
+ targetHourOfDayDate = dateTimeParser.parse("June 1, 2008 8:00:00.000");
+ targetMinuteDate = dateTimeParser.parse("June 1, 2008 8:15:00.000");
+ targetSecondDate = dateTimeParser.parse("June 1, 2008 8:15:14.000");
+ targetMilliSecondDate = dateTimeParser.parse("June 1, 2008 8:15:14.231");
+
+ januaryOneDate = dateTimeParser.parse("January 1, 2008 0:00:00.000");
+ januaryOneCalendar = Calendar.getInstance();
+ januaryOneCalendar.setTime(januaryOneDate);
+ }
+
+ /**
+ * Tests DateUtils.round()-method with Calendar.AM_PM
+ * Includes rounding the extremes of both AM and PM of one day
+ * Includes rounding to January 1
+ *
+ * @throws Exception so we don't have to catch it
+ * @since 3.0
+ */
+ @Test
+ public void testRoundAmPm() throws Exception {
+ final int calendarField = Calendar.AM_PM;
+ Date roundedUpDate, roundedDownDate, lastRoundedDownDate;
+ Date minDate, maxDate;
+
+ //AM
+ roundedUpDate = dateTimeParser.parse("June 1, 2008 12:00:00.000");
+ roundedDownDate = targetAmDate;
+ lastRoundedDownDate = dateTimeParser.parse("June 1, 2008 5:59:59.999");
+ baseRoundTest(roundedUpDate, roundedDownDate, lastRoundedDownDate, calendarField);
+
+ //PM
+ roundedUpDate = dateTimeParser.parse("June 2, 2008 0:00:00.000");
+ roundedDownDate = targetPmDate;
+ lastRoundedDownDate = dateTimeParser.parse("June 1, 2008 17:59:59.999");
+ baseRoundTest(roundedUpDate, roundedDownDate, lastRoundedDownDate, calendarField);
+
+ //round to January 1
+ minDate = dateTimeParser.parse("December 31, 2007 18:00:00.000");
+ maxDate = dateTimeParser.parse("January 1, 2008 5:59:59.999");
+ roundToJanuaryFirst(minDate, maxDate, calendarField);
+ }
+
+ /**
+ * Tests DateUtils.round()-method with Calendar.DATE
+ * Includes rounding the extremes of one day
+ * Includes rounding to January 1
+ *
+ * @throws Exception so we don't have to catch it
+ * @since 3.0
+ */
+ @Test
+ public void testRoundDate() throws Exception {
+ final int calendarField = Calendar.DATE;
+ Date roundedUpDate, roundedDownDate, lastRoundedDownDate;
+ Date minDate, maxDate;
+
+ roundedUpDate = dateTimeParser.parse("June 2, 2008 0:00:00.000");
+ roundedDownDate = targetDateDate;
+ lastRoundedDownDate = dateTimeParser.parse("June 1, 2008 11:59:59.999");
+ baseRoundTest(roundedUpDate, roundedDownDate, lastRoundedDownDate, calendarField);
+
+ //round to January 1
+ minDate = dateTimeParser.parse("December 31, 2007 12:00:00.000");
+ maxDate = dateTimeParser.parse("January 1, 2008 11:59:59.999");
+ roundToJanuaryFirst(minDate, maxDate, calendarField);
+ }
+
+ /**
+ * Tests DateUtils.round()-method with Calendar.DAY_OF_MONTH
+ * Includes rounding the extremes of one day
+ * Includes rounding to January 1
+ *
+ * @throws Exception so we don't have to catch it
+ * @since 3.0
+ */
+ @Test
+ public void testRoundDayOfMonth() throws Exception {
+ final int calendarField = Calendar.DAY_OF_MONTH;
+ Date roundedUpDate, roundedDownDate, lastRoundedDownDate;
+ Date minDate, maxDate;
+
+ roundedUpDate = dateTimeParser.parse("June 2, 2008 0:00:00.000");
+ roundedDownDate = targetDayOfMonthDate;
+ lastRoundedDownDate = dateTimeParser.parse("June 1, 2008 11:59:59.999");
+ baseRoundTest(roundedUpDate, roundedDownDate, lastRoundedDownDate, calendarField);
+
+ //round to January 1
+ minDate = dateTimeParser.parse("December 31, 2007 12:00:00.000");
+ maxDate = dateTimeParser.parse("January 1, 2008 11:59:59.999");
+ roundToJanuaryFirst(minDate, maxDate, calendarField);
+ }
+
+ /**
+ * Tests DateUtils.round()-method with Calendar.HOUR
+ * Includes rounding the extremes of one hour
+ * Includes rounding to January 1
+ *
+ * @throws Exception so we don't have to catch it
+ * @since 3.0
+ */
+ @Test
+ public void testRoundHour() throws Exception {
+ final int calendarField = Calendar.HOUR;
+ Date roundedUpDate, roundedDownDate, lastRoundedDownDate;
+ Date minDate, maxDate;
+
+ roundedUpDate = dateTimeParser.parse("June 1, 2008 9:00:00.000");
+ roundedDownDate = targetHourDate;
+ lastRoundedDownDate = dateTimeParser.parse("June 1, 2008 8:29:59.999");
+ baseRoundTest(roundedUpDate, roundedDownDate, lastRoundedDownDate, calendarField);
+
+ //round to January 1
+ minDate = dateTimeParser.parse("December 31, 2007 23:30:00.000");
+ maxDate = dateTimeParser.parse("January 1, 2008 0:29:59.999");
+ roundToJanuaryFirst(minDate, maxDate, calendarField);
+ }
+
+ /**
+ * Tests DateUtils.round()-method with Calendar.HOUR_OF_DAY
+ * Includes rounding the extremes of one hour
+ * Includes rounding to January 1
+ *
+ * @throws Exception so we don't have to catch it
+ * @since 3.0
+ */
+ @Test
+ public void testRoundHourOfDay() throws Exception {
+ final int calendarField = Calendar.HOUR_OF_DAY;
+ Date roundedUpDate, roundedDownDate, lastRoundedDownDate;
+ Date minDate, maxDate;
+
+ roundedUpDate = dateTimeParser.parse("June 1, 2008 9:00:00.000");
+ roundedDownDate = targetHourOfDayDate;
+ lastRoundedDownDate = dateTimeParser.parse("June 1, 2008 8:29:59.999");
+ baseRoundTest(roundedUpDate, roundedDownDate, lastRoundedDownDate, calendarField);
+
+ //round to January 1
+ minDate = dateTimeParser.parse("December 31, 2007 23:30:00.000");
+ maxDate = dateTimeParser.parse("January 1, 2008 0:29:59.999");
+ roundToJanuaryFirst(minDate, maxDate, calendarField);
+ }
+
+ /**
+ * Tests DateUtils.round()-method with Calendar.MILLISECOND
+ * Includes rounding the extremes of one second
+ * Includes rounding to January 1
+ *
+ * @throws Exception so we don't have to catch it
+ * @since 3.0
+ */
+ @Test
+ public void testRoundMilliSecond() throws Exception {
+ final int calendarField = Calendar.MILLISECOND;
+ Date roundedUpDate, roundedDownDate, lastRoundedDownDate;
+ Date minDate, maxDate;
+
+ roundedDownDate = lastRoundedDownDate = targetMilliSecondDate;
+ roundedUpDate = dateTimeParser.parse("June 1, 2008 8:15:14.232");
+ baseRoundTest(roundedUpDate, roundedDownDate, lastRoundedDownDate, calendarField);
+
+ //round to January 1
+ minDate = maxDate = januaryOneDate;
+ roundToJanuaryFirst(minDate, maxDate, calendarField);
+ }
+
+ /**
+ * Tests DateUtils.round()-method with Calendar.MINUTE
+ * Includes rounding the extremes of one minute
+ * Includes rounding to January 1
+ *
+ * @throws Exception so we don't have to catch it
+ * @since 3.0
+ */
+ @Test
+ public void testRoundMinute() throws Exception {
+ final int calendarField = Calendar.MINUTE;
+ Date roundedUpDate, roundedDownDate, lastRoundedDownDate;
+ Date minDate, maxDate;
+
+ roundedUpDate = dateTimeParser.parse("June 1, 2008 8:16:00.000");
+ roundedDownDate = targetMinuteDate;
+ lastRoundedDownDate = dateTimeParser.parse("June 1, 2008 8:15:29.999");
+ baseRoundTest(roundedUpDate, roundedDownDate, lastRoundedDownDate, calendarField);
+
+ //round to January 1
+ minDate = dateTimeParser.parse("December 31, 2007 23:59:30.000");
+ maxDate = dateTimeParser.parse("January 1, 2008 0:00:29.999");
+ roundToJanuaryFirst(minDate, maxDate, calendarField);
+ }
+
+ /**
+ * Tests DateUtils.round()-method with Calendar.MONTH
+ * Includes rounding months with 28, 29, 30 and 31 days
+ * Includes rounding to January 1
+ *
+ * @throws Exception so we don't have to catch it
+ * @since 3.0
+ */
+ @Test
+ public void testRoundMonth() throws Exception {
+ final int calendarField = Calendar.MONTH;
+ Date roundedUpDate, roundedDownDate, lastRoundedDownDate;
+ Date minDate, maxDate;
+
+ //month with 28 days
+ roundedUpDate = dateTimeParser.parse("March 1, 2007 0:00:00.000");
+ roundedDownDate = dateTimeParser.parse("February 1, 2007 0:00:00.000");
+ lastRoundedDownDate = dateTimeParser.parse("February 14, 2007 23:59:59.999");
+ baseRoundTest(roundedUpDate, roundedDownDate, lastRoundedDownDate, calendarField);
+
+ //month with 29 days
+ roundedUpDate = dateTimeParser.parse("March 1, 2008 0:00:00.000");
+ roundedDownDate = dateTimeParser.parse("February 1, 2008 0:00:00.000");
+ lastRoundedDownDate = dateTimeParser.parse("February 15, 2008 23:59:59.999");
+ baseRoundTest(roundedUpDate, roundedDownDate, lastRoundedDownDate, calendarField);
+
+ //month with 30 days
+ roundedUpDate = dateTimeParser.parse("May 1, 2008 0:00:00.000");
+ roundedDownDate = dateTimeParser.parse("April 1, 2008 0:00:00.000");
+ lastRoundedDownDate = dateTimeParser.parse("April 15, 2008 23:59:59.999");
+ baseRoundTest(roundedUpDate, roundedDownDate, lastRoundedDownDate, calendarField);
+
+ //month with 31 days
+ roundedUpDate = dateTimeParser.parse("June 1, 2008 0:00:00.000");
+ roundedDownDate = dateTimeParser.parse("May 1, 2008 0:00:00.000");
+ lastRoundedDownDate = dateTimeParser.parse("May 16, 2008 23:59:59.999");
+ baseRoundTest(roundedUpDate, roundedDownDate, lastRoundedDownDate, calendarField);
+
+ //round to January 1
+ minDate = dateTimeParser.parse("December 17, 2007 00:00:00.000");
+ maxDate = dateTimeParser.parse("January 16, 2008 23:59:59.999");
+ roundToJanuaryFirst(minDate, maxDate, calendarField);
+ }
+
+ /**
+ * Tests DateUtils.round()-method with Calendar.SECOND
+ * Includes rounding the extremes of one second
+ * Includes rounding to January 1
+ *
+ * @throws Exception so we don't have to catch it
+ * @since 3.0
+ */
+ @Test
+ public void testRoundSecond() throws Exception {
+ final int calendarField = Calendar.SECOND;
+ Date roundedUpDate, roundedDownDate, lastRoundedDownDate;
+ Date minDate, maxDate;
+
+ roundedUpDate = dateTimeParser.parse("June 1, 2008 8:15:15.000");
+ roundedDownDate = targetSecondDate;
+ lastRoundedDownDate = dateTimeParser.parse("June 1, 2008 8:15:14.499");
+ baseRoundTest(roundedUpDate, roundedDownDate, lastRoundedDownDate, calendarField);
+
+ //round to January 1
+ minDate = dateTimeParser.parse("December 31, 2007 23:59:59.500");
+ maxDate = dateTimeParser.parse("January 1, 2008 0:00:00.499");
+ roundToJanuaryFirst(minDate, maxDate, calendarField);
+ }
+
+ /**
+ * Tests DateUtils.round()-method with DateUtils.SEMI_MONTH
+ * Includes rounding months with 28, 29, 30 and 31 days, each with first and second half
+ * Includes rounding to January 1
+ *
+ * @throws Exception so we don't have to catch it
+ * @since 3.0
+ */
+ @Test
+ public void testRoundSemiMonth() throws Exception {
+ final int calendarField = DateUtils.SEMI_MONTH;
+ Date roundedUpDate, roundedDownDate, lastRoundedDownDate;
+ Date minDate, maxDate;
+
+ //month with 28 days (1)
+ roundedUpDate = dateTimeParser.parse("February 16, 2007 0:00:00.000");
+ roundedDownDate = dateTimeParser.parse("February 1, 2007 0:00:00.000");
+ lastRoundedDownDate = dateTimeParser.parse("February 8, 2007 23:59:59.999");
+ baseRoundTest(roundedUpDate, roundedDownDate, lastRoundedDownDate, calendarField);
+
+ //month with 28 days (2)
+ roundedUpDate = dateTimeParser.parse("March 1, 2007 0:00:00.000");
+ roundedDownDate = dateTimeParser.parse("February 16, 2007 0:00:00.000");
+ lastRoundedDownDate = dateTimeParser.parse("February 23, 2007 23:59:59.999");
+ baseRoundTest(roundedUpDate, roundedDownDate, lastRoundedDownDate, calendarField);
+
+ //month with 29 days (1)
+ roundedUpDate = dateTimeParser.parse("February 16, 2008 0:00:00.000");
+ roundedDownDate = dateTimeParser.parse("February 1, 2008 0:00:00.000");
+ lastRoundedDownDate = dateTimeParser.parse("February 8, 2008 23:59:59.999");
+ baseRoundTest(roundedUpDate, roundedDownDate, lastRoundedDownDate, calendarField);
+
+ //month with 29 days (2)
+ roundedUpDate = dateTimeParser.parse("March 1, 2008 0:00:00.000");
+ roundedDownDate = dateTimeParser.parse("February 16, 2008 0:00:00.000");
+ lastRoundedDownDate = dateTimeParser.parse("February 23, 2008 23:59:59.999");
+ baseRoundTest(roundedUpDate, roundedDownDate, lastRoundedDownDate, calendarField);
+
+ //month with 30 days (1)
+ roundedUpDate = dateTimeParser.parse("April 16, 2008 0:00:00.000");
+ roundedDownDate = dateTimeParser.parse("April 1, 2008 0:00:00.000");
+ lastRoundedDownDate = dateTimeParser.parse("April 8, 2008 23:59:59.999");
+ baseRoundTest(roundedUpDate, roundedDownDate, lastRoundedDownDate, calendarField);
+
+ //month with 30 days (2)
+ roundedUpDate = dateTimeParser.parse("May 1, 2008 0:00:00.000");
+ roundedDownDate = dateTimeParser.parse("April 16, 2008 0:00:00.000");
+ lastRoundedDownDate = dateTimeParser.parse("April 23, 2008 23:59:59.999");
+ baseRoundTest(roundedUpDate, roundedDownDate, lastRoundedDownDate, calendarField);
+
+ //month with 31 days (1)
+ roundedUpDate = dateTimeParser.parse("May 16, 2008 0:00:00.000");
+ roundedDownDate = dateTimeParser.parse("May 1, 2008 0:00:00.000");
+ lastRoundedDownDate = dateTimeParser.parse("May 8, 2008 23:59:59.999");
+ baseRoundTest(roundedUpDate, roundedDownDate, lastRoundedDownDate, calendarField);
+
+ //month with 31 days (2)
+ roundedUpDate = dateTimeParser.parse("June 1, 2008 0:00:00.000");
+ roundedDownDate = dateTimeParser.parse("May 16, 2008 0:00:00.000");
+ lastRoundedDownDate = dateTimeParser.parse("May 23, 2008 23:59:59.999");
+ baseRoundTest(roundedUpDate, roundedDownDate, lastRoundedDownDate, calendarField);
+
+ //round to January 1
+ minDate = dateTimeParser.parse("December 24, 2007 00:00:00.000");
+ maxDate = dateTimeParser.parse("January 8, 2008 23:59:59.999");
+ roundToJanuaryFirst(minDate, maxDate, calendarField);
+ }
+
+ /**
+ * Tests DateUtils.round()-method with Calendar.Year
+ *
+ * @throws Exception so we don't have to catch it
+ * @since 3.0
+ */
+ @Test
+ public void testRoundYear() throws Exception {
+ final int calendarField = Calendar.YEAR;
+ final Date roundedUpDate = dateTimeParser.parse("January 1, 2008 0:00:00.000");
+ final Date roundedDownDate = targetYearDate;
+ final Date lastRoundedDownDate = dateTimeParser.parse("June 30, 2007 23:59:59.999");
+ baseRoundTest(roundedUpDate, roundedDownDate, lastRoundedDownDate, calendarField);
+ }
+
+ /**
+ * Test DateUtils.truncate()-method with Calendar.AM_PM
+ * Includes truncating the extremes of both AM and PM of one day
+ *
+ * @throws Exception so we don't have to catch it
+ * @since 3.0
+ */
+ @Test
+ public void testTruncateAmPm() throws Exception {
+ final int calendarField = Calendar.AM_PM;
+
+ //AM
+ Date lastTruncateDate = dateTimeParser.parse("June 1, 2008 11:59:59.999");
+ baseTruncateTest(targetAmDate, lastTruncateDate, calendarField);
+
+ //PM
+ lastTruncateDate = dateTimeParser.parse("June 1, 2008 23:59:59.999");
+ baseTruncateTest(targetPmDate, lastTruncateDate, calendarField);
+ }
+
+ /**
+ * Test DateUtils.truncate()-method with Calendar.DATE
+ *
+ * @throws Exception so we don't have to catch it
+ * @since 3.0
+ */
+ @Test
+ public void testTruncateDate() throws Exception {
+ final int calendarField = Calendar.DATE;
+ final Date lastTruncateDate = dateTimeParser.parse("June 1, 2008 23:59:59.999");
+ baseTruncateTest(targetDateDate, lastTruncateDate, calendarField);
+ }
+
+ /**
+ * Test DateUtils.truncate()-method with Calendar.DAY_OF_MONTH
+ *
+ * @throws Exception so we don't have to catch it
+ * @since 3.0
+ */
+ @Test
+ public void testTruncateDayOfMonth() throws Exception {
+ final int calendarField = Calendar.DAY_OF_MONTH;
+ final Date lastTruncateDate = dateTimeParser.parse("June 1, 2008 23:59:59.999");
+ baseTruncateTest(targetDayOfMonthDate, lastTruncateDate, calendarField);
+ }
+
+ /**
+ * Test DateUtils.truncate()-method with Calendar.HOUR
+ *
+ * @throws Exception so we don't have to catch it
+ * @since 3.0
+ */
+ @Test
+ public void testTruncateHour() throws Exception {
+ final int calendarField = Calendar.HOUR;
+ final Date lastTruncateDate = dateTimeParser.parse("June 1, 2008 8:59:59.999");
+ baseTruncateTest(targetHourDate, lastTruncateDate, calendarField);
+ }
+
+ /**
+ * Test DateUtils.truncate()-method with Calendar.HOUR_OF_DAY
+ *
+ * @throws Exception so we don't have to catch it
+ * @since 3.0
+ */
+ @Test
+ public void testTruncateHourOfDay() throws Exception {
+ final int calendarField = Calendar.HOUR_OF_DAY;
+ final Date lastTruncateDate = dateTimeParser.parse("June 1, 2008 8:59:59.999");
+ baseTruncateTest(targetHourOfDayDate, lastTruncateDate, calendarField);
+ }
+
+ /**
+ * Test DateUtils.truncate()-method with Calendar.SECOND
+ *
+ * @since 3.0
+ */
+ @Test
+ public void testTruncateMilliSecond() {
+ final int calendarField = Calendar.MILLISECOND;
+ baseTruncateTest(targetMilliSecondDate, targetMilliSecondDate, calendarField);
+ }
+
+ /**
+ * Test DateUtils.truncate()-method with Calendar.MINUTE
+ *
+ * @throws Exception so we don't have to catch it
+ * @since 3.0
+ */
+ @Test
+ public void testTruncateMinute() throws Exception {
+ final int calendarField = Calendar.MINUTE;
+ final Date lastTruncateDate = dateTimeParser.parse("June 1, 2008 8:15:59.999");
+ baseTruncateTest(targetMinuteDate, lastTruncateDate, calendarField);
+ }
+
+ /**
+ * Test DateUtils.truncate()-method with Calendar.MONTH
+ *
+ * @throws Exception so we don't have to catch it
+ * @since 3.0
+ */
+ @Test
+ public void testTruncateMonth() throws Exception {
+ final int calendarField = Calendar.MONTH;
+ final Date truncatedDate = dateTimeParser.parse("March 1, 2008 0:00:00.000");
+ final Date lastTruncateDate = dateTimeParser.parse("March 31, 2008 23:59:59.999");
+ baseTruncateTest(truncatedDate, lastTruncateDate, calendarField);
+ }
+
+ /**
+ * Test DateUtils.truncate()-method with Calendar.SECOND
+ *
+ * @throws Exception so we don't have to catch it
+ * @since 3.0
+ */
+ @Test
+ public void testTruncateSecond() throws Exception {
+ final int calendarField = Calendar.SECOND;
+ final Date lastTruncateDate = dateTimeParser.parse("June 1, 2008 8:15:14.999");
+ baseTruncateTest(targetSecondDate, lastTruncateDate, calendarField);
+ }
+
+ /**
+ * Test DateUtils.truncate()-method with DateUtils.SEMI_MONTH
+ * Includes truncating months with 28, 29, 30 and 31 days, each with first and second half
+ *
+ * @throws Exception so we don't have to catch it
+ * @since 3.0
+ */
+ @Test
+ public void testTruncateSemiMonth() throws Exception {
+ final int calendarField = DateUtils.SEMI_MONTH;
+ Date truncatedDate, lastTruncateDate;
+
+ //month with 28 days (1)
+ truncatedDate = dateTimeParser.parse("February 1, 2007 0:00:00.000");
+ lastTruncateDate = dateTimeParser.parse("February 15, 2007 23:59:59.999");
+ baseTruncateTest(truncatedDate, lastTruncateDate, calendarField);
+
+ //month with 28 days (2)
+ truncatedDate = dateTimeParser.parse("February 16, 2007 0:00:00.000");
+ lastTruncateDate = dateTimeParser.parse("February 28, 2007 23:59:59.999");
+ baseTruncateTest(truncatedDate, lastTruncateDate, calendarField);
+
+ //month with 29 days (1)
+ truncatedDate = dateTimeParser.parse("February 1, 2008 0:00:00.000");
+ lastTruncateDate = dateTimeParser.parse("February 15, 2008 23:59:59.999");
+ baseTruncateTest(truncatedDate, lastTruncateDate, calendarField);
+
+ //month with 29 days (2)
+ truncatedDate = dateTimeParser.parse("February 16, 2008 0:00:00.000");
+ lastTruncateDate = dateTimeParser.parse("February 29, 2008 23:59:59.999");
+ baseTruncateTest(truncatedDate, lastTruncateDate, calendarField);
+
+ //month with 30 days (1)
+ truncatedDate = dateTimeParser.parse("April 1, 2008 0:00:00.000");
+ lastTruncateDate = dateTimeParser.parse("April 15, 2008 23:59:59.999");
+ baseTruncateTest(truncatedDate, lastTruncateDate, calendarField);
+
+ //month with 30 days (2)
+ truncatedDate = dateTimeParser.parse("April 16, 2008 0:00:00.000");
+ lastTruncateDate = dateTimeParser.parse("April 30, 2008 23:59:59.999");
+ baseTruncateTest(truncatedDate, lastTruncateDate, calendarField);
+
+ //month with 31 days (1)
+ truncatedDate = dateTimeParser.parse("March 1, 2008 0:00:00.000");
+ lastTruncateDate = dateTimeParser.parse("March 15, 2008 23:59:59.999");
+ baseTruncateTest(truncatedDate, lastTruncateDate, calendarField);
+
+ //month with 31 days (2)
+ truncatedDate = dateTimeParser.parse("March 16, 2008 0:00:00.000");
+ lastTruncateDate = dateTimeParser.parse("March 31, 2008 23:59:59.999");
+ baseTruncateTest(truncatedDate, lastTruncateDate, calendarField);
+
+ }
+
+ /**
+ * Test DateUtils.truncate()-method with Calendar.YEAR
+ *
+ * @throws Exception so we don't have to catch it
+ * @since 3.0
+ */
+ @Test
+ public void testTruncateYear() throws Exception {
+ final int calendarField = Calendar.YEAR;
+ final Date lastTruncateDate = dateTimeParser.parse("December 31, 2007 23:59:59.999");
+ baseTruncateTest(targetYearDate, lastTruncateDate, calendarField);
+ }
}
diff --git a/src/test/java/org/apache/commons/lang3/time/DateUtilsTest.java b/src/test/java/org/apache/commons/lang3/time/DateUtilsTest.java
index 14dbf89c2..dd6025dce 100644
--- a/src/test/java/org/apache/commons/lang3/time/DateUtilsTest.java
+++ b/src/test/java/org/apache/commons/lang3/time/DateUtilsTest.java
@@ -48,13 +48,68 @@ public class DateUtilsTest {
private static Date BASE_DATE;
+ /**
+ * Used to check that Calendar objects are close enough
+ * delta is in milliseconds
+ */
+ private static void assertCalendarsEquals(final String message, final Calendar cal1, final Calendar cal2, final long delta) {
+ assertFalse(Math.abs(cal1.getTime().getTime() - cal2.getTime().getTime()) > delta,
+ message + " expected " + cal1.getTime() + " but got " + cal2.getTime());
+ }
+
+ /**
+ * This checks that this is a 7 element iterator of Calendar objects
+ * that are dates (no time), and exactly 1 day spaced after each other.
+ */
+ private static void assertWeekIterator(final Iterator> it, final Calendar start) {
+ final Calendar end = (Calendar) start.clone();
+ end.add(Calendar.DATE, 6);
+
+ assertWeekIterator(it, start, end);
+ }
+ /**
+ * This checks that this is a 7 divisble iterator of Calendar objects
+ * that are dates (no time), and exactly 1 day spaced after each other
+ * (in addition to the proper start and stop dates)
+ */
+ private static void assertWeekIterator(final Iterator> it, final Calendar start, final Calendar end) {
+ Calendar cal = (Calendar) it.next();
+ assertCalendarsEquals("", start, cal, 0);
+ Calendar last = null;
+ int count = 1;
+ while (it.hasNext()) {
+ //Check this is just a date (no time component)
+ assertCalendarsEquals("", cal, DateUtils.truncate(cal, Calendar.DATE), 0);
+
+ last = cal;
+ cal = (Calendar) it.next();
+ count++;
+
+ //Check that this is one day more than the last date
+ last.add(Calendar.DATE, 1);
+ assertCalendarsEquals("", last, cal, 0);
+ }
+
+ assertFalse(count % 7 != 0, "There were " + count + " days in this iterator");
+ assertCalendarsEquals("", end, cal, 0);
+ }
+ /**
+ * Convenience method for when working with Date objects
+ */
+ private static void assertWeekIterator(final Iterator> it, final Date start, final Date end) {
+ final Calendar calStart = Calendar.getInstance();
+ calStart.setTime(start);
+ final Calendar calEnd = Calendar.getInstance();
+ calEnd.setTime(end);
+
+ assertWeekIterator(it, calStart, calEnd);
+ }
@BeforeAll
public static void classSetup() {
final GregorianCalendar cal = new GregorianCalendar(2000, 6, 5, 4, 3, 2);
cal.set(Calendar.MILLISECOND, 1);
BASE_DATE = cal.getTime();
}
-
private DateFormat dateParser = null;
private DateFormat dateTimeParser = null;
private Date dateAmPm1 = null;
@@ -80,11 +135,28 @@ public static void classSetup() {
private Calendar cal4 = null;
private Calendar cal5 = null;
private Calendar cal6 = null;
+
private Calendar cal7 = null;
+
private Calendar cal8 = null;
+
private TimeZone zone = null;
+
private TimeZone defaultZone = null;
+ //-----------------------------------------------------------------------
+ private void assertDate(final Date date, final int year, final int month, final int day, final int hour, final int min, final int sec, final int mil) {
+ final GregorianCalendar cal = new GregorianCalendar();
+ cal.setTime(date);
+ assertEquals(year, cal.get(Calendar.YEAR));
+ assertEquals(month, cal.get(Calendar.MONTH));
+ assertEquals(day, cal.get(Calendar.DAY_OF_MONTH));
+ assertEquals(hour, cal.get(Calendar.HOUR_OF_DAY));
+ assertEquals(min, cal.get(Calendar.MINUTE));
+ assertEquals(sec, cal.get(Calendar.SECOND));
+ assertEquals(mil, cal.get(Calendar.MILLISECOND));
+ }
+
@BeforeEach
public void setUp() throws Exception {
dateParser = new SimpleDateFormat("MMM dd, yyyy", Locale.ENGLISH);
@@ -143,288 +215,6 @@ public void setUp() throws Exception {
}
}
- //-----------------------------------------------------------------------
- @Test
- public void testConstructor() {
- assertNotNull(new DateUtils());
- final Constructor>[] cons = DateUtils.class.getDeclaredConstructors();
- assertEquals(1, cons.length);
- assertTrue(Modifier.isPublic(cons[0].getModifiers()));
- assertTrue(Modifier.isPublic(DateUtils.class.getModifiers()));
- assertFalse(Modifier.isFinal(DateUtils.class.getModifiers()));
- }
-
- //-----------------------------------------------------------------------
- @Test
- public void testIsSameDay_Date() {
- Date datea = new GregorianCalendar(2004, 6, 9, 13, 45).getTime();
- Date dateb = new GregorianCalendar(2004, 6, 9, 13, 45).getTime();
- assertTrue(DateUtils.isSameDay(datea, dateb));
- dateb = new GregorianCalendar(2004, 6, 10, 13, 45).getTime();
- assertFalse(DateUtils.isSameDay(datea, dateb));
- datea = new GregorianCalendar(2004, 6, 10, 13, 45).getTime();
- assertTrue(DateUtils.isSameDay(datea, dateb));
- dateb = new GregorianCalendar(2005, 6, 10, 13, 45).getTime();
- assertFalse(DateUtils.isSameDay(datea, dateb));
- }
-
- @Test
- public void testIsSameDay_DateNullNull() {
- assertThrows(IllegalArgumentException.class, () -> DateUtils.isSameDay((Date) null, null));
- }
-
- @Test
- public void testIsSameDay_DateNullNotNull() {
- assertThrows(IllegalArgumentException.class, () -> DateUtils.isSameDay(null, new Date()));
- }
-
- @Test
- public void testIsSameDay_DateNotNullNull() {
- assertThrows(IllegalArgumentException.class, () -> DateUtils.isSameDay(new Date(), null));
- }
-
- //-----------------------------------------------------------------------
- @Test
- public void testIsSameDay_Cal() {
- final GregorianCalendar cala = new GregorianCalendar(2004, 6, 9, 13, 45);
- final GregorianCalendar calb = new GregorianCalendar(2004, 6, 9, 13, 45);
- assertTrue(DateUtils.isSameDay(cala, calb));
- calb.add(Calendar.DAY_OF_YEAR, 1);
- assertFalse(DateUtils.isSameDay(cala, calb));
- cala.add(Calendar.DAY_OF_YEAR, 1);
- assertTrue(DateUtils.isSameDay(cala, calb));
- calb.add(Calendar.YEAR, 1);
- assertFalse(DateUtils.isSameDay(cala, calb));
- }
-
- @Test
- public void testIsSameDay_CalNullNull() {
- assertThrows(IllegalArgumentException.class, () -> DateUtils.isSameDay((Calendar) null, null));
- }
-
- @Test
- public void testIsSameDay_CalNullNotNull() {
- assertThrows(IllegalArgumentException.class, () -> DateUtils.isSameDay(null, Calendar.getInstance()));
- }
-
- @Test
- public void testIsSameDay_CalNotNullNull() {
- assertThrows(IllegalArgumentException.class, () -> DateUtils.isSameDay(Calendar.getInstance(), null));
- }
-
- //-----------------------------------------------------------------------
- @Test
- public void testIsSameInstant_Date() {
- Date datea = new GregorianCalendar(2004, 6, 9, 13, 45).getTime();
- Date dateb = new GregorianCalendar(2004, 6, 9, 13, 45).getTime();
- assertTrue(DateUtils.isSameInstant(datea, dateb));
- dateb = new GregorianCalendar(2004, 6, 10, 13, 45).getTime();
- assertFalse(DateUtils.isSameInstant(datea, dateb));
- datea = new GregorianCalendar(2004, 6, 10, 13, 45).getTime();
- assertTrue(DateUtils.isSameInstant(datea, dateb));
- dateb = new GregorianCalendar(2005, 6, 10, 13, 45).getTime();
- assertFalse(DateUtils.isSameInstant(datea, dateb));
- }
-
- @Test
- public void testIsSameInstant_DateNullNull() {
- assertThrows(IllegalArgumentException.class, () -> DateUtils.isSameInstant((Date) null, null));
- }
-
- @Test
- public void testIsSameInstant_DateNullNotNull() {
- assertThrows(IllegalArgumentException.class, () -> DateUtils.isSameInstant(null, new Date()));
- }
-
- @Test
- public void testIsSameInstant_DateNotNullNull() {
- assertThrows(IllegalArgumentException.class, () -> DateUtils.isSameInstant(new Date(), null));
- }
-
- //-----------------------------------------------------------------------
- @Test
- public void testIsSameInstant_Cal() {
- final GregorianCalendar cala = new GregorianCalendar(TimeZone.getTimeZone("GMT+1"));
- final GregorianCalendar calb = new GregorianCalendar(TimeZone.getTimeZone("GMT-1"));
- cala.set(2004, Calendar.JULY, 9, 13, 45, 0);
- cala.set(Calendar.MILLISECOND, 0);
- calb.set(2004, Calendar.JULY, 9, 13, 45, 0);
- calb.set(Calendar.MILLISECOND, 0);
- assertFalse(DateUtils.isSameInstant(cala, calb));
-
- calb.set(2004, Calendar.JULY, 9, 11, 45, 0);
- assertTrue(DateUtils.isSameInstant(cala, calb));
- }
-
- @Test
- public void testIsSameInstant_CalNullNull() {
- assertThrows(IllegalArgumentException.class, () -> DateUtils.isSameInstant((Calendar) null, null));
- }
-
- @Test
- public void testIsSameInstant_CalNullNotNull() {
- assertThrows(IllegalArgumentException.class, () -> DateUtils.isSameInstant(null, Calendar.getInstance()));
- }
-
- @Test
- public void testIsSameInstant_CalNotNullNull() {
- assertThrows(IllegalArgumentException.class, () -> DateUtils.isSameInstant(Calendar.getInstance(), null));
- }
-
- //-----------------------------------------------------------------------
- @Test
- public void testIsSameLocalTime_Cal() {
- final GregorianCalendar cala = new GregorianCalendar(TimeZone.getTimeZone("GMT+1"));
- final GregorianCalendar calb = new GregorianCalendar(TimeZone.getTimeZone("GMT-1"));
- cala.set(2004, Calendar.JULY, 9, 13, 45, 0);
- cala.set(Calendar.MILLISECOND, 0);
- calb.set(2004, Calendar.JULY, 9, 13, 45, 0);
- calb.set(Calendar.MILLISECOND, 0);
- assertTrue(DateUtils.isSameLocalTime(cala, calb));
-
- final Calendar calc = Calendar.getInstance();
- final Calendar cald = Calendar.getInstance();
- calc.set(2004, Calendar.JULY, 9, 4, 0, 0);
- cald.set(2004, Calendar.JULY, 9, 16, 0, 0);
- calc.set(Calendar.MILLISECOND, 0);
- cald.set(Calendar.MILLISECOND, 0);
- assertFalse(DateUtils.isSameLocalTime(calc, cald), "LANG-677");
-
- calb.set(2004, Calendar.JULY, 9, 11, 45, 0);
- assertFalse(DateUtils.isSameLocalTime(cala, calb));
- }
-
- @Test
- public void testIsSameLocalTime_CalNullNull() {
- assertThrows(IllegalArgumentException.class, () -> DateUtils.isSameLocalTime(null, null));
- }
-
- @Test
- public void testIsSameLocalTime_CalNullNotNull() {
- assertThrows(IllegalArgumentException.class, () -> DateUtils.isSameLocalTime(null, Calendar.getInstance()));
- }
-
- @Test
- public void testIsSameLocalTime_CalNotNullNull() {
- assertThrows(IllegalArgumentException.class, () -> DateUtils.isSameLocalTime(Calendar.getInstance(), null));
- }
-
- //-----------------------------------------------------------------------
- @Test
- public void testParseDate() throws Exception {
- final GregorianCalendar cal = new GregorianCalendar(1972, 11, 3);
- String dateStr = "1972-12-03";
- final String[] parsers = new String[] {"yyyy'-'DDD", "yyyy'-'MM'-'dd", "yyyyMMdd"};
- Date date = DateUtils.parseDate(dateStr, parsers);
- assertEquals(cal.getTime(), date);
-
- dateStr = "1972-338";
- date = DateUtils.parseDate(dateStr, parsers);
- assertEquals(cal.getTime(), date);
-
- dateStr = "19721203";
- date = DateUtils.parseDate(dateStr, parsers);
- assertEquals(cal.getTime(), date);
- }
-
- @Test
- public void testParseDate_NoDateString() {
- final String[] parsers = new String[] {"yyyy'-'DDD", "yyyy'-'MM'-'dd", "yyyyMMdd"};
- assertThrows(ParseException.class, () -> DateUtils.parseDate("PURPLE", parsers));
- }
-
- @Test
- public void testParseDate_InvalidDateString() {
- final String[] parsers = new String[] {"yyyy'-'DDD", "yyyy'-'MM'-'dd", "yyyyMMdd"};
- assertThrows(ParseException.class, () -> DateUtils.parseDate("197212AB", parsers));
- }
-
- @Test
- public void testParseDate_Null() {
- final String[] parsers = new String[] {"yyyy'-'DDD", "yyyy'-'MM'-'dd", "yyyyMMdd"};
- assertThrows(IllegalArgumentException.class, () -> DateUtils.parseDate(null, parsers));
- }
-
- @Test
- public void testParse_NullParsers() {
- assertThrows(IllegalArgumentException.class, () -> DateUtils.parseDate("19721203", (String[]) null));
- }
-
- @Test
- public void testParse_EmptyParsers() {
- assertThrows(ParseException.class, () -> DateUtils.parseDate("19721203"));
- }
-
- // LANG-486
- @Test
- public void testParseDateWithLeniency() throws Exception {
- final GregorianCalendar cal = new GregorianCalendar(1998, 6, 30);
- final String dateStr = "02 942, 1996";
- final String[] parsers = new String[] {"MM DDD, yyyy"};
-
- final Date date = DateUtils.parseDate(dateStr, parsers);
- assertEquals(cal.getTime(), date);
-
- assertThrows(ParseException.class, () -> DateUtils.parseDateStrictly(dateStr, parsers));
- }
-
- //-----------------------------------------------------------------------
- @Test
- public void testAddYears() throws Exception {
- Date result = DateUtils.addYears(BASE_DATE, 0);
- assertNotSame(BASE_DATE, result);
- assertDate(BASE_DATE, 2000, 6, 5, 4, 3, 2, 1);
- assertDate(result, 2000, 6, 5, 4, 3, 2, 1);
-
- result = DateUtils.addYears(BASE_DATE, 1);
- assertNotSame(BASE_DATE, result);
- assertDate(BASE_DATE, 2000, 6, 5, 4, 3, 2, 1);
- assertDate(result, 2001, 6, 5, 4, 3, 2, 1);
-
- result = DateUtils.addYears(BASE_DATE, -1);
- assertNotSame(BASE_DATE, result);
- assertDate(BASE_DATE, 2000, 6, 5, 4, 3, 2, 1);
- assertDate(result, 1999, 6, 5, 4, 3, 2, 1);
- }
-
- //-----------------------------------------------------------------------
- @Test
- public void testAddMonths() throws Exception {
- Date result = DateUtils.addMonths(BASE_DATE, 0);
- assertNotSame(BASE_DATE, result);
- assertDate(BASE_DATE, 2000, 6, 5, 4, 3, 2, 1);
- assertDate(result, 2000, 6, 5, 4, 3, 2, 1);
-
- result = DateUtils.addMonths(BASE_DATE, 1);
- assertNotSame(BASE_DATE, result);
- assertDate(BASE_DATE, 2000, 6, 5, 4, 3, 2, 1);
- assertDate(result, 2000, 7, 5, 4, 3, 2, 1);
-
- result = DateUtils.addMonths(BASE_DATE, -1);
- assertNotSame(BASE_DATE, result);
- assertDate(BASE_DATE, 2000, 6, 5, 4, 3, 2, 1);
- assertDate(result, 2000, 5, 5, 4, 3, 2, 1);
- }
-
- //-----------------------------------------------------------------------
- @Test
- public void testAddWeeks() throws Exception {
- Date result = DateUtils.addWeeks(BASE_DATE, 0);
- assertNotSame(BASE_DATE, result);
- assertDate(BASE_DATE, 2000, 6, 5, 4, 3, 2, 1);
- assertDate(result, 2000, 6, 5, 4, 3, 2, 1);
-
- result = DateUtils.addWeeks(BASE_DATE, 1);
- assertNotSame(BASE_DATE, result);
- assertDate(BASE_DATE, 2000, 6, 5, 4, 3, 2, 1);
- assertDate(result, 2000, 6, 12, 4, 3, 2, 1);
-
- result = DateUtils.addWeeks(BASE_DATE, -1);
- assertNotSame(BASE_DATE, result);
- assertDate(BASE_DATE, 2000, 6, 5, 4, 3, 2, 1); // july
- assertDate(result, 2000, 5, 28, 4, 3, 2, 1); // june
- }
-
//-----------------------------------------------------------------------
@Test
public void testAddDays() throws Exception {
@@ -463,6 +253,25 @@ public void testAddHours() throws Exception {
assertDate(result, 2000, 6, 5, 3, 3, 2, 1);
}
+ //-----------------------------------------------------------------------
+ @Test
+ public void testAddMilliseconds() throws Exception {
+ Date result = DateUtils.addMilliseconds(BASE_DATE, 0);
+ assertNotSame(BASE_DATE, result);
+ assertDate(BASE_DATE, 2000, 6, 5, 4, 3, 2, 1);
+ assertDate(result, 2000, 6, 5, 4, 3, 2, 1);
+
+ result = DateUtils.addMilliseconds(BASE_DATE, 1);
+ assertNotSame(BASE_DATE, result);
+ assertDate(BASE_DATE, 2000, 6, 5, 4, 3, 2, 1);
+ assertDate(result, 2000, 6, 5, 4, 3, 2, 2);
+
+ result = DateUtils.addMilliseconds(BASE_DATE, -1);
+ assertNotSame(BASE_DATE, result);
+ assertDate(BASE_DATE, 2000, 6, 5, 4, 3, 2, 1);
+ assertDate(result, 2000, 6, 5, 4, 3, 2, 0);
+ }
+
//-----------------------------------------------------------------------
@Test
public void testAddMinutes() throws Exception {
@@ -482,6 +291,25 @@ public void testAddMinutes() throws Exception {
assertDate(result, 2000, 6, 5, 4, 2, 2, 1);
}
+ //-----------------------------------------------------------------------
+ @Test
+ public void testAddMonths() throws Exception {
+ Date result = DateUtils.addMonths(BASE_DATE, 0);
+ assertNotSame(BASE_DATE, result);
+ assertDate(BASE_DATE, 2000, 6, 5, 4, 3, 2, 1);
+ assertDate(result, 2000, 6, 5, 4, 3, 2, 1);
+
+ result = DateUtils.addMonths(BASE_DATE, 1);
+ assertNotSame(BASE_DATE, result);
+ assertDate(BASE_DATE, 2000, 6, 5, 4, 3, 2, 1);
+ assertDate(result, 2000, 7, 5, 4, 3, 2, 1);
+
+ result = DateUtils.addMonths(BASE_DATE, -1);
+ assertNotSame(BASE_DATE, result);
+ assertDate(BASE_DATE, 2000, 6, 5, 4, 3, 2, 1);
+ assertDate(result, 2000, 5, 5, 4, 3, 2, 1);
+ }
+
//-----------------------------------------------------------------------
@Test
public void testAddSeconds() throws Exception {
@@ -503,200 +331,589 @@ public void testAddSeconds() throws Exception {
//-----------------------------------------------------------------------
@Test
- public void testAddMilliseconds() throws Exception {
- Date result = DateUtils.addMilliseconds(BASE_DATE, 0);
+ public void testAddWeeks() throws Exception {
+ Date result = DateUtils.addWeeks(BASE_DATE, 0);
assertNotSame(BASE_DATE, result);
assertDate(BASE_DATE, 2000, 6, 5, 4, 3, 2, 1);
assertDate(result, 2000, 6, 5, 4, 3, 2, 1);
- result = DateUtils.addMilliseconds(BASE_DATE, 1);
+ result = DateUtils.addWeeks(BASE_DATE, 1);
assertNotSame(BASE_DATE, result);
assertDate(BASE_DATE, 2000, 6, 5, 4, 3, 2, 1);
- assertDate(result, 2000, 6, 5, 4, 3, 2, 2);
+ assertDate(result, 2000, 6, 12, 4, 3, 2, 1);
- result = DateUtils.addMilliseconds(BASE_DATE, -1);
+ result = DateUtils.addWeeks(BASE_DATE, -1);
assertNotSame(BASE_DATE, result);
- assertDate(BASE_DATE, 2000, 6, 5, 4, 3, 2, 1);
- assertDate(result, 2000, 6, 5, 4, 3, 2, 0);
+ assertDate(BASE_DATE, 2000, 6, 5, 4, 3, 2, 1); // july
+ assertDate(result, 2000, 5, 28, 4, 3, 2, 1); // june
}
- // -----------------------------------------------------------------------
+ //-----------------------------------------------------------------------
@Test
- public void testSetYears() throws Exception {
- Date result = DateUtils.setYears(BASE_DATE, 2000);
+ public void testAddYears() throws Exception {
+ Date result = DateUtils.addYears(BASE_DATE, 0);
assertNotSame(BASE_DATE, result);
assertDate(BASE_DATE, 2000, 6, 5, 4, 3, 2, 1);
assertDate(result, 2000, 6, 5, 4, 3, 2, 1);
- result = DateUtils.setYears(BASE_DATE, 2008);
+ result = DateUtils.addYears(BASE_DATE, 1);
assertNotSame(BASE_DATE, result);
assertDate(BASE_DATE, 2000, 6, 5, 4, 3, 2, 1);
- assertDate(result, 2008, 6, 5, 4, 3, 2, 1);
+ assertDate(result, 2001, 6, 5, 4, 3, 2, 1);
- result = DateUtils.setYears(BASE_DATE, 2005);
+ result = DateUtils.addYears(BASE_DATE, -1);
assertNotSame(BASE_DATE, result);
assertDate(BASE_DATE, 2000, 6, 5, 4, 3, 2, 1);
- assertDate(result, 2005, 6, 5, 4, 3, 2, 1);
+ assertDate(result, 1999, 6, 5, 4, 3, 2, 1);
}
- // -----------------------------------------------------------------------
+ /**
+ * Tests various values with the ceiling method
+ *
+ * @throws java.lang.Exception so we don't have to catch it
+ */
@Test
- public void testSetMonths() throws Exception {
- Date result = DateUtils.setMonths(BASE_DATE, 5);
- assertNotSame(BASE_DATE, result);
- assertDate(BASE_DATE, 2000, 6, 5, 4, 3, 2, 1);
- assertDate(result, 2000, 5, 5, 4, 3, 2, 1);
+ public void testCeil() throws Exception {
+ // test javadoc
+ assertEquals(dateTimeParser.parse("March 28, 2002 14:00:00.000"),
+ DateUtils.ceiling(
+ dateTimeParser.parse("March 28, 2002 13:45:01.231"),
+ Calendar.HOUR),
+ "ceiling javadoc-1 failed");
+ assertEquals(dateTimeParser.parse("April 1, 2002 00:00:00.000"),
+ DateUtils.ceiling(
+ dateTimeParser.parse("March 28, 2002 13:45:01.231"),
+ Calendar.MONTH),
+ "ceiling javadoc-2 failed");
- result = DateUtils.setMonths(BASE_DATE, 1);
- assertNotSame(BASE_DATE, result);
- assertDate(BASE_DATE, 2000, 6, 5, 4, 3, 2, 1);
- assertDate(result, 2000, 1, 5, 4, 3, 2, 1);
+ // tests public static Date ceiling(Date date, int field)
+ assertEquals(dateParser.parse("January 1, 2003"),
+ DateUtils.ceiling(date1, Calendar.YEAR),
+ "ceiling year-1 failed");
+ assertEquals(dateParser.parse("January 1, 2002"),
+ DateUtils.ceiling(date2, Calendar.YEAR),
+ "ceiling year-2 failed");
+ assertEquals(dateParser.parse("March 1, 2002"),
+ DateUtils.ceiling(date1, Calendar.MONTH),
+ "ceiling month-1 failed");
+ assertEquals(dateParser.parse("December 1, 2001"),
+ DateUtils.ceiling(date2, Calendar.MONTH),
+ "ceiling month-2 failed");
+ assertEquals(dateParser.parse("February 16, 2002"),
+ DateUtils.ceiling(date1, DateUtils.SEMI_MONTH),
+ "ceiling semimonth-1 failed");
+ assertEquals(dateParser.parse("December 1, 2001"),
+ DateUtils.ceiling(date2, DateUtils.SEMI_MONTH),
+ "ceiling semimonth-2 failed");
+ assertEquals(dateParser.parse("February 13, 2002"),
+ DateUtils.ceiling(date1, Calendar.DATE),
+ "ceiling date-1 failed");
+ assertEquals(dateParser.parse("November 19, 2001"),
+ DateUtils.ceiling(date2, Calendar.DATE),
+ "ceiling date-2 failed");
+ assertEquals(dateTimeParser.parse("February 12, 2002 13:00:00.000"),
+ DateUtils.ceiling(date1, Calendar.HOUR),
+ "ceiling hour-1 failed");
+ assertEquals(dateTimeParser.parse("November 18, 2001 2:00:00.000"),
+ DateUtils.ceiling(date2, Calendar.HOUR),
+ "ceiling hour-2 failed");
+ assertEquals(dateTimeParser.parse("February 12, 2002 12:35:00.000"),
+ DateUtils.ceiling(date1, Calendar.MINUTE),
+ "ceiling minute-1 failed");
+ assertEquals(dateTimeParser.parse("November 18, 2001 1:24:00.000"),
+ DateUtils.ceiling(date2, Calendar.MINUTE),
+ "ceiling minute-2 failed");
+ assertEquals(dateTimeParser.parse("February 12, 2002 12:34:57.000"),
+ DateUtils.ceiling(date1, Calendar.SECOND),
+ "ceiling second-1 failed");
+ assertEquals(dateTimeParser.parse("November 18, 2001 1:23:12.000"),
+ DateUtils.ceiling(date2, Calendar.SECOND),
+ "ceiling second-2 failed");
+ assertEquals(dateTimeParser.parse("February 3, 2002 12:00:00.000"),
+ DateUtils.ceiling(dateAmPm1, Calendar.AM_PM),
+ "ceiling ampm-1 failed");
+ assertEquals(dateTimeParser.parse("February 3, 2002 12:00:00.000"),
+ DateUtils.ceiling(dateAmPm2, Calendar.AM_PM),
+ "ceiling ampm-2 failed");
+ assertEquals(dateTimeParser.parse("February 4, 2002 00:00:00.000"),
+ DateUtils.ceiling(dateAmPm3, Calendar.AM_PM),
+ "ceiling ampm-3 failed");
+ assertEquals(dateTimeParser.parse("February 4, 2002 00:00:00.000"),
+ DateUtils.ceiling(dateAmPm4, Calendar.AM_PM),
+ "ceiling ampm-4 failed");
- assertThrows(
- IllegalArgumentException.class,
- () -> DateUtils.setMonths(BASE_DATE, 12),
- "DateUtils.setMonths did not throw an expected IllegalArgumentException.");
- }
+ // tests public static Date ceiling(Object date, int field)
+ assertEquals(dateParser.parse("January 1, 2003"),
+ DateUtils.ceiling((Object) date1, Calendar.YEAR),
+ "ceiling year-1 failed");
+ assertEquals(dateParser.parse("January 1, 2002"),
+ DateUtils.ceiling((Object) date2, Calendar.YEAR),
+ "ceiling year-2 failed");
+ assertEquals(dateParser.parse("March 1, 2002"),
+ DateUtils.ceiling((Object) date1, Calendar.MONTH),
+ "ceiling month-1 failed");
+ assertEquals(dateParser.parse("December 1, 2001"),
+ DateUtils.ceiling((Object) date2, Calendar.MONTH),
+ "ceiling month-2 failed");
+ assertEquals(dateParser.parse("February 16, 2002"),
+ DateUtils.ceiling((Object) date1, DateUtils.SEMI_MONTH),
+ "ceiling semimonth-1 failed");
+ assertEquals(dateParser.parse("December 1, 2001"),
+ DateUtils.ceiling((Object) date2, DateUtils.SEMI_MONTH),
+ "ceiling semimonth-2 failed");
+ assertEquals(dateParser.parse("February 13, 2002"),
+ DateUtils.ceiling((Object) date1, Calendar.DATE),
+ "ceiling date-1 failed");
+ assertEquals(dateParser.parse("November 19, 2001"),
+ DateUtils.ceiling((Object) date2, Calendar.DATE),
+ "ceiling date-2 failed");
+ assertEquals(dateTimeParser.parse("February 12, 2002 13:00:00.000"),
+ DateUtils.ceiling((Object) date1, Calendar.HOUR),
+ "ceiling hour-1 failed");
+ assertEquals(dateTimeParser.parse("November 18, 2001 2:00:00.000"),
+ DateUtils.ceiling((Object) date2, Calendar.HOUR),
+ "ceiling hour-2 failed");
+ assertEquals(dateTimeParser.parse("February 12, 2002 12:35:00.000"),
+ DateUtils.ceiling((Object) date1, Calendar.MINUTE),
+ "ceiling minute-1 failed");
+ assertEquals(dateTimeParser.parse("November 18, 2001 1:24:00.000"),
+ DateUtils.ceiling((Object) date2, Calendar.MINUTE),
+ "ceiling minute-2 failed");
+ assertEquals(dateTimeParser.parse("February 12, 2002 12:34:57.000"),
+ DateUtils.ceiling((Object) date1, Calendar.SECOND),
+ "ceiling second-1 failed");
+ assertEquals(dateTimeParser.parse("November 18, 2001 1:23:12.000"),
+ DateUtils.ceiling((Object) date2, Calendar.SECOND),
+ "ceiling second-2 failed");
+ assertEquals(dateTimeParser.parse("February 3, 2002 12:00:00.000"),
+ DateUtils.ceiling((Object) dateAmPm1, Calendar.AM_PM),
+ "ceiling ampm-1 failed");
+ assertEquals(dateTimeParser.parse("February 3, 2002 12:00:00.000"),
+ DateUtils.ceiling((Object) dateAmPm2, Calendar.AM_PM),
+ "ceiling ampm-2 failed");
+ assertEquals(dateTimeParser.parse("February 4, 2002 00:00:00.000"),
+ DateUtils.ceiling((Object) dateAmPm3, Calendar.AM_PM),
+ "ceiling ampm-3 failed");
+ assertEquals(dateTimeParser.parse("February 4, 2002 00:00:00.000"),
+ DateUtils.ceiling((Object) dateAmPm4, Calendar.AM_PM),
+ "ceiling ampm-4 failed");
- // -----------------------------------------------------------------------
- @Test
- public void testSetDays() throws Exception {
- Date result = DateUtils.setDays(BASE_DATE, 1);
- assertNotSame(BASE_DATE, result);
- assertDate(BASE_DATE, 2000, 6, 5, 4, 3, 2, 1);
- assertDate(result, 2000, 6, 1, 4, 3, 2, 1);
+ assertEquals(dateTimeParser.parse("February 12, 2002 12:34:57.000"),
+ DateUtils.ceiling((Object) cal1, Calendar.SECOND),
+ "ceiling calendar second-1 failed");
+ assertEquals(dateTimeParser.parse("November 18, 2001 1:23:12.000"),
+ DateUtils.ceiling((Object) cal2, Calendar.SECOND),
+ "ceiling calendar second-2 failed");
- result = DateUtils.setDays(BASE_DATE, 29);
- assertNotSame(BASE_DATE, result);
- assertDate(BASE_DATE, 2000, 6, 5, 4, 3, 2, 1);
- assertDate(result, 2000, 6, 29, 4, 3, 2, 1);
+ assertEquals(dateTimeParser.parse("February 3, 2002 12:00:00.000"),
+ DateUtils.ceiling((Object) calAmPm1, Calendar.AM_PM),
+ "ceiling ampm-1 failed");
+ assertEquals(dateTimeParser.parse("February 3, 2002 12:00:00.000"),
+ DateUtils.ceiling((Object) calAmPm2, Calendar.AM_PM),
+ "ceiling ampm-2 failed");
+ assertEquals(dateTimeParser.parse("February 4, 2002 00:00:00.000"),
+ DateUtils.ceiling((Object) calAmPm3, Calendar.AM_PM),
+ "ceiling ampm-3 failed");
+ assertEquals(dateTimeParser.parse("February 4, 2002 00:00:00.000"),
+ DateUtils.ceiling((Object) calAmPm4, Calendar.AM_PM),
+ "ceiling ampm-4 failed");
- assertThrows(
- IllegalArgumentException.class,
- () -> DateUtils.setDays(BASE_DATE, 32),
- "DateUtils.setDays did not throw an expected IllegalArgumentException.");
- }
+ assertThrows(NullPointerException.class, () -> DateUtils.ceiling((Date) null, Calendar.SECOND));
+ assertThrows(IllegalArgumentException.class, () -> DateUtils.ceiling((Calendar) null, Calendar.SECOND));
+ assertThrows(IllegalArgumentException.class, () -> DateUtils.ceiling((Object) null, Calendar.SECOND));
+ assertThrows(ClassCastException.class, () -> DateUtils.ceiling("", Calendar.SECOND));
+ assertThrows(IllegalArgumentException.class, () -> DateUtils.ceiling(date1, -9999));
- // -----------------------------------------------------------------------
- @Test
- public void testSetHours() throws Exception {
- Date result = DateUtils.setHours(BASE_DATE, 0);
- assertNotSame(BASE_DATE, result);
- assertDate(BASE_DATE, 2000, 6, 5, 4, 3, 2, 1);
- assertDate(result, 2000, 6, 5, 0, 3, 2, 1);
+ // Fix for https://issues.apache.org/bugzilla/show_bug.cgi?id=25560
+ // Test ceiling across the beginning of daylight saving time
+ try {
+ TimeZone.setDefault(zone);
+ dateTimeParser.setTimeZone(zone);
- result = DateUtils.setHours(BASE_DATE, 23);
- assertNotSame(BASE_DATE, result);
- assertDate(BASE_DATE, 2000, 6, 5, 4, 3, 2, 1);
- assertDate(result, 2000, 6, 5, 23, 3, 2, 1);
+ assertEquals(dateTimeParser.parse("March 31, 2003 00:00:00.000"),
+ DateUtils.ceiling(date4, Calendar.DATE),
+ "ceiling MET date across DST change-over");
+ assertEquals(dateTimeParser.parse("March 31, 2003 00:00:00.000"),
+ DateUtils.ceiling((Object) cal4, Calendar.DATE),
+ "ceiling MET date across DST change-over");
+ assertEquals(dateTimeParser.parse("March 31, 2003 00:00:00.000"),
+ DateUtils.ceiling(date5, Calendar.DATE),
+ "ceiling MET date across DST change-over");
+ assertEquals(dateTimeParser.parse("March 31, 2003 00:00:00.000"),
+ DateUtils.ceiling((Object) cal5, Calendar.DATE),
+ "ceiling MET date across DST change-over");
+ assertEquals(dateTimeParser.parse("March 31, 2003 00:00:00.000"),
+ DateUtils.ceiling(date6, Calendar.DATE),
+ "ceiling MET date across DST change-over");
+ assertEquals(dateTimeParser.parse("March 31, 2003 00:00:00.000"),
+ DateUtils.ceiling((Object) cal6, Calendar.DATE),
+ "ceiling MET date across DST change-over");
+ assertEquals(dateTimeParser.parse("March 31, 2003 00:00:00.000"),
+ DateUtils.ceiling(date7, Calendar.DATE),
+ "ceiling MET date across DST change-over");
+ assertEquals(dateTimeParser.parse("March 31, 2003 00:00:00.000"),
+ DateUtils.ceiling((Object) cal7, Calendar.DATE),
+ "ceiling MET date across DST change-over");
- assertThrows(
- IllegalArgumentException.class,
- () -> DateUtils.setHours(BASE_DATE, 24),
- "DateUtils.setHours did not throw an expected IllegalArgumentException.");
- }
+ assertEquals(dateTimeParser.parse("March 30, 2003 03:00:00.000"),
+ DateUtils.ceiling(date4, Calendar.HOUR_OF_DAY),
+ "ceiling MET date across DST change-over");
+ assertEquals(dateTimeParser.parse("March 30, 2003 03:00:00.000"),
+ DateUtils.ceiling((Object) cal4, Calendar.HOUR_OF_DAY),
+ "ceiling MET date across DST change-over");
+ assertEquals(dateTimeParser.parse("March 30, 2003 03:00:00.000"),
+ DateUtils.ceiling(date5, Calendar.HOUR_OF_DAY),
+ "ceiling MET date across DST change-over");
+ assertEquals(dateTimeParser.parse("March 30, 2003 03:00:00.000"),
+ DateUtils.ceiling((Object) cal5, Calendar.HOUR_OF_DAY),
+ "ceiling MET date across DST change-over");
+ assertEquals(dateTimeParser.parse("March 30, 2003 04:00:00.000"),
+ DateUtils.ceiling(date6, Calendar.HOUR_OF_DAY),
+ "ceiling MET date across DST change-over");
+ assertEquals(dateTimeParser.parse("March 30, 2003 04:00:00.000"),
+ DateUtils.ceiling((Object) cal6, Calendar.HOUR_OF_DAY),
+ "ceiling MET date across DST change-over");
+ assertEquals(dateTimeParser.parse("March 30, 2003 04:00:00.000"),
+ DateUtils.ceiling(date7, Calendar.HOUR_OF_DAY),
+ "ceiling MET date across DST change-over");
+ assertEquals(dateTimeParser.parse("March 30, 2003 04:00:00.000"),
+ DateUtils.ceiling((Object) cal7, Calendar.HOUR_OF_DAY),
+ "ceiling MET date across DST change-over");
- // -----------------------------------------------------------------------
- @Test
- public void testSetMinutes() throws Exception {
- Date result = DateUtils.setMinutes(BASE_DATE, 0);
- assertNotSame(BASE_DATE, result);
- assertDate(BASE_DATE, 2000, 6, 5, 4, 3, 2, 1);
- assertDate(result, 2000, 6, 5, 4, 0, 2, 1);
+ } finally {
+ TimeZone.setDefault(defaultZone);
+ dateTimeParser.setTimeZone(defaultZone);
+ }
- result = DateUtils.setMinutes(BASE_DATE, 59);
- assertNotSame(BASE_DATE, result);
- assertDate(BASE_DATE, 2000, 6, 5, 4, 3, 2, 1);
- assertDate(result, 2000, 6, 5, 4, 59, 2, 1);
-
- assertThrows(
- IllegalArgumentException.class,
- () -> DateUtils.setMinutes(BASE_DATE, 60),
- "DateUtils.setMinutes did not throw an expected IllegalArgumentException.");
- }
-
- // -----------------------------------------------------------------------
- @Test
- public void testSetSeconds() throws Exception {
- Date result = DateUtils.setSeconds(BASE_DATE, 0);
- assertNotSame(BASE_DATE, result);
- assertDate(BASE_DATE, 2000, 6, 5, 4, 3, 2, 1);
- assertDate(result, 2000, 6, 5, 4, 3, 0, 1);
-
- result = DateUtils.setSeconds(BASE_DATE, 59);
- assertNotSame(BASE_DATE, result);
- assertDate(BASE_DATE, 2000, 6, 5, 4, 3, 2, 1);
- assertDate(result, 2000, 6, 5, 4, 3, 59, 1);
-
- assertThrows(
- IllegalArgumentException.class,
- () -> DateUtils.setSeconds(BASE_DATE, 60),
- "DateUtils.setSeconds did not throw an expected IllegalArgumentException.");
- }
-
- // -----------------------------------------------------------------------
- @Test
- public void testSetMilliseconds() throws Exception {
- Date result = DateUtils.setMilliseconds(BASE_DATE, 0);
- assertNotSame(BASE_DATE, result);
- assertDate(BASE_DATE, 2000, 6, 5, 4, 3, 2, 1);
- assertDate(result, 2000, 6, 5, 4, 3, 2, 0);
-
- result = DateUtils.setMilliseconds(BASE_DATE, 999);
- assertNotSame(BASE_DATE, result);
- assertDate(BASE_DATE, 2000, 6, 5, 4, 3, 2, 1);
- assertDate(result, 2000, 6, 5, 4, 3, 2, 999);
-
- assertThrows(
- IllegalArgumentException.class,
- () -> DateUtils.setMilliseconds(BASE_DATE, 1000),
- "DateUtils.setMilliseconds did not throw an expected IllegalArgumentException.");
- }
-
- //-----------------------------------------------------------------------
- private void assertDate(final Date date, final int year, final int month, final int day, final int hour, final int min, final int sec, final int mil) {
- final GregorianCalendar cal = new GregorianCalendar();
- cal.setTime(date);
- assertEquals(year, cal.get(Calendar.YEAR));
- assertEquals(month, cal.get(Calendar.MONTH));
- assertEquals(day, cal.get(Calendar.DAY_OF_MONTH));
- assertEquals(hour, cal.get(Calendar.HOUR_OF_DAY));
- assertEquals(min, cal.get(Calendar.MINUTE));
- assertEquals(sec, cal.get(Calendar.SECOND));
- assertEquals(mil, cal.get(Calendar.MILLISECOND));
+ // Bug 31395, large dates
+ final Date endOfTime = new Date(Long.MAX_VALUE); // fyi: Sun Aug 17 07:12:55 CET 292278994 -- 807 millis
+ final GregorianCalendar endCal = new GregorianCalendar();
+ endCal.setTime(endOfTime);
+ assertThrows(ArithmeticException.class, () -> DateUtils.ceiling(endCal, Calendar.DATE));
+ endCal.set(Calendar.YEAR, 280000001);
+ assertThrows(ArithmeticException.class, () -> DateUtils.ceiling(endCal, Calendar.DATE));
+ endCal.set(Calendar.YEAR, 280000000);
+ final Calendar cal = DateUtils.ceiling(endCal, Calendar.DATE);
+ assertEquals(0, cal.get(Calendar.HOUR));
}
//-----------------------------------------------------------------------
@Test
- public void testToCalendar() {
- assertEquals(date1, DateUtils.toCalendar(date1).getTime(), "Failed to convert to a Calendar and back");
- assertThrows(NullPointerException.class, () -> DateUtils.toCalendar(null));
+ public void testConstructor() {
+ assertNotNull(new DateUtils());
+ final Constructor>[] cons = DateUtils.class.getDeclaredConstructors();
+ assertEquals(1, cons.length);
+ assertTrue(Modifier.isPublic(cons[0].getModifiers()));
+ assertTrue(Modifier.isPublic(DateUtils.class.getModifiers()));
+ assertFalse(Modifier.isFinal(DateUtils.class.getModifiers()));
}
//-----------------------------------------------------------------------
@Test
- public void testToCalendarWithDateNull() {
- assertThrows(NullPointerException.class, () -> DateUtils.toCalendar(null, zone));
+ public void testIsSameDay_Cal() {
+ final GregorianCalendar cala = new GregorianCalendar(2004, 6, 9, 13, 45);
+ final GregorianCalendar calb = new GregorianCalendar(2004, 6, 9, 13, 45);
+ assertTrue(DateUtils.isSameDay(cala, calb));
+ calb.add(Calendar.DAY_OF_YEAR, 1);
+ assertFalse(DateUtils.isSameDay(cala, calb));
+ cala.add(Calendar.DAY_OF_YEAR, 1);
+ assertTrue(DateUtils.isSameDay(cala, calb));
+ calb.add(Calendar.YEAR, 1);
+ assertFalse(DateUtils.isSameDay(cala, calb));
+ }
+
+ @Test
+ public void testIsSameDay_CalNotNullNull() {
+ assertThrows(IllegalArgumentException.class, () -> DateUtils.isSameDay(Calendar.getInstance(), null));
+ }
+
+ @Test
+ public void testIsSameDay_CalNullNotNull() {
+ assertThrows(IllegalArgumentException.class, () -> DateUtils.isSameDay(null, Calendar.getInstance()));
+ }
+
+ @Test
+ public void testIsSameDay_CalNullNull() {
+ assertThrows(IllegalArgumentException.class, () -> DateUtils.isSameDay((Calendar) null, null));
}
//-----------------------------------------------------------------------
@Test
- public void testToCalendarWithTimeZoneNull() {
- assertThrows(NullPointerException.class, () -> DateUtils.toCalendar(date1, null));
+ public void testIsSameDay_Date() {
+ Date datea = new GregorianCalendar(2004, 6, 9, 13, 45).getTime();
+ Date dateb = new GregorianCalendar(2004, 6, 9, 13, 45).getTime();
+ assertTrue(DateUtils.isSameDay(datea, dateb));
+ dateb = new GregorianCalendar(2004, 6, 10, 13, 45).getTime();
+ assertFalse(DateUtils.isSameDay(datea, dateb));
+ datea = new GregorianCalendar(2004, 6, 10, 13, 45).getTime();
+ assertTrue(DateUtils.isSameDay(datea, dateb));
+ dateb = new GregorianCalendar(2005, 6, 10, 13, 45).getTime();
+ assertFalse(DateUtils.isSameDay(datea, dateb));
+ }
+
+ @Test
+ public void testIsSameDay_DateNotNullNull() {
+ assertThrows(IllegalArgumentException.class, () -> DateUtils.isSameDay(new Date(), null));
+ }
+
+ @Test
+ public void testIsSameDay_DateNullNotNull() {
+ assertThrows(IllegalArgumentException.class, () -> DateUtils.isSameDay(null, new Date()));
+ }
+
+ @Test
+ public void testIsSameDay_DateNullNull() {
+ assertThrows(IllegalArgumentException.class, () -> DateUtils.isSameDay((Date) null, null));
}
//-----------------------------------------------------------------------
@Test
- public void testToCalendarWithDateAndTimeZoneNotNull() {
- final Calendar c = DateUtils.toCalendar(date2, defaultZone);
- assertEquals(date2, c.getTime(), "Convert Date and TimeZone to a Calendar, but failed to get the Date back");
- assertEquals(defaultZone, c.getTimeZone(), "Convert Date and TimeZone to a Calendar, but failed to get the TimeZone back");
+ public void testIsSameInstant_Cal() {
+ final GregorianCalendar cala = new GregorianCalendar(TimeZone.getTimeZone("GMT+1"));
+ final GregorianCalendar calb = new GregorianCalendar(TimeZone.getTimeZone("GMT-1"));
+ cala.set(2004, Calendar.JULY, 9, 13, 45, 0);
+ cala.set(Calendar.MILLISECOND, 0);
+ calb.set(2004, Calendar.JULY, 9, 13, 45, 0);
+ calb.set(Calendar.MILLISECOND, 0);
+ assertFalse(DateUtils.isSameInstant(cala, calb));
+
+ calb.set(2004, Calendar.JULY, 9, 11, 45, 0);
+ assertTrue(DateUtils.isSameInstant(cala, calb));
+ }
+
+ @Test
+ public void testIsSameInstant_CalNotNullNull() {
+ assertThrows(IllegalArgumentException.class, () -> DateUtils.isSameInstant(Calendar.getInstance(), null));
+ }
+
+ @Test
+ public void testIsSameInstant_CalNullNotNull() {
+ assertThrows(IllegalArgumentException.class, () -> DateUtils.isSameInstant(null, Calendar.getInstance()));
+ }
+
+ @Test
+ public void testIsSameInstant_CalNullNull() {
+ assertThrows(IllegalArgumentException.class, () -> DateUtils.isSameInstant((Calendar) null, null));
}
//-----------------------------------------------------------------------
@Test
- public void testToCalendarWithDateAndTimeZoneNull() {
- assertThrows(NullPointerException.class, () -> DateUtils.toCalendar(null, null));
+ public void testIsSameInstant_Date() {
+ Date datea = new GregorianCalendar(2004, 6, 9, 13, 45).getTime();
+ Date dateb = new GregorianCalendar(2004, 6, 9, 13, 45).getTime();
+ assertTrue(DateUtils.isSameInstant(datea, dateb));
+ dateb = new GregorianCalendar(2004, 6, 10, 13, 45).getTime();
+ assertFalse(DateUtils.isSameInstant(datea, dateb));
+ datea = new GregorianCalendar(2004, 6, 10, 13, 45).getTime();
+ assertTrue(DateUtils.isSameInstant(datea, dateb));
+ dateb = new GregorianCalendar(2005, 6, 10, 13, 45).getTime();
+ assertFalse(DateUtils.isSameInstant(datea, dateb));
+ }
+
+ @Test
+ public void testIsSameInstant_DateNotNullNull() {
+ assertThrows(IllegalArgumentException.class, () -> DateUtils.isSameInstant(new Date(), null));
+ }
+
+ @Test
+ public void testIsSameInstant_DateNullNotNull() {
+ assertThrows(IllegalArgumentException.class, () -> DateUtils.isSameInstant(null, new Date()));
+ }
+
+ @Test
+ public void testIsSameInstant_DateNullNull() {
+ assertThrows(IllegalArgumentException.class, () -> DateUtils.isSameInstant((Date) null, null));
+ }
+
+ //-----------------------------------------------------------------------
+ @Test
+ public void testIsSameLocalTime_Cal() {
+ final GregorianCalendar cala = new GregorianCalendar(TimeZone.getTimeZone("GMT+1"));
+ final GregorianCalendar calb = new GregorianCalendar(TimeZone.getTimeZone("GMT-1"));
+ cala.set(2004, Calendar.JULY, 9, 13, 45, 0);
+ cala.set(Calendar.MILLISECOND, 0);
+ calb.set(2004, Calendar.JULY, 9, 13, 45, 0);
+ calb.set(Calendar.MILLISECOND, 0);
+ assertTrue(DateUtils.isSameLocalTime(cala, calb));
+
+ final Calendar calc = Calendar.getInstance();
+ final Calendar cald = Calendar.getInstance();
+ calc.set(2004, Calendar.JULY, 9, 4, 0, 0);
+ cald.set(2004, Calendar.JULY, 9, 16, 0, 0);
+ calc.set(Calendar.MILLISECOND, 0);
+ cald.set(Calendar.MILLISECOND, 0);
+ assertFalse(DateUtils.isSameLocalTime(calc, cald), "LANG-677");
+
+ calb.set(2004, Calendar.JULY, 9, 11, 45, 0);
+ assertFalse(DateUtils.isSameLocalTime(cala, calb));
+ }
+
+ @Test
+ public void testIsSameLocalTime_CalNotNullNull() {
+ assertThrows(IllegalArgumentException.class, () -> DateUtils.isSameLocalTime(Calendar.getInstance(), null));
+ }
+
+ @Test
+ public void testIsSameLocalTime_CalNullNotNull() {
+ assertThrows(IllegalArgumentException.class, () -> DateUtils.isSameLocalTime(null, Calendar.getInstance()));
+ }
+
+ @Test
+ public void testIsSameLocalTime_CalNullNull() {
+ assertThrows(IllegalArgumentException.class, () -> DateUtils.isSameLocalTime(null, null));
+ }
+
+ /**
+ * Tests the iterator exceptions
+ */
+ @Test
+ public void testIteratorEx() {
+ assertThrows(IllegalArgumentException.class, () -> DateUtils.iterator(Calendar.getInstance(), -9999));
+ assertThrows
+ (NullPointerException.class, () -> DateUtils.iterator((Date) null, DateUtils.RANGE_WEEK_CENTER));
+ assertThrows
+ (IllegalArgumentException.class, () -> DateUtils.iterator((Calendar) null, DateUtils.RANGE_WEEK_CENTER));
+ assertThrows
+ (IllegalArgumentException.class, () -> DateUtils.iterator((Object) null, DateUtils.RANGE_WEEK_CENTER));
+ assertThrows(ClassCastException.class, () -> DateUtils.iterator("", DateUtils.RANGE_WEEK_CENTER));
+ }
+
+ // https://issues.apache.org/jira/browse/LANG-530
+ @SuppressWarnings("deprecation")
+ @Test
+ public void testLang530() throws ParseException {
+ final Date d = new Date();
+ final String isoDateStr = DateFormatUtils.ISO_DATETIME_TIME_ZONE_FORMAT.format(d);
+ final Date d2 = DateUtils.parseDate(isoDateStr, DateFormatUtils.ISO_DATETIME_TIME_ZONE_FORMAT.getPattern());
+ // the format loses milliseconds so have to reintroduce them
+ assertEquals(d.getTime(), d2.getTime() + d.getTime() % 1000, "Date not equal to itself ISO formatted and parsed");
+ }
+
+ @Test
+ public void testLANG799() throws ParseException {
+ DateUtils.parseDateStrictly("09 abril 2008 23:55:38 GMT", new Locale("es"), "dd MMM yyyy HH:mm:ss zzz");
+ }
+
+ // Parse English date with German Locale
+ @DefaultLocale(language = "de")
+ @Test
+ public void testLANG799_DE_FAIL() {
+ assertThrows(ParseException.class, () -> DateUtils.parseDate("Wed, 09 Apr 2008 23:55:38 GMT", "EEE, dd MMM yyyy HH:mm:ss zzz"));
+ }
+
+ @DefaultLocale(language = "de")
+ @Test
+ public void testLANG799_DE_OK() throws ParseException {
+ DateUtils.parseDate("Mi, 09 Apr 2008 23:55:38 GMT", "EEE, dd MMM yyyy HH:mm:ss zzz");
+ DateUtils.parseDateStrictly("Mi, 09 Apr 2008 23:55:38 GMT", "EEE, dd MMM yyyy HH:mm:ss zzz");
+ }
+
+ // Parse German date with English Locale
+ @DefaultLocale(language = "en")
+ @Test
+ public void testLANG799_EN_FAIL() {
+ assertThrows(ParseException.class, () -> DateUtils.parseDate("Mi, 09 Apr 2008 23:55:38 GMT", "EEE, dd MMM yyyy HH:mm:ss zzz"));
+ }
+
+ @DefaultLocale(language = "en")
+ @Test
+ public void testLANG799_EN_OK() throws ParseException {
+ DateUtils.parseDate("Wed, 09 Apr 2008 23:55:38 GMT", "EEE, dd MMM yyyy HH:mm:ss zzz");
+ DateUtils.parseDateStrictly("Wed, 09 Apr 2008 23:55:38 GMT", "EEE, dd MMM yyyy HH:mm:ss zzz");
+ }
+
+ // Parse German date with English Locale, specifying German Locale override
+ @DefaultLocale(language = "en")
+ @Test
+ public void testLANG799_EN_WITH_DE_LOCALE() throws ParseException {
+ DateUtils.parseDate("Mi, 09 Apr 2008 23:55:38 GMT", Locale.GERMAN, "EEE, dd MMM yyyy HH:mm:ss zzz");
+ }
+
+ /**
+ * Tests the calendar iterator for month-based ranges
+ *
+ * @throws java.lang.Exception so we don't have to catch it
+ */
+ @Test
+ public void testMonthIterator() throws Exception {
+ Iterator> it = DateUtils.iterator(date1, DateUtils.RANGE_MONTH_SUNDAY);
+ assertWeekIterator(it,
+ dateParser.parse("January 27, 2002"),
+ dateParser.parse("March 2, 2002"));
+
+ it = DateUtils.iterator(date1, DateUtils.RANGE_MONTH_MONDAY);
+ assertWeekIterator(it,
+ dateParser.parse("January 28, 2002"),
+ dateParser.parse("March 3, 2002"));
+
+ it = DateUtils.iterator(date2, DateUtils.RANGE_MONTH_SUNDAY);
+ assertWeekIterator(it,
+ dateParser.parse("October 28, 2001"),
+ dateParser.parse("December 1, 2001"));
+
+ it = DateUtils.iterator(date2, DateUtils.RANGE_MONTH_MONDAY);
+ assertWeekIterator(it,
+ dateParser.parse("October 29, 2001"),
+ dateParser.parse("December 2, 2001"));
+ }
+
+ @Test
+ public void testParse_EmptyParsers() {
+ assertThrows(ParseException.class, () -> DateUtils.parseDate("19721203"));
+ }
+
+ @Test
+ public void testParse_NullParsers() {
+ assertThrows(IllegalArgumentException.class, () -> DateUtils.parseDate("19721203", (String[]) null));
+ }
+
+ //-----------------------------------------------------------------------
+ @Test
+ public void testParseDate() throws Exception {
+ final GregorianCalendar cal = new GregorianCalendar(1972, 11, 3);
+ String dateStr = "1972-12-03";
+ final String[] parsers = new String[] {"yyyy'-'DDD", "yyyy'-'MM'-'dd", "yyyyMMdd"};
+ Date date = DateUtils.parseDate(dateStr, parsers);
+ assertEquals(cal.getTime(), date);
+
+ dateStr = "1972-338";
+ date = DateUtils.parseDate(dateStr, parsers);
+ assertEquals(cal.getTime(), date);
+
+ dateStr = "19721203";
+ date = DateUtils.parseDate(dateStr, parsers);
+ assertEquals(cal.getTime(), date);
+ }
+
+ @Test
+ public void testParseDate_InvalidDateString() {
+ final String[] parsers = new String[] {"yyyy'-'DDD", "yyyy'-'MM'-'dd", "yyyyMMdd"};
+ assertThrows(ParseException.class, () -> DateUtils.parseDate("197212AB", parsers));
+ }
+
+ @Test
+ public void testParseDate_NoDateString() {
+ final String[] parsers = new String[] {"yyyy'-'DDD", "yyyy'-'MM'-'dd", "yyyyMMdd"};
+ assertThrows(ParseException.class, () -> DateUtils.parseDate("PURPLE", parsers));
+ }
+
+ @Test
+ public void testParseDate_Null() {
+ final String[] parsers = new String[] {"yyyy'-'DDD", "yyyy'-'MM'-'dd", "yyyyMMdd"};
+ assertThrows(IllegalArgumentException.class, () -> DateUtils.parseDate(null, parsers));
+ }
+
+ // LANG-486
+ @Test
+ public void testParseDateWithLeniency() throws Exception {
+ final GregorianCalendar cal = new GregorianCalendar(1998, 6, 30);
+ final String dateStr = "02 942, 1996";
+ final String[] parsers = new String[] {"MM DDD, yyyy"};
+
+ final Date date = DateUtils.parseDate(dateStr, parsers);
+ assertEquals(cal.getTime(), date);
+
+ assertThrows(ParseException.class, () -> DateUtils.parseDateStrictly(dateStr, parsers));
}
//-----------------------------------------------------------------------
@@ -972,6 +1189,172 @@ public void testRoundLang346() throws Exception {
"Hour Round Up Failed");
}
+ // -----------------------------------------------------------------------
+ @Test
+ public void testSetDays() throws Exception {
+ Date result = DateUtils.setDays(BASE_DATE, 1);
+ assertNotSame(BASE_DATE, result);
+ assertDate(BASE_DATE, 2000, 6, 5, 4, 3, 2, 1);
+ assertDate(result, 2000, 6, 1, 4, 3, 2, 1);
+
+ result = DateUtils.setDays(BASE_DATE, 29);
+ assertNotSame(BASE_DATE, result);
+ assertDate(BASE_DATE, 2000, 6, 5, 4, 3, 2, 1);
+ assertDate(result, 2000, 6, 29, 4, 3, 2, 1);
+
+ assertThrows(
+ IllegalArgumentException.class,
+ () -> DateUtils.setDays(BASE_DATE, 32),
+ "DateUtils.setDays did not throw an expected IllegalArgumentException.");
+ }
+
+ // -----------------------------------------------------------------------
+ @Test
+ public void testSetHours() throws Exception {
+ Date result = DateUtils.setHours(BASE_DATE, 0);
+ assertNotSame(BASE_DATE, result);
+ assertDate(BASE_DATE, 2000, 6, 5, 4, 3, 2, 1);
+ assertDate(result, 2000, 6, 5, 0, 3, 2, 1);
+
+ result = DateUtils.setHours(BASE_DATE, 23);
+ assertNotSame(BASE_DATE, result);
+ assertDate(BASE_DATE, 2000, 6, 5, 4, 3, 2, 1);
+ assertDate(result, 2000, 6, 5, 23, 3, 2, 1);
+
+ assertThrows(
+ IllegalArgumentException.class,
+ () -> DateUtils.setHours(BASE_DATE, 24),
+ "DateUtils.setHours did not throw an expected IllegalArgumentException.");
+ }
+
+ // -----------------------------------------------------------------------
+ @Test
+ public void testSetMilliseconds() throws Exception {
+ Date result = DateUtils.setMilliseconds(BASE_DATE, 0);
+ assertNotSame(BASE_DATE, result);
+ assertDate(BASE_DATE, 2000, 6, 5, 4, 3, 2, 1);
+ assertDate(result, 2000, 6, 5, 4, 3, 2, 0);
+
+ result = DateUtils.setMilliseconds(BASE_DATE, 999);
+ assertNotSame(BASE_DATE, result);
+ assertDate(BASE_DATE, 2000, 6, 5, 4, 3, 2, 1);
+ assertDate(result, 2000, 6, 5, 4, 3, 2, 999);
+
+ assertThrows(
+ IllegalArgumentException.class,
+ () -> DateUtils.setMilliseconds(BASE_DATE, 1000),
+ "DateUtils.setMilliseconds did not throw an expected IllegalArgumentException.");
+ }
+
+ // -----------------------------------------------------------------------
+ @Test
+ public void testSetMinutes() throws Exception {
+ Date result = DateUtils.setMinutes(BASE_DATE, 0);
+ assertNotSame(BASE_DATE, result);
+ assertDate(BASE_DATE, 2000, 6, 5, 4, 3, 2, 1);
+ assertDate(result, 2000, 6, 5, 4, 0, 2, 1);
+
+ result = DateUtils.setMinutes(BASE_DATE, 59);
+ assertNotSame(BASE_DATE, result);
+ assertDate(BASE_DATE, 2000, 6, 5, 4, 3, 2, 1);
+ assertDate(result, 2000, 6, 5, 4, 59, 2, 1);
+
+ assertThrows(
+ IllegalArgumentException.class,
+ () -> DateUtils.setMinutes(BASE_DATE, 60),
+ "DateUtils.setMinutes did not throw an expected IllegalArgumentException.");
+ }
+
+ // -----------------------------------------------------------------------
+ @Test
+ public void testSetMonths() throws Exception {
+ Date result = DateUtils.setMonths(BASE_DATE, 5);
+ assertNotSame(BASE_DATE, result);
+ assertDate(BASE_DATE, 2000, 6, 5, 4, 3, 2, 1);
+ assertDate(result, 2000, 5, 5, 4, 3, 2, 1);
+
+ result = DateUtils.setMonths(BASE_DATE, 1);
+ assertNotSame(BASE_DATE, result);
+ assertDate(BASE_DATE, 2000, 6, 5, 4, 3, 2, 1);
+ assertDate(result, 2000, 1, 5, 4, 3, 2, 1);
+
+ assertThrows(
+ IllegalArgumentException.class,
+ () -> DateUtils.setMonths(BASE_DATE, 12),
+ "DateUtils.setMonths did not throw an expected IllegalArgumentException.");
+ }
+
+ // -----------------------------------------------------------------------
+ @Test
+ public void testSetSeconds() throws Exception {
+ Date result = DateUtils.setSeconds(BASE_DATE, 0);
+ assertNotSame(BASE_DATE, result);
+ assertDate(BASE_DATE, 2000, 6, 5, 4, 3, 2, 1);
+ assertDate(result, 2000, 6, 5, 4, 3, 0, 1);
+
+ result = DateUtils.setSeconds(BASE_DATE, 59);
+ assertNotSame(BASE_DATE, result);
+ assertDate(BASE_DATE, 2000, 6, 5, 4, 3, 2, 1);
+ assertDate(result, 2000, 6, 5, 4, 3, 59, 1);
+
+ assertThrows(
+ IllegalArgumentException.class,
+ () -> DateUtils.setSeconds(BASE_DATE, 60),
+ "DateUtils.setSeconds did not throw an expected IllegalArgumentException.");
+ }
+
+ // -----------------------------------------------------------------------
+ @Test
+ public void testSetYears() throws Exception {
+ Date result = DateUtils.setYears(BASE_DATE, 2000);
+ assertNotSame(BASE_DATE, result);
+ assertDate(BASE_DATE, 2000, 6, 5, 4, 3, 2, 1);
+ assertDate(result, 2000, 6, 5, 4, 3, 2, 1);
+
+ result = DateUtils.setYears(BASE_DATE, 2008);
+ assertNotSame(BASE_DATE, result);
+ assertDate(BASE_DATE, 2000, 6, 5, 4, 3, 2, 1);
+ assertDate(result, 2008, 6, 5, 4, 3, 2, 1);
+
+ result = DateUtils.setYears(BASE_DATE, 2005);
+ assertNotSame(BASE_DATE, result);
+ assertDate(BASE_DATE, 2000, 6, 5, 4, 3, 2, 1);
+ assertDate(result, 2005, 6, 5, 4, 3, 2, 1);
+ }
+
+ //-----------------------------------------------------------------------
+ @Test
+ public void testToCalendar() {
+ assertEquals(date1, DateUtils.toCalendar(date1).getTime(), "Failed to convert to a Calendar and back");
+ assertThrows(NullPointerException.class, () -> DateUtils.toCalendar(null));
+ }
+
+ //-----------------------------------------------------------------------
+ @Test
+ public void testToCalendarWithDateAndTimeZoneNotNull() {
+ final Calendar c = DateUtils.toCalendar(date2, defaultZone);
+ assertEquals(date2, c.getTime(), "Convert Date and TimeZone to a Calendar, but failed to get the Date back");
+ assertEquals(defaultZone, c.getTimeZone(), "Convert Date and TimeZone to a Calendar, but failed to get the TimeZone back");
+ }
+
+ //-----------------------------------------------------------------------
+ @Test
+ public void testToCalendarWithDateAndTimeZoneNull() {
+ assertThrows(NullPointerException.class, () -> DateUtils.toCalendar(null, null));
+ }
+
+ //-----------------------------------------------------------------------
+ @Test
+ public void testToCalendarWithDateNull() {
+ assertThrows(NullPointerException.class, () -> DateUtils.toCalendar(null, zone));
+ }
+
+ //-----------------------------------------------------------------------
+ @Test
+ public void testToCalendarWithTimeZoneNull() {
+ assertThrows(NullPointerException.class, () -> DateUtils.toCalendar(date1, null));
+ }
+
/**
* Tests various values with the trunc method
*
@@ -1227,262 +1610,6 @@ public void testTruncateLang59() {
}
}
- // https://issues.apache.org/jira/browse/LANG-530
- @SuppressWarnings("deprecation")
- @Test
- public void testLang530() throws ParseException {
- final Date d = new Date();
- final String isoDateStr = DateFormatUtils.ISO_DATETIME_TIME_ZONE_FORMAT.format(d);
- final Date d2 = DateUtils.parseDate(isoDateStr, DateFormatUtils.ISO_DATETIME_TIME_ZONE_FORMAT.getPattern());
- // the format loses milliseconds so have to reintroduce them
- assertEquals(d.getTime(), d2.getTime() + d.getTime() % 1000, "Date not equal to itself ISO formatted and parsed");
- }
-
- /**
- * Tests various values with the ceiling method
- *
- * @throws java.lang.Exception so we don't have to catch it
- */
- @Test
- public void testCeil() throws Exception {
- // test javadoc
- assertEquals(dateTimeParser.parse("March 28, 2002 14:00:00.000"),
- DateUtils.ceiling(
- dateTimeParser.parse("March 28, 2002 13:45:01.231"),
- Calendar.HOUR),
- "ceiling javadoc-1 failed");
- assertEquals(dateTimeParser.parse("April 1, 2002 00:00:00.000"),
- DateUtils.ceiling(
- dateTimeParser.parse("March 28, 2002 13:45:01.231"),
- Calendar.MONTH),
- "ceiling javadoc-2 failed");
-
- // tests public static Date ceiling(Date date, int field)
- assertEquals(dateParser.parse("January 1, 2003"),
- DateUtils.ceiling(date1, Calendar.YEAR),
- "ceiling year-1 failed");
- assertEquals(dateParser.parse("January 1, 2002"),
- DateUtils.ceiling(date2, Calendar.YEAR),
- "ceiling year-2 failed");
- assertEquals(dateParser.parse("March 1, 2002"),
- DateUtils.ceiling(date1, Calendar.MONTH),
- "ceiling month-1 failed");
- assertEquals(dateParser.parse("December 1, 2001"),
- DateUtils.ceiling(date2, Calendar.MONTH),
- "ceiling month-2 failed");
- assertEquals(dateParser.parse("February 16, 2002"),
- DateUtils.ceiling(date1, DateUtils.SEMI_MONTH),
- "ceiling semimonth-1 failed");
- assertEquals(dateParser.parse("December 1, 2001"),
- DateUtils.ceiling(date2, DateUtils.SEMI_MONTH),
- "ceiling semimonth-2 failed");
- assertEquals(dateParser.parse("February 13, 2002"),
- DateUtils.ceiling(date1, Calendar.DATE),
- "ceiling date-1 failed");
- assertEquals(dateParser.parse("November 19, 2001"),
- DateUtils.ceiling(date2, Calendar.DATE),
- "ceiling date-2 failed");
- assertEquals(dateTimeParser.parse("February 12, 2002 13:00:00.000"),
- DateUtils.ceiling(date1, Calendar.HOUR),
- "ceiling hour-1 failed");
- assertEquals(dateTimeParser.parse("November 18, 2001 2:00:00.000"),
- DateUtils.ceiling(date2, Calendar.HOUR),
- "ceiling hour-2 failed");
- assertEquals(dateTimeParser.parse("February 12, 2002 12:35:00.000"),
- DateUtils.ceiling(date1, Calendar.MINUTE),
- "ceiling minute-1 failed");
- assertEquals(dateTimeParser.parse("November 18, 2001 1:24:00.000"),
- DateUtils.ceiling(date2, Calendar.MINUTE),
- "ceiling minute-2 failed");
- assertEquals(dateTimeParser.parse("February 12, 2002 12:34:57.000"),
- DateUtils.ceiling(date1, Calendar.SECOND),
- "ceiling second-1 failed");
- assertEquals(dateTimeParser.parse("November 18, 2001 1:23:12.000"),
- DateUtils.ceiling(date2, Calendar.SECOND),
- "ceiling second-2 failed");
- assertEquals(dateTimeParser.parse("February 3, 2002 12:00:00.000"),
- DateUtils.ceiling(dateAmPm1, Calendar.AM_PM),
- "ceiling ampm-1 failed");
- assertEquals(dateTimeParser.parse("February 3, 2002 12:00:00.000"),
- DateUtils.ceiling(dateAmPm2, Calendar.AM_PM),
- "ceiling ampm-2 failed");
- assertEquals(dateTimeParser.parse("February 4, 2002 00:00:00.000"),
- DateUtils.ceiling(dateAmPm3, Calendar.AM_PM),
- "ceiling ampm-3 failed");
- assertEquals(dateTimeParser.parse("February 4, 2002 00:00:00.000"),
- DateUtils.ceiling(dateAmPm4, Calendar.AM_PM),
- "ceiling ampm-4 failed");
-
- // tests public static Date ceiling(Object date, int field)
- assertEquals(dateParser.parse("January 1, 2003"),
- DateUtils.ceiling((Object) date1, Calendar.YEAR),
- "ceiling year-1 failed");
- assertEquals(dateParser.parse("January 1, 2002"),
- DateUtils.ceiling((Object) date2, Calendar.YEAR),
- "ceiling year-2 failed");
- assertEquals(dateParser.parse("March 1, 2002"),
- DateUtils.ceiling((Object) date1, Calendar.MONTH),
- "ceiling month-1 failed");
- assertEquals(dateParser.parse("December 1, 2001"),
- DateUtils.ceiling((Object) date2, Calendar.MONTH),
- "ceiling month-2 failed");
- assertEquals(dateParser.parse("February 16, 2002"),
- DateUtils.ceiling((Object) date1, DateUtils.SEMI_MONTH),
- "ceiling semimonth-1 failed");
- assertEquals(dateParser.parse("December 1, 2001"),
- DateUtils.ceiling((Object) date2, DateUtils.SEMI_MONTH),
- "ceiling semimonth-2 failed");
- assertEquals(dateParser.parse("February 13, 2002"),
- DateUtils.ceiling((Object) date1, Calendar.DATE),
- "ceiling date-1 failed");
- assertEquals(dateParser.parse("November 19, 2001"),
- DateUtils.ceiling((Object) date2, Calendar.DATE),
- "ceiling date-2 failed");
- assertEquals(dateTimeParser.parse("February 12, 2002 13:00:00.000"),
- DateUtils.ceiling((Object) date1, Calendar.HOUR),
- "ceiling hour-1 failed");
- assertEquals(dateTimeParser.parse("November 18, 2001 2:00:00.000"),
- DateUtils.ceiling((Object) date2, Calendar.HOUR),
- "ceiling hour-2 failed");
- assertEquals(dateTimeParser.parse("February 12, 2002 12:35:00.000"),
- DateUtils.ceiling((Object) date1, Calendar.MINUTE),
- "ceiling minute-1 failed");
- assertEquals(dateTimeParser.parse("November 18, 2001 1:24:00.000"),
- DateUtils.ceiling((Object) date2, Calendar.MINUTE),
- "ceiling minute-2 failed");
- assertEquals(dateTimeParser.parse("February 12, 2002 12:34:57.000"),
- DateUtils.ceiling((Object) date1, Calendar.SECOND),
- "ceiling second-1 failed");
- assertEquals(dateTimeParser.parse("November 18, 2001 1:23:12.000"),
- DateUtils.ceiling((Object) date2, Calendar.SECOND),
- "ceiling second-2 failed");
- assertEquals(dateTimeParser.parse("February 3, 2002 12:00:00.000"),
- DateUtils.ceiling((Object) dateAmPm1, Calendar.AM_PM),
- "ceiling ampm-1 failed");
- assertEquals(dateTimeParser.parse("February 3, 2002 12:00:00.000"),
- DateUtils.ceiling((Object) dateAmPm2, Calendar.AM_PM),
- "ceiling ampm-2 failed");
- assertEquals(dateTimeParser.parse("February 4, 2002 00:00:00.000"),
- DateUtils.ceiling((Object) dateAmPm3, Calendar.AM_PM),
- "ceiling ampm-3 failed");
- assertEquals(dateTimeParser.parse("February 4, 2002 00:00:00.000"),
- DateUtils.ceiling((Object) dateAmPm4, Calendar.AM_PM),
- "ceiling ampm-4 failed");
-
- assertEquals(dateTimeParser.parse("February 12, 2002 12:34:57.000"),
- DateUtils.ceiling((Object) cal1, Calendar.SECOND),
- "ceiling calendar second-1 failed");
- assertEquals(dateTimeParser.parse("November 18, 2001 1:23:12.000"),
- DateUtils.ceiling((Object) cal2, Calendar.SECOND),
- "ceiling calendar second-2 failed");
-
- assertEquals(dateTimeParser.parse("February 3, 2002 12:00:00.000"),
- DateUtils.ceiling((Object) calAmPm1, Calendar.AM_PM),
- "ceiling ampm-1 failed");
- assertEquals(dateTimeParser.parse("February 3, 2002 12:00:00.000"),
- DateUtils.ceiling((Object) calAmPm2, Calendar.AM_PM),
- "ceiling ampm-2 failed");
- assertEquals(dateTimeParser.parse("February 4, 2002 00:00:00.000"),
- DateUtils.ceiling((Object) calAmPm3, Calendar.AM_PM),
- "ceiling ampm-3 failed");
- assertEquals(dateTimeParser.parse("February 4, 2002 00:00:00.000"),
- DateUtils.ceiling((Object) calAmPm4, Calendar.AM_PM),
- "ceiling ampm-4 failed");
-
- assertThrows(NullPointerException.class, () -> DateUtils.ceiling((Date) null, Calendar.SECOND));
- assertThrows(IllegalArgumentException.class, () -> DateUtils.ceiling((Calendar) null, Calendar.SECOND));
- assertThrows(IllegalArgumentException.class, () -> DateUtils.ceiling((Object) null, Calendar.SECOND));
- assertThrows(ClassCastException.class, () -> DateUtils.ceiling("", Calendar.SECOND));
- assertThrows(IllegalArgumentException.class, () -> DateUtils.ceiling(date1, -9999));
-
- // Fix for https://issues.apache.org/bugzilla/show_bug.cgi?id=25560
- // Test ceiling across the beginning of daylight saving time
- try {
- TimeZone.setDefault(zone);
- dateTimeParser.setTimeZone(zone);
-
- assertEquals(dateTimeParser.parse("March 31, 2003 00:00:00.000"),
- DateUtils.ceiling(date4, Calendar.DATE),
- "ceiling MET date across DST change-over");
- assertEquals(dateTimeParser.parse("March 31, 2003 00:00:00.000"),
- DateUtils.ceiling((Object) cal4, Calendar.DATE),
- "ceiling MET date across DST change-over");
- assertEquals(dateTimeParser.parse("March 31, 2003 00:00:00.000"),
- DateUtils.ceiling(date5, Calendar.DATE),
- "ceiling MET date across DST change-over");
- assertEquals(dateTimeParser.parse("March 31, 2003 00:00:00.000"),
- DateUtils.ceiling((Object) cal5, Calendar.DATE),
- "ceiling MET date across DST change-over");
- assertEquals(dateTimeParser.parse("March 31, 2003 00:00:00.000"),
- DateUtils.ceiling(date6, Calendar.DATE),
- "ceiling MET date across DST change-over");
- assertEquals(dateTimeParser.parse("March 31, 2003 00:00:00.000"),
- DateUtils.ceiling((Object) cal6, Calendar.DATE),
- "ceiling MET date across DST change-over");
- assertEquals(dateTimeParser.parse("March 31, 2003 00:00:00.000"),
- DateUtils.ceiling(date7, Calendar.DATE),
- "ceiling MET date across DST change-over");
- assertEquals(dateTimeParser.parse("March 31, 2003 00:00:00.000"),
- DateUtils.ceiling((Object) cal7, Calendar.DATE),
- "ceiling MET date across DST change-over");
-
- assertEquals(dateTimeParser.parse("March 30, 2003 03:00:00.000"),
- DateUtils.ceiling(date4, Calendar.HOUR_OF_DAY),
- "ceiling MET date across DST change-over");
- assertEquals(dateTimeParser.parse("March 30, 2003 03:00:00.000"),
- DateUtils.ceiling((Object) cal4, Calendar.HOUR_OF_DAY),
- "ceiling MET date across DST change-over");
- assertEquals(dateTimeParser.parse("March 30, 2003 03:00:00.000"),
- DateUtils.ceiling(date5, Calendar.HOUR_OF_DAY),
- "ceiling MET date across DST change-over");
- assertEquals(dateTimeParser.parse("March 30, 2003 03:00:00.000"),
- DateUtils.ceiling((Object) cal5, Calendar.HOUR_OF_DAY),
- "ceiling MET date across DST change-over");
- assertEquals(dateTimeParser.parse("March 30, 2003 04:00:00.000"),
- DateUtils.ceiling(date6, Calendar.HOUR_OF_DAY),
- "ceiling MET date across DST change-over");
- assertEquals(dateTimeParser.parse("March 30, 2003 04:00:00.000"),
- DateUtils.ceiling((Object) cal6, Calendar.HOUR_OF_DAY),
- "ceiling MET date across DST change-over");
- assertEquals(dateTimeParser.parse("March 30, 2003 04:00:00.000"),
- DateUtils.ceiling(date7, Calendar.HOUR_OF_DAY),
- "ceiling MET date across DST change-over");
- assertEquals(dateTimeParser.parse("March 30, 2003 04:00:00.000"),
- DateUtils.ceiling((Object) cal7, Calendar.HOUR_OF_DAY),
- "ceiling MET date across DST change-over");
-
- } finally {
- TimeZone.setDefault(defaultZone);
- dateTimeParser.setTimeZone(defaultZone);
- }
-
- // Bug 31395, large dates
- final Date endOfTime = new Date(Long.MAX_VALUE); // fyi: Sun Aug 17 07:12:55 CET 292278994 -- 807 millis
- final GregorianCalendar endCal = new GregorianCalendar();
- endCal.setTime(endOfTime);
- assertThrows(ArithmeticException.class, () -> DateUtils.ceiling(endCal, Calendar.DATE));
- endCal.set(Calendar.YEAR, 280000001);
- assertThrows(ArithmeticException.class, () -> DateUtils.ceiling(endCal, Calendar.DATE));
- endCal.set(Calendar.YEAR, 280000000);
- final Calendar cal = DateUtils.ceiling(endCal, Calendar.DATE);
- assertEquals(0, cal.get(Calendar.HOUR));
- }
-
- /**
- * Tests the iterator exceptions
- */
- @Test
- public void testIteratorEx() {
- assertThrows(IllegalArgumentException.class, () -> DateUtils.iterator(Calendar.getInstance(), -9999));
- assertThrows
- (NullPointerException.class, () -> DateUtils.iterator((Date) null, DateUtils.RANGE_WEEK_CENTER));
- assertThrows
- (IllegalArgumentException.class, () -> DateUtils.iterator((Calendar) null, DateUtils.RANGE_WEEK_CENTER));
- assertThrows
- (IllegalArgumentException.class, () -> DateUtils.iterator((Object) null, DateUtils.RANGE_WEEK_CENTER));
- assertThrows(ClassCastException.class, () -> DateUtils.iterator("", DateUtils.RANGE_WEEK_CENTER));
- }
-
/**
* Tests the calendar iterator for week ranges
*/
@@ -1524,132 +1651,5 @@ public void testWeekIterator() {
now.add(Calendar.DATE, 1);
}
}
-
- /**
- * Tests the calendar iterator for month-based ranges
- *
- * @throws java.lang.Exception so we don't have to catch it
- */
- @Test
- public void testMonthIterator() throws Exception {
- Iterator> it = DateUtils.iterator(date1, DateUtils.RANGE_MONTH_SUNDAY);
- assertWeekIterator(it,
- dateParser.parse("January 27, 2002"),
- dateParser.parse("March 2, 2002"));
-
- it = DateUtils.iterator(date1, DateUtils.RANGE_MONTH_MONDAY);
- assertWeekIterator(it,
- dateParser.parse("January 28, 2002"),
- dateParser.parse("March 3, 2002"));
-
- it = DateUtils.iterator(date2, DateUtils.RANGE_MONTH_SUNDAY);
- assertWeekIterator(it,
- dateParser.parse("October 28, 2001"),
- dateParser.parse("December 1, 2001"));
-
- it = DateUtils.iterator(date2, DateUtils.RANGE_MONTH_MONDAY);
- assertWeekIterator(it,
- dateParser.parse("October 29, 2001"),
- dateParser.parse("December 2, 2001"));
- }
-
- @DefaultLocale(language = "en")
- @Test
- public void testLANG799_EN_OK() throws ParseException {
- DateUtils.parseDate("Wed, 09 Apr 2008 23:55:38 GMT", "EEE, dd MMM yyyy HH:mm:ss zzz");
- DateUtils.parseDateStrictly("Wed, 09 Apr 2008 23:55:38 GMT", "EEE, dd MMM yyyy HH:mm:ss zzz");
- }
-
- // Parse German date with English Locale
- @DefaultLocale(language = "en")
- @Test
- public void testLANG799_EN_FAIL() {
- assertThrows(ParseException.class, () -> DateUtils.parseDate("Mi, 09 Apr 2008 23:55:38 GMT", "EEE, dd MMM yyyy HH:mm:ss zzz"));
- }
-
- @DefaultLocale(language = "de")
- @Test
- public void testLANG799_DE_OK() throws ParseException {
- DateUtils.parseDate("Mi, 09 Apr 2008 23:55:38 GMT", "EEE, dd MMM yyyy HH:mm:ss zzz");
- DateUtils.parseDateStrictly("Mi, 09 Apr 2008 23:55:38 GMT", "EEE, dd MMM yyyy HH:mm:ss zzz");
- }
-
- // Parse English date with German Locale
- @DefaultLocale(language = "de")
- @Test
- public void testLANG799_DE_FAIL() {
- assertThrows(ParseException.class, () -> DateUtils.parseDate("Wed, 09 Apr 2008 23:55:38 GMT", "EEE, dd MMM yyyy HH:mm:ss zzz"));
- }
-
- // Parse German date with English Locale, specifying German Locale override
- @DefaultLocale(language = "en")
- @Test
- public void testLANG799_EN_WITH_DE_LOCALE() throws ParseException {
- DateUtils.parseDate("Mi, 09 Apr 2008 23:55:38 GMT", Locale.GERMAN, "EEE, dd MMM yyyy HH:mm:ss zzz");
- }
-
- /**
- * This checks that this is a 7 element iterator of Calendar objects
- * that are dates (no time), and exactly 1 day spaced after each other.
- */
- private static void assertWeekIterator(final Iterator> it, final Calendar start) {
- final Calendar end = (Calendar) start.clone();
- end.add(Calendar.DATE, 6);
-
- assertWeekIterator(it, start, end);
- }
-
- /**
- * Convenience method for when working with Date objects
- */
- private static void assertWeekIterator(final Iterator> it, final Date start, final Date end) {
- final Calendar calStart = Calendar.getInstance();
- calStart.setTime(start);
- final Calendar calEnd = Calendar.getInstance();
- calEnd.setTime(end);
-
- assertWeekIterator(it, calStart, calEnd);
- }
-
- /**
- * This checks that this is a 7 divisble iterator of Calendar objects
- * that are dates (no time), and exactly 1 day spaced after each other
- * (in addition to the proper start and stop dates)
- */
- private static void assertWeekIterator(final Iterator> it, final Calendar start, final Calendar end) {
- Calendar cal = (Calendar) it.next();
- assertCalendarsEquals("", start, cal, 0);
- Calendar last = null;
- int count = 1;
- while (it.hasNext()) {
- //Check this is just a date (no time component)
- assertCalendarsEquals("", cal, DateUtils.truncate(cal, Calendar.DATE), 0);
-
- last = cal;
- cal = (Calendar) it.next();
- count++;
-
- //Check that this is one day more than the last date
- last.add(Calendar.DATE, 1);
- assertCalendarsEquals("", last, cal, 0);
- }
-
- assertFalse(count % 7 != 0, "There were " + count + " days in this iterator");
- assertCalendarsEquals("", end, cal, 0);
- }
-
- /**
- * Used to check that Calendar objects are close enough
- * delta is in milliseconds
- */
- private static void assertCalendarsEquals(final String message, final Calendar cal1, final Calendar cal2, final long delta) {
- assertFalse(Math.abs(cal1.getTime().getTime() - cal2.getTime().getTime()) > delta,
- message + " expected " + cal1.getTime() + " but got " + cal2.getTime());
- }
-
- @Test
- public void testLANG799() throws ParseException {
- DateUtils.parseDateStrictly("09 abril 2008 23:55:38 GMT", new Locale("es"), "dd MMM yyyy HH:mm:ss zzz");
- }
}
diff --git a/src/test/java/org/apache/commons/lang3/time/DurationFormatUtilsTest.java b/src/test/java/org/apache/commons/lang3/time/DurationFormatUtilsTest.java
index 6c1b2f1ba..f29ba6388 100644
--- a/src/test/java/org/apache/commons/lang3/time/DurationFormatUtilsTest.java
+++ b/src/test/java/org/apache/commons/lang3/time/DurationFormatUtilsTest.java
@@ -37,6 +37,52 @@
*/
public class DurationFormatUtilsTest {
+ private static final int FOUR_YEARS = 365 * 3 + 366;
+
+ private void assertEqualDuration(final String expected, final int[] start, final int[] end, final String format) {
+ assertEqualDuration(null, expected, start, end, format);
+ }
+
+ private void assertEqualDuration(final String message, final String expected, final int[] start, final int[] end, final String format) {
+ final Calendar cal1 = Calendar.getInstance();
+ cal1.set(start[0], start[1], start[2], start[3], start[4], start[5]);
+ cal1.set(Calendar.MILLISECOND, 0);
+ final Calendar cal2 = Calendar.getInstance();
+ cal2.set(end[0], end[1], end[2], end[3], end[4], end[5]);
+ cal2.set(Calendar.MILLISECOND, 0);
+ final long milli1 = cal1.getTime().getTime();
+ final long milli2 = cal2.getTime().getTime();
+ final String result = DurationFormatUtils.formatPeriod(milli1, milli2, format);
+ if (message == null) {
+ assertEquals(expected, result);
+ } else {
+ assertEquals(expected, result, message);
+ }
+ }
+
+ private void bruteForce(final int year, final int month, final int day, final String format, final int calendarType) {
+ final String msg = year + "-" + month + "-" + day + " to ";
+ final Calendar c = Calendar.getInstance();
+ c.set(year, month, day, 0, 0, 0);
+ final int[] array1 = new int[] { year, month, day, 0, 0, 0 };
+ final int[] array2 = new int[] { year, month, day, 0, 0, 0 };
+ for (int i=0; i < FOUR_YEARS; i++) {
+ array2[0] = c.get(Calendar.YEAR);
+ array2[1] = c.get(Calendar.MONTH);
+ array2[2] = c.get(Calendar.DAY_OF_MONTH);
+ final String tmpMsg = msg + array2[0] + "-" + array2[1] + "-" + array2[2] + " at ";
+ assertEqualDuration( tmpMsg + i, Integer.toString(i), array1, array2, format );
+ c.add(calendarType, 1);
+ }
+ }
+
+ // https://issues.apache.org/bugzilla/show_bug.cgi?id=38401
+ @Test
+ public void testBugzilla38401() {
+ assertEqualDuration( "0000/00/30 16:00:00 000", new int[] { 2006, 0, 26, 18, 47, 34 },
+ new int[] { 2006, 1, 26, 10, 47, 34 }, "yyyy/MM/dd HH:mm:ss SSS");
+ }
+
// -----------------------------------------------------------------------
@Test
public void testConstructor() {
@@ -48,404 +94,16 @@ public void testConstructor() {
assertFalse(Modifier.isFinal(DurationFormatUtils.class.getModifiers()));
}
- // -----------------------------------------------------------------------
@Test
- public void testFormatDurationWords() {
- String text;
+ public void testDurationsByBruteForce() {
+ bruteForce(2006, 0, 1, "d", Calendar.DAY_OF_MONTH);
+ bruteForce(2006, 0, 2, "d", Calendar.DAY_OF_MONTH);
+ bruteForce(2007, 1, 2, "d", Calendar.DAY_OF_MONTH);
+ bruteForce(2004, 1, 29, "d", Calendar.DAY_OF_MONTH);
+ bruteForce(1996, 1, 29, "d", Calendar.DAY_OF_MONTH);
- text = DurationFormatUtils.formatDurationWords(50 * 1000, true, false);
- assertEquals("50 seconds", text);
- text = DurationFormatUtils.formatDurationWords(65 * 1000, true, false);
- assertEquals("1 minute 5 seconds", text);
- text = DurationFormatUtils.formatDurationWords(120 * 1000, true, false);
- assertEquals("2 minutes 0 seconds", text);
- text = DurationFormatUtils.formatDurationWords(121 * 1000, true, false);
- assertEquals("2 minutes 1 second", text);
- text = DurationFormatUtils.formatDurationWords(72 * 60 * 1000, true, false);
- assertEquals("1 hour 12 minutes 0 seconds", text);
- text = DurationFormatUtils.formatDurationWords(24 * 60 * 60 * 1000, true, false);
- assertEquals("1 day 0 hours 0 minutes 0 seconds", text);
-
- text = DurationFormatUtils.formatDurationWords(50 * 1000, true, true);
- assertEquals("50 seconds", text);
- text = DurationFormatUtils.formatDurationWords(65 * 1000, true, true);
- assertEquals("1 minute 5 seconds", text);
- text = DurationFormatUtils.formatDurationWords(120 * 1000, true, true);
- assertEquals("2 minutes", text);
- text = DurationFormatUtils.formatDurationWords(121 * 1000, true, true);
- assertEquals("2 minutes 1 second", text);
- text = DurationFormatUtils.formatDurationWords(72 * 60 * 1000, true, true);
- assertEquals("1 hour 12 minutes", text);
- text = DurationFormatUtils.formatDurationWords(24 * 60 * 60 * 1000, true, true);
- assertEquals("1 day", text);
-
- text = DurationFormatUtils.formatDurationWords(50 * 1000, false, true);
- assertEquals("0 days 0 hours 0 minutes 50 seconds", text);
- text = DurationFormatUtils.formatDurationWords(65 * 1000, false, true);
- assertEquals("0 days 0 hours 1 minute 5 seconds", text);
- text = DurationFormatUtils.formatDurationWords(120 * 1000, false, true);
- assertEquals("0 days 0 hours 2 minutes", text);
- text = DurationFormatUtils.formatDurationWords(121 * 1000, false, true);
- assertEquals("0 days 0 hours 2 minutes 1 second", text);
- text = DurationFormatUtils.formatDurationWords(72 * 60 * 1000, false, true);
- assertEquals("0 days 1 hour 12 minutes", text);
- text = DurationFormatUtils.formatDurationWords(24 * 60 * 60 * 1000, false, true);
- assertEquals("1 day", text);
-
- text = DurationFormatUtils.formatDurationWords(50 * 1000, false, false);
- assertEquals("0 days 0 hours 0 minutes 50 seconds", text);
- text = DurationFormatUtils.formatDurationWords(65 * 1000, false, false);
- assertEquals("0 days 0 hours 1 minute 5 seconds", text);
- text = DurationFormatUtils.formatDurationWords(120 * 1000, false, false);
- assertEquals("0 days 0 hours 2 minutes 0 seconds", text);
- text = DurationFormatUtils.formatDurationWords(121 * 1000, false, false);
- assertEquals("0 days 0 hours 2 minutes 1 second", text);
- text = DurationFormatUtils.formatDurationWords(72 * 60 * 1000, false, false);
- assertEquals("0 days 1 hour 12 minutes 0 seconds", text);
- text = DurationFormatUtils.formatDurationWords(24 * 60 * 60 * 1000 + 72 * 60 * 1000, false, false);
- assertEquals("1 day 1 hour 12 minutes 0 seconds", text);
- text = DurationFormatUtils.formatDurationWords(2 * 24 * 60 * 60 * 1000 + 72 * 60 * 1000, false, false);
- assertEquals("2 days 1 hour 12 minutes 0 seconds", text);
- for (int i = 2; i < 31; i++) {
- text = DurationFormatUtils.formatDurationWords(i * 24 * 60 * 60 * 1000L, false, false);
- assertEquals(i + " days 0 hours 0 minutes 0 seconds", text);
- }
- }
-
- /**
- * Tests that "1 <unit>s" gets converted to "1 <unit>" but that "11 <unit>s" is left alone.
- */
- @Test
- public void testFormatDurationPluralWords() {
- final long oneSecond = 1000;
- final long oneMinute = oneSecond * 60;
- final long oneHour = oneMinute * 60;
- final long oneDay = oneHour * 24;
- String text;
-
- text = DurationFormatUtils.formatDurationWords(oneSecond, false, false);
- assertEquals("0 days 0 hours 0 minutes 1 second", text);
- text = DurationFormatUtils.formatDurationWords(oneSecond * 2, false, false);
- assertEquals("0 days 0 hours 0 minutes 2 seconds", text);
- text = DurationFormatUtils.formatDurationWords(oneSecond * 11, false, false);
- assertEquals("0 days 0 hours 0 minutes 11 seconds", text);
-
- text = DurationFormatUtils.formatDurationWords(oneMinute, false, false);
- assertEquals("0 days 0 hours 1 minute 0 seconds", text);
- text = DurationFormatUtils.formatDurationWords(oneMinute * 2, false, false);
- assertEquals("0 days 0 hours 2 minutes 0 seconds", text);
- text = DurationFormatUtils.formatDurationWords(oneMinute * 11, false, false);
- assertEquals("0 days 0 hours 11 minutes 0 seconds", text);
- text = DurationFormatUtils.formatDurationWords(oneMinute + oneSecond, false, false);
- assertEquals("0 days 0 hours 1 minute 1 second", text);
-
- text = DurationFormatUtils.formatDurationWords(oneHour, false, false);
- assertEquals("0 days 1 hour 0 minutes 0 seconds", text);
- text = DurationFormatUtils.formatDurationWords(oneHour * 2, false, false);
- assertEquals("0 days 2 hours 0 minutes 0 seconds", text);
- text = DurationFormatUtils.formatDurationWords(oneHour * 11, false, false);
- assertEquals("0 days 11 hours 0 minutes 0 seconds", text);
- text = DurationFormatUtils.formatDurationWords(oneHour + oneMinute + oneSecond, false, false);
- assertEquals("0 days 1 hour 1 minute 1 second", text);
-
- text = DurationFormatUtils.formatDurationWords(oneDay, false, false);
- assertEquals("1 day 0 hours 0 minutes 0 seconds", text);
- text = DurationFormatUtils.formatDurationWords(oneDay * 2, false, false);
- assertEquals("2 days 0 hours 0 minutes 0 seconds", text);
- text = DurationFormatUtils.formatDurationWords(oneDay * 11, false, false);
- assertEquals("11 days 0 hours 0 minutes 0 seconds", text);
- text = DurationFormatUtils.formatDurationWords(oneDay + oneHour + oneMinute + oneSecond, false, false);
- assertEquals("1 day 1 hour 1 minute 1 second", text);
- }
-
- @Test
- public void testFormatNegativeDurationWords() {
- assertThrows(IllegalArgumentException.class, () -> DurationFormatUtils.formatDurationWords(-5000, true, true));
- }
-
- @Test
- public void testFormatDurationHMS() {
- long time = 0;
- assertEquals("00:00:00.000", DurationFormatUtils.formatDurationHMS(time));
-
- time = 1;
- assertEquals("00:00:00.001", DurationFormatUtils.formatDurationHMS(time));
-
- time = 15;
- assertEquals("00:00:00.015", DurationFormatUtils.formatDurationHMS(time));
-
- time = 165;
- assertEquals("00:00:00.165", DurationFormatUtils.formatDurationHMS(time));
-
- time = 1675;
- assertEquals("00:00:01.675", DurationFormatUtils.formatDurationHMS(time));
-
- time = 13465;
- assertEquals("00:00:13.465", DurationFormatUtils.formatDurationHMS(time));
-
- time = 72789;
- assertEquals("00:01:12.789", DurationFormatUtils.formatDurationHMS(time));
-
- time = 12789 + 32 * 60000;
- assertEquals("00:32:12.789", DurationFormatUtils.formatDurationHMS(time));
-
- time = 12789 + 62 * 60000;
- assertEquals("01:02:12.789", DurationFormatUtils.formatDurationHMS(time));
- }
-
- @Test
- public void testFormatNegativeDurationHMS() {
- assertThrows(IllegalArgumentException.class, () -> DurationFormatUtils.formatDurationHMS(-5000));
- }
-
- @Test
- public void testFormatDurationISO() {
- assertEquals("P0Y0M0DT0H0M0.000S", DurationFormatUtils.formatDurationISO(0L));
- assertEquals("P0Y0M0DT0H0M0.001S", DurationFormatUtils.formatDurationISO(1L));
- assertEquals("P0Y0M0DT0H0M0.010S", DurationFormatUtils.formatDurationISO(10L));
- assertEquals("P0Y0M0DT0H0M0.100S", DurationFormatUtils.formatDurationISO(100L));
- assertEquals("P0Y0M0DT0H1M15.321S", DurationFormatUtils.formatDurationISO(75321L));
- }
-
- @Test
- public void testFormatNegativeDurationISO() {
- assertThrows(IllegalArgumentException.class, () -> DurationFormatUtils.formatDurationISO(-5000));
- }
-
- @Test
- public void testFormatDuration() {
- long duration = 0;
- assertEquals("0", DurationFormatUtils.formatDuration(duration, "y"));
- assertEquals("0", DurationFormatUtils.formatDuration(duration, "M"));
- assertEquals("0", DurationFormatUtils.formatDuration(duration, "d"));
- assertEquals("0", DurationFormatUtils.formatDuration(duration, "H"));
- assertEquals("0", DurationFormatUtils.formatDuration(duration, "m"));
- assertEquals("0", DurationFormatUtils.formatDuration(duration, "s"));
- assertEquals("0", DurationFormatUtils.formatDuration(duration, "S"));
- assertEquals("0000", DurationFormatUtils.formatDuration(duration, "SSSS"));
- assertEquals("0000", DurationFormatUtils.formatDuration(duration, "yyyy"));
- assertEquals("0000", DurationFormatUtils.formatDuration(duration, "yyMM"));
-
- duration = 60 * 1000;
- assertEquals("0", DurationFormatUtils.formatDuration(duration, "y"));
- assertEquals("0", DurationFormatUtils.formatDuration(duration, "M"));
- assertEquals("0", DurationFormatUtils.formatDuration(duration, "d"));
- assertEquals("0", DurationFormatUtils.formatDuration(duration, "H"));
- assertEquals("1", DurationFormatUtils.formatDuration(duration, "m"));
- assertEquals("60", DurationFormatUtils.formatDuration(duration, "s"));
- assertEquals("60000", DurationFormatUtils.formatDuration(duration, "S"));
- assertEquals("01:00", DurationFormatUtils.formatDuration(duration, "mm:ss"));
-
- final Calendar base = Calendar.getInstance();
- base.set(2000, Calendar.JANUARY, 1, 0, 0, 0);
- base.set(Calendar.MILLISECOND, 0);
-
- final Calendar cal = Calendar.getInstance();
- cal.set(2003, Calendar.FEBRUARY, 1, 0, 0, 0);
- cal.set(Calendar.MILLISECOND, 0);
- duration = cal.getTime().getTime() - base.getTime().getTime(); // duration from 2000-01-01 to cal
- // don't use 1970 in test as time zones were less reliable in 1970 than now
- // remember that duration formatting ignores time zones, working on strict hour lengths
- final int days = 366 + 365 + 365 + 31;
- assertEquals("0 0 " + days, DurationFormatUtils.formatDuration(duration, "y M d"));
- }
-
- @Test
- public void testFormatNegativeDuration() {
- assertThrows(IllegalArgumentException.class, () -> DurationFormatUtils.formatDuration(-5000, "S", true));
- }
-
- @SuppressWarnings("deprecation")
- @Test
- public void testFormatPeriodISO() {
- final TimeZone timeZone = TimeZone.getTimeZone("GMT-3");
- final Calendar base = Calendar.getInstance(timeZone);
- base.set(1970, Calendar.JANUARY, 1, 0, 0, 0);
- base.set(Calendar.MILLISECOND, 0);
-
- final Calendar cal = Calendar.getInstance(timeZone);
- cal.set(2002, Calendar.FEBRUARY, 23, 9, 11, 12);
- cal.set(Calendar.MILLISECOND, 1);
- String text;
- // repeat a test from testDateTimeISO to compare extended and not extended.
- text = DateFormatUtils.format(cal, DateFormatUtils.ISO_DATETIME_TIME_ZONE_FORMAT.getPattern(), timeZone);
- assertEquals("2002-02-23T09:11:12-03:00", text);
- // test fixture is the same as above, but now with extended format.
- text = DurationFormatUtils.formatPeriod(base.getTime().getTime(), cal.getTime().getTime(),
- DurationFormatUtils.ISO_EXTENDED_FORMAT_PATTERN, false, timeZone);
- assertEquals("P32Y1M22DT9H11M12.001S", text);
- // test fixture from example in http://www.w3.org/TR/xmlschema-2/#duration
- cal.set(1971, Calendar.FEBRUARY, 3, 10, 30, 0);
- cal.set(Calendar.MILLISECOND, 0);
- text = DurationFormatUtils.formatPeriod(base.getTime().getTime(), cal.getTime().getTime(),
- DurationFormatUtils.ISO_EXTENDED_FORMAT_PATTERN, false, timeZone);
- assertEquals("P1Y1M2DT10H30M0.000S", text);
- // want a way to say 'don't print the seconds in format()' or other fields for that matter:
- // assertEquals("P1Y2M3DT10H30M", text);
- }
-
- @Test
- public void testFormatPeriodISOStartGreaterEnd() {
- assertThrows(IllegalArgumentException.class, () -> DurationFormatUtils.formatPeriodISO(5000, 2000));
- }
-
- @Test
- public void testFormatPeriodISOMethod() {
- assertEquals("P0Y0M0DT0H0M0.000S", DurationFormatUtils.formatPeriodISO(0L, 0L));
- assertEquals("P0Y0M0DT0H0M1.000S", DurationFormatUtils.formatPeriodISO(0L, 1000L));
- assertEquals("P0Y0M0DT0H1M1.000S", DurationFormatUtils.formatPeriodISO(0L, 61000L));
- }
-
- @Test
- public void testFormatPeriod() {
- final Calendar cal1970 = Calendar.getInstance();
- cal1970.set(1970, Calendar.JANUARY, 1, 0, 0, 0);
- cal1970.set(Calendar.MILLISECOND, 0);
- final long time1970 = cal1970.getTime().getTime();
-
- assertEquals("0", DurationFormatUtils.formatPeriod(time1970, time1970, "y"));
- assertEquals("0", DurationFormatUtils.formatPeriod(time1970, time1970, "M"));
- assertEquals("0", DurationFormatUtils.formatPeriod(time1970, time1970, "d"));
- assertEquals("0", DurationFormatUtils.formatPeriod(time1970, time1970, "H"));
- assertEquals("0", DurationFormatUtils.formatPeriod(time1970, time1970, "m"));
- assertEquals("0", DurationFormatUtils.formatPeriod(time1970, time1970, "s"));
- assertEquals("0", DurationFormatUtils.formatPeriod(time1970, time1970, "S"));
- assertEquals("0000", DurationFormatUtils.formatPeriod(time1970, time1970, "SSSS"));
- assertEquals("0000", DurationFormatUtils.formatPeriod(time1970, time1970, "yyyy"));
- assertEquals("0000", DurationFormatUtils.formatPeriod(time1970, time1970, "yyMM"));
-
- long time = time1970 + 60 * 1000;
- assertEquals("0", DurationFormatUtils.formatPeriod(time1970, time, "y"));
- assertEquals("0", DurationFormatUtils.formatPeriod(time1970, time, "M"));
- assertEquals("0", DurationFormatUtils.formatPeriod(time1970, time, "d"));
- assertEquals("0", DurationFormatUtils.formatPeriod(time1970, time, "H"));
- assertEquals("1", DurationFormatUtils.formatPeriod(time1970, time, "m"));
- assertEquals("60", DurationFormatUtils.formatPeriod(time1970, time, "s"));
- assertEquals("60000", DurationFormatUtils.formatPeriod(time1970, time, "S"));
- assertEquals("01:00", DurationFormatUtils.formatPeriod(time1970, time, "mm:ss"));
-
- final Calendar cal = Calendar.getInstance();
- cal.set(1973, Calendar.JULY, 1, 0, 0, 0);
- cal.set(Calendar.MILLISECOND, 0);
- time = cal.getTime().getTime();
- assertEquals("36", DurationFormatUtils.formatPeriod(time1970, time, "yM"));
- assertEquals("3 years 6 months", DurationFormatUtils.formatPeriod(time1970, time, "y' years 'M' months'"));
- assertEquals("03/06", DurationFormatUtils.formatPeriod(time1970, time, "yy/MM"));
-
- cal.set(1973, Calendar.NOVEMBER, 1, 0, 0, 0);
- cal.set(Calendar.MILLISECOND, 0);
- time = cal.getTime().getTime();
- assertEquals("310", DurationFormatUtils.formatPeriod(time1970, time, "yM"));
- assertEquals("3 years 10 months", DurationFormatUtils.formatPeriod(time1970, time, "y' years 'M' months'"));
- assertEquals("03/10", DurationFormatUtils.formatPeriod(time1970, time, "yy/MM"));
-
- cal.set(1974, Calendar.JANUARY, 1, 0, 0, 0);
- cal.set(Calendar.MILLISECOND, 0);
- time = cal.getTime().getTime();
- assertEquals("40", DurationFormatUtils.formatPeriod(time1970, time, "yM"));
- assertEquals("4 years 0 months", DurationFormatUtils.formatPeriod(time1970, time, "y' years 'M' months'"));
- assertEquals("04/00", DurationFormatUtils.formatPeriod(time1970, time, "yy/MM"));
- assertEquals("48", DurationFormatUtils.formatPeriod(time1970, time, "M"));
- assertEquals("48", DurationFormatUtils.formatPeriod(time1970, time, "MM"));
- assertEquals("048", DurationFormatUtils.formatPeriod(time1970, time, "MMM"));
- }
-
- @Test
- public void testFormatPeriodeStartGreaterEnd() {
- assertThrows(IllegalArgumentException.class, () -> DurationFormatUtils.formatPeriod(5000, 2500, "yy/MM"));
- }
-
- @Test
- public void testLexx() {
- // tests each constant
- assertArrayEquals(new DurationFormatUtils.Token[]{
- new DurationFormatUtils.Token(DurationFormatUtils.y, 1),
- new DurationFormatUtils.Token(DurationFormatUtils.M, 1),
- new DurationFormatUtils.Token(DurationFormatUtils.d, 1),
- new DurationFormatUtils.Token(DurationFormatUtils.H, 1),
- new DurationFormatUtils.Token(DurationFormatUtils.m, 1),
- new DurationFormatUtils.Token(DurationFormatUtils.s, 1),
- new DurationFormatUtils.Token(DurationFormatUtils.S, 1)}, DurationFormatUtils.lexx("yMdHmsS"));
-
- // tests the ISO 8601-like
- assertArrayEquals(new DurationFormatUtils.Token[]{
- new DurationFormatUtils.Token(DurationFormatUtils.H, 2),
- new DurationFormatUtils.Token(new StringBuilder(":"), 1),
- new DurationFormatUtils.Token(DurationFormatUtils.m, 2),
- new DurationFormatUtils.Token(new StringBuilder(":"), 1),
- new DurationFormatUtils.Token(DurationFormatUtils.s, 2),
- new DurationFormatUtils.Token(new StringBuilder("."), 1),
- new DurationFormatUtils.Token(DurationFormatUtils.S, 3)}, DurationFormatUtils.lexx("HH:mm:ss.SSS"));
-
- // test the iso extended format
- assertArrayEquals(new DurationFormatUtils.Token[]{
- new DurationFormatUtils.Token(new StringBuilder("P"), 1),
- new DurationFormatUtils.Token(DurationFormatUtils.y, 4),
- new DurationFormatUtils.Token(new StringBuilder("Y"), 1),
- new DurationFormatUtils.Token(DurationFormatUtils.M, 1),
- new DurationFormatUtils.Token(new StringBuilder("M"), 1),
- new DurationFormatUtils.Token(DurationFormatUtils.d, 1),
- new DurationFormatUtils.Token(new StringBuilder("DT"), 1),
- new DurationFormatUtils.Token(DurationFormatUtils.H, 1),
- new DurationFormatUtils.Token(new StringBuilder("H"), 1),
- new DurationFormatUtils.Token(DurationFormatUtils.m, 1),
- new DurationFormatUtils.Token(new StringBuilder("M"), 1),
- new DurationFormatUtils.Token(DurationFormatUtils.s, 1),
- new DurationFormatUtils.Token(new StringBuilder("."), 1),
- new DurationFormatUtils.Token(DurationFormatUtils.S, 3),
- new DurationFormatUtils.Token(new StringBuilder("S"), 1)}, DurationFormatUtils
- .lexx(DurationFormatUtils.ISO_EXTENDED_FORMAT_PATTERN));
-
- // test failures in equals
- final DurationFormatUtils.Token token = new DurationFormatUtils.Token(DurationFormatUtils.y, 4);
- assertNotEquals(token, new Object(), "Token equal to non-Token class. ");
- assertNotEquals(token, new DurationFormatUtils.Token(new Object()), "Token equal to Token with wrong value class. ");
- assertNotEquals(token, new DurationFormatUtils.Token(DurationFormatUtils.y, 1), "Token equal to Token with different count. ");
- final DurationFormatUtils.Token numToken = new DurationFormatUtils.Token(Integer.valueOf(1), 4);
- assertEquals(numToken, numToken, "Token with Number value not equal to itself. ");
- }
-
-
- // https://issues.apache.org/bugzilla/show_bug.cgi?id=38401
- @Test
- public void testBugzilla38401() {
- assertEqualDuration( "0000/00/30 16:00:00 000", new int[] { 2006, 0, 26, 18, 47, 34 },
- new int[] { 2006, 1, 26, 10, 47, 34 }, "yyyy/MM/dd HH:mm:ss SSS");
- }
-
- // https://issues.apache.org/jira/browse/LANG-281
- @Test
- public void testJiraLang281() {
- assertEqualDuration( "09", new int[] { 2005, 11, 31, 0, 0, 0 },
- new int[] { 2006, 9, 6, 0, 0, 0 }, "MM");
- }
-
- @Test
- public void testLANG815() {
- final Calendar calendar = Calendar.getInstance();
- calendar.set(2012, Calendar.JULY, 30, 0, 0, 0);
- final long startMillis = calendar.getTimeInMillis();
-
- calendar.set(2012, Calendar.SEPTEMBER, 8);
- final long endMillis = calendar.getTimeInMillis();
-
- assertEquals("1 9", DurationFormatUtils.formatPeriod(startMillis, endMillis, "M d"));
- }
-
- // Testing the under a day range in DurationFormatUtils.formatPeriod
- @Test
- public void testLowDurations() {
- for (int hr=0; hr < 24; hr++) {
- for (int min=0; min < 60; min++) {
- for (int sec=0; sec < 60; sec++) {
- assertEqualDuration( hr + ":" + min + ":" + sec,
- new int[] { 2000, 0, 1, 0, 0, 0, 0 },
- new int[] { 2000, 0, 1, hr, min, sec },
- "H:m:s"
- );
- }
- }
- }
+ bruteForce(1969, 1, 28, "M", Calendar.MONTH); // tests for 48 years
+ //bruteForce(1996, 1, 29, "M", Calendar.MONTH); // this will fail
}
// Attempting to test edge cases in DurationFormatUtils.formatPeriod
@@ -542,13 +200,335 @@ public void testEdgeDurations() {
}
@Test
- public void testLANG984() { // Long durations
- assertEquals("0", DurationFormatUtils.formatDuration(0, "S"));
- assertEquals(Integer.toString(Integer.MAX_VALUE), DurationFormatUtils.formatDuration(Integer.MAX_VALUE, "S"));
- long maxIntPlus=Integer.MAX_VALUE;
- maxIntPlus++;
- assertEquals(Long.toString(maxIntPlus), DurationFormatUtils.formatDuration(maxIntPlus, "S"));
- assertEquals(Long.toString(Long.MAX_VALUE), DurationFormatUtils.formatDuration(Long.MAX_VALUE, "S"));
+ public void testFormatDuration() {
+ long duration = 0;
+ assertEquals("0", DurationFormatUtils.formatDuration(duration, "y"));
+ assertEquals("0", DurationFormatUtils.formatDuration(duration, "M"));
+ assertEquals("0", DurationFormatUtils.formatDuration(duration, "d"));
+ assertEquals("0", DurationFormatUtils.formatDuration(duration, "H"));
+ assertEquals("0", DurationFormatUtils.formatDuration(duration, "m"));
+ assertEquals("0", DurationFormatUtils.formatDuration(duration, "s"));
+ assertEquals("0", DurationFormatUtils.formatDuration(duration, "S"));
+ assertEquals("0000", DurationFormatUtils.formatDuration(duration, "SSSS"));
+ assertEquals("0000", DurationFormatUtils.formatDuration(duration, "yyyy"));
+ assertEquals("0000", DurationFormatUtils.formatDuration(duration, "yyMM"));
+
+ duration = 60 * 1000;
+ assertEquals("0", DurationFormatUtils.formatDuration(duration, "y"));
+ assertEquals("0", DurationFormatUtils.formatDuration(duration, "M"));
+ assertEquals("0", DurationFormatUtils.formatDuration(duration, "d"));
+ assertEquals("0", DurationFormatUtils.formatDuration(duration, "H"));
+ assertEquals("1", DurationFormatUtils.formatDuration(duration, "m"));
+ assertEquals("60", DurationFormatUtils.formatDuration(duration, "s"));
+ assertEquals("60000", DurationFormatUtils.formatDuration(duration, "S"));
+ assertEquals("01:00", DurationFormatUtils.formatDuration(duration, "mm:ss"));
+
+ final Calendar base = Calendar.getInstance();
+ base.set(2000, Calendar.JANUARY, 1, 0, 0, 0);
+ base.set(Calendar.MILLISECOND, 0);
+
+ final Calendar cal = Calendar.getInstance();
+ cal.set(2003, Calendar.FEBRUARY, 1, 0, 0, 0);
+ cal.set(Calendar.MILLISECOND, 0);
+ duration = cal.getTime().getTime() - base.getTime().getTime(); // duration from 2000-01-01 to cal
+ // don't use 1970 in test as time zones were less reliable in 1970 than now
+ // remember that duration formatting ignores time zones, working on strict hour lengths
+ final int days = 366 + 365 + 365 + 31;
+ assertEquals("0 0 " + days, DurationFormatUtils.formatDuration(duration, "y M d"));
+ }
+
+ @Test
+ public void testFormatDurationHMS() {
+ long time = 0;
+ assertEquals("00:00:00.000", DurationFormatUtils.formatDurationHMS(time));
+
+ time = 1;
+ assertEquals("00:00:00.001", DurationFormatUtils.formatDurationHMS(time));
+
+ time = 15;
+ assertEquals("00:00:00.015", DurationFormatUtils.formatDurationHMS(time));
+
+ time = 165;
+ assertEquals("00:00:00.165", DurationFormatUtils.formatDurationHMS(time));
+
+ time = 1675;
+ assertEquals("00:00:01.675", DurationFormatUtils.formatDurationHMS(time));
+
+ time = 13465;
+ assertEquals("00:00:13.465", DurationFormatUtils.formatDurationHMS(time));
+
+ time = 72789;
+ assertEquals("00:01:12.789", DurationFormatUtils.formatDurationHMS(time));
+
+ time = 12789 + 32 * 60000;
+ assertEquals("00:32:12.789", DurationFormatUtils.formatDurationHMS(time));
+
+ time = 12789 + 62 * 60000;
+ assertEquals("01:02:12.789", DurationFormatUtils.formatDurationHMS(time));
+ }
+
+ @Test
+ public void testFormatDurationISO() {
+ assertEquals("P0Y0M0DT0H0M0.000S", DurationFormatUtils.formatDurationISO(0L));
+ assertEquals("P0Y0M0DT0H0M0.001S", DurationFormatUtils.formatDurationISO(1L));
+ assertEquals("P0Y0M0DT0H0M0.010S", DurationFormatUtils.formatDurationISO(10L));
+ assertEquals("P0Y0M0DT0H0M0.100S", DurationFormatUtils.formatDurationISO(100L));
+ assertEquals("P0Y0M0DT0H1M15.321S", DurationFormatUtils.formatDurationISO(75321L));
+ }
+
+ /**
+ * Tests that "1 <unit>s" gets converted to "1 <unit>" but that "11 <unit>s" is left alone.
+ */
+ @Test
+ public void testFormatDurationPluralWords() {
+ final long oneSecond = 1000;
+ final long oneMinute = oneSecond * 60;
+ final long oneHour = oneMinute * 60;
+ final long oneDay = oneHour * 24;
+ String text;
+
+ text = DurationFormatUtils.formatDurationWords(oneSecond, false, false);
+ assertEquals("0 days 0 hours 0 minutes 1 second", text);
+ text = DurationFormatUtils.formatDurationWords(oneSecond * 2, false, false);
+ assertEquals("0 days 0 hours 0 minutes 2 seconds", text);
+ text = DurationFormatUtils.formatDurationWords(oneSecond * 11, false, false);
+ assertEquals("0 days 0 hours 0 minutes 11 seconds", text);
+
+ text = DurationFormatUtils.formatDurationWords(oneMinute, false, false);
+ assertEquals("0 days 0 hours 1 minute 0 seconds", text);
+ text = DurationFormatUtils.formatDurationWords(oneMinute * 2, false, false);
+ assertEquals("0 days 0 hours 2 minutes 0 seconds", text);
+ text = DurationFormatUtils.formatDurationWords(oneMinute * 11, false, false);
+ assertEquals("0 days 0 hours 11 minutes 0 seconds", text);
+ text = DurationFormatUtils.formatDurationWords(oneMinute + oneSecond, false, false);
+ assertEquals("0 days 0 hours 1 minute 1 second", text);
+
+ text = DurationFormatUtils.formatDurationWords(oneHour, false, false);
+ assertEquals("0 days 1 hour 0 minutes 0 seconds", text);
+ text = DurationFormatUtils.formatDurationWords(oneHour * 2, false, false);
+ assertEquals("0 days 2 hours 0 minutes 0 seconds", text);
+ text = DurationFormatUtils.formatDurationWords(oneHour * 11, false, false);
+ assertEquals("0 days 11 hours 0 minutes 0 seconds", text);
+ text = DurationFormatUtils.formatDurationWords(oneHour + oneMinute + oneSecond, false, false);
+ assertEquals("0 days 1 hour 1 minute 1 second", text);
+
+ text = DurationFormatUtils.formatDurationWords(oneDay, false, false);
+ assertEquals("1 day 0 hours 0 minutes 0 seconds", text);
+ text = DurationFormatUtils.formatDurationWords(oneDay * 2, false, false);
+ assertEquals("2 days 0 hours 0 minutes 0 seconds", text);
+ text = DurationFormatUtils.formatDurationWords(oneDay * 11, false, false);
+ assertEquals("11 days 0 hours 0 minutes 0 seconds", text);
+ text = DurationFormatUtils.formatDurationWords(oneDay + oneHour + oneMinute + oneSecond, false, false);
+ assertEquals("1 day 1 hour 1 minute 1 second", text);
+ }
+
+ // -----------------------------------------------------------------------
+ @Test
+ public void testFormatDurationWords() {
+ String text;
+
+ text = DurationFormatUtils.formatDurationWords(50 * 1000, true, false);
+ assertEquals("50 seconds", text);
+ text = DurationFormatUtils.formatDurationWords(65 * 1000, true, false);
+ assertEquals("1 minute 5 seconds", text);
+ text = DurationFormatUtils.formatDurationWords(120 * 1000, true, false);
+ assertEquals("2 minutes 0 seconds", text);
+ text = DurationFormatUtils.formatDurationWords(121 * 1000, true, false);
+ assertEquals("2 minutes 1 second", text);
+ text = DurationFormatUtils.formatDurationWords(72 * 60 * 1000, true, false);
+ assertEquals("1 hour 12 minutes 0 seconds", text);
+ text = DurationFormatUtils.formatDurationWords(24 * 60 * 60 * 1000, true, false);
+ assertEquals("1 day 0 hours 0 minutes 0 seconds", text);
+
+ text = DurationFormatUtils.formatDurationWords(50 * 1000, true, true);
+ assertEquals("50 seconds", text);
+ text = DurationFormatUtils.formatDurationWords(65 * 1000, true, true);
+ assertEquals("1 minute 5 seconds", text);
+ text = DurationFormatUtils.formatDurationWords(120 * 1000, true, true);
+ assertEquals("2 minutes", text);
+ text = DurationFormatUtils.formatDurationWords(121 * 1000, true, true);
+ assertEquals("2 minutes 1 second", text);
+ text = DurationFormatUtils.formatDurationWords(72 * 60 * 1000, true, true);
+ assertEquals("1 hour 12 minutes", text);
+ text = DurationFormatUtils.formatDurationWords(24 * 60 * 60 * 1000, true, true);
+ assertEquals("1 day", text);
+
+ text = DurationFormatUtils.formatDurationWords(50 * 1000, false, true);
+ assertEquals("0 days 0 hours 0 minutes 50 seconds", text);
+ text = DurationFormatUtils.formatDurationWords(65 * 1000, false, true);
+ assertEquals("0 days 0 hours 1 minute 5 seconds", text);
+ text = DurationFormatUtils.formatDurationWords(120 * 1000, false, true);
+ assertEquals("0 days 0 hours 2 minutes", text);
+ text = DurationFormatUtils.formatDurationWords(121 * 1000, false, true);
+ assertEquals("0 days 0 hours 2 minutes 1 second", text);
+ text = DurationFormatUtils.formatDurationWords(72 * 60 * 1000, false, true);
+ assertEquals("0 days 1 hour 12 minutes", text);
+ text = DurationFormatUtils.formatDurationWords(24 * 60 * 60 * 1000, false, true);
+ assertEquals("1 day", text);
+
+ text = DurationFormatUtils.formatDurationWords(50 * 1000, false, false);
+ assertEquals("0 days 0 hours 0 minutes 50 seconds", text);
+ text = DurationFormatUtils.formatDurationWords(65 * 1000, false, false);
+ assertEquals("0 days 0 hours 1 minute 5 seconds", text);
+ text = DurationFormatUtils.formatDurationWords(120 * 1000, false, false);
+ assertEquals("0 days 0 hours 2 minutes 0 seconds", text);
+ text = DurationFormatUtils.formatDurationWords(121 * 1000, false, false);
+ assertEquals("0 days 0 hours 2 minutes 1 second", text);
+ text = DurationFormatUtils.formatDurationWords(72 * 60 * 1000, false, false);
+ assertEquals("0 days 1 hour 12 minutes 0 seconds", text);
+ text = DurationFormatUtils.formatDurationWords(24 * 60 * 60 * 1000 + 72 * 60 * 1000, false, false);
+ assertEquals("1 day 1 hour 12 minutes 0 seconds", text);
+ text = DurationFormatUtils.formatDurationWords(2 * 24 * 60 * 60 * 1000 + 72 * 60 * 1000, false, false);
+ assertEquals("2 days 1 hour 12 minutes 0 seconds", text);
+ for (int i = 2; i < 31; i++) {
+ text = DurationFormatUtils.formatDurationWords(i * 24 * 60 * 60 * 1000L, false, false);
+ assertEquals(i + " days 0 hours 0 minutes 0 seconds", text);
+ }
+ }
+
+ @Test
+ public void testFormatNegativeDuration() {
+ assertThrows(IllegalArgumentException.class, () -> DurationFormatUtils.formatDuration(-5000, "S", true));
+ }
+
+ @Test
+ public void testFormatNegativeDurationHMS() {
+ assertThrows(IllegalArgumentException.class, () -> DurationFormatUtils.formatDurationHMS(-5000));
+ }
+
+ @Test
+ public void testFormatNegativeDurationISO() {
+ assertThrows(IllegalArgumentException.class, () -> DurationFormatUtils.formatDurationISO(-5000));
+ }
+
+
+ @Test
+ public void testFormatNegativeDurationWords() {
+ assertThrows(IllegalArgumentException.class, () -> DurationFormatUtils.formatDurationWords(-5000, true, true));
+ }
+
+ @Test
+ public void testFormatPeriod() {
+ final Calendar cal1970 = Calendar.getInstance();
+ cal1970.set(1970, Calendar.JANUARY, 1, 0, 0, 0);
+ cal1970.set(Calendar.MILLISECOND, 0);
+ final long time1970 = cal1970.getTime().getTime();
+
+ assertEquals("0", DurationFormatUtils.formatPeriod(time1970, time1970, "y"));
+ assertEquals("0", DurationFormatUtils.formatPeriod(time1970, time1970, "M"));
+ assertEquals("0", DurationFormatUtils.formatPeriod(time1970, time1970, "d"));
+ assertEquals("0", DurationFormatUtils.formatPeriod(time1970, time1970, "H"));
+ assertEquals("0", DurationFormatUtils.formatPeriod(time1970, time1970, "m"));
+ assertEquals("0", DurationFormatUtils.formatPeriod(time1970, time1970, "s"));
+ assertEquals("0", DurationFormatUtils.formatPeriod(time1970, time1970, "S"));
+ assertEquals("0000", DurationFormatUtils.formatPeriod(time1970, time1970, "SSSS"));
+ assertEquals("0000", DurationFormatUtils.formatPeriod(time1970, time1970, "yyyy"));
+ assertEquals("0000", DurationFormatUtils.formatPeriod(time1970, time1970, "yyMM"));
+
+ long time = time1970 + 60 * 1000;
+ assertEquals("0", DurationFormatUtils.formatPeriod(time1970, time, "y"));
+ assertEquals("0", DurationFormatUtils.formatPeriod(time1970, time, "M"));
+ assertEquals("0", DurationFormatUtils.formatPeriod(time1970, time, "d"));
+ assertEquals("0", DurationFormatUtils.formatPeriod(time1970, time, "H"));
+ assertEquals("1", DurationFormatUtils.formatPeriod(time1970, time, "m"));
+ assertEquals("60", DurationFormatUtils.formatPeriod(time1970, time, "s"));
+ assertEquals("60000", DurationFormatUtils.formatPeriod(time1970, time, "S"));
+ assertEquals("01:00", DurationFormatUtils.formatPeriod(time1970, time, "mm:ss"));
+
+ final Calendar cal = Calendar.getInstance();
+ cal.set(1973, Calendar.JULY, 1, 0, 0, 0);
+ cal.set(Calendar.MILLISECOND, 0);
+ time = cal.getTime().getTime();
+ assertEquals("36", DurationFormatUtils.formatPeriod(time1970, time, "yM"));
+ assertEquals("3 years 6 months", DurationFormatUtils.formatPeriod(time1970, time, "y' years 'M' months'"));
+ assertEquals("03/06", DurationFormatUtils.formatPeriod(time1970, time, "yy/MM"));
+
+ cal.set(1973, Calendar.NOVEMBER, 1, 0, 0, 0);
+ cal.set(Calendar.MILLISECOND, 0);
+ time = cal.getTime().getTime();
+ assertEquals("310", DurationFormatUtils.formatPeriod(time1970, time, "yM"));
+ assertEquals("3 years 10 months", DurationFormatUtils.formatPeriod(time1970, time, "y' years 'M' months'"));
+ assertEquals("03/10", DurationFormatUtils.formatPeriod(time1970, time, "yy/MM"));
+
+ cal.set(1974, Calendar.JANUARY, 1, 0, 0, 0);
+ cal.set(Calendar.MILLISECOND, 0);
+ time = cal.getTime().getTime();
+ assertEquals("40", DurationFormatUtils.formatPeriod(time1970, time, "yM"));
+ assertEquals("4 years 0 months", DurationFormatUtils.formatPeriod(time1970, time, "y' years 'M' months'"));
+ assertEquals("04/00", DurationFormatUtils.formatPeriod(time1970, time, "yy/MM"));
+ assertEquals("48", DurationFormatUtils.formatPeriod(time1970, time, "M"));
+ assertEquals("48", DurationFormatUtils.formatPeriod(time1970, time, "MM"));
+ assertEquals("048", DurationFormatUtils.formatPeriod(time1970, time, "MMM"));
+ }
+
+ @Test
+ public void testFormatPeriodeStartGreaterEnd() {
+ assertThrows(IllegalArgumentException.class, () -> DurationFormatUtils.formatPeriod(5000, 2500, "yy/MM"));
+ }
+
+ @SuppressWarnings("deprecation")
+ @Test
+ public void testFormatPeriodISO() {
+ final TimeZone timeZone = TimeZone.getTimeZone("GMT-3");
+ final Calendar base = Calendar.getInstance(timeZone);
+ base.set(1970, Calendar.JANUARY, 1, 0, 0, 0);
+ base.set(Calendar.MILLISECOND, 0);
+
+ final Calendar cal = Calendar.getInstance(timeZone);
+ cal.set(2002, Calendar.FEBRUARY, 23, 9, 11, 12);
+ cal.set(Calendar.MILLISECOND, 1);
+ String text;
+ // repeat a test from testDateTimeISO to compare extended and not extended.
+ text = DateFormatUtils.format(cal, DateFormatUtils.ISO_DATETIME_TIME_ZONE_FORMAT.getPattern(), timeZone);
+ assertEquals("2002-02-23T09:11:12-03:00", text);
+ // test fixture is the same as above, but now with extended format.
+ text = DurationFormatUtils.formatPeriod(base.getTime().getTime(), cal.getTime().getTime(),
+ DurationFormatUtils.ISO_EXTENDED_FORMAT_PATTERN, false, timeZone);
+ assertEquals("P32Y1M22DT9H11M12.001S", text);
+ // test fixture from example in http://www.w3.org/TR/xmlschema-2/#duration
+ cal.set(1971, Calendar.FEBRUARY, 3, 10, 30, 0);
+ cal.set(Calendar.MILLISECOND, 0);
+ text = DurationFormatUtils.formatPeriod(base.getTime().getTime(), cal.getTime().getTime(),
+ DurationFormatUtils.ISO_EXTENDED_FORMAT_PATTERN, false, timeZone);
+ assertEquals("P1Y1M2DT10H30M0.000S", text);
+ // want a way to say 'don't print the seconds in format()' or other fields for that matter:
+ // assertEquals("P1Y2M3DT10H30M", text);
+ }
+
+ @Test
+ public void testFormatPeriodISOMethod() {
+ assertEquals("P0Y0M0DT0H0M0.000S", DurationFormatUtils.formatPeriodISO(0L, 0L));
+ assertEquals("P0Y0M0DT0H0M1.000S", DurationFormatUtils.formatPeriodISO(0L, 1000L));
+ assertEquals("P0Y0M0DT0H1M1.000S", DurationFormatUtils.formatPeriodISO(0L, 61000L));
+ }
+
+ @Test
+ public void testFormatPeriodISOStartGreaterEnd() {
+ assertThrows(IllegalArgumentException.class, () -> DurationFormatUtils.formatPeriodISO(5000, 2000));
+ }
+
+ // https://issues.apache.org/jira/browse/LANG-281
+ @Test
+ public void testJiraLang281() {
+ assertEqualDuration( "09", new int[] { 2005, 11, 31, 0, 0, 0 },
+ new int[] { 2006, 9, 6, 0, 0, 0 }, "MM");
+ }
+
+ @Test
+ public void testLANG815() {
+ final Calendar calendar = Calendar.getInstance();
+ calendar.set(2012, Calendar.JULY, 30, 0, 0, 0);
+ final long startMillis = calendar.getTimeInMillis();
+
+ calendar.set(2012, Calendar.SEPTEMBER, 8);
+ final long endMillis = calendar.getTimeInMillis();
+
+ assertEquals("1 9", DurationFormatUtils.formatPeriod(startMillis, endMillis, "M d"));
+ }
+
+ @Test
+ public void testLANG981() { // unmatched quote char in lexx
+ assertThrows(IllegalArgumentException.class, () -> DurationFormatUtils.lexx("'yMdHms''S"));
}
@Test
@@ -563,25 +543,6 @@ public void testLANG982() { // More than 3 millisecond digits following a second
assertEquals("1 01999", DurationFormatUtils.formatDuration(61999, "m SSSSS"));
}
- @Test
- public void testDurationsByBruteForce() {
- bruteForce(2006, 0, 1, "d", Calendar.DAY_OF_MONTH);
- bruteForce(2006, 0, 2, "d", Calendar.DAY_OF_MONTH);
- bruteForce(2007, 1, 2, "d", Calendar.DAY_OF_MONTH);
- bruteForce(2004, 1, 29, "d", Calendar.DAY_OF_MONTH);
- bruteForce(1996, 1, 29, "d", Calendar.DAY_OF_MONTH);
-
- bruteForce(1969, 1, 28, "M", Calendar.MONTH); // tests for 48 years
- //bruteForce(1996, 1, 29, "M", Calendar.MONTH); // this will fail
- }
-
- @Test
- public void testLANG981() { // unmatched quote char in lexx
- assertThrows(IllegalArgumentException.class, () -> DurationFormatUtils.lexx("'yMdHms''S"));
- }
-
- private static final int FOUR_YEARS = 365 * 3 + 366;
-
// Takes a minute to run, so generally turned off
// public void testBrutally() {
// Calendar c = Calendar.getInstance();
@@ -592,39 +553,78 @@ public void testLANG981() { // unmatched quote char in lexx
// }
// }
- private void bruteForce(final int year, final int month, final int day, final String format, final int calendarType) {
- final String msg = year + "-" + month + "-" + day + " to ";
- final Calendar c = Calendar.getInstance();
- c.set(year, month, day, 0, 0, 0);
- final int[] array1 = new int[] { year, month, day, 0, 0, 0 };
- final int[] array2 = new int[] { year, month, day, 0, 0, 0 };
- for (int i=0; i < FOUR_YEARS; i++) {
- array2[0] = c.get(Calendar.YEAR);
- array2[1] = c.get(Calendar.MONTH);
- array2[2] = c.get(Calendar.DAY_OF_MONTH);
- final String tmpMsg = msg + array2[0] + "-" + array2[1] + "-" + array2[2] + " at ";
- assertEqualDuration( tmpMsg + i, Integer.toString(i), array1, array2, format );
- c.add(calendarType, 1);
- }
+ @Test
+ public void testLANG984() { // Long durations
+ assertEquals("0", DurationFormatUtils.formatDuration(0, "S"));
+ assertEquals(Integer.toString(Integer.MAX_VALUE), DurationFormatUtils.formatDuration(Integer.MAX_VALUE, "S"));
+ long maxIntPlus=Integer.MAX_VALUE;
+ maxIntPlus++;
+ assertEquals(Long.toString(maxIntPlus), DurationFormatUtils.formatDuration(maxIntPlus, "S"));
+ assertEquals(Long.toString(Long.MAX_VALUE), DurationFormatUtils.formatDuration(Long.MAX_VALUE, "S"));
}
- private void assertEqualDuration(final String expected, final int[] start, final int[] end, final String format) {
- assertEqualDuration(null, expected, start, end, format);
+ @Test
+ public void testLexx() {
+ // tests each constant
+ assertArrayEquals(new DurationFormatUtils.Token[]{
+ new DurationFormatUtils.Token(DurationFormatUtils.y, 1),
+ new DurationFormatUtils.Token(DurationFormatUtils.M, 1),
+ new DurationFormatUtils.Token(DurationFormatUtils.d, 1),
+ new DurationFormatUtils.Token(DurationFormatUtils.H, 1),
+ new DurationFormatUtils.Token(DurationFormatUtils.m, 1),
+ new DurationFormatUtils.Token(DurationFormatUtils.s, 1),
+ new DurationFormatUtils.Token(DurationFormatUtils.S, 1)}, DurationFormatUtils.lexx("yMdHmsS"));
+
+ // tests the ISO 8601-like
+ assertArrayEquals(new DurationFormatUtils.Token[]{
+ new DurationFormatUtils.Token(DurationFormatUtils.H, 2),
+ new DurationFormatUtils.Token(new StringBuilder(":"), 1),
+ new DurationFormatUtils.Token(DurationFormatUtils.m, 2),
+ new DurationFormatUtils.Token(new StringBuilder(":"), 1),
+ new DurationFormatUtils.Token(DurationFormatUtils.s, 2),
+ new DurationFormatUtils.Token(new StringBuilder("."), 1),
+ new DurationFormatUtils.Token(DurationFormatUtils.S, 3)}, DurationFormatUtils.lexx("HH:mm:ss.SSS"));
+
+ // test the iso extended format
+ assertArrayEquals(new DurationFormatUtils.Token[]{
+ new DurationFormatUtils.Token(new StringBuilder("P"), 1),
+ new DurationFormatUtils.Token(DurationFormatUtils.y, 4),
+ new DurationFormatUtils.Token(new StringBuilder("Y"), 1),
+ new DurationFormatUtils.Token(DurationFormatUtils.M, 1),
+ new DurationFormatUtils.Token(new StringBuilder("M"), 1),
+ new DurationFormatUtils.Token(DurationFormatUtils.d, 1),
+ new DurationFormatUtils.Token(new StringBuilder("DT"), 1),
+ new DurationFormatUtils.Token(DurationFormatUtils.H, 1),
+ new DurationFormatUtils.Token(new StringBuilder("H"), 1),
+ new DurationFormatUtils.Token(DurationFormatUtils.m, 1),
+ new DurationFormatUtils.Token(new StringBuilder("M"), 1),
+ new DurationFormatUtils.Token(DurationFormatUtils.s, 1),
+ new DurationFormatUtils.Token(new StringBuilder("."), 1),
+ new DurationFormatUtils.Token(DurationFormatUtils.S, 3),
+ new DurationFormatUtils.Token(new StringBuilder("S"), 1)}, DurationFormatUtils
+ .lexx(DurationFormatUtils.ISO_EXTENDED_FORMAT_PATTERN));
+
+ // test failures in equals
+ final DurationFormatUtils.Token token = new DurationFormatUtils.Token(DurationFormatUtils.y, 4);
+ assertNotEquals(token, new Object(), "Token equal to non-Token class. ");
+ assertNotEquals(token, new DurationFormatUtils.Token(new Object()), "Token equal to Token with wrong value class. ");
+ assertNotEquals(token, new DurationFormatUtils.Token(DurationFormatUtils.y, 1), "Token equal to Token with different count. ");
+ final DurationFormatUtils.Token numToken = new DurationFormatUtils.Token(Integer.valueOf(1), 4);
+ assertEquals(numToken, numToken, "Token with Number value not equal to itself. ");
}
- private void assertEqualDuration(final String message, final String expected, final int[] start, final int[] end, final String format) {
- final Calendar cal1 = Calendar.getInstance();
- cal1.set(start[0], start[1], start[2], start[3], start[4], start[5]);
- cal1.set(Calendar.MILLISECOND, 0);
- final Calendar cal2 = Calendar.getInstance();
- cal2.set(end[0], end[1], end[2], end[3], end[4], end[5]);
- cal2.set(Calendar.MILLISECOND, 0);
- final long milli1 = cal1.getTime().getTime();
- final long milli2 = cal2.getTime().getTime();
- final String result = DurationFormatUtils.formatPeriod(milli1, milli2, format);
- if (message == null) {
- assertEquals(expected, result);
- } else {
- assertEquals(expected, result, message);
+ // Testing the under a day range in DurationFormatUtils.formatPeriod
+ @Test
+ public void testLowDurations() {
+ for (int hr=0; hr < 24; hr++) {
+ for (int min=0; min < 60; min++) {
+ for (int sec=0; sec < 60; sec++) {
+ assertEqualDuration( hr + ":" + min + ":" + sec,
+ new int[] { 2000, 0, 1, 0, 0, 0, 0 },
+ new int[] { 2000, 0, 1, hr, min, sec },
+ "H:m:s"
+ );
+ }
+ }
}
}
diff --git a/src/test/java/org/apache/commons/lang3/time/FastDateFormatTest.java b/src/test/java/org/apache/commons/lang3/time/FastDateFormatTest.java
index df59b5bf6..b945d1748 100644
--- a/src/test/java/org/apache/commons/lang3/time/FastDateFormatTest.java
+++ b/src/test/java/org/apache/commons/lang3/time/FastDateFormatTest.java
@@ -45,62 +45,51 @@
* @since 2.0
*/
public class FastDateFormatTest {
- /*
- * Only the cache methods need to be tested here.
- * The print methods are tested by {@link FastDateFormat_PrinterTest}
- * and the parse methods are tested by {@link FastDateFormat_ParserTest}
- */
- @Test
- public void test_getInstance() {
- final FastDateFormat format1 = FastDateFormat.getInstance();
- final FastDateFormat format2 = FastDateFormat.getInstance();
- assertSame(format1, format2);
- }
+ private static final int NTHREADS = 10;
- @Test
- public void test_getInstance_String() {
- final FastDateFormat format1 = FastDateFormat.getInstance("MM/DD/yyyy");
- final FastDateFormat format2 = FastDateFormat.getInstance("MM-DD-yyyy");
- final FastDateFormat format3 = FastDateFormat.getInstance("MM-DD-yyyy");
+ private static final int NROUNDS = 10000;
- assertNotSame(format1, format2);
- assertSame(format2, format3);
- assertEquals("MM/DD/yyyy", format1.getPattern());
- assertEquals(TimeZone.getDefault(), format1.getTimeZone());
- assertEquals(TimeZone.getDefault(), format2.getTimeZone());
- }
+ private AtomicLongArray measureTime(final Format printer, final Format parser) throws InterruptedException {
+ final ExecutorService pool = Executors.newFixedThreadPool(NTHREADS);
+ final AtomicInteger failures = new AtomicInteger(0);
+ final AtomicLongArray totalElapsed = new AtomicLongArray(2);
+ try {
+ for (int i = 0; i < NTHREADS; ++i) {
+ pool.submit(() -> {
+ for (int j = 0; j < NROUNDS; ++j) {
+ try {
+ final Date date = new Date();
- @DefaultLocale(language = "en", country = "US")
- @DefaultTimeZone("America/New_York")
- @Test
- public void test_getInstance_String_TimeZone() {
+ final long t0Millis = System.currentTimeMillis();
+ final String formattedDate = printer.format(date);
+ totalElapsed.addAndGet(0, System.currentTimeMillis() - t0Millis);
- final FastDateFormat format1 = FastDateFormat.getInstance("MM/DD/yyyy",
- TimeZone.getTimeZone("Atlantic/Reykjavik"));
- final FastDateFormat format2 = FastDateFormat.getInstance("MM/DD/yyyy");
- final FastDateFormat format3 = FastDateFormat.getInstance("MM/DD/yyyy", TimeZone.getDefault());
- final FastDateFormat format4 = FastDateFormat.getInstance("MM/DD/yyyy", TimeZone.getDefault());
- final FastDateFormat format5 = FastDateFormat.getInstance("MM-DD-yyyy", TimeZone.getDefault());
- final FastDateFormat format6 = FastDateFormat.getInstance("MM-DD-yyyy");
+ final long t1Millis = System.currentTimeMillis();
+ final Object pd = parser.parseObject(formattedDate);
+ totalElapsed.addAndGet(1, System.currentTimeMillis() - t1Millis);
- assertNotSame(format1, format2);
- assertEquals(TimeZone.getTimeZone("Atlantic/Reykjavik"), format1.getTimeZone());
- assertEquals(TimeZone.getDefault(), format2.getTimeZone());
- assertSame(format3, format4);
- assertNotSame(format3, format5);
- assertNotSame(format4, format6);
- }
-
- @DefaultLocale(language = "en", country = "US")
- @Test
- public void test_getInstance_String_Locale() {
- final FastDateFormat format1 = FastDateFormat.getInstance("MM/DD/yyyy", Locale.GERMANY);
- final FastDateFormat format2 = FastDateFormat.getInstance("MM/DD/yyyy");
- final FastDateFormat format3 = FastDateFormat.getInstance("MM/DD/yyyy", Locale.GERMANY);
-
- assertNotSame(format1, format2);
- assertSame(format1, format3);
- assertEquals(Locale.GERMANY, format1.getLocale());
+ if (!date.equals(pd)) {
+ failures.incrementAndGet();
+ }
+ } catch (final Exception e) {
+ failures.incrementAndGet();
+ e.printStackTrace();
+ }
+ }
+ });
+ }
+ } finally {
+ pool.shutdown();
+ // depending on the performance of the machine used to run the parsing,
+ // the tests can run for a while. It should however complete within
+ // 30 seconds. Might need increase on very slow machines.
+ if (!pool.awaitTermination(30, TimeUnit.SECONDS)) {
+ pool.shutdownNow();
+ fail("did not complete tasks");
+ }
+ }
+ assertEquals(0, failures.get());
+ return totalElapsed;
}
@DefaultLocale(language = "en", country = "US")
@@ -133,6 +122,64 @@ public void test_changeDefault_Locale_DateTimeInstance() {
assertNotSame(format2, format3);
}
+ /*
+ * Only the cache methods need to be tested here.
+ * The print methods are tested by {@link FastDateFormat_PrinterTest}
+ * and the parse methods are tested by {@link FastDateFormat_ParserTest}
+ */
+ @Test
+ public void test_getInstance() {
+ final FastDateFormat format1 = FastDateFormat.getInstance();
+ final FastDateFormat format2 = FastDateFormat.getInstance();
+ assertSame(format1, format2);
+ }
+
+ @Test
+ public void test_getInstance_String() {
+ final FastDateFormat format1 = FastDateFormat.getInstance("MM/DD/yyyy");
+ final FastDateFormat format2 = FastDateFormat.getInstance("MM-DD-yyyy");
+ final FastDateFormat format3 = FastDateFormat.getInstance("MM-DD-yyyy");
+
+ assertNotSame(format1, format2);
+ assertSame(format2, format3);
+ assertEquals("MM/DD/yyyy", format1.getPattern());
+ assertEquals(TimeZone.getDefault(), format1.getTimeZone());
+ assertEquals(TimeZone.getDefault(), format2.getTimeZone());
+ }
+
+ @DefaultLocale(language = "en", country = "US")
+ @Test
+ public void test_getInstance_String_Locale() {
+ final FastDateFormat format1 = FastDateFormat.getInstance("MM/DD/yyyy", Locale.GERMANY);
+ final FastDateFormat format2 = FastDateFormat.getInstance("MM/DD/yyyy");
+ final FastDateFormat format3 = FastDateFormat.getInstance("MM/DD/yyyy", Locale.GERMANY);
+
+ assertNotSame(format1, format2);
+ assertSame(format1, format3);
+ assertEquals(Locale.GERMANY, format1.getLocale());
+ }
+
+ @DefaultLocale(language = "en", country = "US")
+ @DefaultTimeZone("America/New_York")
+ @Test
+ public void test_getInstance_String_TimeZone() {
+
+ final FastDateFormat format1 = FastDateFormat.getInstance("MM/DD/yyyy",
+ TimeZone.getTimeZone("Atlantic/Reykjavik"));
+ final FastDateFormat format2 = FastDateFormat.getInstance("MM/DD/yyyy");
+ final FastDateFormat format3 = FastDateFormat.getInstance("MM/DD/yyyy", TimeZone.getDefault());
+ final FastDateFormat format4 = FastDateFormat.getInstance("MM/DD/yyyy", TimeZone.getDefault());
+ final FastDateFormat format5 = FastDateFormat.getInstance("MM-DD-yyyy", TimeZone.getDefault());
+ final FastDateFormat format6 = FastDateFormat.getInstance("MM-DD-yyyy");
+
+ assertNotSame(format1, format2);
+ assertEquals(TimeZone.getTimeZone("Atlantic/Reykjavik"), format1.getTimeZone());
+ assertEquals(TimeZone.getDefault(), format2.getTimeZone());
+ assertSame(format3, format4);
+ assertNotSame(format3, format5);
+ assertNotSame(format4, format6);
+ }
+
@DefaultLocale(language = "en", country = "US")
@DefaultTimeZone("America/New_York")
@Test
@@ -193,27 +240,28 @@ public void testDateDefaults() {
}
@Test
- public void testTimeDefaults() {
- assertEquals(FastDateFormat.getTimeInstance(FastDateFormat.LONG, Locale.CANADA),
- FastDateFormat.getTimeInstance(FastDateFormat.LONG, TimeZone.getDefault(), Locale.CANADA));
+ public void testLANG_1152() {
+ final TimeZone utc = FastTimeZone.getGmtTimeZone();
+ final Date date = new Date(Long.MAX_VALUE);
- assertEquals(FastDateFormat.getTimeInstance(FastDateFormat.LONG, TimeZone.getTimeZone("America/New_York")),
- FastDateFormat.getTimeInstance(FastDateFormat.LONG, TimeZone.getTimeZone("America/New_York"), Locale.getDefault()));
+ String dateAsString = FastDateFormat.getInstance("yyyy-MM-dd", utc, Locale.US).format(date);
+ assertEquals("292278994-08-17", dateAsString);
- assertEquals(FastDateFormat.getTimeInstance(FastDateFormat.LONG),
- FastDateFormat.getTimeInstance(FastDateFormat.LONG, TimeZone.getDefault(), Locale.getDefault()));
+ dateAsString = FastDateFormat.getInstance("dd/MM/yyyy", utc, Locale.US).format(date);
+ assertEquals("17/08/292278994", dateAsString);
+ }
+ @Test
+ public void testLANG_1267() {
+ FastDateFormat.getInstance("yyyy-MM-dd'T'HH:mm:ss.SSSXXX");
}
+ /**
+ * According to LANG-954 (https://issues.apache.org/jira/browse/LANG-954) this is broken in Android 2.1.
+ */
@Test
- public void testTimeDateDefaults() {
- assertEquals(FastDateFormat.getDateTimeInstance(FastDateFormat.LONG, FastDateFormat.MEDIUM, Locale.CANADA),
- FastDateFormat.getDateTimeInstance(FastDateFormat.LONG, FastDateFormat.MEDIUM, TimeZone.getDefault(), Locale.CANADA));
-
- assertEquals(FastDateFormat.getDateTimeInstance(FastDateFormat.LONG, FastDateFormat.MEDIUM, TimeZone.getTimeZone("America/New_York")),
- FastDateFormat.getDateTimeInstance(FastDateFormat.LONG, FastDateFormat.MEDIUM, TimeZone.getTimeZone("America/New_York"), Locale.getDefault()));
-
- assertEquals(FastDateFormat.getDateTimeInstance(FastDateFormat.LONG, FastDateFormat.MEDIUM),
- FastDateFormat.getDateTimeInstance(FastDateFormat.LONG, FastDateFormat.MEDIUM, TimeZone.getDefault(), Locale.getDefault()));
+ public void testLANG_954() {
+ final String pattern = "yyyy-MM-dd'T'";
+ FastDateFormat.getInstance(pattern);
}
@Test
@@ -248,75 +296,27 @@ public Object parseObject(final String source, final ParsePosition pos) {
//System.out.println(">>FastDateFormatTest: FastDateParser:"+fdfTime.get(1)+" SimpleDateFormat:"+sdfTime.get(1));
}
- private static final int NTHREADS = 10;
- private static final int NROUNDS = 10000;
-
- private AtomicLongArray measureTime(final Format printer, final Format parser) throws InterruptedException {
- final ExecutorService pool = Executors.newFixedThreadPool(NTHREADS);
- final AtomicInteger failures = new AtomicInteger(0);
- final AtomicLongArray totalElapsed = new AtomicLongArray(2);
- try {
- for (int i = 0; i < NTHREADS; ++i) {
- pool.submit(() -> {
- for (int j = 0; j < NROUNDS; ++j) {
- try {
- final Date date = new Date();
-
- final long t0Millis = System.currentTimeMillis();
- final String formattedDate = printer.format(date);
- totalElapsed.addAndGet(0, System.currentTimeMillis() - t0Millis);
-
- final long t1Millis = System.currentTimeMillis();
- final Object pd = parser.parseObject(formattedDate);
- totalElapsed.addAndGet(1, System.currentTimeMillis() - t1Millis);
-
- if (!date.equals(pd)) {
- failures.incrementAndGet();
- }
- } catch (final Exception e) {
- failures.incrementAndGet();
- e.printStackTrace();
- }
- }
- });
- }
- } finally {
- pool.shutdown();
- // depending on the performance of the machine used to run the parsing,
- // the tests can run for a while. It should however complete within
- // 30 seconds. Might need increase on very slow machines.
- if (!pool.awaitTermination(30, TimeUnit.SECONDS)) {
- pool.shutdownNow();
- fail("did not complete tasks");
- }
- }
- assertEquals(0, failures.get());
- return totalElapsed;
- }
-
- /**
- * According to LANG-954 (https://issues.apache.org/jira/browse/LANG-954) this is broken in Android 2.1.
- */
@Test
- public void testLANG_954() {
- final String pattern = "yyyy-MM-dd'T'";
- FastDateFormat.getInstance(pattern);
+ public void testTimeDateDefaults() {
+ assertEquals(FastDateFormat.getDateTimeInstance(FastDateFormat.LONG, FastDateFormat.MEDIUM, Locale.CANADA),
+ FastDateFormat.getDateTimeInstance(FastDateFormat.LONG, FastDateFormat.MEDIUM, TimeZone.getDefault(), Locale.CANADA));
+
+ assertEquals(FastDateFormat.getDateTimeInstance(FastDateFormat.LONG, FastDateFormat.MEDIUM, TimeZone.getTimeZone("America/New_York")),
+ FastDateFormat.getDateTimeInstance(FastDateFormat.LONG, FastDateFormat.MEDIUM, TimeZone.getTimeZone("America/New_York"), Locale.getDefault()));
+
+ assertEquals(FastDateFormat.getDateTimeInstance(FastDateFormat.LONG, FastDateFormat.MEDIUM),
+ FastDateFormat.getDateTimeInstance(FastDateFormat.LONG, FastDateFormat.MEDIUM, TimeZone.getDefault(), Locale.getDefault()));
}
@Test
- public void testLANG_1152() {
- final TimeZone utc = FastTimeZone.getGmtTimeZone();
- final Date date = new Date(Long.MAX_VALUE);
+ public void testTimeDefaults() {
+ assertEquals(FastDateFormat.getTimeInstance(FastDateFormat.LONG, Locale.CANADA),
+ FastDateFormat.getTimeInstance(FastDateFormat.LONG, TimeZone.getDefault(), Locale.CANADA));
- String dateAsString = FastDateFormat.getInstance("yyyy-MM-dd", utc, Locale.US).format(date);
- assertEquals("292278994-08-17", dateAsString);
+ assertEquals(FastDateFormat.getTimeInstance(FastDateFormat.LONG, TimeZone.getTimeZone("America/New_York")),
+ FastDateFormat.getTimeInstance(FastDateFormat.LONG, TimeZone.getTimeZone("America/New_York"), Locale.getDefault()));
- dateAsString = FastDateFormat.getInstance("dd/MM/yyyy", utc, Locale.US).format(date);
- assertEquals("17/08/292278994", dateAsString);
- }
-
- @Test
- public void testLANG_1267() {
- FastDateFormat.getInstance("yyyy-MM-dd'T'HH:mm:ss.SSSXXX");
+ assertEquals(FastDateFormat.getTimeInstance(FastDateFormat.LONG),
+ FastDateFormat.getTimeInstance(FastDateFormat.LONG, TimeZone.getDefault(), Locale.getDefault()));
}
}
diff --git a/src/test/java/org/apache/commons/lang3/time/FastDateParserSDFTest.java b/src/test/java/org/apache/commons/lang3/time/FastDateParserSDFTest.java
index ce8e4bf2f..6e4aad41a 100644
--- a/src/test/java/org/apache/commons/lang3/time/FastDateParserSDFTest.java
+++ b/src/test/java/org/apache/commons/lang3/time/FastDateParserSDFTest.java
@@ -38,6 +38,8 @@
*/
public class FastDateParserSDFTest {
+ private static final TimeZone timeZone = TimeZone.getDefault();
+
public static Stream data() {
return Stream.of(
// General Time zone tests
@@ -102,44 +104,6 @@ public static Stream data() {
);
}
- private static final TimeZone timeZone = TimeZone.getDefault();
-
- @ParameterizedTest
- @MethodSource("data")
- public void testOriginal(final String format, final String input, final Locale locale, final boolean valid) {
- checkParse(input, format, locale, valid);
- }
-
- @ParameterizedTest
- @MethodSource("data")
- public void testOriginalPP(final String format, final String input, final Locale locale, final boolean valid) {
- checkParsePosition(input, format, locale, valid);
- }
-
- @ParameterizedTest
- @MethodSource("data")
- public void testUpperCase(final String format, final String input, final Locale locale, final boolean valid) {
- checkParse(input.toUpperCase(locale), format, locale, valid);
- }
-
- @ParameterizedTest
- @MethodSource("data")
- public void testUpperCasePP(final String format, final String input, final Locale locale, final boolean valid) {
- checkParsePosition(input.toUpperCase(locale), format, locale, valid);
- }
-
- @ParameterizedTest
- @MethodSource("data")
- public void testLowerCase(final String format, final String input, final Locale locale, final boolean valid) {
- checkParse(input.toLowerCase(locale), format, locale, valid);
- }
-
- @ParameterizedTest
- @MethodSource("data")
- public void testLowerCasePP(final String format, final String input, final Locale locale, final boolean valid) {
- checkParsePosition(input.toLowerCase(locale), format, locale, valid);
- }
-
private void checkParse(final String formattedDate, final String format, final Locale locale, final boolean valid) {
final SimpleDateFormat sdf = new SimpleDateFormat(format, locale);
sdf.setTimeZone(timeZone);
@@ -176,6 +140,7 @@ private void checkParse(final String formattedDate, final String format, final L
assertEquals(sdfE, fdfE, locale.toString()+" "+formattedDate + " expected same Exception ");
}
}
+
private void checkParsePosition(final String formattedDate, final String format, final Locale locale, final boolean valid) {
final SimpleDateFormat sdf = new SimpleDateFormat(format, locale);
sdf.setTimeZone(timeZone);
@@ -214,4 +179,39 @@ private void checkParsePosition(final String formattedDate, final String format,
"FDF error index ("+ fdferrorIndex + ") should approximate SDF index (" + sdferrorIndex + ")");
}
}
+
+ @ParameterizedTest
+ @MethodSource("data")
+ public void testLowerCase(final String format, final String input, final Locale locale, final boolean valid) {
+ checkParse(input.toLowerCase(locale), format, locale, valid);
+ }
+
+ @ParameterizedTest
+ @MethodSource("data")
+ public void testLowerCasePP(final String format, final String input, final Locale locale, final boolean valid) {
+ checkParsePosition(input.toLowerCase(locale), format, locale, valid);
+ }
+
+ @ParameterizedTest
+ @MethodSource("data")
+ public void testOriginal(final String format, final String input, final Locale locale, final boolean valid) {
+ checkParse(input, format, locale, valid);
+ }
+
+ @ParameterizedTest
+ @MethodSource("data")
+ public void testOriginalPP(final String format, final String input, final Locale locale, final boolean valid) {
+ checkParsePosition(input, format, locale, valid);
+ }
+
+ @ParameterizedTest
+ @MethodSource("data")
+ public void testUpperCase(final String format, final String input, final Locale locale, final boolean valid) {
+ checkParse(input.toUpperCase(locale), format, locale, valid);
+ }
+ @ParameterizedTest
+ @MethodSource("data")
+ public void testUpperCasePP(final String format, final String input, final Locale locale, final boolean valid) {
+ checkParsePosition(input.toUpperCase(locale), format, locale, valid);
+ }
}
diff --git a/src/test/java/org/apache/commons/lang3/time/FastDateParserTest.java b/src/test/java/org/apache/commons/lang3/time/FastDateParserTest.java
index e61d9c291..b9a00a384 100644
--- a/src/test/java/org/apache/commons/lang3/time/FastDateParserTest.java
+++ b/src/test/java/org/apache/commons/lang3/time/FastDateParserTest.java
@@ -95,6 +95,28 @@ private enum Expected1806 {
private static final Locale SWEDEN = new Locale("sv", "SE");
+ static void checkParse(final Locale locale, final Calendar cal, final SimpleDateFormat simpleDateFormat,
+ final DateParser dateParser) {
+ final String formattedDate = simpleDateFormat.format(cal.getTime());
+ checkParse(locale, simpleDateFormat, dateParser, formattedDate, formattedDate);
+ checkParse(locale, simpleDateFormat, dateParser, formattedDate.toLowerCase(locale), formattedDate);
+ checkParse(locale, simpleDateFormat, dateParser, formattedDate.toUpperCase(locale), formattedDate);
+ }
+
+ static void checkParse(final Locale locale, final SimpleDateFormat simpleDateFormat, final DateParser dateParser,
+ final String formattedDate, final String originalFormattedDate) {
+ try {
+ final Date expectedTime = simpleDateFormat.parse(formattedDate);
+ final Date actualTime = dateParser.parse(formattedDate);
+ assertEquals(expectedTime, actualTime,
+ "locale: " + locale + ", formattedDate: '" + formattedDate + "', originalFormattedDate: '"
+ + originalFormattedDate + ", simpleDateFormat.pattern: '" + simpleDateFormat + "', Java: "
+ + SystemUtils.JAVA_RUNTIME_VERSION + "\n");
+ } catch (final Exception e) {
+ fail("locale: " + locale + ", formattedDate: '" + formattedDate + "', error : " + e + "\n", e);
+ }
+ }
+
static Stream dateParserParameters() {
return Stream.of(
// @formatter:off
@@ -120,28 +142,6 @@ private static Calendar initializeCalendar(final TimeZone timeZone) {
private final TriFunction dateParserProvider = (format, timeZone,
locale) -> new FastDateParser(format, timeZone, locale, null);
- static void checkParse(final Locale locale, final Calendar cal, final SimpleDateFormat simpleDateFormat,
- final DateParser dateParser) {
- final String formattedDate = simpleDateFormat.format(cal.getTime());
- checkParse(locale, simpleDateFormat, dateParser, formattedDate, formattedDate);
- checkParse(locale, simpleDateFormat, dateParser, formattedDate.toLowerCase(locale), formattedDate);
- checkParse(locale, simpleDateFormat, dateParser, formattedDate.toUpperCase(locale), formattedDate);
- }
-
- static void checkParse(final Locale locale, final SimpleDateFormat simpleDateFormat, final DateParser dateParser,
- final String formattedDate, final String originalFormattedDate) {
- try {
- final Date expectedTime = simpleDateFormat.parse(formattedDate);
- final Date actualTime = dateParser.parse(formattedDate);
- assertEquals(expectedTime, actualTime,
- "locale: " + locale + ", formattedDate: '" + formattedDate + "', originalFormattedDate: '"
- + originalFormattedDate + ", simpleDateFormat.pattern: '" + simpleDateFormat + "', Java: "
- + SystemUtils.JAVA_RUNTIME_VERSION + "\n");
- } catch (final Exception e) {
- fail("locale: " + locale + ", formattedDate: '" + formattedDate + "', error : " + e + "\n", e);
- }
- }
-
private DateParser getDateInstance(final int dateStyle, final Locale locale) {
return getInstance(null, FormatCache.getPatternForStyle(Integer.valueOf(dateStyle), null, locale),
TimeZone.getDefault(), Locale.getDefault());
diff --git a/src/test/java/org/apache/commons/lang3/time/FastDateParser_MoreOrLessTest.java b/src/test/java/org/apache/commons/lang3/time/FastDateParser_MoreOrLessTest.java
index 56a0b0f59..a3d4978c4 100644
--- a/src/test/java/org/apache/commons/lang3/time/FastDateParser_MoreOrLessTest.java
+++ b/src/test/java/org/apache/commons/lang3/time/FastDateParser_MoreOrLessTest.java
@@ -32,6 +32,27 @@ public class FastDateParser_MoreOrLessTest {
private static final TimeZone NEW_YORK = TimeZone.getTimeZone("America/New_York");
+ @Test
+ public void testInputHasLessCharacters() {
+ final FastDateParser parser = new FastDateParser("MM/dd/yyy", TimeZone.getDefault(), Locale.getDefault());
+ final ParsePosition parsePosition = new ParsePosition(0);
+ assertNull(parser.parse("03/23", parsePosition));
+ assertEquals(5, parsePosition.getErrorIndex());
+ }
+
+ @Test
+ public void testInputHasMoreCharacters() {
+ final FastDateParser parser = new FastDateParser("MM/dd", TimeZone.getDefault(), Locale.getDefault());
+ final ParsePosition parsePosition = new ParsePosition(0);
+ final Date date = parser.parse("3/23/61", parsePosition);
+ assertEquals(4, parsePosition.getIndex());
+
+ final Calendar calendar = Calendar.getInstance();
+ calendar.setTime(date);
+ assertEquals(2, calendar.get(Calendar.MONTH));
+ assertEquals(23, calendar.get(Calendar.DATE));
+ }
+
@Test
public void testInputHasPrecedingCharacters() {
final FastDateParser parser = new FastDateParser("MM/dd", TimeZone.getDefault(), Locale.getDefault());
@@ -57,19 +78,6 @@ public void testInputHasWhitespace() {
assertEquals(23, calendar.get(Calendar.DATE));
}
- @Test
- public void testInputHasMoreCharacters() {
- final FastDateParser parser = new FastDateParser("MM/dd", TimeZone.getDefault(), Locale.getDefault());
- final ParsePosition parsePosition = new ParsePosition(0);
- final Date date = parser.parse("3/23/61", parsePosition);
- assertEquals(4, parsePosition.getIndex());
-
- final Calendar calendar = Calendar.getInstance();
- calendar.setTime(date);
- assertEquals(2, calendar.get(Calendar.MONTH));
- assertEquals(23, calendar.get(Calendar.DATE));
- }
-
@Test
public void testInputHasWrongCharacters() {
final FastDateParser parser = new FastDateParser("MM-dd-yyy", TimeZone.getDefault(), Locale.getDefault());
@@ -79,11 +87,16 @@ public void testInputHasWrongCharacters() {
}
@Test
- public void testInputHasLessCharacters() {
- final FastDateParser parser = new FastDateParser("MM/dd/yyy", TimeZone.getDefault(), Locale.getDefault());
+ public void testInputHasWrongDay() {
+ final FastDateParser parser = new FastDateParser("EEEE, MM/dd/yyy", NEW_YORK, Locale.US);
+ final String input = "Thursday, 03/23/61";
final ParsePosition parsePosition = new ParsePosition(0);
- assertNull(parser.parse("03/23", parsePosition));
- assertEquals(5, parsePosition.getErrorIndex());
+ assertNotNull(parser.parse(input, parsePosition));
+ assertEquals(input.length(), parsePosition.getIndex());
+
+ parsePosition.setIndex(0);
+ assertNull(parser.parse( "Thorsday, 03/23/61", parsePosition));
+ assertEquals(0, parsePosition.getErrorIndex());
}
@Test
@@ -99,17 +112,4 @@ public void testInputHasWrongTimeZone() {
assertNull(parser.parse( "11:23 Pacific Standard ", parsePosition));
assertEquals(6, parsePosition.getErrorIndex());
}
-
- @Test
- public void testInputHasWrongDay() {
- final FastDateParser parser = new FastDateParser("EEEE, MM/dd/yyy", NEW_YORK, Locale.US);
- final String input = "Thursday, 03/23/61";
- final ParsePosition parsePosition = new ParsePosition(0);
- assertNotNull(parser.parse(input, parsePosition));
- assertEquals(input.length(), parsePosition.getIndex());
-
- parsePosition.setIndex(0);
- assertNull(parser.parse( "Thorsday, 03/23/61", parsePosition));
- assertEquals(0, parsePosition.getErrorIndex());
- }
}
diff --git a/src/test/java/org/apache/commons/lang3/time/FastDateParser_TimeZoneStrategyTest.java b/src/test/java/org/apache/commons/lang3/time/FastDateParser_TimeZoneStrategyTest.java
index d2f106ec4..4cd6835d9 100644
--- a/src/test/java/org/apache/commons/lang3/time/FastDateParser_TimeZoneStrategyTest.java
+++ b/src/test/java/org/apache/commons/lang3/time/FastDateParser_TimeZoneStrategyTest.java
@@ -30,6 +30,15 @@
class FastDateParser_TimeZoneStrategyTest {
+ @Test
+ void testLang1219() throws ParseException {
+ final FastDateParser parser = new FastDateParser("dd.MM.yyyy HH:mm:ss z", TimeZone.getDefault(), Locale.GERMAN);
+
+ final Date summer = parser.parse("26.10.2014 02:00:00 MESZ");
+ final Date standard = parser.parse("26.10.2014 02:00:00 MEZ");
+ assertNotEquals(summer.getTime(), standard.getTime());
+ }
+
@ParameterizedTest
@MethodSource("java.util.Locale#getAvailableLocales")
void testTimeZoneStrategyPattern(final Locale locale) throws ParseException {
@@ -46,13 +55,4 @@ void testTimeZoneStrategyPattern(final Locale locale) throws ParseException {
}
}
}
-
- @Test
- void testLang1219() throws ParseException {
- final FastDateParser parser = new FastDateParser("dd.MM.yyyy HH:mm:ss z", TimeZone.getDefault(), Locale.GERMAN);
-
- final Date summer = parser.parse("26.10.2014 02:00:00 MESZ");
- final Date standard = parser.parse("26.10.2014 02:00:00 MEZ");
- assertNotEquals(summer.getTime(), standard.getTime());
- }
}
diff --git a/src/test/java/org/apache/commons/lang3/time/FastDatePrinterTest.java b/src/test/java/org/apache/commons/lang3/time/FastDatePrinterTest.java
index 13ba5fe03..f3511a51e 100644
--- a/src/test/java/org/apache/commons/lang3/time/FastDatePrinterTest.java
+++ b/src/test/java/org/apache/commons/lang3/time/FastDatePrinterTest.java
@@ -42,20 +42,49 @@
*/
public class FastDatePrinterTest {
+ private enum Expected1806 {
+ India(INDIA, "+05", "+0530", "+05:30"), Greenwich(GMT, "Z", "Z", "Z"), NewYork(
+ NEW_YORK, "-05", "-0500", "-05:00");
+
+ final TimeZone zone;
+
+ final String one;
+ final String two;
+ final String three;
+ Expected1806(final TimeZone zone, final String one, final String two, final String three) {
+ this.zone = zone;
+ this.one = one;
+ this.two = two;
+ this.three = three;
+ }
+ }
private static final String YYYY_MM_DD = "yyyy/MM/dd";
private static final TimeZone NEW_YORK = TimeZone.getTimeZone("America/New_York");
private static final TimeZone GMT = TimeZone.getTimeZone("GMT");
private static final TimeZone INDIA = TimeZone.getTimeZone("Asia/Calcutta");
+
private static final Locale SWEDEN = new Locale("sv", "SE");
- DatePrinter getInstance(final String format) {
- return getInstance(format, TimeZone.getDefault(), Locale.getDefault());
+ private static Calendar initializeCalendar(final TimeZone tz) {
+ final Calendar cal = Calendar.getInstance(tz);
+ cal.set(Calendar.YEAR, 2001);
+ cal.set(Calendar.MONTH, 1); // not daylight savings
+ cal.set(Calendar.DAY_OF_MONTH, 4);
+ cal.set(Calendar.HOUR_OF_DAY, 12);
+ cal.set(Calendar.MINUTE, 8);
+ cal.set(Calendar.SECOND, 56);
+ cal.set(Calendar.MILLISECOND, 235);
+ return cal;
}
private DatePrinter getDateInstance(final int dateStyle, final Locale locale) {
return getInstance(FormatCache.getPatternForStyle(Integer.valueOf(dateStyle), null, locale), TimeZone.getDefault(), Locale.getDefault());
}
+ DatePrinter getInstance(final String format) {
+ return getInstance(format, TimeZone.getDefault(), Locale.getDefault());
+ }
+
private DatePrinter getInstance(final String format, final Locale locale) {
return getInstance(format, TimeZone.getDefault(), locale);
}
@@ -75,6 +104,68 @@ protected DatePrinter getInstance(final String format, final TimeZone timeZone,
return new FastDatePrinter(format, timeZone, locale);
}
+ @Test
+ public void test1806() {
+ for (final Expected1806 trial : Expected1806.values()) {
+ final Calendar cal = initializeCalendar(trial.zone);
+
+ DatePrinter printer = getInstance("X", trial.zone);
+ assertEquals(trial.one, printer.format(cal));
+
+ printer = getInstance("XX", trial.zone);
+ assertEquals(trial.two, printer.format(cal));
+
+ printer = getInstance("XXX", trial.zone);
+ assertEquals(trial.three, printer.format(cal));
+ }
+ }
+ @Test
+ public void test1806Argument() {
+ assertThrows(IllegalArgumentException.class, () -> getInstance("XXXX"));
+ }
+
+ @Test
+ public void testAppendableOptions() {
+ final DatePrinter format = getInstance("yyyy-MM-dd HH:mm:ss.SSS Z", TimeZone.getTimeZone("GMT"));
+ final Calendar calendar = Calendar.getInstance();
+ final StringBuilder sb = new StringBuilder();
+ final String expected = format.format(calendar, sb).toString();
+ sb.setLength(0);
+
+ final Date date = calendar.getTime();
+ assertEquals(expected, format.format(date, sb).toString());
+ sb.setLength(0);
+
+ final long epoch = date.getTime();
+ assertEquals(expected, format.format(epoch, sb).toString());
+ }
+
+ @Test
+ public void testDayNumberOfWeek() {
+ final DatePrinter printer = getInstance("u");
+ final Calendar calendar = Calendar.getInstance();
+
+ calendar.set(Calendar.DAY_OF_WEEK, Calendar.MONDAY);
+ assertEquals("1", printer.format(calendar.getTime()));
+
+ calendar.set(Calendar.DAY_OF_WEEK, Calendar.SATURDAY);
+ assertEquals("6", printer.format(calendar.getTime()));
+
+ calendar.set(Calendar.DAY_OF_WEEK, Calendar.SUNDAY);
+ assertEquals("7", printer.format(calendar.getTime()));
+ }
+
+ @Test
+ public void testEquals() {
+ final DatePrinter printer1= getInstance(YYYY_MM_DD);
+ final DatePrinter printer2= getInstance(YYYY_MM_DD);
+
+ assertEquals(printer1, printer2);
+ assertEquals(printer1.hashCode(), printer2.hashCode());
+
+ assertNotEquals(printer1, new Object());
+ }
+
@DefaultLocale(language = "en", country = "US")
@DefaultTimeZone("America/New_York")
@Test
@@ -123,67 +214,32 @@ public void testFormat() {
assertEquals(sdf.format(date2).replaceAll("2003 03 03 03", "2003 2003 03 2003"), fdf.format(date2));
}
- /**
- * Test case for {@link FastDateParser#FastDateParser(String, TimeZone, Locale)}.
- */
@Test
- public void testShortDateStyleWithLocales() {
- final Locale usLocale = Locale.US;
- final Locale swedishLocale = new Locale("sv", "SE");
- final Calendar cal = Calendar.getInstance();
- cal.set(2004, Calendar.FEBRUARY, 3);
- DatePrinter fdf = getDateInstance(FastDateFormat.SHORT, usLocale);
- assertEquals("2/3/04", fdf.format(cal));
+ public void testHourFormats() {
+ final Calendar calendar = Calendar.getInstance();
+ calendar.clear();
+ final DatePrinter printer = getInstance("K k H h");
- fdf = getDateInstance(FastDateFormat.SHORT, swedishLocale);
- assertEquals("2004-02-03", fdf.format(cal));
+ calendar.set(Calendar.HOUR_OF_DAY, 0);
+ assertEquals("0 24 0 12", printer.format(calendar));
+ calendar.set(Calendar.HOUR_OF_DAY, 12);
+ assertEquals("0 12 12 12", printer.format(calendar));
+
+ calendar.set(Calendar.HOUR_OF_DAY, 23);
+ assertEquals("11 23 23 11", printer.format(calendar));
}
- /**
- * Tests that pre-1000AD years get padded with yyyy
- */
@Test
- public void testLowYearPadding() {
- final Calendar cal = Calendar.getInstance();
- final DatePrinter format = getInstance(YYYY_MM_DD);
+ public void testLang1103() {
+ final Calendar cal = Calendar.getInstance(SWEDEN);
+ cal.set(Calendar.DAY_OF_MONTH, 2);
- cal.set(1, Calendar.JANUARY, 1);
- assertEquals("0001/01/01", format.format(cal));
- cal.set(10, Calendar.JANUARY, 1);
- assertEquals("0010/01/01", format.format(cal));
- cal.set(100, Calendar.JANUARY, 1);
- assertEquals("0100/01/01", format.format(cal));
- cal.set(999, Calendar.JANUARY, 1);
- assertEquals("0999/01/01", format.format(cal));
- }
- /**
- * Show Bug #39410 is solved
- */
- @Test
- public void testMilleniumBug() {
- final Calendar cal = Calendar.getInstance();
- final DatePrinter format = getInstance("dd.MM.yyyy");
-
- cal.set(1000, Calendar.JANUARY, 1);
- assertEquals("01.01.1000", format.format(cal));
- }
-
- /**
- * testLowYearPadding showed that the date was buggy
- * This test confirms it, getting 366 back as a date
- */
- @Test
- public void testSimpleDate() {
- final Calendar cal = Calendar.getInstance();
- final DatePrinter format = getInstance(YYYY_MM_DD);
-
- cal.set(2004, Calendar.DECEMBER, 31);
- assertEquals("2004/12/31", format.format(cal));
- cal.set(999, Calendar.DECEMBER, 31);
- assertEquals("0999/12/31", format.format(cal));
- cal.set(1, Calendar.MARCH, 2);
- assertEquals("0001/03/02", format.format(cal));
+ assertEquals("2", getInstance("d", SWEDEN).format(cal));
+ assertEquals("02", getInstance("dd", SWEDEN).format(cal));
+ assertEquals("002", getInstance("ddd", SWEDEN).format(cal));
+ assertEquals("0002", getInstance("dddd", SWEDEN).format(cal));
+ assertEquals("00002", getInstance("ddddd", SWEDEN).format(cal));
}
@Test
@@ -224,117 +280,6 @@ public void testLang645() {
assertEquals("fredag, week 53", fdf.format(d));
}
- @Test
- public void testEquals() {
- final DatePrinter printer1= getInstance(YYYY_MM_DD);
- final DatePrinter printer2= getInstance(YYYY_MM_DD);
-
- assertEquals(printer1, printer2);
- assertEquals(printer1.hashCode(), printer2.hashCode());
-
- assertNotEquals(printer1, new Object());
- }
-
- @Test
- public void testToStringContainsName() {
- final DatePrinter printer= getInstance(YYYY_MM_DD);
- assertTrue(printer.toString().startsWith("FastDate"));
- }
-
- @Test
- public void testPatternMatches() {
- final DatePrinter printer= getInstance(YYYY_MM_DD);
- assertEquals(YYYY_MM_DD, printer.getPattern());
- }
-
- @Test
- public void testLocaleMatches() {
- final DatePrinter printer= getInstance(YYYY_MM_DD, SWEDEN);
- assertEquals(SWEDEN, printer.getLocale());
- }
-
- @Test
- public void testTimeZoneMatches() {
- final DatePrinter printer= getInstance(YYYY_MM_DD, NEW_YORK);
- assertEquals(NEW_YORK, printer.getTimeZone());
- }
-
- @DefaultTimeZone("UTC")
- @Test
- public void testTimeZoneAsZ() {
- final Calendar c = Calendar.getInstance(FastTimeZone.getGmtTimeZone());
- final FastDateFormat noColonFormat = FastDateFormat.getInstance("Z");
- assertEquals("+0000", noColonFormat.format(c));
-
- final FastDateFormat isoFormat = FastDateFormat.getInstance("ZZ");
- assertEquals("Z", isoFormat.format(c));
-
- final FastDateFormat colonFormat = FastDateFormat.getInstance("ZZZ");
- assertEquals("+00:00", colonFormat.format(c));
- }
-
- private static Calendar initializeCalendar(final TimeZone tz) {
- final Calendar cal = Calendar.getInstance(tz);
- cal.set(Calendar.YEAR, 2001);
- cal.set(Calendar.MONTH, 1); // not daylight savings
- cal.set(Calendar.DAY_OF_MONTH, 4);
- cal.set(Calendar.HOUR_OF_DAY, 12);
- cal.set(Calendar.MINUTE, 8);
- cal.set(Calendar.SECOND, 56);
- cal.set(Calendar.MILLISECOND, 235);
- return cal;
- }
-
- @Test
- public void test1806Argument() {
- assertThrows(IllegalArgumentException.class, () -> getInstance("XXXX"));
- }
-
- private enum Expected1806 {
- India(INDIA, "+05", "+0530", "+05:30"), Greenwich(GMT, "Z", "Z", "Z"), NewYork(
- NEW_YORK, "-05", "-0500", "-05:00");
-
- Expected1806(final TimeZone zone, final String one, final String two, final String three) {
- this.zone = zone;
- this.one = one;
- this.two = two;
- this.three = three;
- }
-
- final TimeZone zone;
- final String one;
- final String two;
- final String three;
- }
-
- @Test
- public void test1806() {
- for (final Expected1806 trial : Expected1806.values()) {
- final Calendar cal = initializeCalendar(trial.zone);
-
- DatePrinter printer = getInstance("X", trial.zone);
- assertEquals(trial.one, printer.format(cal));
-
- printer = getInstance("XX", trial.zone);
- assertEquals(trial.two, printer.format(cal));
-
- printer = getInstance("XXX", trial.zone);
- assertEquals(trial.three, printer.format(cal));
- }
- }
-
- @Test
- public void testLang1103() {
- final Calendar cal = Calendar.getInstance(SWEDEN);
- cal.set(Calendar.DAY_OF_MONTH, 2);
-
- assertEquals("2", getInstance("d", SWEDEN).format(cal));
- assertEquals("02", getInstance("dd", SWEDEN).format(cal));
- assertEquals("002", getInstance("ddd", SWEDEN).format(cal));
- assertEquals("0002", getInstance("dddd", SWEDEN).format(cal));
- assertEquals("00002", getInstance("ddddd", SWEDEN).format(cal));
- }
-
/**
* According to LANG-916 (https://issues.apache.org/jira/browse/LANG-916),
* the format method did contain a bug: it did not use the TimeZone data.
@@ -364,19 +309,79 @@ public void testLang916() {
}
@Test
- public void testHourFormats() {
- final Calendar calendar = Calendar.getInstance();
- calendar.clear();
- final DatePrinter printer = getInstance("K k H h");
+ public void testLocaleMatches() {
+ final DatePrinter printer= getInstance(YYYY_MM_DD, SWEDEN);
+ assertEquals(SWEDEN, printer.getLocale());
+ }
- calendar.set(Calendar.HOUR_OF_DAY, 0);
- assertEquals("0 24 0 12", printer.format(calendar));
+ /**
+ * Tests that pre-1000AD years get padded with yyyy
+ */
+ @Test
+ public void testLowYearPadding() {
+ final Calendar cal = Calendar.getInstance();
+ final DatePrinter format = getInstance(YYYY_MM_DD);
- calendar.set(Calendar.HOUR_OF_DAY, 12);
- assertEquals("0 12 12 12", printer.format(calendar));
+ cal.set(1, Calendar.JANUARY, 1);
+ assertEquals("0001/01/01", format.format(cal));
+ cal.set(10, Calendar.JANUARY, 1);
+ assertEquals("0010/01/01", format.format(cal));
+ cal.set(100, Calendar.JANUARY, 1);
+ assertEquals("0100/01/01", format.format(cal));
+ cal.set(999, Calendar.JANUARY, 1);
+ assertEquals("0999/01/01", format.format(cal));
+ }
- calendar.set(Calendar.HOUR_OF_DAY, 23);
- assertEquals("11 23 23 11", printer.format(calendar));
+ /**
+ * Show Bug #39410 is solved
+ */
+ @Test
+ public void testMilleniumBug() {
+ final Calendar cal = Calendar.getInstance();
+ final DatePrinter format = getInstance("dd.MM.yyyy");
+
+ cal.set(1000, Calendar.JANUARY, 1);
+ assertEquals("01.01.1000", format.format(cal));
+ }
+
+ @Test
+ public void testPatternMatches() {
+ final DatePrinter printer= getInstance(YYYY_MM_DD);
+ assertEquals(YYYY_MM_DD, printer.getPattern());
+ }
+
+ /**
+ * Test case for {@link FastDateParser#FastDateParser(String, TimeZone, Locale)}.
+ */
+ @Test
+ public void testShortDateStyleWithLocales() {
+ final Locale usLocale = Locale.US;
+ final Locale swedishLocale = new Locale("sv", "SE");
+ final Calendar cal = Calendar.getInstance();
+ cal.set(2004, Calendar.FEBRUARY, 3);
+ DatePrinter fdf = getDateInstance(FastDateFormat.SHORT, usLocale);
+ assertEquals("2/3/04", fdf.format(cal));
+
+ fdf = getDateInstance(FastDateFormat.SHORT, swedishLocale);
+ assertEquals("2004-02-03", fdf.format(cal));
+
+ }
+
+ /**
+ * testLowYearPadding showed that the date was buggy
+ * This test confirms it, getting 366 back as a date
+ */
+ @Test
+ public void testSimpleDate() {
+ final Calendar cal = Calendar.getInstance();
+ final DatePrinter format = getInstance(YYYY_MM_DD);
+
+ cal.set(2004, Calendar.DECEMBER, 31);
+ assertEquals("2004/12/31", format.format(cal));
+ cal.set(999, Calendar.DECEMBER, 31);
+ assertEquals("0999/12/31", format.format(cal));
+ cal.set(1, Calendar.MARCH, 2);
+ assertEquals("0001/03/02", format.format(cal));
}
@SuppressWarnings("deprecation")
@@ -402,35 +407,30 @@ public void testStringBufferOptions() {
assertEquals(expected, format.format(epoch, sb).toString());
}
+ @DefaultTimeZone("UTC")
@Test
- public void testAppendableOptions() {
- final DatePrinter format = getInstance("yyyy-MM-dd HH:mm:ss.SSS Z", TimeZone.getTimeZone("GMT"));
- final Calendar calendar = Calendar.getInstance();
- final StringBuilder sb = new StringBuilder();
- final String expected = format.format(calendar, sb).toString();
- sb.setLength(0);
+ public void testTimeZoneAsZ() {
+ final Calendar c = Calendar.getInstance(FastTimeZone.getGmtTimeZone());
+ final FastDateFormat noColonFormat = FastDateFormat.getInstance("Z");
+ assertEquals("+0000", noColonFormat.format(c));
- final Date date = calendar.getTime();
- assertEquals(expected, format.format(date, sb).toString());
- sb.setLength(0);
+ final FastDateFormat isoFormat = FastDateFormat.getInstance("ZZ");
+ assertEquals("Z", isoFormat.format(c));
- final long epoch = date.getTime();
- assertEquals(expected, format.format(epoch, sb).toString());
+ final FastDateFormat colonFormat = FastDateFormat.getInstance("ZZZ");
+ assertEquals("+00:00", colonFormat.format(c));
}
@Test
- public void testDayNumberOfWeek() {
- final DatePrinter printer = getInstance("u");
- final Calendar calendar = Calendar.getInstance();
+ public void testTimeZoneMatches() {
+ final DatePrinter printer= getInstance(YYYY_MM_DD, NEW_YORK);
+ assertEquals(NEW_YORK, printer.getTimeZone());
+ }
- calendar.set(Calendar.DAY_OF_WEEK, Calendar.MONDAY);
- assertEquals("1", printer.format(calendar.getTime()));
-
- calendar.set(Calendar.DAY_OF_WEEK, Calendar.SATURDAY);
- assertEquals("6", printer.format(calendar.getTime()));
-
- calendar.set(Calendar.DAY_OF_WEEK, Calendar.SUNDAY);
- assertEquals("7", printer.format(calendar.getTime()));
+ @Test
+ public void testToStringContainsName() {
+ final DatePrinter printer= getInstance(YYYY_MM_DD);
+ assertTrue(printer.toString().startsWith("FastDate"));
}
@DefaultLocale(language = "en", country = "US")
diff --git a/src/test/java/org/apache/commons/lang3/time/FastTimeZoneTest.java b/src/test/java/org/apache/commons/lang3/time/FastTimeZoneTest.java
index 70e8d0d4c..69ced394b 100644
--- a/src/test/java/org/apache/commons/lang3/time/FastTimeZoneTest.java
+++ b/src/test/java/org/apache/commons/lang3/time/FastTimeZoneTest.java
@@ -32,35 +32,14 @@ public class FastTimeZoneTest {
private static final int MINUTES_59 = 59 * 60 * 1000;
private static final int MINUTES_5 = 5 * 60 * 1000;
- @Test
- public void testGetGmtTimeZone() {
- assertEquals(0, FastTimeZone.getGmtTimeZone().getRawOffset());
- }
-
@Test
public void testBareGmt() {
assertEquals(FastTimeZone.getGmtTimeZone(), FastTimeZone.getTimeZone("GMT"));
}
@Test
- public void testZ() {
- assertEquals(FastTimeZone.getGmtTimeZone(), FastTimeZone.getTimeZone("Z"));
- }
-
- @Test
- public void testUTC() {
- assertEquals(FastTimeZone.getGmtTimeZone(), FastTimeZone.getTimeZone("UTC"));
- }
-
- @Test
- public void testZeroOffsetsReturnSingleton() {
- assertEquals(FastTimeZone.getGmtTimeZone(), FastTimeZone.getTimeZone("+0"));
- assertEquals(FastTimeZone.getGmtTimeZone(), FastTimeZone.getTimeZone("-0"));
- }
-
- @Test
- public void testOlson() {
- assertEquals(TimeZone.getTimeZone("America/New_York"), FastTimeZone.getTimeZone("America/New_York"));
+ public void testGetGmtTimeZone() {
+ assertEquals(0, FastTimeZone.getGmtTimeZone().getRawOffset());
}
@Test
@@ -69,14 +48,6 @@ public void testGmtPrefix() {
assertEquals(-HOURS_23, FastTimeZone.getGmtTimeZone("GMT-23:00").getRawOffset());
}
- @Test
- public void testSign() {
- assertEquals(HOURS_23, FastTimeZone.getGmtTimeZone("+23:00").getRawOffset());
- assertEquals(HOURS_2, FastTimeZone.getGmtTimeZone("+2:00").getRawOffset());
- assertEquals(-HOURS_23, FastTimeZone.getGmtTimeZone("-23:00").getRawOffset());
- assertEquals(-HOURS_2, FastTimeZone.getGmtTimeZone("-2:00").getRawOffset());
- }
-
@Test
public void testHoursColonMinutes() {
assertEquals(HOURS_23, FastTimeZone.getGmtTimeZone("23:00").getRawOffset());
@@ -97,4 +68,33 @@ public void testHoursMinutes() {
assertEquals(HOURS_2+MINUTES_5, FastTimeZone.getGmtTimeZone("0205").getRawOffset());
}
+ @Test
+ public void testOlson() {
+ assertEquals(TimeZone.getTimeZone("America/New_York"), FastTimeZone.getTimeZone("America/New_York"));
+ }
+
+ @Test
+ public void testSign() {
+ assertEquals(HOURS_23, FastTimeZone.getGmtTimeZone("+23:00").getRawOffset());
+ assertEquals(HOURS_2, FastTimeZone.getGmtTimeZone("+2:00").getRawOffset());
+ assertEquals(-HOURS_23, FastTimeZone.getGmtTimeZone("-23:00").getRawOffset());
+ assertEquals(-HOURS_2, FastTimeZone.getGmtTimeZone("-2:00").getRawOffset());
+ }
+
+ @Test
+ public void testUTC() {
+ assertEquals(FastTimeZone.getGmtTimeZone(), FastTimeZone.getTimeZone("UTC"));
+ }
+
+ @Test
+ public void testZ() {
+ assertEquals(FastTimeZone.getGmtTimeZone(), FastTimeZone.getTimeZone("Z"));
+ }
+
+ @Test
+ public void testZeroOffsetsReturnSingleton() {
+ assertEquals(FastTimeZone.getGmtTimeZone(), FastTimeZone.getTimeZone("+0"));
+ assertEquals(FastTimeZone.getGmtTimeZone(), FastTimeZone.getTimeZone("-0"));
+ }
+
}
diff --git a/src/test/java/org/apache/commons/lang3/time/GmtTimeZoneTest.java b/src/test/java/org/apache/commons/lang3/time/GmtTimeZoneTest.java
index 3fa99e096..c55362135 100644
--- a/src/test/java/org/apache/commons/lang3/time/GmtTimeZoneTest.java
+++ b/src/test/java/org/apache/commons/lang3/time/GmtTimeZoneTest.java
@@ -27,41 +27,6 @@
*/
public class GmtTimeZoneTest {
- @Test
- public void hoursOutOfRange() {
- assertThrows(IllegalArgumentException.class, () -> new GmtTimeZone(false, 24, 0));
- }
-
- @Test
- public void hoursInRange() {
- assertEquals(23 * 60 * 60 * 1000, new GmtTimeZone(false, 23, 0).getRawOffset());
- }
-
- @Test
- public void minutesOutOfRange() {
- assertThrows(IllegalArgumentException.class, () -> new GmtTimeZone(false, 0, 60));
- }
-
- @Test
- public void minutesInRange() {
- assertEquals(59 * 60 * 1000, new GmtTimeZone(false, 0, 59).getRawOffset());
- }
-
- @Test
- public void getOffset() {
- assertEquals(0, new GmtTimeZone(false, 0, 0).getOffset(234304));
- }
-
- @Test
- public void setRawOffset() {
- assertThrows(UnsupportedOperationException.class, () -> new GmtTimeZone(false, 0, 0).setRawOffset(0));
- }
-
- @Test
- public void getRawOffset() {
- assertEquals(0, new GmtTimeZone(false, 0, 0).getRawOffset());
- }
-
@Test
public void getID() {
assertEquals("GMT+00:00", new GmtTimeZone(false, 0, 0).getID());
@@ -72,8 +37,23 @@ public void getID() {
}
@Test
- public void useDaylightTime() {
- assertFalse(new GmtTimeZone(false, 0, 0).useDaylightTime());
+ public void getOffset() {
+ assertEquals(0, new GmtTimeZone(false, 0, 0).getOffset(234304));
+ }
+
+ @Test
+ public void getRawOffset() {
+ assertEquals(0, new GmtTimeZone(false, 0, 0).getRawOffset());
+ }
+
+ @Test
+ public void hoursInRange() {
+ assertEquals(23 * 60 * 60 * 1000, new GmtTimeZone(false, 23, 0).getRawOffset());
+ }
+
+ @Test
+ public void hoursOutOfRange() {
+ assertThrows(IllegalArgumentException.class, () -> new GmtTimeZone(false, 24, 0));
}
@Test
@@ -81,6 +61,27 @@ public void inDaylightTime() {
assertFalse(new GmtTimeZone(false, 0, 0).useDaylightTime());
}
+ @Test
+ public void minutesInRange() {
+ assertEquals(59 * 60 * 1000, new GmtTimeZone(false, 0, 59).getRawOffset());
+ }
+
+ @Test
+ public void minutesOutOfRange() {
+ assertThrows(IllegalArgumentException.class, () -> new GmtTimeZone(false, 0, 60));
+ }
+
+ @Test
+ public void setRawOffset() {
+ assertThrows(UnsupportedOperationException.class, () -> new GmtTimeZone(false, 0, 0).setRawOffset(0));
+ }
+
+ @Test
+ public void testGetOffset() {
+ assertEquals(-(6 * 60 + 30) * 60 * 1000,
+ new GmtTimeZone(true, 6, 30).getOffset(1, 1, 1, 1, 1, 1));
+ }
+
@Test
public void testToString() {
assertEquals("[GmtTimeZone id=\"GMT-12:00\",offset=-43200000]",
@@ -88,8 +89,7 @@ public void testToString() {
}
@Test
- public void testGetOffset() {
- assertEquals(-(6 * 60 + 30) * 60 * 1000,
- new GmtTimeZone(true, 6, 30).getOffset(1, 1, 1, 1, 1, 1));
+ public void useDaylightTime() {
+ assertFalse(new GmtTimeZone(false, 0, 0).useDaylightTime());
}
}
diff --git a/src/test/java/org/apache/commons/lang3/time/StopWatchTest.java b/src/test/java/org/apache/commons/lang3/time/StopWatchTest.java
index 2eceff432..290be10cd 100644
--- a/src/test/java/org/apache/commons/lang3/time/StopWatchTest.java
+++ b/src/test/java/org/apache/commons/lang3/time/StopWatchTest.java
@@ -215,6 +215,20 @@ public void testMessage() {
assertTrue(stopWatch.toSplitString().startsWith(MESSAGE));
}
+ @Test
+ public void testStopTimeSimple() throws InterruptedException {
+ final StopWatch watch = StopWatch.createStarted();
+ final long testStartMillis = System.currentTimeMillis();
+ sleepQuietly(MILLIS_550);
+ watch.stop();
+ final long testEndMillis = System.currentTimeMillis();
+ final long stopTime = watch.getStopTime();
+ assertEquals(stopTime, watch.getStopTime());
+
+ assertTrue(stopTime >= testStartMillis);
+ assertTrue(stopTime <= testEndMillis);
+ }
+
@Test
public void testStopWatchGetWithTimeUnit() {
// Create a mock StopWatch with a time of 2:59:01.999
@@ -247,20 +261,6 @@ public void testStopWatchSimple() throws InterruptedException {
assertEquals(0, watch.getTime());
}
- @Test
- public void testStopTimeSimple() throws InterruptedException {
- final StopWatch watch = StopWatch.createStarted();
- final long testStartMillis = System.currentTimeMillis();
- sleepQuietly(MILLIS_550);
- watch.stop();
- final long testEndMillis = System.currentTimeMillis();
- final long stopTime = watch.getStopTime();
- assertEquals(stopTime, watch.getStopTime());
-
- assertTrue(stopTime >= testStartMillis);
- assertTrue(stopTime <= testEndMillis);
- }
-
@Test
public void testStopWatchSimpleGet() throws InterruptedException {
final StopWatch watch = new StopWatch();