package ca.uhn.fhir.model; import static org.hamcrest.Matchers.is; import static org.junit.Assert.assertEquals; import static org.junit.Assert.assertThat; import java.util.Calendar; import java.util.TimeZone; import org.hl7.fhir.dstu3.model.DateType; import org.junit.AfterClass; import org.junit.Test; import ca.uhn.fhir.util.TestUtil; public class DateTypeTest { private static final org.slf4j.Logger ourLog = org.slf4j.LoggerFactory.getLogger(DateTypeTest.class); @AfterClass public static void afterClassClearContext() { TestUtil.clearAllStaticFieldsForUnitTest(); } @Test public void testDateType() { DateType birthDate = new DateType(1974, 11, 25); assertThat(birthDate.getYear(), is(1974)); assertThat(birthDate.getMonth(), is(11)); assertThat(birthDate.getDay(), is(25)); } @SuppressWarnings("unused") @Test public void testDateTypeWithInvalidMonth() { try { new DateType(1974, 12, 25); } catch (IllegalArgumentException e) { assertEquals("theMonth must be between 0 and 11", e.getMessage()); } try { new DateType(1974, -1, 25); } catch (IllegalArgumentException e) { assertEquals("theMonth must be between 0 and 11", e.getMessage()); } try { new DateType(1974, 2, 0); } catch (IllegalArgumentException e) { assertEquals("theMonth must be between 0 and 11", e.getMessage()); } try { new DateType(1974, 2, 32); } catch (IllegalArgumentException e) { assertEquals("theMonth must be between 0 and 11", e.getMessage()); } new DateType(1974, 1, 31); } @Test public void testPrecision() { // ourLog.info(""+ new TreeSet<String>(Arrays.asList(TimeZone.getAvailableIDs()))); final Calendar cal = Calendar.getInstance(); cal.setTimeZone(TimeZone.getTimeZone("GMT")); cal.set(1990, Calendar.JANUARY, 1, 0, 0, 0); ourLog.info("Time: {}", cal); // 631152000775 DateType dateDt = new DateType(cal.getTime()); long time = dateDt.getValue().getTime(); ourLog.info("Time: {}", time); // 631152000775 ourLog.info("Time: {}", dateDt.getValue()); // 631152000775 dateDt.setTimeZone(TimeZone.getTimeZone("Europe/Berlin")); time = dateDt.getValue().getTime(); ourLog.info("Time: {}", time); // 631152000775 ourLog.info("Time: {}", dateDt.getValue()); // 631152000775 String valueAsString = dateDt.getValueAsString(); ourLog.info(valueAsString); // is 631152000030 } @Test public void testConstructors() { final Calendar cal = Calendar.getInstance(); cal.setTimeZone(TimeZone.getTimeZone("Europe/Berlin")); cal.set(1990, Calendar.JANUARY, 5, 0, 0, 0); DateType dateDt = new DateType(cal); assertEquals("1990-01-05", dateDt.getValueAsString()); dateDt = new DateType(1990, 0, 5); assertEquals("1990-01-05", dateDt.getValueAsString()); } }