package se.acode.openehr.parser; import org.openehr.am.archetype.Archetype; import org.openehr.am.archetype.constraintmodel.CComplexObject; import org.openehr.am.archetype.constraintmodel.CObject; import org.openehr.am.archetype.constraintmodel.CAttribute; /** * Test case tests archetype path logic. * * @author Rong Chen * @version 1.0 */ public class PathTest extends ParserTestBase { public PathTest(String test) { super(test); } public void setUp() throws Exception { ADLParser parser = new ADLParser(loadFromClasspath( "adl-test-car.paths.test.adl")); archetype = parser.parse(); definition = archetype.getDefinition(); } public void testPath() throws Exception { // root path CAR assertEquals("root", "/", definition.path()); // wheels attribute CAttribute wheels = definition.getAttributes().get(0); assertEquals("wheels", "/wheels", wheels.path()); // first WHEEL node CObject firstWheel = wheels.getChildren().get(0); assertEquals("first wheel", "/wheels[at0001]", firstWheel.path()); // description and parts of first WHEEL CComplexObject firstWheelObj = (CComplexObject) firstWheel; CAttribute description = firstWheelObj.getAttributes().get(0); assertEquals("first wheel description", "/wheels[at0001]/description", description.path()); CAttribute parts = firstWheelObj.getAttributes().get(1); assertEquals("first wheel parts", "/wheels[at0001]/parts", parts.path()); // WHEEL_PART node CObject wheelParts = parts.getChildren().get(0); assertEquals("wheelPart", "/wheels[at0001]/parts[at0002]", wheelParts.path()); // something and something_else of WHEEL_PART node CComplexObject wheelPartsObj = (CComplexObject) wheelParts; assertEquals("something of WHEEL_PART", "/wheels[at0001]/parts[at0002]/something", wheelPartsObj.getAttributes().get(0).path()); assertEquals("something_else of WHEEL_PART", "/wheels[at0001]/parts[at0002]/something_else", wheelPartsObj.getAttributes().get(1).path()); } public void testNodeAtPath() throws Exception { String[] paths = { "/", "/wheels[at0001]", "/wheels[at0001]/description", "/wheels[at0001]/parts[at0002]", "/wheels[at0001]/parts[at0002]/something", "/wheels[at0001]/parts[at0002]/something_else", "/wheels[at0003]", "/wheels[at0003]/description", "/wheels[at0004]", "/wheels[at0004]/description", "/wheels[at0005]", "/wheels[at0005]/description" }; CAttribute wheels = definition.getAttributes().get(0); CComplexObject wheel1 = ((CComplexObject) wheels.getChildren().get(0)); CComplexObject wheel2 = ((CComplexObject) wheels.getChildren().get(1)); CComplexObject wheel3 = ((CComplexObject) wheels.getChildren().get(2)); CComplexObject wheel4 = ((CComplexObject) wheels.getChildren().get(3)); CComplexObject parts = ((CComplexObject) wheel1.getAttributes().get(1) .getChildren().get(0)); CObject[] nodes = { definition, wheel1, wheel1.getAttributes().get(0).getChildren().get(0), parts, parts.getAttributes().get(0).getChildren().get(0), parts.getAttributes().get(1).getChildren().get(0), wheel2, wheel2.getAttributes().get(0).getChildren().get(0), wheel3, wheel3.getAttributes().get(0).getChildren().get(0), wheel4, wheel4.getAttributes().get(0).getChildren().get(0), }; for(int i = 0; i < paths.length; i++) { assertEquals("wrong at path: " + paths[i], nodes[i], archetype.node(paths[i])); } } private Archetype archetype; private CComplexObject definition; }