package se.acode.openehr.parser;
import org.openehr.am.archetype.constraintmodel.ArchetypeConstraint;
import org.openehr.am.archetype.Archetype;
import org.openehr.am.openehrprofile.datatypes.quantity.CDvQuantity;
import org.openehr.am.openehrprofile.datatypes.quantity.CDvQuantityItem;
import org.openehr.rm.datatypes.quantity.DvQuantity;
import org.openehr.rm.datatypes.text.CodePhrase;
import org.openehr.rm.support.basic.Interval;
import org.openehr.rm.support.measurement.*;
import java.util.*;
/**
* Test case tests parsing of domain type constraints extension.
*
* @author Rong Chen
* @version 1.0
*/
public class CDvQuantityTest extends ParserTestBase {
/**
* The fixture clean up called after every test method.
*/
protected void tearDown() throws Exception {
archetype = null;
node = null;
}
public void testParseFullCDvQuantityStartsWithProperty() throws Exception {
ADLParser parser = new ADLParser(loadFromClasspath(
"adl-test-entry.c_dv_quantity_full.test.adl"));
archetype = parser.parse();
node = archetype.node("/types[at0001]/items[at10005]/value");
verifyCDvQuantityValue(node);
}
public void testParseFullCDvQuantityStartsWithList() throws Exception {
ADLParser parser = new ADLParser(loadFromClasspath(
"adl-test-entry.c_dv_quantity_full2.test.adl"));
archetype = parser.parse();
node = archetype.node("/types[at0001]/items[at10005]/value");
verifyCDvQuantityValue(node);
}
public void testParseFullCDvQuantityStartsWithAssumedValue() throws Exception {
ADLParser parser = new ADLParser(loadFromClasspath(
"adl-test-entry.c_dv_quantity_full3.test.adl"));
archetype = parser.parse();
node = archetype.node(
"/types[at0001]/items[at10005]/value");
verifyCDvQuantityValue(node);
}
private void verifyCDvQuantityValue(ArchetypeConstraint node) {
assertTrue("CDvQuantity expected", node instanceof CDvQuantity);
CDvQuantity cdvquantity = (CDvQuantity) node;
// verify property
CodePhrase property = cdvquantity.getProperty();
assertNotNull("property is null", property);
assertEquals("openehr", property.getTerminologyId().name());
assertEquals("128", property.getCodeString());
// verify item list
List<CDvQuantityItem> list = cdvquantity.getList();
assertEquals("unexpected size of list", 2, list.size());
assertCDvQuantityItem(list.get(0), "yr",
new Interval<Double>(0.0, 200.0), new Interval<Integer>(2, 2));
assertCDvQuantityItem(list.get(1), "mth",
new Interval<Double>(1.0, 36.0), new Interval<Integer>(2, 2));
MeasurementService ms = SimpleMeasurementService.getInstance();
DvQuantity expected = new DvQuantity("yr", 8.0, 2, ms);
assertEquals("assumed value wrong", expected,
cdvquantity.getAssumedValue());
}
private void assertCDvQuantityItem(CDvQuantityItem item, String units,
Interval<Double> magnitude, Interval<Integer> precision) {
assertEquals("unexpected units", units, item.getUnits());
assertEquals("unexpected magnitude interval", magnitude,
item.getMagnitude());
assertEquals("unexpected precision interval", precision,
item.getPrecision());
}
public void testParseCDvQuantityOnlyWithProperty() throws Exception {
ADLParser parser = new ADLParser(loadFromClasspath(
"adl-test-entry.c_dv_quantity_property.test.adl"));
archetype = parser.parse();
}
public void testParseCDvQuantityOnlyWithList() throws Exception {
ADLParser parser = new ADLParser(loadFromClasspath(
"adl-test-entry.c_dv_quantity_list.test.adl"));
archetype = parser.parse();
}
public void testParseCDvQuantityReversed() throws Exception {
ADLParser parser = new ADLParser(loadFromClasspath(
"adl-test-entry.c_dv_quantity_reversed.test.adl"));
archetype = parser.parse();
}
public void testParseCDvQuantityItemWithOnlyUnits() throws Exception {
ADLParser parser = new ADLParser(loadFromClasspath(
"adl-test-entry.c_dv_quantity_item_units_only.test.adl"));
archetype = parser.parse();
}
public void testParseEmptyCDvQuantity() throws Exception {
ADLParser parser = new ADLParser(loadFromClasspath(
"adl-test-entry.c_dv_quantity_empty.test.adl"));
archetype = parser.parse();
node = archetype.node("/types[at0001]/items[at10005]/value");
assertTrue("CDvQuantity expected", node instanceof CDvQuantity);
CDvQuantity cdvquantity = (CDvQuantity) node;
assertNull(cdvquantity.getList());
assertNull(cdvquantity.getProperty());
assertNull(cdvquantity.getAssumedValue());
assertTrue(cdvquantity.isAnyAllowed());
}
private Archetype archetype;
private ArchetypeConstraint node;
}