package edu.sc.seis.sod.validator; import java.io.IOException; import javax.xml.stream.XMLStreamException; import junit.framework.TestCase; import edu.sc.seis.sod.validator.model.Choice; import edu.sc.seis.sod.validator.model.Form; import edu.sc.seis.sod.validator.model.NamedElement; import edu.sc.seis.sod.validator.model.StAXModelBuilder; /** * @author oliverpa Created on Sep 2, 2004 */ public class ModelWalkerTest extends TestCase { private StAXModelBuilder modBuild; public ModelWalkerTest(String name) throws XMLStreamException, IOException { super(name); modBuild = new StAXModelBuilder("jar:edu/sc/seis/sod/data/validator/selfRefChoice.rng"); } public void testZeroDistance(){ NamedElement base = (NamedElement)modBuild.getRoot(); assertEquals(0, ModelWalker.getDistance(base, base)); } public void testOneDistance() { NamedElement base = (NamedElement)modBuild.getRoot(); NamedElement sub = getChildFromNamedElementWithChoice(base, "sub"); assertEquals(1, ModelWalker.getDistance(base, sub)); } public void testSelfReferentialStructure() { NamedElement base = (NamedElement)modBuild.getRoot(); Choice baseChoice = (Choice)base.getChild(); assertEquals(2, baseChoice.getChildren().length); NamedElement subBase = (NamedElement)baseChoice.getChildren()[0]; assertEquals(base.getDef(), subBase.getDef()); assertEquals("base", subBase.getName()); Choice subBaseChoice = (Choice)subBase.getChild(); assertEquals(2, subBaseChoice.getChildren().length); } public void testTwoDistance() { NamedElement base = (NamedElement)modBuild.getRoot(); NamedElement sub = getChildFromNamedElementWithChoice(base, "sub"); NamedElement gusgus = (NamedElement)sub.getChild(); assertEquals(2, ModelWalker.getDistance(base, gusgus)); } private static NamedElement getChildFromNamedElementWithChoice(NamedElement parent, String childName) { Choice c = (Choice)parent.getChild(); Form[] kids = c.getChildren(); for(int i = 0; i < kids.length; i++) { NamedElement cur = (NamedElement)kids[i]; if(cur.getName().equals(childName)) { return cur; } } return null; } }