[jboss-svn-commits] JBoss Common SVN: r2110 - in jbossxb/trunk/src: main/java/org/jboss/xb/binding/sunday/unmarshalling test/java/org/jboss/test/xml test/resources/org/jboss/test/xml
jboss-svn-commits at lists.jboss.org
jboss-svn-commits at lists.jboss.org
Sun Oct 8 08:33:22 EDT 2006
Author: adrian at jboss.org
Date: 2006-10-08 08:33:09 -0400 (Sun, 08 Oct 2006)
New Revision: 2110
Added:
jbossxb/trunk/src/test/java/org/jboss/test/xml/GlobalGroupUnitTestCase.java
jbossxb/trunk/src/test/java/org/jboss/test/xml/JBossXBTestSuite.java
jbossxb/trunk/src/test/java/org/jboss/test/xml/SharedElementUnitTestCase.java
jbossxb/trunk/src/test/resources/org/jboss/test/xml/GlobalGroup.xml
jbossxb/trunk/src/test/resources/org/jboss/test/xml/GlobalGroup.xsd
jbossxb/trunk/src/test/resources/org/jboss/test/xml/SharedElement.xsd
Modified:
jbossxb/trunk/src/main/java/org/jboss/xb/binding/sunday/unmarshalling/ModelGroupBinding.java
jbossxb/trunk/src/main/java/org/jboss/xb/binding/sunday/unmarshalling/SchemaBinding.java
jbossxb/trunk/src/main/java/org/jboss/xb/binding/sunday/unmarshalling/XsdBinder.java
jbossxb/trunk/src/test/java/org/jboss/test/xml/AbstractJBossXBTest.java
jbossxb/trunk/src/test/java/org/jboss/test/xml/JBossXBTestDelegate.java
jbossxb/trunk/src/test/java/org/jboss/test/xml/RepeatableTermsUnitTestCase.java
jbossxb/trunk/src/test/java/org/jboss/test/xml/XIncludeUnitTestCase.java
jbossxb/trunk/src/test/java/org/jboss/test/xml/XOPUnitTestCase.java
Log:
Add support for global groups.
Also created a testsuite so you can run all JBossXB tests
and made some more helpers available in AbstractJBossXBTest.
Modified: jbossxb/trunk/src/main/java/org/jboss/xb/binding/sunday/unmarshalling/ModelGroupBinding.java
===================================================================
--- jbossxb/trunk/src/main/java/org/jboss/xb/binding/sunday/unmarshalling/ModelGroupBinding.java 2006-10-05 12:01:55 UTC (rev 2109)
+++ jbossxb/trunk/src/main/java/org/jboss/xb/binding/sunday/unmarshalling/ModelGroupBinding.java 2006-10-08 12:33:09 UTC (rev 2110)
@@ -44,6 +44,9 @@
{
protected final Logger log = Logger.getLogger(getClass());
+ /** The qualifed name for global groups */
+ protected QName qName;
+
protected boolean requiredParticle;
protected ParticleHandler handler = DefaultHandlers.ELEMENT_HANDLER;
@@ -52,6 +55,29 @@
super(schema);
}
+ /**
+ * Get the qName.
+ *
+ * @return the qName.
+ */
+ public QName getQName()
+ {
+ return qName;
+ }
+
+ /**
+ * Set the qName.
+ *
+ * @param name the qName.
+ * @throws IllegalArgumentException for a null qName
+ */
+ public void setQName(QName name)
+ {
+ if (name == null)
+ throw new IllegalArgumentException("Null name");
+ qName = name;
+ }
+
public ParticleHandler getHandler()
{
return handler;
Modified: jbossxb/trunk/src/main/java/org/jboss/xb/binding/sunday/unmarshalling/SchemaBinding.java
===================================================================
--- jbossxb/trunk/src/main/java/org/jboss/xb/binding/sunday/unmarshalling/SchemaBinding.java 2006-10-05 12:01:55 UTC (rev 2109)
+++ jbossxb/trunk/src/main/java/org/jboss/xb/binding/sunday/unmarshalling/SchemaBinding.java 2006-10-08 12:33:09 UTC (rev 2110)
@@ -124,6 +124,8 @@
private Map types = new HashMap(SIMPLE_TYPES);
/** Map<QName, ParticleBinding> for */
private Map elements = new HashMap();
+ /** Map<QName, ModelGroupBinding> for */
+ private Map groups = new HashMap();
/** The default package information */
private PackageMetaData packageMetaData;
/** Schema resolver to use for foreign namespaces */
@@ -245,6 +247,21 @@
return Collections.unmodifiableCollection(types.values()).iterator();
}
+ public ModelGroupBinding getGroup(QName name)
+ {
+ return (ModelGroupBinding) groups.get(name);
+ }
+
+ public void addGroup(QName name, ModelGroupBinding group)
+ {
+ groups.put(name, group);
+ }
+
+ public Iterator getGroups()
+ {
+ return groups.values().iterator();
+ }
+
public PackageMetaData getPackageMetaData()
{
return packageMetaData;
Modified: jbossxb/trunk/src/main/java/org/jboss/xb/binding/sunday/unmarshalling/XsdBinder.java
===================================================================
--- jbossxb/trunk/src/main/java/org/jboss/xb/binding/sunday/unmarshalling/XsdBinder.java 2006-10-05 12:01:55 UTC (rev 2109)
+++ jbossxb/trunk/src/main/java/org/jboss/xb/binding/sunday/unmarshalling/XsdBinder.java 2006-10-08 12:33:09 UTC (rev 2110)
@@ -288,11 +288,18 @@
XSNamedMap groups = model.getComponents(XSConstants.MODEL_GROUP_DEFINITION);
if (ctx.trace)
log.trace("Model groups: " + groups.getLength());
+ // First make sure we bind all the groups
for(int i = 0; i < groups.getLength(); ++i)
{
XSModelGroupDefinition groupDef = (XSModelGroupDefinition)groups.item(i);
- bindGlobalGroup(groupDef.getModelGroup(), ctx.sharedElements);
+ bindGlobalGroup(groupDef, ctx);
}
+ // Now bind the particles which may have references to the other groups
+ for(int i = 0; i < groups.getLength(); ++i)
+ {
+ XSModelGroupDefinition groupDef = (XSModelGroupDefinition)groups.item(i);
+ bindGlobalGroupParticles(groupDef.getModelGroup(), ctx);
+ }
XSNamedMap types = model.getComponents(XSConstants.TYPE_DEFINITION);
if (ctx.trace)
@@ -833,41 +840,13 @@
// todo: investigate this
if(modelGroup.getParticles().getLength() > 0)
{
- ModelGroupBinding groupBinding;
- switch(modelGroup.getCompositor())
- {
- case XSModelGroup.COMPOSITOR_ALL:
- groupBinding = new AllBinding(ctx.schema);
- break;
- case XSModelGroup.COMPOSITOR_CHOICE:
- groupBinding = new ChoiceBinding(ctx.schema);
- break;
- case XSModelGroup.COMPOSITOR_SEQUENCE:
- groupBinding = new SequenceBinding(ctx.schema);
- break;
- default:
- throw new JBossXBRuntimeException("Unexpected model group: " + modelGroup.getCompositor());
- }
+ ModelGroupBinding groupBinding = bindModelGroup(ctx, modelGroup);
ParticleBinding particleBinding = new ParticleBinding(groupBinding);
particleBinding.setMaxOccursUnbounded(particle.getMaxOccursUnbounded());
particleBinding.setMinOccurs(particle.getMinOccurs());
particleBinding.setMaxOccurs(particle.getMaxOccurs());
- if (ctx.trace)
- {
- log.trace("created model group " + groupBinding);
- }
-
- if (ctx.processAnnotations)
- {
- XSAnnotation annotation = modelGroup.getAnnotation();
- if(annotation != null)
- {
- customizeTerm(annotation, groupBinding, ctx.trace);
- }
- }
-
Object o = ctx.peekTypeOrGroup();
if(o instanceof ModelGroupBinding)
{
@@ -889,7 +868,7 @@
}
ctx.pushModelGroup(groupBinding);
- bindModelGroup(ctx, modelGroup);
+ bindModelGroupParticles(ctx, modelGroup);
ctx.popModelGroup();
}
break;
@@ -909,6 +888,40 @@
}
}
+ private static ModelGroupBinding bindModelGroup(Context ctx, XSModelGroup modelGroup)
+ {
+ // Is this a global group?
+ ModelGroupBinding groupBinding = ctx.sharedElements.getGlobalGroup(modelGroup);
+ if (groupBinding != null)
+ return groupBinding;
+
+ switch(modelGroup.getCompositor())
+ {
+ case XSModelGroup.COMPOSITOR_ALL:
+ groupBinding = new AllBinding(ctx.schema);
+ break;
+ case XSModelGroup.COMPOSITOR_CHOICE:
+ groupBinding = new ChoiceBinding(ctx.schema);
+ break;
+ case XSModelGroup.COMPOSITOR_SEQUENCE:
+ groupBinding = new SequenceBinding(ctx.schema);
+ break;
+ default:
+ throw new JBossXBRuntimeException("Unexpected model group: " + modelGroup.getCompositor());
+ }
+
+ if (ctx.trace)
+ log.trace("created model group " + groupBinding);
+
+ if (ctx.processAnnotations)
+ {
+ XSAnnotation annotation = modelGroup.getAnnotation();
+ if (annotation != null)
+ customizeTerm(annotation, groupBinding, ctx.trace);
+ }
+ return groupBinding;
+ }
+
private static void bindWildcard(Context ctx, XSParticle particle)
{
WildcardBinding binding = new WildcardBinding(ctx.schema);
@@ -1047,7 +1060,7 @@
return particle;
}
- private static void bindModelGroup(Context ctx, XSModelGroup modelGroup)
+ private static void bindModelGroupParticles(Context ctx, XSModelGroup modelGroup)
{
XSObjectList particles = modelGroup.getParticles();
for(int i = 0; i < particles.getLength(); ++i)
@@ -1274,35 +1287,33 @@
}
}
- private static void bindGlobalGroup(XSModelGroup group, SharedElements sharedElements)
+ private static void bindGlobalGroup(XSModelGroupDefinition groupDef, Context ctx)
{
- XSObjectList particles = group.getParticles();
- for(int j = 0; j < particles.getLength(); ++j)
- {
- XSParticle particle = (XSParticle)particles.item(j);
- XSTerm term = particle.getTerm();
- switch(term.getType())
- {
- case XSConstants.ELEMENT_DECLARATION:
- XSElementDeclaration element = ((XSElementDeclaration)term);
- sharedElements.add(element);
- break;
- case XSConstants.WILDCARD:
- // todo is it actually possible?
- break;
- case XSConstants.MODEL_GROUP:
- bindGlobalGroup((XSModelGroup)term, sharedElements);
- }
- }
+ QName groupName = new QName(groupDef.getNamespace(), groupDef.getName());
+ XSModelGroup group = groupDef.getModelGroup();
+ ModelGroupBinding groupBinding = bindModelGroup(ctx, group);
+ groupBinding.setQName(groupName);
+ ctx.sharedElements.addGlobalGroup(group, groupBinding);
+ ctx.schema.addGroup(groupName, groupBinding);
}
+ private static void bindGlobalGroupParticles(XSModelGroup group, Context ctx)
+ {
+ ModelGroupBinding groupBinding = ctx.sharedElements.getGlobalGroup(group);
+ ctx.pushModelGroup(groupBinding);
+ bindModelGroupParticles(ctx, group);
+ ctx.popModelGroup();
+ }
+
// Inner
private static final class SharedElements
{
private Map elements = Collections.EMPTY_MAP;
+ private Map globalGroups = Collections.EMPTY_MAP;
+
public void add(XSElementDeclaration element)
{
switch(elements.size())
@@ -1340,6 +1351,25 @@
elements.put(element, type);
}
}
+
+ public void addGlobalGroup(XSModelGroup group, ModelGroupBinding groupBinding)
+ {
+ switch(globalGroups.size())
+ {
+ case 0:
+ globalGroups = Collections.singletonMap(group, groupBinding);
+ break;
+ case 1:
+ globalGroups = new HashMap(globalGroups);
+ default:
+ globalGroups.put(group, groupBinding);
+ }
+ }
+
+ public ModelGroupBinding getGlobalGroup(XSModelGroup group)
+ {
+ return (ModelGroupBinding) globalGroups.get(group);
+ }
}
private static final class Context
Modified: jbossxb/trunk/src/test/java/org/jboss/test/xml/AbstractJBossXBTest.java
===================================================================
--- jbossxb/trunk/src/test/java/org/jboss/test/xml/AbstractJBossXBTest.java 2006-10-05 12:01:55 UTC (rev 2109)
+++ jbossxb/trunk/src/test/java/org/jboss/test/xml/AbstractJBossXBTest.java 2006-10-08 12:33:09 UTC (rev 2110)
@@ -26,11 +26,8 @@
import org.jboss.test.AbstractTestCaseWithSetup;
import org.jboss.test.AbstractTestDelegate;
import org.jboss.util.Classes;
-import org.jboss.xb.binding.Unmarshaller;
-import org.jboss.xb.binding.UnmarshallerFactory;
import org.jboss.xb.binding.sunday.unmarshalling.SchemaBinding;
import org.jboss.xb.binding.sunday.unmarshalling.SchemaBindingResolver;
-import org.jboss.xb.binding.sunday.unmarshalling.XsdBinder;
/**
* AbstractJBossXBTest.
@@ -136,13 +133,91 @@
*/
protected Object unmarshal() throws Exception
{
- String testXsd = findXML(rootName + "_" + getName() + ".xsd");
- SchemaBinding schema = XsdBinder.bind(testXsd, (SchemaBindingResolver)null);
+ String testXsd = rootName + "_" + getName() + ".xsd";
+ SchemaBinding schema = bind(testXsd);
schema.setIgnoreUnresolvedFieldOrClass(false);
- Unmarshaller unmarshaller = UnmarshallerFactory.newInstance().newUnmarshaller();
- return unmarshaller.unmarshal(findXML(rootName + "_" + getName() + ".xml"), schema);
+ String name = rootName + "_" + getName() + ".xml";
+ return unmarshal(name, schema);
}
+
+ /**
+ * Unmarshall some xml<p>
+ *
+ * The xsd name is UnitTestClass_testName.xsd<p>
+ *
+ * The xml name is UnitTestClass_testName.xml
+ *
+ * @param expected the expected class
+ * @return the object
+ * @throws Exception for any problem
+ */
+ protected Object unmarshal(Class expected) throws Exception
+ {
+ Object object = unmarshal();
+ if (object == null)
+ fail("No object");
+ assertTrue("Object '" + object + "' cannot be assigned to " + expected.getName(), expected.isAssignableFrom(object.getClass()));
+ return object;
+ }
+
+ /**
+ * Unmarshal some xml
+ *
+ * @param name the name
+ * @param schema the schema
+ * @return the unmarshalled object
+ * @throws Exception for any error
+ */
+ protected Object unmarshal(String name, SchemaBinding schema) throws Exception
+ {
+ String url = findXML(name);
+ return getJBossXBDelegate().unmarshal(url, schema);
+ }
+
+ /**
+ * Unmarshal some xml
+ *
+ * @param name the name
+ * @param schema the schema
+ * @param expected the expected class
+ * @return the unmarshalled object
+ * @throws Exception for any error
+ */
+ protected Object unmarshal(String name, SchemaBinding schema, Class expected) throws Exception
+ {
+ Object object = unmarshal(name, schema);
+ if (object == null)
+ fail("No object for " + name);
+ assertTrue("Object '" + object + "' cannot be assigned to " + expected.getName(), expected.isAssignableFrom(object.getClass()));
+ return object;
+ }
+
+ /**
+ * Bind a schema
+ *
+ * @param name the name
+ * @return the object
+ * @throws Exception for any error
+ */
+ public SchemaBinding bind(String name) throws Exception
+ {
+ return bind(name, null);
+ }
+
+ /**
+ * Bind a schema
+ *
+ * @param name the name
+ * @param resolver the resolver
+ * @return the object
+ * @throws Exception for any error
+ */
+ public SchemaBinding bind(String name, SchemaBindingResolver resolver) throws Exception
+ {
+ String url = findXML(name);
+ return getJBossXBDelegate().bind(url, resolver);
+ }
/**
* Find the xml
Added: jbossxb/trunk/src/test/java/org/jboss/test/xml/GlobalGroupUnitTestCase.java
===================================================================
--- jbossxb/trunk/src/test/java/org/jboss/test/xml/GlobalGroupUnitTestCase.java 2006-10-05 12:01:55 UTC (rev 2109)
+++ jbossxb/trunk/src/test/java/org/jboss/test/xml/GlobalGroupUnitTestCase.java 2006-10-08 12:33:09 UTC (rev 2110)
@@ -0,0 +1,154 @@
+/*
+ * JBoss, Home of Professional Open Source
+ * Copyright 2005, JBoss Inc., and individual contributors as indicated
+ * by the @authors tag. See the copyright.txt in the distribution for a
+ * full listing of individual contributors.
+ *
+ * This is free software; you can redistribute it and/or modify it
+ * under the terms of the GNU Lesser General Public License as
+ * published by the Free Software Foundation; either version 2.1 of
+ * the License, or (at your option) any later version.
+ *
+ * This software is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this software; if not, write to the Free
+ * Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA
+ * 02110-1301 USA, or see the FSF site: http://www.fsf.org.
+ */
+package org.jboss.test.xml;
+
+import java.util.ArrayList;
+import java.util.Collection;
+
+import javax.xml.namespace.QName;
+
+import junit.framework.TestSuite;
+
+import org.jboss.xb.binding.metadata.ClassMetaData;
+import org.jboss.xb.binding.metadata.PropertyMetaData;
+import org.jboss.xb.binding.sunday.unmarshalling.ElementBinding;
+import org.jboss.xb.binding.sunday.unmarshalling.ModelGroupBinding;
+import org.jboss.xb.binding.sunday.unmarshalling.ParticleBinding;
+import org.jboss.xb.binding.sunday.unmarshalling.SchemaBinding;
+import org.jboss.xb.binding.sunday.unmarshalling.SequenceBinding;
+import org.jboss.xb.binding.sunday.unmarshalling.TermBinding;
+import org.jboss.xb.binding.sunday.unmarshalling.TypeBinding;
+
+/**
+ * GlobalGroupUnitTestCase.
+ *
+ * @author <a href="adrian at jboss.com">Adrian Brock</a>
+ * @version $Revision: 1.1 $
+ */
+public class GlobalGroupUnitTestCase extends AbstractJBossXBTest
+{
+ private static final String NS = "http://www.jboss.org/test/xml/globalGroup";
+
+ public static final TestSuite suite()
+ {
+ return new TestSuite(GlobalGroupUnitTestCase.class);
+ }
+
+ public GlobalGroupUnitTestCase(String name)
+ {
+ super(name);
+ }
+
+ public void testGlobalGroup() throws Exception
+ {
+ SchemaBinding schema = bind("GlobalGroup.xsd");
+ ModelGroupBinding group = schema.getGroup(new QName(NS, "global1"));
+ assertNotNull(group);
+
+ ElementBinding element = schema.getElement(new QName(NS, "parent"));
+ assertNotNull(element);
+ TypeBinding type = element.getType();
+ assertNotNull(type);
+ ParticleBinding particle = type.getParticle();
+ assertNotNull(particle);
+ TermBinding term = particle.getTerm();
+ assertNotNull(term);
+ assertTrue(term instanceof SequenceBinding);
+ SequenceBinding sequence = (SequenceBinding) term;
+ Collection particles = sequence.getParticles();
+ assertNotNull(particles);
+ assertEquals(1, particles.size());
+ particle = (ParticleBinding) particles.iterator().next();
+ term = particle.getTerm();
+ assertTrue(group == term);
+ }
+
+ public void testGlobalGroupForwardsAndBackwardsRefs() throws Exception
+ {
+ SchemaBinding schema = bind("GlobalGroup.xsd");
+ ModelGroupBinding group2 = schema.getGroup(new QName(NS, "global2"));
+ assertNotNull(group2);
+ ModelGroupBinding group3 = schema.getGroup(new QName(NS, "global3"));
+ assertNotNull(group3);
+ ModelGroupBinding group4 = schema.getGroup(new QName(NS, "global4"));
+ assertNotNull(group4);
+
+ // Forwards
+ Collection particles = group2.getParticles();
+ assertNotNull(particles);
+ assertEquals(1, particles.size());
+ ParticleBinding particle = (ParticleBinding) particles.iterator().next();
+ TermBinding term = particle.getTerm();
+ assertTrue(term == group3);
+
+ // Backwards
+ particles = group4.getParticles();
+ assertNotNull(particles);
+ assertEquals(1, particles.size());
+ particle = (ParticleBinding) particles.iterator().next();
+ term = particle.getTerm();
+ assertTrue(term == group3);
+ }
+
+ public void testGlobalGroupSchemaBindingModel() throws Exception
+ {
+ SchemaBinding schema = bind("GlobalGroup.xsd");
+ schema.setIgnoreUnresolvedFieldOrClass(false);
+
+ ClassMetaData classMetaData = new ClassMetaData();
+ classMetaData.setImpl(Parent.class.getName());
+ ElementBinding element = schema.getElement(new QName(NS, "parent"));
+ assertNotNull(element);
+ element.setClassMetaData(classMetaData);
+
+ classMetaData = new ClassMetaData();
+ classMetaData.setImpl(Global1.class.getName());
+ ModelGroupBinding group = schema.getGroup(new QName(NS, "global1"));
+ assertNotNull(group);
+ group.setClassMetaData(classMetaData);
+ group.setSkip(Boolean.FALSE);
+
+ // TODO should be able to determine this from the global group name!
+ PropertyMetaData prop = new PropertyMetaData();
+ prop.setName("global1");
+ group.setPropertyMetaData(prop);
+
+ Parent parent = (Parent) unmarshal("GlobalGroup.xml", schema, Parent.class);
+ assertNotNull(parent.global1);
+ assertEquals(2, parent.global1.child.size());
+
+ ArrayList expected = new ArrayList();
+ expected.add("Hello");
+ expected.add("Goodbye");
+ assertEquals(expected, parent.global1.child);
+ }
+
+ public static class Parent
+ {
+ public Global1 global1;
+ }
+
+ public static class Global1
+ {
+ public Collection child = new ArrayList();
+ }
+}
Modified: jbossxb/trunk/src/test/java/org/jboss/test/xml/JBossXBTestDelegate.java
===================================================================
--- jbossxb/trunk/src/test/java/org/jboss/test/xml/JBossXBTestDelegate.java 2006-10-05 12:01:55 UTC (rev 2109)
+++ jbossxb/trunk/src/test/java/org/jboss/test/xml/JBossXBTestDelegate.java 2006-10-08 12:33:09 UTC (rev 2110)
@@ -29,7 +29,9 @@
import org.jboss.xb.binding.Unmarshaller;
import org.jboss.xb.binding.UnmarshallerFactory;
import org.jboss.xb.binding.sunday.unmarshalling.DefaultSchemaResolver;
+import org.jboss.xb.binding.sunday.unmarshalling.SchemaBinding;
import org.jboss.xb.binding.sunday.unmarshalling.SchemaBindingResolver;
+import org.jboss.xb.binding.sunday.unmarshalling.XsdBinder;
/**
* JBossXBTestDelegate.
@@ -125,4 +127,43 @@
throw e;
}
}
+
+ /**
+ * Unmarshal an object
+ *
+ * @param url the url
+ * @param schema the schema
+ * @return the object
+ * @throws Exception for any error
+ */
+ public Object unmarshal(String url, SchemaBinding schema) throws Exception
+ {
+ long start = System.currentTimeMillis();
+ Unmarshaller unmarshaller = unmarshallerFactory.newUnmarshaller();
+ log.debug("Initialized parsing in " + (System.currentTimeMillis() - start) + "ms");
+ try
+ {
+ Object result = unmarshaller.unmarshal(url, schema);
+ log.debug("Total parse for " + url + " took " + (System.currentTimeMillis() - start) + "ms");
+ return result;
+ }
+ catch (Exception e)
+ {
+ log.debug("Error during parsing: " + url, e);
+ throw e;
+ }
+ }
+
+ /**
+ * Bind a schema
+ *
+ * @param url the url
+ * @param resolver the resolver
+ * @return the object
+ * @throws Exception for any error
+ */
+ public SchemaBinding bind(String url, SchemaBindingResolver resolver) throws Exception
+ {
+ return XsdBinder.bind(url, resolver);
+ }
}
Added: jbossxb/trunk/src/test/java/org/jboss/test/xml/JBossXBTestSuite.java
===================================================================
--- jbossxb/trunk/src/test/java/org/jboss/test/xml/JBossXBTestSuite.java 2006-10-05 12:01:55 UTC (rev 2109)
+++ jbossxb/trunk/src/test/java/org/jboss/test/xml/JBossXBTestSuite.java 2006-10-08 12:33:09 UTC (rev 2110)
@@ -0,0 +1,53 @@
+/*
+* JBoss, Home of Professional Open Source
+* Copyright 2006, JBoss Inc., and individual contributors as indicated
+* by the @authors tag. See the copyright.txt in the distribution for a
+* full listing of individual contributors.
+*
+* This is free software; you can redistribute it and/or modify it
+* under the terms of the GNU Lesser General Public License as
+* published by the Free Software Foundation; either version 2.1 of
+* the License, or (at your option) any later version.
+*
+* This software is distributed in the hope that it will be useful,
+* but WITHOUT ANY WARRANTY; without even the implied warranty of
+* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+* Lesser General Public License for more details.
+*
+* You should have received a copy of the GNU Lesser General Public
+* License along with this software; if not, write to the Free
+* Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA
+* 02110-1301 USA, or see the FSF site: http://www.fsf.org.
+*/
+package org.jboss.test.xml;
+
+import junit.framework.Test;
+import junit.framework.TestSuite;
+import junit.textui.TestRunner;
+
+/**
+ * JBossXB TestSuite.
+ *
+ * @author <a href="adrian at jboss.com">Adrian Brock</a>
+ * @version $Revision: 1.1 $
+ */
+public class JBossXBTestSuite extends TestSuite
+{
+ public static void main(String[] args)
+ {
+ TestRunner.run(suite());
+ }
+
+ public static Test suite()
+ {
+ TestSuite suite = new TestSuite("JBossXB Tests");
+
+ suite.addTest(GlobalGroupUnitTestCase.suite());
+ suite.addTest(RepeatableTermsUnitTestCase.suite());
+ suite.addTest(SharedElementUnitTestCase.suite());
+ suite.addTest(XIncludeUnitTestCase.suite());
+ suite.addTest(XOPUnitTestCase.suite());
+
+ return suite;
+ }
+}
Modified: jbossxb/trunk/src/test/java/org/jboss/test/xml/RepeatableTermsUnitTestCase.java
===================================================================
--- jbossxb/trunk/src/test/java/org/jboss/test/xml/RepeatableTermsUnitTestCase.java 2006-10-05 12:01:55 UTC (rev 2109)
+++ jbossxb/trunk/src/test/java/org/jboss/test/xml/RepeatableTermsUnitTestCase.java 2006-10-08 12:33:09 UTC (rev 2110)
@@ -23,6 +23,8 @@
import java.util.Arrays;
+import junit.framework.TestSuite;
+
/**
* @author <a href="mailto:alex at jboss.org">Alexey Loubyansky</a>
* @version <tt>$Revision: $</tt>
@@ -34,6 +36,11 @@
{
super(name);
}
+
+ public static final TestSuite suite()
+ {
+ return new TestSuite(RepeatableTermsUnitTestCase.class);
+ }
protected void configureLogging()
{
Added: jbossxb/trunk/src/test/java/org/jboss/test/xml/SharedElementUnitTestCase.java
===================================================================
--- jbossxb/trunk/src/test/java/org/jboss/test/xml/SharedElementUnitTestCase.java 2006-10-05 12:01:55 UTC (rev 2109)
+++ jbossxb/trunk/src/test/java/org/jboss/test/xml/SharedElementUnitTestCase.java 2006-10-08 12:33:09 UTC (rev 2110)
@@ -0,0 +1,110 @@
+/*
+ * JBoss, Home of Professional Open Source
+ * Copyright 2005, JBoss Inc., and individual contributors as indicated
+ * by the @authors tag. See the copyright.txt in the distribution for a
+ * full listing of individual contributors.
+ *
+ * This is free software; you can redistribute it and/or modify it
+ * under the terms of the GNU Lesser General Public License as
+ * published by the Free Software Foundation; either version 2.1 of
+ * the License, or (at your option) any later version.
+ *
+ * This software is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this software; if not, write to the Free
+ * Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA
+ * 02110-1301 USA, or see the FSF site: http://www.fsf.org.
+ */
+package org.jboss.test.xml;
+
+import java.util.Collection;
+import java.util.Iterator;
+
+import javax.xml.namespace.QName;
+
+import junit.framework.TestSuite;
+
+import org.jboss.xb.binding.sunday.unmarshalling.ElementBinding;
+import org.jboss.xb.binding.sunday.unmarshalling.ModelGroupBinding;
+import org.jboss.xb.binding.sunday.unmarshalling.ParticleBinding;
+import org.jboss.xb.binding.sunday.unmarshalling.SchemaBinding;
+import org.jboss.xb.binding.sunday.unmarshalling.SequenceBinding;
+import org.jboss.xb.binding.sunday.unmarshalling.TermBinding;
+import org.jboss.xb.binding.sunday.unmarshalling.TypeBinding;
+
+/**
+ * GlobalGroupUnitTestCase.
+ *
+ * @author <a href="adrian at jboss.com">Adrian Brock</a>
+ * @version $Revision: 1.1 $
+ */
+public class SharedElementUnitTestCase extends AbstractJBossXBTest
+{
+ private static final String NS = "http://www.jboss.org/test/xml/sharedElement";
+
+ public static final TestSuite suite()
+ {
+ return new TestSuite(SharedElementUnitTestCase.class);
+ }
+
+ public SharedElementUnitTestCase(String name)
+ {
+ super(name);
+ }
+
+ public void testSharedElementForwardsAndBackwards() throws Exception
+ {
+ SchemaBinding schema = bind("SharedElement.xsd");
+ ElementBinding element1 = schema.getElement(new QName(NS, "element1"));
+ assertNotNull(element1);
+ ElementBinding element2 = schema.getElement(new QName(NS, "element2"));
+ assertNotNull(element2);
+ ElementBinding element3 = schema.getElement(new QName(NS, "element3"));
+ assertNotNull(element3);
+
+ TypeBinding type = element2.getType();
+ assertNotNull(type);
+ ParticleBinding particle = type.getParticle();
+ assertNotNull(particle);
+ TermBinding term = particle.getTerm();
+ assertNotNull(term);
+ assertTrue(term instanceof SequenceBinding);
+ SequenceBinding sequence = (SequenceBinding) term;
+ Collection particles = sequence.getParticles();
+ assertNotNull(particles);
+ assertEquals(2, particles.size());
+ Iterator iterator = particles.iterator();
+ particle = (ParticleBinding) iterator.next();
+ term = particle.getTerm();
+ assertTrue(element1 == term);
+ particle = (ParticleBinding) iterator.next();
+ term = particle.getTerm();
+ assertTrue(element3 == term);
+ }
+
+ public void testSharedElementGroupForwardsAndBackwards() throws Exception
+ {
+ SchemaBinding schema = bind("SharedElement.xsd");
+ ElementBinding element1 = schema.getElement(new QName(NS, "element1"));
+ assertNotNull(element1);
+ ModelGroupBinding group = schema.getGroup(new QName(NS, "globalGroup"));
+ assertNotNull(group);
+ ElementBinding element3 = schema.getElement(new QName(NS, "element3"));
+ assertNotNull(element3);
+
+ Collection particles = group.getParticles();
+ assertNotNull(particles);
+ assertEquals(2, particles.size());
+ Iterator iterator = particles.iterator();
+ ParticleBinding particle = (ParticleBinding) iterator.next();
+ TermBinding term = particle.getTerm();
+ assertTrue(element1 == term);
+ particle = (ParticleBinding) iterator.next();
+ term = particle.getTerm();
+ assertTrue(element3 == term);
+ }
+}
Modified: jbossxb/trunk/src/test/java/org/jboss/test/xml/XIncludeUnitTestCase.java
===================================================================
--- jbossxb/trunk/src/test/java/org/jboss/test/xml/XIncludeUnitTestCase.java 2006-10-05 12:01:55 UTC (rev 2109)
+++ jbossxb/trunk/src/test/java/org/jboss/test/xml/XIncludeUnitTestCase.java 2006-10-08 12:33:09 UTC (rev 2110)
@@ -21,6 +21,8 @@
*/
package org.jboss.test.xml;
+import junit.framework.TestSuite;
+
/***
* XIncludeUnitTestCase.
*
@@ -29,6 +31,11 @@
*/
public class XIncludeUnitTestCase extends AbstractJBossXBTest
{
+ public static final TestSuite suite()
+ {
+ return new TestSuite(XIncludeUnitTestCase.class);
+ }
+
public XIncludeUnitTestCase(String name)
{
super(name);
Modified: jbossxb/trunk/src/test/java/org/jboss/test/xml/XOPUnitTestCase.java
===================================================================
--- jbossxb/trunk/src/test/java/org/jboss/test/xml/XOPUnitTestCase.java 2006-10-05 12:01:55 UTC (rev 2109)
+++ jbossxb/trunk/src/test/java/org/jboss/test/xml/XOPUnitTestCase.java 2006-10-08 12:33:09 UTC (rev 2110)
@@ -44,14 +44,21 @@
import java.io.StringWriter;
import java.util.Arrays;
+import junit.framework.TestSuite;
+
/**
* @author <a href="mailto:alex at jboss.org">Alexey Loubyansky</a>
* @version <tt>$Revision$</tt>
*/
public class XOPUnitTestCase
extends AbstractJBossXBTest
-{
+{
+ public static final TestSuite suite()
+ {
+ return new TestSuite(XOPUnitTestCase.class);
+ }
+
public XOPUnitTestCase(String name)
{
super(name);
Added: jbossxb/trunk/src/test/resources/org/jboss/test/xml/GlobalGroup.xml
===================================================================
--- jbossxb/trunk/src/test/resources/org/jboss/test/xml/GlobalGroup.xml 2006-10-05 12:01:55 UTC (rev 2109)
+++ jbossxb/trunk/src/test/resources/org/jboss/test/xml/GlobalGroup.xml 2006-10-08 12:33:09 UTC (rev 2110)
@@ -0,0 +1,6 @@
+<?xml version="1.0" encoding="UTF-8"?>
+
+<parent xmlns='http://www.jboss.org/test/xml/globalGroup'>
+ <child>Hello</child>
+ <child>Goodbye</child>
+</parent>
Added: jbossxb/trunk/src/test/resources/org/jboss/test/xml/GlobalGroup.xsd
===================================================================
--- jbossxb/trunk/src/test/resources/org/jboss/test/xml/GlobalGroup.xsd 2006-10-05 12:01:55 UTC (rev 2109)
+++ jbossxb/trunk/src/test/resources/org/jboss/test/xml/GlobalGroup.xsd 2006-10-08 12:33:09 UTC (rev 2110)
@@ -0,0 +1,44 @@
+<?xml version="1.0" encoding="UTF-8"?>
+
+<xsd:schema xmlns:xsd="http://www.w3.org/2001/XMLSchema"
+ targetNamespace="http://www.jboss.org/test/xml/globalGroup"
+ xmlns="http://www.jboss.org/test/xml/globalGroup"
+ elementFormDefault="qualified"
+ attributeFormDefault="unqualified"
+ version="1.0">
+
+ <xsd:group name="global1">
+ <xsd:sequence>
+ <xsd:element ref="child" maxOccurs="unbounded"/>
+ </xsd:sequence>
+ </xsd:group>
+
+ <xsd:group name="global2">
+ <xsd:sequence>
+ <xsd:group ref="global3"/>
+ </xsd:sequence>
+ </xsd:group>
+
+ <xsd:group name="global3">
+ <xsd:sequence>
+ <xsd:element ref="child"/>
+ </xsd:sequence>
+ </xsd:group>
+
+ <xsd:group name="global4">
+ <xsd:sequence>
+ <xsd:group ref="global3"/>
+ </xsd:sequence>
+ </xsd:group>
+
+ <xsd:element name="parent">
+ <xsd:complexType>
+ <xsd:sequence>
+ <xsd:group ref="global1"/>
+ </xsd:sequence>
+ </xsd:complexType>
+ </xsd:element>
+
+ <xsd:element name="child" type="xsd:string"/>
+
+</xsd:schema>
Added: jbossxb/trunk/src/test/resources/org/jboss/test/xml/SharedElement.xsd
===================================================================
--- jbossxb/trunk/src/test/resources/org/jboss/test/xml/SharedElement.xsd 2006-10-05 12:01:55 UTC (rev 2109)
+++ jbossxb/trunk/src/test/resources/org/jboss/test/xml/SharedElement.xsd 2006-10-08 12:33:09 UTC (rev 2110)
@@ -0,0 +1,30 @@
+<?xml version="1.0" encoding="UTF-8"?>
+
+<xsd:schema xmlns:xsd="http://www.w3.org/2001/XMLSchema"
+ targetNamespace="http://www.jboss.org/test/xml/sharedElement"
+ xmlns="http://www.jboss.org/test/xml/sharedElement"
+ elementFormDefault="qualified"
+ attributeFormDefault="unqualified"
+ version="1.0">
+
+ <xsd:element name="element1" type="xsd:string"/>
+
+ <xsd:element name="element2">
+ <xsd:complexType>
+ <xsd:sequence>
+ <xsd:element ref="element1"/>
+ <xsd:element ref="element3"/>
+ </xsd:sequence>
+ </xsd:complexType>
+ </xsd:element>
+
+ <xsd:group name="globalGroup">
+ <xsd:sequence>
+ <xsd:element ref="element1"/>
+ <xsd:element ref="element3"/>
+ </xsd:sequence>
+ </xsd:group>
+
+ <xsd:element name="element3" type="xsd:string"/>
+
+</xsd:schema>
More information about the jboss-svn-commits
mailing list