package org.openstack.atlas.util.common;
import org.junit.Assert;
import org.junit.Test;
import org.junit.experimental.runners.Enclosed;
import org.junit.runner.RunWith;
import java.text.ParseException;
import java.util.Calendar;
@RunWith(Enclosed.class)
public class CalendarUtilsTest {
public static class WhenStrippingOutMinutesAndSeconds {
@Test
public void shouldZeroOutMinutesAndSeconds() {
Calendar cal = Calendar.getInstance();
cal.set(Calendar.MINUTE, 59);
cal.set(Calendar.SECOND, 59);
cal.set(Calendar.MILLISECOND, 999);
cal = CalendarUtils.stripOutMinsAndSecs(cal);
Assert.assertEquals(0, cal.get(Calendar.MINUTE));
Assert.assertEquals(0, cal.get(Calendar.SECOND));
Assert.assertEquals(0, cal.get(Calendar.MILLISECOND));
}
}
public static class WhenConvertingFromStringToCalendar {
@Test(expected = NullPointerException.class)
public void shouldThrowNullPointerExceptionWhenNull() throws ParseException {
CalendarUtils.stringToCalendar(null);
}
@Test(expected = ParseException.class)
public void shouldThrowParseExceptionWhenEmptyString() throws ParseException {
CalendarUtils.stringToCalendar("");
}
@Test
public void shouldHaveCorrectDateTime() throws ParseException {
String timestampAsString = "2013-01-29 00:59:59";
Calendar cal = CalendarUtils.stringToCalendar(timestampAsString);
Assert.assertEquals(2013, cal.get(Calendar.YEAR));
Assert.assertEquals(Calendar.JANUARY, cal.get(Calendar.MONTH));
Assert.assertEquals(29, cal.get(Calendar.DAY_OF_MONTH));
Assert.assertEquals(0, cal.get(Calendar.HOUR_OF_DAY));
Assert.assertEquals(59, cal.get(Calendar.MINUTE));
Assert.assertEquals(59, cal.get(Calendar.SECOND));
Assert.assertEquals(0, cal.get(Calendar.MILLISECOND));
}
}
public static class WhenMakingACopy {
@Test
public void shouldCopyEverything() {
Calendar anHourFromNow = Calendar.getInstance();
anHourFromNow.add(Calendar.HOUR, 1);
Calendar copy = CalendarUtils.copy(anHourFromNow);
Assert.assertEquals(copy, anHourFromNow);
}
}
public static class WhenConvertingFromCalendarToString {
@Test
public void shouldHaveCorrectTime() {
Calendar cal = Calendar.getInstance();
cal.set(Calendar.YEAR, 2013);
cal.set(Calendar.MONTH, Calendar.JANUARY);
cal.set(Calendar.DAY_OF_MONTH, 29);
cal.set(Calendar.HOUR_OF_DAY, 23);
cal.set(Calendar.MINUTE, 59);
cal.set(Calendar.SECOND, 59);
String calAsString = CalendarUtils.calendarToString(cal);
Assert.assertEquals("2013-01-29 23:59:59", calAsString);
}
}
public static class WhenDeterminingIfBetweenTwoTimesInclusive {
@Test
public void shouldReturnTrueWhenEqualToStartTime() throws ParseException {
Calendar cal = CalendarUtils.stringToCalendar("2013-01-29 00:00:00");
Calendar startTime = CalendarUtils.stringToCalendar("2013-01-29 00:00:00");
Calendar endTime = CalendarUtils.stringToCalendar("2013-01-29 01:00:00");
boolean isBetween = CalendarUtils.isBetween(cal, startTime, endTime, true);
Assert.assertTrue(isBetween);
}
@Test
public void shouldReturnFalseWhenBeforeStartTime() throws ParseException {
Calendar cal = CalendarUtils.stringToCalendar("2013-01-28 23:59:59");
Calendar startTime = CalendarUtils.stringToCalendar("2013-01-29 00:00:00");
Calendar endTime = CalendarUtils.stringToCalendar("2013-01-29 01:00:00");
boolean isBetween = CalendarUtils.isBetween(cal, startTime, endTime, true);
Assert.assertFalse(isBetween);
}
@Test
public void shouldReturnTrueWhenEqualToEndTime() throws ParseException {
Calendar cal = CalendarUtils.stringToCalendar("2013-01-29 01:00:00");
Calendar startTime = CalendarUtils.stringToCalendar("2013-01-29 00:00:00");
Calendar endTime = CalendarUtils.stringToCalendar("2013-01-29 01:00:00");
boolean isBetween = CalendarUtils.isBetween(cal, startTime, endTime, true);
Assert.assertTrue(isBetween);
}
@Test
public void shouldReturnFalseWhenAfterEndTime() throws ParseException {
Calendar cal = CalendarUtils.stringToCalendar("2013-01-29 01:00:01");
Calendar startTime = CalendarUtils.stringToCalendar("2013-01-29 00:00:00");
Calendar endTime = CalendarUtils.stringToCalendar("2013-01-29 01:00:00");
boolean isBetween = CalendarUtils.isBetween(cal, startTime, endTime, true);
Assert.assertFalse(isBetween);
}
}
public static class WhenDeterminingIfBetweenTwoTimesExclusive {
@Test
public void shouldReturnTrueWhenEqualToStartTime() throws ParseException {
Calendar cal = CalendarUtils.stringToCalendar("2013-01-29 00:00:00");
Calendar startTime = CalendarUtils.stringToCalendar("2013-01-29 00:00:00");
Calendar endTime = CalendarUtils.stringToCalendar("2013-01-29 01:00:00");
boolean isBetween = CalendarUtils.isBetween(cal, startTime, endTime, false);
Assert.assertTrue(isBetween);
}
@Test
public void shouldReturnFalseWhenBeforeStartTime() throws ParseException {
Calendar cal = CalendarUtils.stringToCalendar("2013-01-28 23:59:59");
Calendar startTime = CalendarUtils.stringToCalendar("2013-01-29 00:00:00");
Calendar endTime = CalendarUtils.stringToCalendar("2013-01-29 01:00:00");
boolean isBetween = CalendarUtils.isBetween(cal, startTime, endTime, false);
Assert.assertFalse(isBetween);
}
@Test
public void shouldReturnTrueWhenRightBeforeEndTime() throws ParseException {
Calendar cal = CalendarUtils.stringToCalendar("2013-01-29 00:59:59");
Calendar startTime = CalendarUtils.stringToCalendar("2013-01-29 00:00:00");
Calendar endTime = CalendarUtils.stringToCalendar("2013-01-29 01:00:00");
boolean isBetween = CalendarUtils.isBetween(cal, startTime, endTime, false);
Assert.assertTrue(isBetween);
}
@Test
public void shouldReturnFalseWhenEqualToEndTime() throws ParseException {
Calendar cal = CalendarUtils.stringToCalendar("2013-01-29 01:00:00");
Calendar startTime = CalendarUtils.stringToCalendar("2013-01-29 00:00:00");
Calendar endTime = CalendarUtils.stringToCalendar("2013-01-29 01:00:00");
boolean isBetween = CalendarUtils.isBetween(cal, startTime, endTime, false);
Assert.assertFalse(isBetween);
}
}
public static class WhenCalculatingDuration {
@Test
public void shouldCalculateCorrectlyWhenNoDuration() throws ParseException {
Calendar startTime = CalendarUtils.stringToCalendar("2013-01-29 00:00:00");
Calendar endTime = CalendarUtils.stringToCalendar("2013-01-29 00:00:00");
Duration duration = CalendarUtils.calcDuration(startTime, endTime);
Assert.assertEquals(0, duration.getHours());
Assert.assertEquals(0, duration.getMins());
Assert.assertEquals(0, duration.getSecs());
}
@Test
public void shouldCalculateCorrectlyWhenOneSecond() throws ParseException {
Calendar startTime = CalendarUtils.stringToCalendar("2013-01-29 00:00:00");
Calendar endTime = CalendarUtils.stringToCalendar("2013-01-29 00:00:01");
Duration duration = CalendarUtils.calcDuration(startTime, endTime);
Assert.assertEquals(0, duration.getHours());
Assert.assertEquals(0, duration.getMins());
Assert.assertEquals(1, duration.getSecs());
}
@Test
public void shouldCalculateCorrectlyWhenLessThanAMinute() throws ParseException {
Calendar startTime = CalendarUtils.stringToCalendar("2013-01-29 00:00:00");
Calendar endTime = CalendarUtils.stringToCalendar("2013-01-29 00:00:59");
Duration duration = CalendarUtils.calcDuration(startTime, endTime);
Assert.assertEquals(0, duration.getHours());
Assert.assertEquals(0, duration.getMins());
Assert.assertEquals(59, duration.getSecs());
}
@Test
public void shouldCalculateCorrectlyWhenMoreThanAMinute() throws ParseException {
Calendar startTime = CalendarUtils.stringToCalendar("2013-01-29 00:00:00");
Calendar endTime = CalendarUtils.stringToCalendar("2013-01-29 00:01:01");
Duration duration = CalendarUtils.calcDuration(startTime, endTime);
Assert.assertEquals(0, duration.getHours());
Assert.assertEquals(1, duration.getMins());
Assert.assertEquals(1, duration.getSecs());
}
@Test
public void shouldCalculateCorrectlyWhenLessThanAnHour() throws ParseException {
Calendar startTime = CalendarUtils.stringToCalendar("2013-01-29 00:00:00");
Calendar endTime = CalendarUtils.stringToCalendar("2013-01-29 00:59:59");
Duration duration = CalendarUtils.calcDuration(startTime, endTime);
Assert.assertEquals(0, duration.getHours());
Assert.assertEquals(59, duration.getMins());
Assert.assertEquals(59, duration.getSecs());
}
@Test
public void shouldCalculateCorrectlyWhenEqualToHour() throws ParseException {
Calendar startTime = CalendarUtils.stringToCalendar("2013-01-29 00:00:00");
Calendar endTime = CalendarUtils.stringToCalendar("2013-01-29 01:00:00");
Duration duration = CalendarUtils.calcDuration(startTime, endTime);
Assert.assertEquals(1, duration.getHours());
Assert.assertEquals(0, duration.getMins());
Assert.assertEquals(0, duration.getSecs());
}
@Test
public void shouldCalculateCorrectlyWhenMoreThanAnHour() throws ParseException {
Calendar startTime = CalendarUtils.stringToCalendar("2013-01-29 00:00:00");
Calendar endTime = CalendarUtils.stringToCalendar("2013-01-29 01:00:01");
Duration duration = CalendarUtils.calcDuration(startTime, endTime);
Assert.assertEquals(1, duration.getHours());
Assert.assertEquals(0, duration.getMins());
Assert.assertEquals(1, duration.getSecs());
}
}
}