package se.acode.openehr.parser; import org.openehr.am.archetype.constraintmodel.CAttribute; import org.openehr.am.archetype.constraintmodel.CComplexObject; import org.openehr.rm.support.basic.Interval; import org.openehr.rm.datatypes.quantity.datetime.DvDate; import org.openehr.rm.datatypes.quantity.datetime.DvDateTime; import org.openehr.rm.datatypes.quantity.datetime.DvTime; import java.util.*; /** * Test case tests parsing of datetime types in ADL files. * * @author rong.chen */ public class DateTimeTest extends ParserTestBase { /** * Create new test case * * @param test * @throws Exception */ public DateTimeTest(String test) throws Exception { super(test); ADLParser parser = new ADLParser(loadFromClasspath( "adl-test-entry.datetime.test.adl")); attributeList = parser.parse().getDefinition().getAttributes(); } private List getConstraints(int index) { CAttribute ca = (CAttribute) attributeList.get(index); return ((CComplexObject) ca.getChildren().get(0)).getAttributes(); } /** * Tests date and partial date constraints parsing * * @throws Exception */ public void testDateConstraints() throws Exception { List list = getConstraints(0); assertCDate(list.get(0), "yyyy-mm-dd", null, null, null); assertCDate(list.get(1), "yyyy-??-??", null, null, null); assertCDate(list.get(2), "yyyy-mm-??", null, null, null); assertCDate(list.get(3), "yyyy-??-XX", null, null, null); assertCDate(list.get(4), null, null, new String[] { "1983-12-25" }, null); assertCDate(list.get(5), null, null, new String[] { "2000-01-01" }, null); assertCDate(list.get(6), null, new Interval<DvDate>(date("2004-09-20"), date("2004-10-20")), null, null); assertCDate(list.get(7), null, lessThan(date("2004-09-20")), null, null); assertCDate(list.get(8), null, lessEqual(date("2004-09-20")), null, null); assertCDate(list.get(9), null, greaterThan(date("2004-09-20")), null, null); assertCDate(list.get(10), null, greaterEqual(date("2004-09-20")), null, null); // test assumed values assertCDate(list.get(11), "yyyy-mm-dd", null, null, "2000-01-01"); assertCDate(list.get(12), "yyyy-??-??", null, null, "2001-01-01"); assertCDate(list.get(13), "yyyy-mm-??", null, null, "2002-01-01"); assertCDate(list.get(14), "yyyy-??-XX", null, null, "2003-01-01"); assertCDate(list.get(15), null, null, new String[] { "1983-12-25" }, "2004-01-01"); assertCDate(list.get(16), null, null, new String[] { "2000-01-01" }, "2005-01-01"); assertCDate(list.get(17), null, new Interval<DvDate>( date("2004-09-20"), date("2004-10-20")), null, "2004-09-30"); assertCDate(list.get(18), null, lessThan(date("2004-09-20")), null, "2004-09-01"); assertCDate(list.get(19), null, lessEqual(date("2004-09-20")), null, "2003-09-20"); assertCDate(list.get(20), null, greaterThan(date("2004-09-20")), null, "2005-01-02"); assertCDate(list.get(21), null, greaterEqual(date("2004-09-20")), null, "2005-10-30"); } /** * Tests time and partial time constraints parsing * * @throws Exception */ public void testTimeConstraints() throws Exception { List list = getConstraints(1); assertCTime(list.get(0), "hh:mm:ss", null, null, null); assertCTime(list.get(1), "hh:mm:XX", null, null, null); assertCTime(list.get(2), "hh:??:XX", null, null, null); assertCTime(list.get(3), "hh:??:??", null, null, null); assertCTime(list.get(4), null, null, new String[] { "22:00:05" }, null); assertCTime(list.get(5), null, null, new String[] { "00:00:59" }, null); assertCTime(list.get(6), null, null, new String[] { "12:35" }, null); assertCTime(list.get(7), null, null, new String[] { "12:35:45.666" }, null); assertCTime(list.get(8), null, null, new String[] { "12:35:45-0700" }, null); assertCTime(list.get(9), null, null, new String[] { "12:35:45+0800" }, null); assertCTime(list.get(10), null, null, new String[] { "12:35:45.999-0700" }, null); assertCTime(list.get(11), null, null, new String[] { "12:35:45.000+0800" }, null); assertCTime(list.get(12), null, null, new String[] { "12:35:45.000+0000" }, null); assertCTime(list.get(13), null, null, new String[] { "12:35:45.995-0700" }, null); assertCTime(list.get(14), null, null, new String[] { "12:35:45.001+0800" }, null); assertCTime(list.get(15), null, new Interval(time("12:35"), time("16:35")), null, null); assertCTime(list.get(16), null, lessThan(time("12:35")), null, null); assertCTime(list.get(17), null, lessEqual(time("12:35")), null, null); assertCTime(list.get(18), null, greaterThan(time("12:35")), null, null); assertCTime(list.get(19), null, greaterEqual(time("12:35")), null, null); } /** * Tests time and partial time constraints parsing * * @throws Exception */ public void testTimeConstraintsWithAssumedValues() throws Exception { List list = getConstraints(1); assertCTime(list.get(20), "hh:mm:ss", null, null, "10:00:00"); assertCTime(list.get(21), "hh:mm:XX", null, null, "10:00:00"); assertCTime(list.get(22), "hh:??:XX", null, null, "10:00:00"); assertCTime(list.get(23), "hh:??:??", null, null, "10:00:00"); assertCTime(list.get(24), null, null, new String[] { "22:00:05" }, "10:00:00"); assertCTime(list.get(25), null, null, new String[] { "00:00:59" }, "10:00:00"); assertCTime(list.get(26), null, null, new String[] { "12:35" }, "10:00:00"); assertCTime(list.get(27), null, null, new String[] { "12:35:45.666" }, "10:00:00"); assertCTime(list.get(28), null, null, new String[] { "12:35:45-0700" }, "10:00:00"); assertCTime(list.get(29), null, null, new String[] { "12:35:45+0800" }, "10:00:00"); assertCTime(list.get(30), null, null, new String[] { "12:35:45.999-0700" }, "10:00:00"); assertCTime(list.get(31), null, null, new String[] { "12:35:45.000+0800" }, "10:00:00"); assertCTime(list.get(32), null, null, new String[] { "12:35:45.000+0000" }, "10:00:00"); assertCTime(list.get(33), null, null, new String[] { "12:35:45.995-0700" }, "10:00:00"); assertCTime(list.get(34), null, null, new String[] { "12:35:45.001+0800" }, "10:00:00"); assertCTime(list.get(35), null, new Interval<DvTime>(time("12:35"), time("16:35")), null, "10:00:00"); assertCTime(list.get(36), null, lessThan(time("12:35")), null, "10:00:00"); assertCTime(list.get(37), null, lessEqual(time("12:35")), null, "10:00:00"); assertCTime(list.get(38), null, greaterThan(time("12:35")), null, "10:00:00"); assertCTime(list.get(39), null, greaterEqual(time("12:35")), null, "10:00:00"); } /** * Tests datetime and partial datetime constraints parsing * * @throws Exception */ public void testDateTimeConstraints() throws Exception { List list = getConstraints(2); assertCDateTime(list.get(0), "yyyy-mm-dd hh:mm:ss", null, null, null); assertCDateTime(list.get(1), "yyyy-mm-dd hh:mm:??", null, null, null); assertCDateTime(list.get(2), "yyyy-mm-dd hh:mm:XX", null, null, null); assertCDateTime(list.get(3), "yyyy-mm-dd hh:??:XX", null, null, null); assertCDateTime(list.get(4), "yyyy-??-?? ??:??:??", null, null, null); assertCDateTime(list.get(5), null, null, new String[] { "1983-12-25T22:00:05" }, null); assertCDateTime(list.get(6), null, null, new String[] { "2000-01-01T00:00:59" }, null); assertCDateTime(list.get(7), null, null, new String[] { "2000-01-01T00:00:59" }, null); assertCDateTime(list.get(8), null, null, new String[] { "2000-01-01T00:00:59.105" }, null); assertCDateTime(list.get(9), null, null, new String[] { "2000-01-01T00:00:59+0000" }, null); assertCDateTime(list.get(10), null, null, new String[] { "2000-01-01T00:00:59+1200" }, null); assertCDateTime(list.get(11), null, null, new String[] { "2000-01-01T00:00:59.500+0000" }, null); assertCDateTime(list.get(12), null, null, new String[] { "2000-01-01T00:00:59.500+1200" }, null); assertCDateTime(list.get(13), null, null, new String[] { "2000-01-01T00:00:59.000+0000" }, null); assertCDateTime(list.get(14), null, null, new String[] { "2000-01-01T00:00:59.000+1200" }, null); assertCDateTime(list.get(15), null, new Interval<DvDateTime>( dateTime("2000-01-01T00:00:00"), dateTime("2000-01-02T00:00:00")), null, null); assertCDateTime(list.get(16), null, lessThan(dateTime("2000-01-01T00:00:00")), null, null); assertCDateTime(list.get(17), null, lessEqual(dateTime("2000-01-01T00:00:00")), null, null); assertCDateTime(list.get(18), null, greaterThan(dateTime("2000-01-01T00:00:00")), null, null); assertCDateTime(list.get(19), null, greaterEqual(dateTime("2000-01-01T00:00:00")), null, null); assertCDateTime(list.get(40), "yyyy-??-??T??:??:??", null, null, null); } /** * Tests datetime and partial datetime constraints parsing * * @throws Exception */ public void testDateTimeConstraintsWithAssumedValues() throws Exception { List list = getConstraints(2); assertCDateTime(list.get(20), "yyyy-mm-dd hh:mm:ss", null, null, "2006-03-31T01:12:00"); assertCDateTime(list.get(21), "yyyy-mm-dd hh:mm:??", null, null, "2006-03-31T01:12:00"); assertCDateTime(list.get(22), "yyyy-mm-dd hh:mm:XX", null, null, "2006-03-31T01:12:00"); assertCDateTime(list.get(23), "yyyy-mm-dd hh:??:XX", null, null, "2006-03-31T01:12:00"); assertCDateTime(list.get(24), "yyyy-??-?? ??:??:??", null, null, "2006-03-31T01:12:00"); assertCDateTime(list.get(25), null, null, new String[] { "1983-12-25T22:00:05" }, "2006-03-31T01:12:00"); assertCDateTime(list.get(26), null, null, new String[] { "2000-01-01T00:00:59" }, "2006-03-31T01:12:00"); assertCDateTime(list.get(27), null, null, new String[] { "2000-01-01T00:00:59.000" }, "2006-03-31T01:12:00"); assertCDateTime(list.get(28), null, null, new String[] { "2000-01-01T00:00:59.105" }, "2006-03-31T01:12:00"); assertCDateTime(list.get(29), null, null, new String[] { "2000-01-01T00:00:59+0000" }, "2006-03-31T01:12:00"); assertCDateTime(list.get(30), null, null, new String[] { "2000-01-01T00:00:59+1200" }, "2006-03-31T01:12:00"); assertCDateTime(list.get(31), null, null, new String[] { "2000-01-01T00:00:59.500+0000" }, "2006-03-31T01:12:00"); assertCDateTime(list.get(32), null, null, new String[] { "2000-01-01T00:00:59.500+1200" }, "2006-03-31T01:12:00"); assertCDateTime(list.get(33), null, null, new String[] { "2000-01-01T00:00:59.000+0000" }, "2006-03-31T01:12:00"); assertCDateTime(list.get(34), null, null, new String[] { "2000-01-01T00:00:59.000+1200" }, "2006-03-31T01:12:00"); assertCDateTime(list.get(35), null, new Interval<DvDateTime>( dateTime("2000-01-01T00:00:00"), dateTime("2000-01-02T00:00:00")), null, "2006-03-31T01:12:00"); assertCDateTime(list.get(36), null, lessThan(dateTime("2000-01-01T00:00:00")), null, "2006-03-31T01:12:00"); assertCDateTime(list.get(37), null, lessEqual(dateTime("2000-01-01T00:00:00")), null, "2006-03-31T01:12:00"); assertCDateTime(list.get(38), null, greaterThan(dateTime("2000-01-01T00:00:00")), null, "2006-03-31T01:12:00"); assertCDateTime(list.get(39), null, greaterEqual(dateTime("2000-01-01T00:00:00")), null, "2006-03-31T01:12:00"); } private Interval greaterThan(Comparable value) { return new Interval(value, null, false, false); } private Interval greaterEqual(Comparable value) { return new Interval(value, null, true, false); } private Interval lessThan(Comparable value) { return new Interval(null, value, false, false); } private Interval lessEqual(Comparable value) { return new Interval(null, value, false, true); } private List attributeList; }