package se.acode.openehr.parser;
import junit.framework.TestCase;
import java.io.File;
import java.io.InputStream;
import java.util.*;
import java.text.SimpleDateFormat;
import org.openehr.am.archetype.constraintmodel.*;
import org.openehr.am.archetype.constraintmodel.primitive.*;
import org.openehr.rm.support.basic.Interval;
import org.openehr.rm.datatypes.quantity.datetime.*;
/**
* ADLParser testing config and common logic
*
* @author Rong Chen
* @version 1.0
*/
public class ParserTestBase extends TestCase {
public ParserTestBase(String test) {
super(test);
}
public ParserTestBase(){
}
protected InputStream loadFromClasspath(String adl) throws Exception {
return this.getClass().getClassLoader().getResourceAsStream(adl);
}
// assert CComplexObject object has expected values
void assertCComplexObject(CComplexObject obj, String rmTypeName,
String nodeID, Interval occurrences,
int attributes) throws Exception {
assertCObject(obj, rmTypeName, nodeID, occurrences);
assertEquals("attributes.size", attributes, obj.getAttributes().size());
}
// assert CObject has expected valuess
void assertCObject(CObject obj, String rmTypeName, String nodeID,
Interval occurrences) throws Exception {
assertEquals("rmTypeName", rmTypeName, obj.getRmTypeName());
assertEquals("nodeID", nodeID, obj.getNodeId());
assertEquals("occurrences", occurrences, obj.getOccurrences());
}
// assert CAttribute has expected values
void assertCAttribute(CAttribute attr, String rmAttributeName,
CAttribute.Existence existence,
Cardinality cardinality, int children)
throws Exception {
assertEquals("rmAttributeName", rmAttributeName,
attr.getRmAttributeName());
assertEquals("existence", existence, attr.getExistence());
if(attr instanceof CMultipleAttribute) {
CMultipleAttribute mattr = (CMultipleAttribute) attr;
assertEquals("cardinality", cardinality, mattr.getCardinality());
}
assertEquals("children.size", children, attr.getChildren().size());
}
// assert CAttribute has expected values
void assertCAttribute(CAttribute attr, String rmAttributeName,
int children) throws Exception {
assertCAttribute(attr, rmAttributeName, CAttribute.Existence.REQUIRED,
null, children);
}
// assertion on primitive types
void assertCBoolean(Object obj, boolean trueValid, boolean falseValid,
boolean assumed, boolean hasAssumed)
throws Exception {
CBoolean b = (CBoolean) fetchFirst(obj);
assertEquals("trueValid", trueValid, b.isTrueValid());
assertEquals("falseValid", falseValid, b.isFalseValid());
assertEquals("assumed value", assumed, b.assumedValue().booleanValue());
assertEquals("has assumed value", hasAssumed, b.hasAssumedValue());
}
void assertCInteger(Object obj, Interval interval, int[] values,
Integer assumed) throws Exception {
CInteger c = (CInteger) fetchFirst(obj);
assertEquals("interval", interval, c.getInterval());
assertEquals("list", intSet(values), c.getList());
assertEquals("unexpected assumed value", assumed, c.assumedValue());
}
void assertCReal(Object obj, Interval interval, double[] values,
Double assumed) throws Exception {
CReal c = (CReal) fetchFirst(obj);
assertEquals("interval", interval, c.getInterval());
assertEquals("list", doubleSet(values), c.getList());
assertEquals("unexpected assumed value", assumed, c.assumedValue());
}
void assertCDate(Object obj, String pattern, Interval interval,
String[] values, String assumed)
throws Exception {
CDate c = (CDate) fetchFirst(obj);
assertEquals("pattern", pattern, c.getPattern());
assertEquals("interval", interval, c.getInterval());
assertEquals("list", dateSet(values), c.getList());
assertEquals("assumed value",
assumed == null? null :new DvDate(assumed), c.assumedValue());
}
void assertCDateTime(Object obj, String pattern, Interval interval,
String[] values, String assumed)
throws Exception {
CDateTime c = (CDateTime) fetchFirst(obj);
assertEquals("pattern", pattern, c.getPattern());
assertEquals("interval", interval, c.getInterval());
assertEquals("list", dateTimeSet(values), c.getList());
assertEquals("assumed value",
assumed == null? null :new DvDateTime(assumed), c.assumedValue());
}
// without assumed value
void assertCDateTime(Object obj, String pattern, Interval interval,
String[] values) throws Exception {
assertCDateTime(obj, pattern, interval, values, null);
}
void assertCTime(Object obj, String pattern, Interval interval,
String[] values, String assumed)
throws Exception {
CTime c = (CTime) fetchFirst(obj);
assertEquals("pattern", pattern, c.getPattern());
assertEquals("interval", interval, c.getInterval());
assertEquals("list", timeSet(values), c.getList());
assertEquals("assumed value",
assumed == null? null :new DvTime(assumed), c.assumedValue());
}
// without assumed value
void assertCTime(Object obj, String pattern, Interval interval,
String[] values) throws Exception {
assertCTime(obj, pattern, interval, values, null);
}
// full assertion with CDuration
void assertCDuration(Object obj, String value, Interval interval,
String assumed, String pattern) throws Exception {
CDuration c = (CDuration) ((CPrimitiveObject) obj).getItem();
assertEquals("list", value == null ? null : DvDuration.getInstance(value),
c.getValue());
assertEquals("interval", interval, c.getInterval());
assertEquals("assumed value",
assumed == null? null
: DvDuration.getInstance(assumed), c.assumedValue());
assertEquals("pattern wrong", pattern, c.getPattern());
}
// without pattern
void assertCDuration(Object obj, String value, Interval interval,
String assumed) throws Exception {
assertCDuration(obj, value, interval, assumed, null);
}
// without assumed value, pattern
void assertCDuration(Object obj, String value, Interval interval)
throws Exception {
assertCDuration(obj, value, interval, null);
}
// fetch the first CPrimitive from the CAttribute
CPrimitive fetchFirst(Object obj) {
return ( (CPrimitiveObject) ( (CAttribute) obj ).getChildren()
.get(0) ).getItem();
}
void assertCString(Object obj, String pattern, String[] values,
String assumedValue) {
CString c = (CString) ( (CPrimitiveObject) ( (CAttribute) obj ).getChildren()
.get(0) ).getItem();
if (pattern == null) {
assertTrue("pattern null", c.getPattern() == null);
} else {
assertEquals("pattern", pattern, c.getPattern());
}
assertEquals("list", values == null
? null : Arrays.asList(values), c.getList());
assertEquals("unexpected CString assumed value", assumedValue,
c.assumedValue());
}
void assertDateEquals(List set, String[] dates, String pattern)
throws Exception {
if (dates == null) {
assertEquals("set not empty", 0, set.size());
return;
}
List setFromArray = new ArrayList();
for (int i = 0; i < dates.length; i++) {
setFromArray.add(new SimpleDateFormat(pattern).parse(dates[ i ]));
}
assertTrue("set not equals array, expected: " + setFromArray
+ ", actual: " + set, set.equals(setFromArray));
}
// methods for coversion of data types
List intSet(int[] values) {
if (values == null) {
return null;
}
List set = new ArrayList();
for (int i = 0; i < values.length; i++) {
set.add(new Integer(values[ i ]));
}
return set;
}
List doubleSet(double[] values) {
if (values == null) {
return null;
}
List set = new ArrayList();
for (int i = 0; i < values.length; i++) {
set.add(new Double(values[ i ]));
}
return set;
}
// set of DvDate
List dateSet(String[] values) throws Exception {
if (values == null) {
return null;
}
List set = new ArrayList();
for (int i = 0; i < values.length; i++) {
set.add(date(values[ i ]));
}
return set;
}
// set of DvDateTime
List dateTimeSet(String[] values) throws Exception {
if (values == null) {
return null;
}
List set = new ArrayList();
for (int i = 0; i < values.length; i++) {
set.add(dateTime(values[ i ]));
}
return set;
}
// set of DvTime
List timeSet(String[] values) throws Exception {
if (values == null) {
return null;
}
List set = new ArrayList();
for (int i = 0; i < values.length; i++) {
set.add(time(values[ i ]));
}
return set;
}
// convert with default pattern
DvDateTime dateTime(String value) throws Exception {
return new DvDateTime(value);
}
DvTime time(String value) throws Exception {
return new DvTime(value);
}
DvDate date(String value) throws Exception {
return new DvDate(value);
}
Interval interval(int low, int up) {
return new Interval(new Integer(low), new Integer(up));
}
/* fields */
static protected File dir = new File("res" + File.separator + "test");
}