package org.openmrs.module.reporting.common; import java.util.Date; import org.junit.Assert; import org.junit.Test; import org.openmrs.test.Verifies; /** * Tests for the DateRange class */ public class DateRangeTest { /** * @see {@link DateRange#format(DateRange,String,String)} */ @Test @Verifies(value = "should return the passed date range formatted in interval notation", method = "format(DateRange,String,String)") public void format_shouldReturnThePassedDateRangeFormattedInIntervalNotation() throws Exception { DateRange dr1 = new DateRange(DateUtil.getDateTime(2007, 10, 1), true, DateUtil.getDateTime(2008, 11, 20), true); Assert.assertEquals("[2007-10-01,2008-11-20]", DateRange.format(dr1, "yyyy-MM-dd", "*")); DateRange dr2 = new DateRange(DateUtil.getDateTime(2007, 10, 1), false, null, false); Assert.assertEquals("(10/01/2007,*)", DateRange.format(dr2, "MM/dd/yyyy", "*")); } /** * @see {@link DateRange#isAfter(DateRange,Date)} */ @Test @Verifies(value = "should return true if the passed date is after the date range", method = "isAfter(DateRange,Date)") public void isAfter_shouldReturnTrueIfThePassedDateIsAfterTheDateRange() throws Exception { DateRange dr = DateRange.parse("[2007-01-01,2008-01-01)", "yyyy-MM-dd", "*"); Assert.assertTrue(DateRange.isAfter(dr, DateUtil.getDateTime(2008, 1, 1))); Assert.assertTrue(DateRange.isAfter(dr, DateUtil.getDateTime(2008, 1, 2))); } /** * @see {@link DateRange#isAfter(DateRange,Date)} */ @Test @Verifies(value = "should return false if the passed date is not after the passed date range", method = "isAfter(DateRange,Date)") public void isAfter_shouldReturnFalseIfThePassedDateIsNotAfterThePassedDateRange() throws Exception { DateRange dr = DateRange.parse("[2007-01-01,2008-01-01)", "yyyy-MM-dd", "*"); Assert.assertFalse(DateRange.isAfter(dr, DateUtil.getDateTime(2007, 12, 31))); Assert.assertFalse(DateRange.isAfter(dr, DateUtil.getDateTime(2007, 1, 1))); Assert.assertFalse(DateRange.isAfter(dr, DateUtil.getDateTime(2006, 1, 1))); } /** * @see {@link DateRange#isBefore(DateRange,Date)} */ @Test @Verifies(value = "should return true if the passed date is before the date range", method = "isBefore(DateRange,Date)") public void isBefore_shouldReturnTrueIfThePassedDateIsBeforeTheDateRange() throws Exception { DateRange dr = DateRange.parse("(2007-01-01,2008-01-01)", "yyyy-MM-dd", "*"); Assert.assertTrue(DateRange.isBefore(dr, DateUtil.getDateTime(2007, 1, 1))); Assert.assertTrue(DateRange.isBefore(dr, DateUtil.getDateTime(2006, 12, 31))); } /** * @see {@link DateRange#isBefore(DateRange,Date)} */ @Test @Verifies(value = "should return false if the passed date is not before the passed date range", method = "isBefore(DateRange,Date)") public void isBefore_shouldReturnFalseIfThePassedDateIsNotBeforeThePassedDateRange() throws Exception { DateRange dr = DateRange.parse("[2007-01-01,2008-01-01)", "yyyy-MM-dd", "*"); Assert.assertFalse(DateRange.isBefore(dr, DateUtil.getDateTime(2007, 1, 1))); Assert.assertFalse(DateRange.isBefore(dr, DateUtil.getDateTime(2007, 6, 1))); Assert.assertFalse(DateRange.isBefore(dr, DateUtil.getDateTime(2009, 1, 1))); } /** * @see {@link DateRange#isWithin(DateRange,Date)} */ @Test @Verifies(value = "should return false if the passed date is before the date range", method = "isWithin(DateRange,Date)") public void isWithin_shouldReturnFalseIfThePassedDateIsBeforeTheDateRange() throws Exception { DateRange dr = DateRange.parse("(2007-01-01,2008-01-01)", "yyyy-MM-dd", "*"); Assert.assertFalse(DateRange.isWithin(dr, DateUtil.getDateTime(2007, 1, 1))); Assert.assertFalse(DateRange.isWithin(dr, DateUtil.getDateTime(2006, 1, 1))); } /** * @see {@link DateRange#isWithin(DateRange,Date)} */ @Test @Verifies(value = "should return true if the passed date is within the passed date range", method = "isWithin(DateRange,Date)") public void isWithin_shouldReturnTrueIfThePassedDateIsWithinThePassedDateRange() throws Exception { DateRange dr = DateRange.parse("[2007-01-01,2008-01-01]", "yyyy-MM-dd", "*"); Assert.assertTrue(DateRange.isWithin(dr, DateUtil.getDateTime(2007, 1, 1))); Assert.assertTrue(DateRange.isWithin(dr, DateUtil.getDateTime(2007, 6, 1))); Assert.assertTrue(DateRange.isWithin(dr, DateUtil.getDateTime(2008, 1, 1))); } /** * @see {@link DateRange#isWithin(DateRange,Date)} */ @Test @Verifies(value = "should return false if the passed date is after the passed date range", method = "isWithin(DateRange,Date)") public void isWithin_shouldReturnFalseIfThePassedDateIsAfterThePassedDateRange() throws Exception { DateRange dr = DateRange.parse("(2007-01-01,2008-01-01)", "yyyy-MM-dd", "*"); Assert.assertFalse(DateRange.isWithin(dr, DateUtil.getDateTime(2008, 1, 1))); Assert.assertFalse(DateRange.isWithin(dr, DateUtil.getDateTime(2009, 1, 1))); } /** * @see {@link DateRange#parse(String,String,String)} */ @Test @Verifies(value = "should return a new DateRange parsed from interval notation", method = "parse(String,String,String)") public void parse_shouldReturnANewDateRangeParsedFromIntervalNotation() throws Exception { DateRange dr1 = DateRange.parse("(2007-01-01,2008-01-01)", "yyyy-MM-dd", "*"); Assert.assertFalse(dr1.isInclusiveOfStart()); Assert.assertFalse(dr1.isInclusiveOfEnd()); Assert.assertEquals(DateUtil.getDateTime(2007, 1, 1), dr1.getStartDate()); Assert.assertEquals(DateUtil.getDateTime(2008, 1, 1), dr1.getEndDate()); DateRange dr2 = DateRange.parse("(01/01/2007,*]", "MM/dd/yyyy", "*"); Assert.assertFalse(dr2.isInclusiveOfStart()); Assert.assertTrue(dr2.isInclusiveOfEnd()); Assert.assertEquals(DateUtil.getDateTime(2007, 1, 1), dr2.getStartDate()); Assert.assertNull(dr2.getEndDate()); DateRange dr3 = DateRange.parse("[*,12/2007]", "MM/yyyy", "*"); Assert.assertTrue(dr3.isInclusiveOfStart()); Assert.assertTrue(dr3.isInclusiveOfEnd()); Assert.assertNull(dr3.getStartDate()); Assert.assertEquals(DateUtil.getDateTime(2007, 12, 1), dr3.getEndDate()); } }