package se.acode.openehr.parser;
import org.openehr.am.archetype.Archetype;
import org.openehr.am.archetype.ontology.TermBindingItem;
import org.openehr.am.archetype.ontology.OntologyBinding;
/**
* TermBindingTest
*
* @author Rong Chen
* @version 1.0
*/
public class TermBindingTest extends ParserTestBase {
/**
* Create new test case
*
* @param test
* @throws Exception
*/
public TermBindingTest(String test) throws Exception {
super(test);
}
/**
* Verifies term binding by multiple terminolgies
*
* @throws Exception
*/
public void testTermBindingWithMultiTerminologies() throws Exception {
ADLParser parser = new ADLParser(loadFromClasspath(
"adl-test-entry.term_binding.test.adl"));
Archetype archetype = parser.parse();
// verify the first term binding
OntologyBinding binding = archetype.getOntology().getTermBindingList().get(0);
assertEquals("wrong binding terminology", "SNOMED_CT", binding.getTerminology());
TermBindingItem item = (TermBindingItem) binding.getBindingList().get(0);
assertEquals("wrong local code", "at0000", item.getCode());
assertEquals("wrong terms size", 1, item.getTerms().size());
assertEquals("wrong term", "[snomed_ct::1000339]", item.getTerms().get(0));
// verify the second term binding
binding = archetype.getOntology().getTermBindingList().get(1);
assertEquals("wrong binding terminology", "ICD10", binding.getTerminology());
item = (TermBindingItem) binding.getBindingList().get(0);
assertEquals("wrong local code", "at0000", item.getCode());
assertEquals("wrong terms size", 2, item.getTerms().size());
assertEquals("wrong 1st term", "[icd10::1000]", item.getTerms().get(0));
assertEquals("wrong 2nd term", "[icd10::1001]", item.getTerms().get(1));
}
public void testPathBasedBinding() throws Exception {
ADLParser parser = new ADLParser(loadFromClasspath(
"adl-test-entry.term_binding2.test.adl"));
Archetype archetype = parser.parse();
OntologyBinding binding = archetype.getOntology().getTermBindingList().get(0);
assertEquals("wrong binding terminology", "LNC205", binding.getTerminology());
TermBindingItem item = (TermBindingItem) binding.getBindingList().get(0);
assertEquals("wrong local code path",
"/data[at0002]/events[at0003]/data[at0001]/item[at0004]",
item.getCode());
assertEquals("wrong terms size", 1, item.getTerms().size());
assertEquals("wrong term", "[LNC205::8310-5]", item.getTerms().get(0));
}
public void testPathBasedBindingWithinInternalReference() throws Exception {
ADLParser parser = new ADLParser(loadFromClasspath(
"openEHR-EHR-OBSERVATION.test_internal_ref_binding.v1.adl"));
Archetype archetype = parser.parse();
OntologyBinding binding = archetype.getOntology().getTermBindingList().get(0);
assertEquals("wrong binding terminology", "DDB00", binding.getTerminology());
TermBindingItem item1 = (TermBindingItem) binding.getBindingList().get(0);
assertEquals("wrong terms size", 1, item1.getTerms().size());
assertEquals("wrong local code path",
"/data[at0001]/events[at0002]/data[at0003]/items[at0004]",
item1.getCode());
assertEquals("wrong term", "[DDB00::12345]", item1.getTerms().get(0));
TermBindingItem item2 = (TermBindingItem) binding.getBindingList().get(1);
assertEquals("wrong terms size", 1, item2.getTerms().size());
assertEquals("wrong local code path",
"/data[at0001]/events[at0005]/data[at0003]/items[at0004]",
item2.getCode());
assertEquals("wrong term", "[DDB00::98765]", item2.getTerms().get(0));
assertTrue(archetype.physicalPaths().contains("/data[at0001]/events[at0002]/data[at0003]/items[at0004]"));
assertTrue(archetype.physicalPaths().contains("/data[at0001]/events[at0005]/data[at0003]/items[at0004]")); // path within an archetype internal ref. Must be included in the physical paths!
assertFalse(archetype.physicalPaths().contains("/data[at0001]/events[at9999]/data[at0003]/items[at0004]"));
}
}