Date d3 = new Date(apr12007.getMiddleMillisecond() + 500L);
Date d4 = new Date(apr12007.getLastMillisecond());
Date end = new Date(apr22007.getLastMillisecond());
DateTickUnit unit = new DateTickUnit(DateTickUnit.DAY, 1);
axis.setTickUnit(unit);
// START: check d0 and d1
axis.setTickMarkPosition(DateTickMarkPosition.START);
axis.setRange(d0, end);
Date psd = axis.previousStandardDate(d0, unit);
Date nsd = unit.addToDate(psd);
assertTrue(psd.getTime() < d0.getTime());
assertTrue(nsd.getTime() >= d0.getTime());
axis.setRange(d1, end);
psd = axis.previousStandardDate(d1, unit);
nsd = unit.addToDate(psd);
assertTrue(psd.getTime() < d1.getTime());
assertTrue(nsd.getTime() >= d1.getTime());
// MIDDLE: check d1, d2 and d3
axis.setTickMarkPosition(DateTickMarkPosition.MIDDLE);
axis.setRange(d1, end);
psd = axis.previousStandardDate(d1, unit);
nsd = unit.addToDate(psd);
assertTrue(psd.getTime() < d1.getTime());
assertTrue(nsd.getTime() >= d1.getTime());
axis.setRange(d2, end);
psd = axis.previousStandardDate(d2, unit);
nsd = unit.addToDate(psd);
assertTrue(psd.getTime() < d2.getTime());
assertTrue(nsd.getTime() >= d2.getTime());
axis.setRange(d3, end);
psd = axis.previousStandardDate(d3, unit);
nsd = unit.addToDate(psd);
assertTrue(psd.getTime() < d3.getTime());
assertTrue(nsd.getTime() >= d3.getTime());
// END: check d3 and d4
axis.setTickMarkPosition(DateTickMarkPosition.END);
axis.setRange(d3, end);
psd = axis.previousStandardDate(d3, unit);
nsd = unit.addToDate(psd);
assertTrue(psd.getTime() < d3.getTime());
assertTrue(nsd.getTime() >= d3.getTime());
axis.setRange(d4, end);
psd = axis.previousStandardDate(d4, unit);
nsd = unit.addToDate(psd);
assertTrue(psd.getTime() < d4.getTime());
assertTrue(nsd.getTime() >= d4.getTime());
}