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.CDvOrdinal;
import org.openehr.am.openehrprofile.datatypes.quantity.Ordinal;
import org.openehr.rm.datatypes.text.CodePhrase;
import java.util.*;
/**
* Test case tests parsing of domain type constraints extension.
*
* @author Rong Chen
* @version 1.0
*/
public class CDvOrdinalTest extends ParserTestBase {
public CDvOrdinalTest(String test) throws Exception {
super(test);
}
/**
* The fixture set up called before every test method.
*/
protected void setUp() throws Exception {
ADLParser parser = new ADLParser(loadFromClasspath(
"adl-test-entry.c_dv_ordinal.test.adl"));
archetype = parser.parse();
}
/**
* The fixture clean up called after every test method.
*/
protected void tearDown() throws Exception {
archetype = null;
node = null;
}
public void testCDvOrdinalWithoutAssumedValue() throws Exception {
node = archetype.node("/types[at0001]/items[at10001]/value");
String[] codes = {
"at0003.0", "at0003.1", "at0003.2", "at0003.3", "at0003.4"
};
String terminology = "local";
assertFalse("unexpected assumed value",
((CDvOrdinal) node).hasAssumedValue());
assertCDvOrdinal(node, terminology, codes, null);
}
public void testCDvOrdinalWithAssumedValue() throws Exception {
node = archetype.node("/types[at0001]/items[at10002]/value");
String[] codes = {
"at0003.0", "at0003.1", "at0003.2", "at0003.3", "at0003.4"
};
String terminology = "local";
Ordinal assumed = new Ordinal(0, new CodePhrase(terminology, codes[0]));
assertTrue("expected to have assumed value",
((CDvOrdinal) node).hasAssumedValue());
assertCDvOrdinal(node, terminology, codes, assumed);
}
public void testEmptyCDvOrdinal() throws Exception {
node = archetype.node("/types[at0001]/items[at10003]/value");
assertTrue("CDvOrdinal expected", node instanceof CDvOrdinal);
CDvOrdinal cordinal = (CDvOrdinal) node;
assertTrue(cordinal.isAnyAllowed());
}
private void assertCDvOrdinal(ArchetypeConstraint node, String terminoloy,
String[] codes, Ordinal assumedValue) {
assertTrue("CDvOrdinal expected", node instanceof CDvOrdinal);
CDvOrdinal cordinal = (CDvOrdinal) node;
List codeList = Arrays.asList(codes);
Set<Ordinal> list = cordinal.getList();
assertEquals("codes.size", codes.length, list.size());
for(Ordinal ordinal : list) {
assertEquals("terminology", "local",
ordinal.getSymbol().getTerminologyId().getValue());
assertTrue("code missing",
codeList.contains(ordinal.getSymbol().getCodeString()));
}
assertEquals("assumedValue wrong", assumedValue,
cordinal.getAssumedValue());
}
private Archetype archetype;
private ArchetypeConstraint node;
}