package in.partake.base;
import static org.hamcrest.Matchers.is;
import static org.junit.Assert.assertThat;
import java.util.Calendar;
import java.util.GregorianCalendar;
import java.util.Locale;
import java.util.TimeZone;
import org.junit.Assert;
import org.junit.Test;
public class DateTimeTest {
private static final Calendar[] SUPPORTED_CALENDAR = {
new GregorianCalendar(TimeZone.getTimeZone("JST"), Locale.JAPANESE)
};
@Test
public void testEquals() {
assertThat(new DateTime(0L).equals(null), is(false));
assertThat(new DateTime(0L).equals(new String("0")), is(false));
assertThat(new DateTime(0L).equals(new DateTime(0L)), is(true));
assertThat(new DateTime(0L).equals(new DateTime(1L)), is(false));
}
@Test
public void testIsBefore() {
assertThat(new DateTime(500L).isBefore(new DateTime(499L)), is(false));
assertThat(new DateTime(500L).isBefore(new DateTime(500L)), is(false));
assertThat(new DateTime(500L).isBefore(new DateTime(501L)), is(true));
assertThat(new DateTime(Long.MIN_VALUE).isBefore(new DateTime(0)), is(true));
assertThat(new DateTime(0).isBefore(new DateTime(Long.MAX_VALUE)), is(true));
assertThat(new DateTime(Long.MIN_VALUE).isBefore(new DateTime(Long.MAX_VALUE)), is(true));
}
@Test
public void testIsAfter() {
assertThat(new DateTime(500L).isAfter(new DateTime(499L)), is(true));
assertThat(new DateTime(500L).isAfter(new DateTime(500L)), is(false));
assertThat(new DateTime(500L).isAfter(new DateTime(501L)), is(false));
assertThat(new DateTime(Long.MIN_VALUE).isAfter(new DateTime(0)), is(false));
assertThat(new DateTime(0).isAfter(new DateTime(Long.MAX_VALUE)), is(false));
assertThat(new DateTime(Long.MIN_VALUE).isAfter(new DateTime(Long.MAX_VALUE)), is(false));
}
@Test
public void testOneDayBefore() {
DateTime date = TimeUtil.getCurrentDateTime();
DateTime before = date.nDayBefore(1);
assertThat(before.getTime(), is(date.getTime() - 3600 * 24 * 1000));
}
@Test
public void testHalfDayBefore() {
DateTime date = TimeUtil.getCurrentDateTime();
DateTime before = date.nHourBefore(12);
assertThat(before.getTime(), is(date.getTime() - 3600 * 12 * 1000));
}
@Test
public void testOneDayAfter() {
DateTime date = TimeUtil.getCurrentDateTime();
DateTime after = date.nDayAfter(1);
assertThat(after.getTime(), is(date.getTime() + 3600 * 24 * 1000));
}
@Test
public void oneDayBeforeTest() {
for (Calendar calendar : SUPPORTED_CALENDAR) {
calendar.clear();
calendar.set(Calendar.YEAR, 2010);
calendar.set(Calendar.MONTH, 0);
for (int day = 2; day <= 31; ++day) {
calendar.set(Calendar.DAY_OF_MONTH, day);
DateTime now = new DateTime(calendar.getTime());
calendar.set(Calendar.DAY_OF_MONTH, day - 1);
DateTime yesterday = new DateTime(calendar.getTime());
Assert.assertEquals(yesterday, now.nDayBefore(1));
}
}
}
@Test
public void oneDayBeforeTestAt1stDay() {
for (Calendar calendar : SUPPORTED_CALENDAR) {
calendar.clear();
calendar.set(Calendar.YEAR, 2010);
calendar.set(Calendar.MONTH, 0);
calendar.set(Calendar.DAY_OF_MONTH, 1);
DateTime now = new DateTime(calendar.getTime());
calendar.set(Calendar.YEAR, 2009);
calendar.set(Calendar.MONTH, 11);
calendar.set(Calendar.DAY_OF_MONTH, 31);
DateTime yesterday = new DateTime(calendar.getTime());
Assert.assertEquals(yesterday, now.nDayBefore(1));
}
}
@Test
public void oneDayBeforeTestAtNotLeapYear() {
for (Calendar calendar : SUPPORTED_CALENDAR) {
calendar.clear();
calendar.set(Calendar.YEAR, 2011); // is NOT leap year
calendar.set(Calendar.MONTH, 2);
calendar.set(Calendar.DAY_OF_MONTH, 1);
DateTime now = new DateTime(calendar.getTime());
calendar.set(Calendar.MONTH, 1);
calendar.set(Calendar.DAY_OF_MONTH, 28);
DateTime yesterday = new DateTime(calendar.getTime());
Assert.assertEquals(yesterday, now.nDayBefore(1));
}
}
@Test
public void oneDayBeforeTestAtLeapYear() {
for (Calendar calendar : SUPPORTED_CALENDAR) {
calendar.clear();
calendar.set(Calendar.YEAR, 2012); // is leap year
calendar.set(Calendar.MONTH, 2);
calendar.set(Calendar.DAY_OF_MONTH, 1);
DateTime now = new DateTime(calendar.getTime());
calendar.set(Calendar.MONTH, 1);
calendar.set(Calendar.DAY_OF_MONTH, 29);
DateTime yesterday = new DateTime(calendar.getTime());
Assert.assertEquals(yesterday, now.nDayBefore(1));
}
}
@Test
public void halfDayBeforeTest() {
for (Calendar calendar : SUPPORTED_CALENDAR) {
calendar.clear();
calendar.set(Calendar.YEAR, 2010);
calendar.set(Calendar.MONTH, 0);
for (int day = 2; day <= 31; ++day) {
calendar.set(Calendar.DAY_OF_MONTH, day);
calendar.set(Calendar.HOUR_OF_DAY, 0);
DateTime now = new DateTime(calendar.getTimeInMillis());
calendar.set(Calendar.DAY_OF_MONTH, day - 1);
calendar.set(Calendar.HOUR_OF_DAY, 12);
DateTime yesterday = new DateTime(calendar.getTimeInMillis());
Assert.assertEquals(yesterday, now.nHourBefore(12));
}
}
}
@Test
public void halfDayBeforeTestAt1stDay() {
for (Calendar calendar : SUPPORTED_CALENDAR) {
calendar.clear();
calendar.set(Calendar.YEAR, 2010);
calendar.set(Calendar.MONTH, 0);
calendar.set(Calendar.DAY_OF_MONTH, 1);
calendar.set(Calendar.HOUR_OF_DAY, 0);
DateTime now = new DateTime(calendar.getTime());
calendar.set(Calendar.YEAR, 2009);
calendar.set(Calendar.MONTH, 11);
calendar.set(Calendar.DAY_OF_MONTH, 31);
calendar.set(Calendar.HOUR_OF_DAY, 12);
DateTime yesterday = new DateTime(calendar.getTime());
Assert.assertEquals(yesterday, now.nHourBefore(12));
}
}
@Test
public void halfDayBeforeTestAtNotLeapYear() {
for (Calendar calendar : SUPPORTED_CALENDAR) {
calendar.clear();
calendar.set(Calendar.YEAR, 2011); // is NOT leap year
calendar.set(Calendar.MONTH, 2);
calendar.set(Calendar.DAY_OF_MONTH, 1);
calendar.set(Calendar.HOUR_OF_DAY, 0);
DateTime now = new DateTime(calendar.getTime());
calendar.set(Calendar.MONTH, 1);
calendar.set(Calendar.DAY_OF_MONTH, 28);
calendar.set(Calendar.HOUR_OF_DAY, 12);
DateTime yesterday = new DateTime(calendar.getTime());
Assert.assertEquals(yesterday, now.nHourBefore(12));
}
}
@Test
public void halfDayBeforeTestAtLeapYear() {
for (Calendar calendar : SUPPORTED_CALENDAR) {
calendar.clear();
calendar.set(Calendar.YEAR, 2012); // is leap year
calendar.set(Calendar.MONTH, 2);
calendar.set(Calendar.DAY_OF_MONTH, 1);
calendar.set(Calendar.HOUR_OF_DAY, 0);
DateTime now = new DateTime(calendar.getTime());
calendar.set(Calendar.MONTH, 1);
calendar.set(Calendar.DAY_OF_MONTH, 29);
calendar.set(Calendar.HOUR_OF_DAY, 12);
DateTime yesterday = new DateTime(calendar.getTime());
Assert.assertEquals(yesterday, now.nHourBefore(12));
}
}
@Test
public void testnSecBefore() {
long msec = 100000000L;
DateTime dt = new DateTime(msec);
assertThat(dt.nSecBefore(1).getTime(), is(msec - 1000));
}
@Test
public void testnSecAfter() {
long msec = 100000000L;
DateTime dt = new DateTime(msec);
assertThat(dt.nSecAfter(1).getTime(), is(msec + 1000));
}
public void testToHumanReadableFormat() {
for (Calendar calendar : SUPPORTED_CALENDAR) {
calendar.clear();
calendar.set(Calendar.YEAR, 2012);
calendar.set(Calendar.MONTH, 2);
calendar.set(Calendar.DAY_OF_MONTH, 1);
calendar.set(Calendar.HOUR_OF_DAY, 8);
calendar.set(Calendar.MINUTE, 10);
calendar.set(Calendar.SECOND, 0);
calendar.set(Calendar.MILLISECOND, 0);
DateTime dt = new DateTime(calendar.getTime());
assertThat(dt.toHumanReadableFormat(), is("2012-02-01 08:10"));
}
}
}