package com.bc.util.time;
import junit.framework.TestCase;
import java.text.ParseException;
import java.util.Calendar;
import java.util.Date;
import java.util.GregorianCalendar;
@SuppressWarnings({"MagicNumber"})
public class TimeUtilsTest extends TestCase {
public void testIsSameDay() {
Date date_1 = getDate(2003, 8, 12, 9, 33, 55);
Date date_2 = getDate(2003, 8, 12, 10, 22, 8);
assertTrue(TimeUtils.isSameDay(date_1, date_2));
assertTrue(TimeUtils.isSameDay(date_2, date_1));
assertFalse(TimeUtils.isSameDay(date_1, null));
assertFalse(TimeUtils.isSameDay(null, date_2));
date_2 = getDate(2003, 8, 13, 10, 22, 8);
assertFalse(TimeUtils.isSameDay(date_1, date_2));
assertFalse(TimeUtils.isSameDay(date_2, date_1));
date_2 = getDate(2003, 9, 12, 10, 22, 8);
assertFalse(TimeUtils.isSameDay(date_1, date_2));
assertFalse(TimeUtils.isSameDay(date_2, date_1));
date_2 = getDate(2004, 8, 12, 10, 22, 8);
assertFalse(TimeUtils.isSameDay(date_1, date_2));
assertFalse(TimeUtils.isSameDay(date_2, date_1));
}
public void testIsSameSecond() {
Date date_1 = getDate(2003, 8, 12, 10, 22, 8);
Date date_2 = getDate(2003, 8, 12, 10, 22, 8);
assertTrue(TimeUtils.isSameSecond(date_1, date_2));
assertTrue(TimeUtils.isSameSecond(date_2, date_1));
assertFalse(TimeUtils.isSameSecond(date_1, null));
assertFalse(TimeUtils.isSameSecond(null, date_2));
date_2 = getDate(2003, 8, 12, 10, 22, 7);
assertFalse(TimeUtils.isSameSecond(date_1, date_2));
assertFalse(TimeUtils.isSameSecond(date_2, date_1));
date_2 = getDate(2003, 8, 12, 10, 22, 9);
assertFalse(TimeUtils.isSameSecond(date_1, date_2));
assertFalse(TimeUtils.isSameSecond(date_2, date_1));
date_2 = getDate(2003, 8, 12, 10, 25, 9);
assertFalse(TimeUtils.isSameSecond(date_1, date_2));
assertFalse(TimeUtils.isSameSecond(date_2, date_1));
}
public void testParseISO8601DateInvalidArguments() throws ParseException {
try {
TimeUtils.parseISO8601Date(null);
fail("IllegalArgumentException expected");
} catch (IllegalArgumentException expected) {
}
try {
TimeUtils.parseISO8601Date("");
fail("IllegalArgumentException expected");
} catch (IllegalArgumentException expected) {
}
}
public void testParseExpectedISODateString() throws ParseException {
Date resDate = TimeUtils.parseISO8601Date("2003-04-18");
assertNotNull(resDate);
Calendar calendar = GregorianCalendar.getInstance();
calendar.setTime(resDate);
assertEquals(18, calendar.get(Calendar.DAY_OF_MONTH));
assertEquals(4 - 1, calendar.get(Calendar.MONTH));
assertEquals(2003, calendar.get(Calendar.YEAR));
}
public void testLosslessISO8601Conversion() throws ParseException {
assertEquals("2001-01-01", TimeUtils.formatISO8601Date(TimeUtils.parseISO8601Date("2001-1-1")));
assertEquals("2001-08-21 14:28", TimeUtils.formatISO8601Date(TimeUtils.parseISO8601Date("2001-8-21 14:28")));
assertEquals("2001-05-01 04:36:24.432",
TimeUtils.formatISO8601Date(TimeUtils.parseISO8601Date("2001-5-1 4:36:24.432")));
assertEquals("2001-11-23 17:00:03",
TimeUtils.formatISO8601Date(TimeUtils.parseISO8601Date("2001-11-23 17:0:3")));
}
public void testUnparseableIsoDates() {
assertUnparsableIsoDateString("bert + bibo");
assertUnparsableIsoDateString("1.1.2003");
assertUnparsableIsoDateString("01/01/01");
assertUnparsableIsoDateString("1.22.05");
assertUnparsableIsoDateString("1987.08");
assertUnparsableIsoDateString("8-SEP-98");
}
public void testValidISO8601DateStrings() throws ParseException {
assertIsoDateEquals(2001, 1, 1, "2001-1-1");
assertIsoDateEquals(2004, 3, 1, "2004-3-1");
assertIsoDateEquals(2004, 3, 1, "4-3-1");
assertIsoDateEquals(2003, 3, 11, 13, 16, 0, 0, "2003-03-11 13:16");
assertIsoDateEquals(2003, 3, 11, 13, 16, 54, 0, "2003-03-11 13:16:54");
assertIsoDateEquals(2003, 3, 11, 13, 16, 54, 432, "2003-03-11 13:16:54.432");
}
public void testIsValidISO8601DateString() {
assertTrue(TimeUtils.isValidISO8601String("2002-2-2"));
assertTrue(TimeUtils.isValidISO8601String("5-4-2"));
assertTrue(TimeUtils.isValidISO8601String("2003-03-11 13:16"));
assertFalse(TimeUtils.isValidISO8601String(null));
assertFalse(TimeUtils.isValidISO8601String(""));
assertFalse(TimeUtils.isValidISO8601String("Hallo"));
assertFalse(TimeUtils.isValidISO8601String("Du.Da-Hinten"));
}
public void testParseFtpLogDateInvalidArguments() throws ParseException {
try {
TimeUtils.parseFtpLogDate(null);
fail("IllegalArgumentException expected");
} catch (IllegalArgumentException expected) {
}
try {
TimeUtils.parseFtpLogDate("");
fail("IllegalArgumentException expected");
} catch (IllegalArgumentException expected) {
}
}
public void testParseExpectedFtpLogDateString() throws ParseException {
Date resDate = TimeUtils.parseFtpLogDate("01/Feb/2003");
assertNotNull(resDate);
Calendar calendar = GregorianCalendar.getInstance();
calendar.setTime(resDate);
assertEquals(1, calendar.get(Calendar.DAY_OF_MONTH));
assertEquals(2 - 1, calendar.get(Calendar.MONTH));
assertEquals(2003, calendar.get(Calendar.YEAR));
}
public void testUnparseableFtpDates() {
assertUnparsableFtpDateString("nasenmann");
assertUnparsableFtpDateString("7-NOV-32");
assertUnparsableFtpDateString("1945.08.31");
assertUnparsableFtpDateString("5.22.02");
assertUnparsableFtpDateString("1.1.2003");
}
public void testValidFtpDateStrings() throws ParseException {
assertFtpDateEquals(2002, 1, 1, "01/Jan/2002");
assertFtpDateEquals(2003, 2, 2, "02/Feb/2003");
assertFtpDateEquals(2004, 3, 4, "04/Mar/2004");
assertFtpDateEquals(2005, 4, 6, 21, 7, 23, 0, "06/Apr/2005:21:07:23");
assertFtpDateEquals(2006, 5, 8, 22, 8, 24, 0, "08/May/2006:22:08:24");
}
public void testParseHdfEosDateString() throws ParseException {
assertHdfEosDateEquals(2003, 2, 21, "2003-02-21");
assertHdfEosDateEquals(2005, 11, 2, "2005-11-02");
assertHdfEosDateEquals(2002, 2, 21, 10, 22, 34, 78, "2002-02-21T10:22:34.078");
assertHdfEosDateEquals(2003, 3, 22, 11, 23, 45, 67, "2003-03-22T11:23:45.067");
assertUnparsableHdfEosDateString("hu-hu-erTereps");
assertUnparsableHdfEosDateString("2003/03/22Q11:23:45.067");
}
public void testParseProductDate() throws ParseException {
String dateString_1 = "05-APR-2005 10:28:59";
String dateString_2 = "11-NOV-2004 11:16:32";
Date date = TimeUtils.parseProductDate(dateString_1);
assertDateEquals(2005, 4, 5, 10, 28, 59, 0, date);
date = TimeUtils.parseProductDate(dateString_2);
assertDateEquals(2004, 11, 11, 11, 16, 32, 0, date);
}
public void testParseISO8601Date_NotUTC() throws ParseException {
Date date = TimeUtils.parseISO8601Date("2005-07-21 08:09:10.234", false);
assertDateEquals(2005, 7, 21, 6, 9, 10, 234, date);
date = TimeUtils.parseISO8601Date("2004-11-16 22:23:24.338", false);
assertDateEquals(2004, 11, 16, 21, 23, 24, 338, date);
}
public void testParseISO8601StartDate() throws ParseException {
Date date = TimeUtils.parseISO8601StartDate("2003-05-19 11:05:23.334");
assertDateEquals(2003, 5, 19, 0, 0, 0, 0, date, false);
date = TimeUtils.parseISO8601StartDate("2004-11-02 22:18:23.334");
assertDateEquals(2004, 11, 2, 0, 0, 0, 0, date, false);
}
public void testParseISO8601EndDate() throws ParseException {
Date date = TimeUtils.parseISO8601EndDate("2003-05-19 11:05:23.334");
assertDateEquals(2003, 5, 19, 23, 59, 59, 0, date, false);
date = TimeUtils.parseISO8601EndDate("2004-11-02 22:18:23.334");
assertDateEquals(2004, 11, 2, 23, 59, 59, 0, date, false);
}
public void testInvalidDateEquals() {
final Date invalid = new Date(0);
assertTrue(invalid.equals(TimeUtils.INVALID_DATE));
assertTrue(TimeUtils.INVALID_DATE.equals(invalid));
final Date valid = new Date(1);
assertFalse(valid.equals(TimeUtils.INVALID_DATE));
assertFalse(TimeUtils.INVALID_DATE.equals(valid));
}
///////////////////////////////////////////////////////////////////////////
/////// END OF PUBLIC
///////////////////////////////////////////////////////////////////////////
private static Date getDate(int year, int month, int day, int hour, int minute, int second) {
Calendar cal = GregorianCalendar.getInstance();
cal.set(year, month, day, hour, minute, second);
return cal.getTime();
}
@SuppressWarnings({"EmptyCatchBlock"})
private void assertUnparsableIsoDateString(final String dateString) {
try {
assertNull(TimeUtils.parseISO8601Date(dateString));
fail();
} catch (ParseException expected) {
}
}
private void assertIsoDateEquals(int year, int month, int day, String dateString) throws ParseException {
Date resDate = TimeUtils.parseISO8601Date(dateString);
assertDateEquals(year, month, day, 0, 0, 0, 0, resDate);
}
private void assertIsoDateEquals(int year, int month, int day, int hour, int min, int sec, int millis, String dateString) throws ParseException {
Date resDate = TimeUtils.parseISO8601Date(dateString);
assertDateEquals(year, month, day, hour, min, sec, millis, resDate);
}
private void assertFtpDateEquals(int year, int month, int day, String dateString) throws ParseException {
Date resDate = TimeUtils.parseFtpLogDate(dateString);
assertDateEquals(year, month, day, 0, 0, 0, 0, resDate);
}
private void assertFtpDateEquals(int year, int month, int day, int hour, int min, int sec, int millis, String dateString) throws ParseException {
Date resDate = TimeUtils.parseFtpLogDate(dateString);
assertDateEquals(year, month, day, hour, min, sec, millis, resDate);
}
private void assertHdfEosDateEquals(int year, int month, int day, String dateString) throws ParseException {
Date resDate = TimeUtils.parseHdfEosDateString(dateString);
assertDateEquals(year, month, day, 0, 0, 0, 0, resDate, false);
}
private void assertHdfEosDateEquals(int year, int month, int day, int hour, int min, int sec, int millis, String dateString) throws ParseException {
Date resDate = TimeUtils.parseHdfEosDateString(dateString);
assertDateEquals(year, month, day, hour, min, sec, millis, resDate, false);
}
@SuppressWarnings({"EmptyCatchBlock"})
private void assertUnparsableHdfEosDateString(final String dateString) {
try {
assertNull(TimeUtils.parseHdfEosDateString(dateString));
fail();
} catch (ParseException expected) {
}
}
private void assertDateEquals(int year, int month, int day, int hour, int min, int sec, int millis,
Date testDate) {
assertDateEquals(year, month, day, hour, min, sec, millis, testDate, true);
}
private void assertDateEquals(int year, int month, int day, int hour, int min, int sec, int millis,
Date testDate, boolean isUtc) {
assertNotNull(testDate);
Calendar calendar;
if (isUtc) {
calendar = TimeUtils.createUTCCalendar();
} else {
calendar = GregorianCalendar.getInstance();
}
calendar.setTime(testDate);
assertEquals(year, calendar.get(Calendar.YEAR));
assertEquals(month - 1, calendar.get(Calendar.MONTH));
assertEquals(day, calendar.get(Calendar.DATE));
assertEquals(hour, calendar.get(Calendar.HOUR_OF_DAY));
assertEquals(min, calendar.get(Calendar.MINUTE));
assertEquals(sec, calendar.get(Calendar.SECOND));
assertEquals(millis, calendar.get(Calendar.MILLISECOND));
}
@SuppressWarnings({"EmptyCatchBlock"})
private void assertUnparsableFtpDateString(final String dateString) {
try {
assertNull(TimeUtils.parseFtpLogDate(dateString));
fail();
} catch (ParseException expected) {
}
}
}