package org.openstack.atlas.util.converters; import static org.openstack.atlas.util.converters.DateTimeConverters.calToiso; import static org.openstack.atlas.util.converters.DateTimeConverters.isoTocal; import org.openstack.atlas.util.common.exceptions.ConverterException; import java.util.Calendar; import java.util.TimeZone; import org.junit.Before; import org.junit.AfterClass; import org.junit.BeforeClass; import org.junit.Test; import static org.junit.Assert.*; public class DateTimeConvertersTest { private final static String standardIso = "1978-05-28T15:20-06:00"; private final static String wrongDate = "2000-1-1T00:00Z"; private final static String expectedIso = "1978-05-28T21:20:00Z"; public DateTimeConvertersTest() { } public Calendar getExpectedCalendar() { Calendar cal = Calendar.getInstance(TimeZone.getTimeZone("GMT")); cal.set(Calendar.MONTH, 4); cal.set(Calendar.DAY_OF_MONTH, 28); cal.set(Calendar.YEAR, 1978); cal.set(Calendar.HOUR_OF_DAY, 21); cal.set(Calendar.MINUTE, 20); cal.set(Calendar.SECOND, 0); cal.set(Calendar.MILLISECOND, 0); return cal; } public Calendar getWrongCalendar() { Calendar cal = Calendar.getInstance(TimeZone.getTimeZone("GMT")); cal.set(Calendar.MONTH, 0); cal.set(Calendar.DAY_OF_MONTH, 1); cal.set(Calendar.YEAR, 2000); cal.set(Calendar.HOUR_OF_DAY, 0); cal.set(Calendar.MINUTE, 0); cal.set(Calendar.SECOND, 0); cal.set(Calendar.MILLISECOND, 0); return cal; } @Test(expected = ConverterException.class) public void shouldThrowConverterExceptionWhenConvertingBogusGregorianDate() throws ConverterException { String wtf = "May 28, 1978"; Calendar cal = isoTocal(wtf); nop(); } @Test(expected = ConverterException.class) public void shouldThrowConverterExceptionWhenConvertingNullString() throws ConverterException { String wtf = null; Calendar cal = isoTocal(wtf); nop(); } @Test public void shouldConvertCalendarto8601() throws ConverterException { Calendar cal = getExpectedCalendar(); String isoStr = calToiso(cal); assertTrue(expectedIso.equals(isoStr)); assertFalse(isoStr.equals(wrongDate)); } @Test public void shouldConvert8601toCalendar() throws ConverterException { Calendar cal; cal = isoTocal(standardIso); assertTrue(0 == cal.compareTo(getExpectedCalendar())); assertFalse(0 == cal.compareTo(getWrongCalendar())); nop(); } @Test public void shouldKeepNegativeTimezoneWhenConvertingToCalendar() throws ConverterException { String isoString = "2000-01-01T00:00:00-08:00"; int offset; int expectedOffset = 0 - 1000 * 60 * 60 * 8; // - 8 hours Calendar cal; cal = isoTocal(isoString); offset = cal.getTimeZone().getRawOffset(); assertEquals(expectedOffset, offset); } @Test public void shouldKeepPositiveTimezoneWhenConvertingToCalendar() throws ConverterException { String isoString = "2000-01-01T00:00:00+08:00"; int offset; int expectedOffset = 1000 * 60 * 60 * 8; // + 8 hours Calendar cal; cal = isoTocal(isoString); offset = cal.getTimeZone().getRawOffset(); assertEquals(expectedOffset, offset); } @Test public void shouldKeepUtcByDefault() throws ConverterException { String isoString = "2000-01-01T00:00:00"; int offset; int expectedOffset = 0; Calendar cal; cal = isoTocal(isoString); offset = cal.getTimeZone().getRawOffset(); assertEquals(expectedOffset, offset); } @Test public void shouldInterpretZtoRepresentUTC() throws ConverterException { String isoString = "2000-01-01T00:00:00Z"; int offset; int expectedOffset = 0; Calendar cal; cal = isoTocal(isoString); offset = cal.getTimeZone().getRawOffset(); assertEquals(expectedOffset, offset); } public void nop() { } }