/* * Created on Jul 13, 2004 */ package edu.sc.seis.sod.validator.tour; import java.io.IOException; import javax.xml.stream.XMLStreamException; import junit.framework.TestCase; import edu.sc.seis.sod.validator.model.Attribute; import edu.sc.seis.sod.validator.model.Choice; import edu.sc.seis.sod.validator.model.Data; import edu.sc.seis.sod.validator.model.Empty; import edu.sc.seis.sod.validator.model.Group; import edu.sc.seis.sod.validator.model.Interleave; import edu.sc.seis.sod.validator.model.NamedElement; import edu.sc.seis.sod.validator.model.NotAllowed; import edu.sc.seis.sod.validator.model.StAXModelBuilder; import edu.sc.seis.sod.validator.model.Text; import edu.sc.seis.sod.validator.model.Value; /** * @author Charlie Groves */ public class MaximalVisitorTest extends TestCase { public void testCardinalityVisitation() throws XMLStreamException, IOException { runVisitation("jar:edu/sc/seis/sod/data/validator/cardinality.rng", new String[] { "baseElement", "optionalEl", "oneOrMore", "zeroOrMore", "thisOne", "thenThisOne", "thenAnotherOne", "finallyThisOne" }); } public void testMultiChoiceVisitation() throws XMLStreamException, IOException { runVisitation("jar:edu/sc/seis/sod/data/validator/choiceMulti.rng", new String[] { "baseElement", "internalEl1", "internalEl2" }); } public void testSelfRef() throws XMLStreamException, IOException { runVisitation("jar:edu/sc/seis/sod/data/validator/selfReferential.rng", new String[] { "internalEl", "internalEl" }); } private void runVisitation(String schema, String[] visitOrder) throws XMLStreamException, IOException { StAXModelBuilder modBuild = new StAXModelBuilder(schema); MaximalVisitGuide patient = new MaximalVisitGuide( modBuild.getRoot()); MaximalTourist tourist = new MaximalTourist(visitOrder); patient.lead(tourist); tourist.finish(); } private class MaximalTourist implements Tourist { public MaximalTourist(String[] visitOrder) { this.visitOrder = visitOrder; } public void finish() { assertEquals(visitOrder.length, i); } public void visit(NamedElement ne) { assertEquals(visitOrder[i++], ne.getName()); } private String[] visitOrder; private int i = 0; public void visit(Attribute attr) {} public void leave(Attribute attr) {} public void visit(Choice choice) {} public void leave(Choice choice) {} public void visit(Data d) {} public void visit(Empty e) {} public void visit(Group g) {} public void leave(Group g) {} public void visit(Interleave inter) {} public void leave(Interleave inter) {} public void leave(NamedElement ne) {} public void visit(Text t) {} public void visit(Value v) {} public void visit(NotAllowed na) {} } }