All Downloads are FREE. Search and download functionalities are using the official Maven repository.

org.apache.ws.jaxme.junit.ParserTest Maven / Gradle / Ivy

The newest version!
/*
 * Copyright 2003, 2004  The Apache Software Foundation
 * 
 * Licensed under the Apache License, Version 2.0 (the "License");
 * you may not use this file except in compliance with the License.
 * You may obtain a copy of the License at
 * 
 * http://www.apache.org/licenses/LICENSE-2.0
 * 
 * Unless required by applicable law or agreed to in writing, software
 * distributed under the License is distributed on an "AS IS" BASIS,
 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 * See the License for the specific language governing permissions and
 * limitations under the License.

 */
package org.apache.ws.jaxme.junit;

import java.io.StringReader;
import java.math.BigInteger;
import java.util.ArrayList;
import java.util.Calendar;

import org.apache.ws.jaxme.generator.Generator;
import org.apache.ws.jaxme.generator.impl.GeneratorImpl;
import org.apache.ws.jaxme.generator.sg.AttributeSG;
import org.apache.ws.jaxme.generator.sg.ComplexContentSG;
import org.apache.ws.jaxme.generator.sg.ComplexTypeSG;
import org.apache.ws.jaxme.generator.sg.Facet;
import org.apache.ws.jaxme.generator.sg.GroupSG;
import org.apache.ws.jaxme.generator.sg.ListTypeSG;
import org.apache.ws.jaxme.generator.sg.ObjectSG;
import org.apache.ws.jaxme.generator.sg.ParticleSG;
import org.apache.ws.jaxme.generator.sg.SGFactory;
import org.apache.ws.jaxme.generator.sg.SchemaSG;
import org.apache.ws.jaxme.generator.sg.SimpleContentSG;
import org.apache.ws.jaxme.generator.sg.SimpleTypeSG;
import org.apache.ws.jaxme.generator.sg.TypeSG;
import org.apache.ws.jaxme.generator.sg.UnionTypeSG;
import org.apache.ws.jaxme.generator.sg.impl.JAXBSGFactory;
import org.apache.ws.jaxme.generator.sg.impl.JAXBSchemaReader;
import org.apache.ws.jaxme.generator.sg.impl.SGFactoryImpl;
import org.apache.ws.jaxme.js.JavaQNameImpl;
import org.apache.ws.jaxme.xs.XSAttributable;
import org.apache.ws.jaxme.xs.XSAttribute;
import org.apache.ws.jaxme.xs.XSComplexType;
import org.apache.ws.jaxme.xs.XSElement;
import org.apache.ws.jaxme.xs.XSParser;
import org.apache.ws.jaxme.xs.XSSchema;
import org.apache.ws.jaxme.xs.jaxb.JAXBAttribute;
import org.apache.ws.jaxme.xs.jaxb.JAXBJavaType;
import org.apache.ws.jaxme.xs.jaxb.impl.JAXBParser;
import org.apache.ws.jaxme.xs.types.XSID;
import org.apache.ws.jaxme.xs.xml.XsQName;
import org.xml.sax.InputSource;
import org.xml.sax.SAXException;


/** 

Implements some basic tests for the Schema generator.

* * @author Jochen Wiedmann * @version $Id: ParserTest.java 232139 2005-07-13 21:58:16 +0200 (Wed, 13 Jul 2005) jochen $ */ public class ParserTest extends BaseTestCase { public ParserTest(String arg) { super(arg); } protected SchemaSG parse(String pSchema, String pSystemId) throws Exception { JAXBSchemaReader r = getSchemaReader(); InputSource isource = new InputSource(new StringReader(pSchema)); isource.setSystemId(pSystemId); return r.parse(isource); } protected JAXBSchemaReader getSchemaReader() { Generator generator = new GeneratorImpl(); JAXBSchemaReader r = new JAXBSchemaReader(); generator.setSchemaReader(r); r.setGenerator(generator); return r; } public void testSimpleTypes() throws Exception { final String schema = "\n" + "\n" + " \n" + " \n" + " \n" + " \n" + " \n" + "\n" + " \n" + " \n" + " \n" + "\n" + " \n" + " \n" + " \n" + "\n"; SchemaSG schemaSG = parse(schema, "testSimpleTypes.xsd"); TypeSG[] st = schemaSG.getTypes(); assertEquals(3, st.length); TypeSG st1 = st[0]; assertTrue(!st1.isComplex()); SimpleTypeSG sst1 = st1.getSimpleTypeSG(); assertTrue(sst1.isAtomic()); assertTrue(!sst1.isList()); assertTrue(!sst1.isUnion()); assertEquals(sst1.getRuntimeType(), JavaQNameImpl.getInstance(String.class)); TypeSG st2 = st[1]; assertTrue(!st2.isComplex()); SimpleTypeSG sst2 = st2.getSimpleTypeSG(); assertTrue(!sst2.isAtomic()); assertTrue(sst2.isList()); assertTrue(!sst2.isUnion()); ListTypeSG lt = sst2.getListType(); assertNotNull(lt.getItemType()); TypeSG sst = lt.getItemType(); assertTrue(!sst.isComplex()); SimpleTypeSG it = sst.getSimpleTypeSG(); assertEquals(JavaQNameImpl.INT, it.getRuntimeType()); TypeSG st3 = st[2]; assertEquals(false, st3.isComplex()); SimpleTypeSG sst3 = st3.getSimpleTypeSG(); assertEquals(false, sst3.isAtomic()); assertEquals(false, sst3.isList()); assertEquals(true, sst3.isUnion()); UnionTypeSG ut = sst3.getUnionType(); TypeSG[] uTypes = ut.getMemberTypes(); assertEquals(2, uTypes.length); } public void testAttributes() throws Exception { final String schema = "\n" + "\n" + " \n" + " \n" + " \n" + " \n" + " \n" + " \n" + "\n" + " \n" + " \n" + " \n" + " \n" + " \n" + "\n" + " \n" + " \n" + " \n" + " \n" + " \n" + "\n"; SchemaSG jschema = parse(schema, "testAttributes.xsd"); TypeSG[] types = jschema.getTypes(); assertEquals(1, types.length); assertTrue(types[0].isComplex()); AttributeSG[] attr = types[0].getComplexTypeSG().getAttributes(); assertEquals(3, attr.length); AttributeSG attr1 = attr[0]; assertTrue(!attr1.getTypeSG().isComplex()); SimpleTypeSG sst1 = attr1.getTypeSG().getSimpleTypeSG(); assertTrue(sst1.isAtomic()); assertEquals(JavaQNameImpl.getInstance(String.class), sst1.getRuntimeType()); AttributeSG attr2 = attr[1]; assertTrue(!attr2.getTypeSG().isComplex()); SimpleTypeSG sst2 = attr2.getTypeSG().getSimpleTypeSG(); assertTrue(sst2.isAtomic()); assertEquals(JavaQNameImpl.INT, sst2.getRuntimeType()); AttributeSG attr3 = attr[2]; assertTrue(!attr3.getTypeSG().isComplex()); SimpleTypeSG sst3 = attr3.getTypeSG().getSimpleTypeSG(); assertTrue(sst3.isAtomic()); assertEquals(JavaQNameImpl.INT, sst3.getRuntimeType()); } public void testAttributeGroups() throws Exception { final String schema = "\n" + "\n" + " \n" + " \n" + " \n" + " \n" + " \n" + " \n" + " \n" + "\n" + " \n" + " \n" + " \n" + " \n" + " \n" + "\n" + " \n" + " \n" + " \n" + " \n" + " \n" + "\n" + " \n" + " \n" + " \n" + " \n" + " \n" + "\n" + " \n" + " \n" + " \n" + " \n" + " \n" + "\n"; SchemaSG jschema = parse(schema, "testAttributeGroups.xsd"); ObjectSG[] elements = jschema.getElements(); assertNotNull(elements); assertEquals(2, elements.length); ObjectSG ea = elements[0]; assertTrue(ea.getTypeSG().isComplex()); ComplexTypeSG eact = ea.getTypeSG().getComplexTypeSG(); AttributeSG[] eactAttr = eact.getAttributes(); assertEquals(3, eactAttr.length); assertEquals(new XsQName((String) null, "d"), eactAttr[0].getName()); assertEquals(eactAttr[0].getTypeSG().getSimpleTypeSG().getRuntimeType(), JavaQNameImpl.getInstance(Calendar.class)); assertEquals(new XsQName((String) null, "e"), eactAttr[1].getName()); assertEquals(eactAttr[1].getTypeSG().getSimpleTypeSG().getRuntimeType(), JavaQNameImpl.getInstance(float.class)); assertEquals(new XsQName((String) null, "a"), eactAttr[2].getName()); assertEquals(eactAttr[2].getTypeSG().getSimpleTypeSG().getRuntimeType(), JavaQNameImpl.getInstance(String.class)); ObjectSG eb = elements[1]; assertTrue(eb.getTypeSG().isComplex()); ComplexTypeSG ebct = eb.getTypeSG().getComplexTypeSG(); AttributeSG[] ebctAttr = ebct.getAttributes(); assertEquals(5, ebctAttr.length); assertEquals(new XsQName((String) null, "g"), ebctAttr[0].getName()); assertEquals(ebctAttr[0].getTypeSG().getSimpleTypeSG().getRuntimeType(), JavaQNameImpl.getInstance(double.class)); assertEquals(new XsQName((String) null, "d"), ebctAttr[1].getName()); assertEquals(ebctAttr[1].getTypeSG().getSimpleTypeSG().getRuntimeType(), JavaQNameImpl.getInstance(Calendar.class)); assertEquals(ebctAttr[2].getTypeSG().getSimpleTypeSG().getRuntimeType(), JavaQNameImpl.getInstance(float.class)); assertEquals(ebctAttr[3].getTypeSG().getSimpleTypeSG().getRuntimeType(), JavaQNameImpl.getInstance(String.class)); assertEquals(ebctAttr[4].getTypeSG().getSimpleTypeSG().getRuntimeType(), JavaQNameImpl.getInstance(int.class)); } public void testElements() throws Exception { final String schema = "\n" + "\n" + " \n" + " \n" + " \n" + " \n" + " \n" + " \n" + "\n" + " \n" + " \n" + " \n" + " \n" + " \n" + "\n" + " \n" + " \n" + " \n" + " \n" + " The type of 'c'.\n" + " \n" + " \n" + " \n" + " \n" + " \n" + " \n" + " \n" + " The element 'd'.\n" + " \n" + " \n" + " \n" + " \n" + " \n" + " \n" + " \n" + " The attribute 'e'.\n" + " \n" + " \n" + " \n" + " \n" + " \n" + "\n" + " \n" + " \n" + " \n" + " \n" + " \n" + " \n" + " \n" + " \n" + " \n" + "\n"; System.err.println("testElements: ->"); SchemaSG jschema = parse(schema, "testElements.xsd"); ObjectSG[] elements = jschema.getElements(); assertEquals(4, elements.length); ObjectSG e1 = elements[0]; assertEquals(new XsQName((String) null, "a"), e1.getName()); TypeSG t1 = e1.getTypeSG(); assertTrue(!t1.isComplex()); assertTrue(t1.getSimpleTypeSG().isAtomic()); assertEquals(t1.getSimpleTypeSG().getRuntimeType(), JavaQNameImpl.getInstance(String.class)); ObjectSG e2 = elements[1]; assertEquals(new XsQName((String) null, "b"), e2.getName()); TypeSG t2 = e2.getTypeSG(); assertTrue(!t2.isComplex()); SimpleTypeSG st2 = t2.getSimpleTypeSG(); assertTrue(st2.isAtomic()); assertEquals(JavaQNameImpl.getInstance(float.class), st2.getRuntimeType()); ObjectSG e3 = elements[2]; assertEquals(new XsQName((String) null, "c"), e3.getName()); TypeSG t3 = e3.getTypeSG(); assertTrue(t3.isComplex()); ComplexTypeSG ct3 = t3.getComplexTypeSG(); assertTrue(!ct3.hasSimpleContent()); ComplexContentSG cct3 = ct3.getComplexContentSG(); ParticleSG[] childs = cct3.getRootParticle().getGroupSG().getParticles(); assertEquals(2, childs.length); assertTrue(childs[0].isElement()); ObjectSG child1 = childs[0].getObjectSG(); assertEquals(new XsQName((String) null, "a"), child1.getName()); assertTrue(childs[1].isElement()); ObjectSG child2 = childs[1].getObjectSG(); assertEquals(new XsQName((String) null, "d"), child2.getName()); assertTrue(!child2.getTypeSG().isComplex()); SimpleTypeSG st4 = child2.getTypeSG().getSimpleTypeSG(); assertEquals(JavaQNameImpl.getInstance(double.class), st4.getRuntimeType()); AttributeSG[] attributes = ct3.getAttributes(); assertEquals(1, attributes.length); assertEquals(new XsQName((String) null, "e"), attributes[0].getName()); assertTrue(!attributes[0].getTypeSG().isComplex()); ObjectSG e4 = elements[3]; assertTrue(e4.getTypeSG().isComplex()); ComplexTypeSG ct4 = e4.getTypeSG().getComplexTypeSG(); assertTrue(ct4.hasSimpleContent()); SimpleContentSG sct4 = ct4.getSimpleContentSG(); assertTrue(!sct4.getContentTypeSG().isComplex()); assertEquals(JavaQNameImpl.getInstance(int.class), sct4.getContentTypeSG().getRuntimeType()); assertEquals(1, ct4.getAttributes().length); assertEquals(new XsQName((String) null, "g"), ct4.getAttributes()[0].getName()); assertEquals(JavaQNameImpl.getInstance(boolean.class), ct4.getAttributes()[0].getTypeSG().getRuntimeType()); } public void testFacets() throws Exception { final String schema = "\n" + "\n" + " \n" + " \n" + " \n" + " \n" + " \n" + " \n" + " \n" + " \n" + " \n" + " \n" + " \n" + " \n" + " \n" + " \n" + "\n"; SchemaSG jschema = parse(schema, "testFacets.xsd"); ObjectSG[] elements = jschema.getElements(); assertEquals(1, elements.length); ObjectSG se1 = elements[0]; assertEquals(new XsQName((String) null, "a"), se1.getName()); assertTrue(!se1.getTypeSG().isComplex()); SimpleTypeSG sst1 = se1.getTypeSG().getSimpleTypeSG(); assertEquals(JavaQNameImpl.getInstance(String.class), sst1.getRuntimeType()); Facet facet = sst1.getFacet(Facet.ENUMERATION); assertNotNull(facet); String[] values = facet.getValues(); assertNotNull(values); assertEquals(3, values.length); assertEquals("AK", values[0]); assertEquals("AL", values[1]); assertEquals("AR", values[2]); } public void testGlobalBindingsDefaults() throws Exception { // Parse a schema without globalBindings; it should have the default // settings. final String schema = "\n" + "\n"; SchemaSG jschema = parse(schema, "testGlobalBindingsDefaults.xsd"); String collectionType = jschema.getCollectionType(); assertEquals(ArrayList.class.getName(), collectionType); JAXBJavaType[] javaTypes = jschema.getJAXBJavaTypes(); assertNotNull(javaTypes); assertEquals(0, javaTypes.length); XsQName[] typesafeEnumBase = jschema.getTypesafeEnumBase(); assertNotNull(typesafeEnumBase); assertEquals(1, typesafeEnumBase.length); assertEquals(new XsQName(XSParser.XML_SCHEMA_URI, "NCName"), typesafeEnumBase[0]); boolean isBindingStyleModelGroup = jschema.isBindingStyleModelGroup(); assertTrue(!isBindingStyleModelGroup); boolean choiceContentProperty = jschema.isChoiceContentProperty(); assertTrue(!choiceContentProperty); boolean enableFailFastCheck = jschema.isFailFastCheckEnabled(); assertTrue(!enableFailFastCheck); boolean isJavaNamingConventionsEnabled = jschema.isJavaNamingConventionsEnabled(); assertTrue(isJavaNamingConventionsEnabled); boolean isFixedAttributeConstantProperty = jschema.isFixedAttributeConstantProperty(); assertTrue(!isFixedAttributeConstantProperty); boolean generatingIsSetMethod = jschema.isGeneratingIsSetMethod(); assertTrue(!generatingIsSetMethod); boolean underscoreWordSeparator = jschema.isUnderscoreWordSeparator(); assertTrue(underscoreWordSeparator); } public void testGlobalBindings() throws Exception { final String schema = "\n" + "\n" + " \n" + " \n" + " \n" + " " + " \n" + ""; SchemaSG jschema = parse(schema, "testGlobalBindingsDefaults.xsd"); String collectionType = jschema.getCollectionType(); assertEquals("indexed", collectionType); XsQName[] typesafeEnumBase = jschema.getTypesafeEnumBase(); assertNotNull(typesafeEnumBase); assertEquals(2, typesafeEnumBase.length); assertEquals(new XsQName(XSParser.XML_SCHEMA_URI, "String"), typesafeEnumBase[0]); assertEquals(new XsQName(XSParser.XML_SCHEMA_URI, "NCName"), typesafeEnumBase[1]); boolean isBindingStyleModelGroup = jschema.isBindingStyleModelGroup(); assertTrue(isBindingStyleModelGroup); boolean isChoiceContentProperty = jschema.isChoiceContentProperty(); assertTrue(isChoiceContentProperty); boolean enableFailFastCheck = jschema.isFailFastCheckEnabled(); assertTrue(enableFailFastCheck); boolean isJavaNamingConventionsEnabled = jschema.isJavaNamingConventionsEnabled(); assertTrue(!isJavaNamingConventionsEnabled); boolean fixedAttributeConstantProperty = jschema.isFixedAttributeConstantProperty(); assertTrue(fixedAttributeConstantProperty); boolean generatingIsSetMethod = jschema.isGeneratingIsSetMethod(); assertTrue(generatingIsSetMethod); boolean isUnderscoreWordSeparator = jschema.isUnderscoreWordSeparator(); assertTrue(!isUnderscoreWordSeparator); JAXBJavaType[] javaTypes = jschema.getJAXBJavaTypes(); assertNotNull(javaTypes); assertEquals(0, javaTypes.length); } /* public void testSchemaBindingsDefaults() throws Exception { // Parse a schema without schemaBindings; it should have the default // settings. final String mName = "testSchemaBindingsDefaults"; log.entering(mName); final String schema = "\n" + "\n"; JAXBSchemaReader r = new JAXBSchemaReader(); InputSource isource = new InputSource(new StringReader(schema)); isource.setSystemId("testSchemaBindingsDefaults.xsd"); JAXBSchema jschema = (JAXBSchema) r.parse(isource); SchemaBindings schemaBindings = jschema.getSchemaBindings(); List nameXmlTransforms = schemaBindings.getNameXmlTransform(); assertNotNull(nameXmlTransforms); assertEquals(0, nameXmlTransforms.size()); assertNull(schemaBindings.getPackage()); } public void testSchemaBindings() throws Exception { final String mName = "testSchemaBindings"; final String myPackageName = "org.apache.ws.jaxme.somepackage"; log.entering(mName); final String schema = "\n" + "\n" + " \n" + " \n" + " \n" + " \n" + " Test documentation\n" + " \n" + " \n" + " \n" + " \n" + " \n" + " \n" + " \n" + " \n" + " \n" + " \n" + " \n" + " \n" + " \n" + " \n" + ""; JAXBSchemaReader r = new JAXBSchemaReader(); InputSource isource = new InputSource(new StringReader(schema)); isource.setSystemId("testSchemaBindings.xsd"); JAXBSchema jschema = (JAXBSchema) r.parse(isource); SchemaBindings schemaBindings = jschema.getSchemaBindings(); SchemaBindings.Package schemaPackage = schemaBindings.getPackage(); assertNotNull(schemaPackage); assertEquals(myPackageName, schemaPackage.getName()); Javadoc javadoc = schemaPackage.getJavadoc(); assertNotNull(javadoc); assertEquals("Test documentation", javadoc.getText()); List nameXmlTransforms = schemaBindings.getNameXmlTransform(); assertNotNull(nameXmlTransforms); assertEquals(1, nameXmlTransforms.size()); SchemaBindings.NameXmlTransform nameXmlTransform = (SchemaBindings.NameXmlTransform) nameXmlTransform.get(0); assertNotNull(nameXmlTransform); SchemaBindings.NameTransformation transformation = (SchemaBindings.NameTransformation) nameXmlTransform.getTypeName(); assertEquals("a", transformation.getSuffix()); assertEquals("b", transformation.getPrefix()); JAXBSchemaWriter writer = new JAXBSchemaWriter(); SGFactory factory = writer.getSGFactory(); SchemaType[] types = jschema.getSchemaTypes(); assertNotNull(types); assertEquals(1, types.length); SchemaType st = types[0]; TypeSG typeSG = factory.getTypeSG(st); JavaQName qName = typeSG.getClassName(st, SchemaClass.CLASS_TYPE_XML_INTERFACE); assertEquals(myPackageName, qName.getPackageName()); } */ public void testPurchaseOrder() throws Exception { /* A modified version of the first example from XML Schema Part 0: http:www.w3.org/TR/xmlschema-0/#po.xml Modifications: 1) Removed forward references by re-ordering the document 2) Changed some types to remove types not currently supported xsd:NMTOKEN -> xsd:string xsd:positiveInteger -> xsd:integer */ final String schema = " \n" + " \n" + " \n" + " \n" + " Purchase order schema for Example.com. \n" + " Copyright 2000 Example.com. All rights reserved. \n" + " \n" + " \n" + " \n" + " \n" + " \n" + " \n" + " \n" + " \n" + " \n" + " \n" + " \n" + " \n" + " \n" + " \n" + " \n" + " \n" + " \n" + " \n" + " \n" + " \n" + " \n" + " \n" + " \n" + " \n" + " \n" + " \n" + " \n" + " \n" + " \n" + " \n" + " \n" + " \n" + " \n" + " \n" + " \n" + " \n" + " \n" + " \n" + " \n" + " \n" + " \n" + " \n" + " \n" + " \n" + " \n" + " \n" + " \n" + " \n" + " \n" + " \n" + " \n" + " \n" + " \n" + " \n" + " \n" + " \n" + " \n" + " \n" + " \n" + " \n" + " \n" + " \n" + " \n"; SchemaSG jschema = parse(schema, "testPurchaseOrder.xsd"); TypeSG[] schemaTypes = jschema.getTypes(); assertNotNull(schemaTypes); assertEquals(4, schemaTypes.length); // SKU TypeSG sku = schemaTypes[0]; assertEquals(new XsQName((String) null, "SKU"), sku.getName()); assertTrue(sku.isGlobalType()); assertTrue(!sku.isComplex()); assertTrue(sku.isRestriction()); assertEquals(new XsQName(XSParser.XML_SCHEMA_URI, "string"), sku.getRestrictedType().getName()); // USAddress // // TypeSG usAddress = schemaTypes[1]; assertEquals(new XsQName((String) null, "USAddress"), usAddress.getName()); assertTrue(usAddress.isGlobalType()); assertTrue(usAddress.isComplex()); assertTrue(usAddress.getComplexTypeSG().getComplexContentSG().getRootParticle().getGroupSG().isSequence()); // USAddress.country // // ToDo: test attribute fixed='US' AttributeSG [] usAddressAttributes = usAddress.getComplexTypeSG().getAttributes(); assertEquals(1, usAddressAttributes.length); AttributeSG country = usAddressAttributes[0]; assertEquals(new XsQName((String) null, "country"), country.getName()); assertEquals(JavaQNameImpl.getInstance(String.class), country.getTypeSG().getRuntimeType()); // USAddress children String [] nameShouldBe = {"name", "street", "city", "state", "zip"}; ParticleSG [] usAddressChildren = usAddress.getComplexTypeSG().getComplexContentSG().getRootParticle().getGroupSG().getParticles(); assertEquals(5, usAddressChildren.length); for (int i = 0; i < usAddressChildren.length; i++) { ParticleSG child = usAddressChildren[i]; assertTrue(child.isElement()); assertEquals(new XsQName((String) null, nameShouldBe[i]), child.getObjectSG().getName()); assertTrue(!child.getObjectSG().getTypeSG().isComplex()); Class childRuntimeClass = "zip".equals(nameShouldBe[i]) ? BigInteger.class : String.class; assertEquals(JavaQNameImpl.getInstance(childRuntimeClass), child.getObjectSG().getTypeSG().getRuntimeType()); } // Items TypeSG items = schemaTypes[2]; assertEquals(new XsQName((String) null, "Items"), items.getName()); assertTrue(items.isGlobalType()); assertTrue(items.isComplex()); ComplexTypeSG itemsComplex = items.getComplexTypeSG(); assertTrue(!itemsComplex.hasSimpleContent()); ComplexContentSG itemsComplexContent = itemsComplex.getComplexContentSG(); GroupSG group = itemsComplexContent.getRootParticle().getGroupSG(); assertTrue(group.isSequence()); // Items.item ParticleSG[] itemsChildren = group.getParticles(); assertEquals(1, itemsChildren.length); ParticleSG item = itemsChildren[0]; assertTrue(item.isElement()); assertEquals(new XsQName((String) null, "item"), item.getObjectSG().getName()); assertEquals(0, item.getMinOccurs()); assertEquals(-1, item.getMaxOccurs()); TypeSG itemST = item.getObjectSG().getTypeSG(); assertTrue(itemST.isComplex()); assertTrue(!itemST.getComplexTypeSG().hasSimpleContent()); assertTrue(itemST.getComplexTypeSG().getComplexContentSG().getRootParticle().getGroupSG().isSequence()); // Items.item.partNum // AttributeSG[] itemAttributes = itemST.getComplexTypeSG().getAttributes(); assertEquals(1, itemAttributes.length); AttributeSG partNum = itemAttributes[0]; assertEquals(new XsQName((String) null, "partNum"), partNum.getName()); assertTrue(partNum.isRequired()); // Items.item.USPrice // ParticleSG[] itemChildren = itemST.getComplexTypeSG().getComplexContentSG().getRootParticle().getGroupSG().getParticles(); assertEquals(5, itemChildren.length); ParticleSG usPrice = itemChildren[2]; assertTrue(usPrice.isElement()); assertEquals(new XsQName((String) null,"USPrice"), usPrice.getObjectSG().getName()); TypeSG usPriceSST = usPrice.getObjectSG().getTypeSG(); assertTrue(!usPrice.getObjectSG().getTypeSG().isComplex()); assertTrue(usPriceSST.getSimpleTypeSG().isAtomic()); assertEquals(java.math.BigDecimal.class.getName(), usPriceSST.getRuntimeType().toString()); // Items.item.comment // ParticleSG comment = itemChildren[3]; assertTrue(comment.isElement()); assertEquals(new XsQName((String) null, "comment"), comment.getObjectSG().getName()); assertEquals(0, comment.getMinOccurs()); TypeSG commentSST = comment.getObjectSG().getTypeSG(); assertTrue(!commentSST.isComplex()); assertTrue(commentSST.getSimpleTypeSG().isAtomic()); assertEquals(JavaQNameImpl.getInstance(String.class), commentSST.getRuntimeType()); // Items.item.productName // ParticleSG productName = itemChildren[0]; assertTrue(productName.isElement()); assertEquals(new XsQName((String) null, "productName"), productName.getObjectSG().getName()); TypeSG productNameSST = productName.getObjectSG().getTypeSG(); assertTrue(!productNameSST.isComplex()); assertTrue(productNameSST.getSimpleTypeSG().isAtomic()); assertEquals(JavaQNameImpl.getInstance(String.class), productNameSST.getRuntimeType()); // Items.item.quantity ParticleSG quantity = itemChildren[1]; assertTrue(quantity.isElement()); assertEquals(new XsQName((String) null, "quantity"), quantity.getObjectSG().getName()); TypeSG quantitySST = quantity.getObjectSG().getTypeSG(); assertTrue(!quantitySST.isComplex()); assertTrue(quantitySST.getSimpleTypeSG().isAtomic()); assertEquals(JavaQNameImpl.getInstance(java.math.BigInteger.class), quantitySST.getRuntimeType()); // Items.item.shipDate // ParticleSG shipDate = itemChildren[4]; assertTrue(shipDate.isElement()); assertEquals(new XsQName((String) null, "shipDate"), shipDate.getObjectSG().getName()); TypeSG shipDateSST = shipDate.getObjectSG().getTypeSG(); assertTrue(!shipDateSST.isComplex()); assertEquals(0, shipDate.getMinOccurs()); assertTrue(shipDateSST.getSimpleTypeSG().isAtomic()); assertEquals(Calendar.class.getName(), shipDateSST.getRuntimeType().toString()); // PurchaseOrderType TypeSG purchaseOrderType = schemaTypes[3]; assertEquals(new XsQName((String) null, "PurchaseOrderType"), purchaseOrderType.getName()); assertTrue(purchaseOrderType.isGlobalType()); assertTrue(purchaseOrderType.isComplex()); assertTrue(purchaseOrderType.getComplexTypeSG().getComplexContentSG().getRootParticle().getGroupSG().isSequence()); // PurchaseOrderType.orderDate // AttributeSG [] potAttributes = purchaseOrderType.getComplexTypeSG().getAttributes(); assertEquals(1, potAttributes.length); AttributeSG orderDate = potAttributes[0]; assertEquals(new XsQName((String) null, "orderDate"), orderDate.getName()); assertEquals(JavaQNameImpl.getInstance(Calendar.class), orderDate.getTypeSG().getSimpleTypeSG().getRuntimeType()); ParticleSG [] potChildren = purchaseOrderType.getComplexTypeSG().getComplexContentSG().getRootParticle().getGroupSG().getParticles(); assertEquals(4, potChildren.length); // PurchaseOrderType.shipTo // ParticleSG shipTo = potChildren[0]; assertTrue(shipTo.isElement()); assertEquals(new XsQName((String) null, "shipTo"), shipTo.getObjectSG().getName()); TypeSG shipToST = shipTo.getObjectSG().getTypeSG(); assertTrue(shipToST.isComplex()); assertEquals(new XsQName((String) null, "USAddress"), shipToST.getName()); assertTrue(shipToST.isComplex()); // PurchaseOrderType.billTo // ParticleSG billTo = potChildren[1]; assertTrue(billTo.isElement()); assertEquals(new XsQName((String) null, "billTo"), billTo.getObjectSG().getName()); TypeSG billToST = billTo.getObjectSG().getTypeSG(); assertTrue(billToST.isComplex()); assertEquals(new XsQName((String) null, "USAddress"), billToST.getName()); assertTrue(billToST.isComplex()); // PurchaseOrderType.comment // ParticleSG potComment = potChildren[2]; assertTrue(potComment.isElement()); assertEquals(new XsQName((String) null, "comment"), comment.getObjectSG().getName()); assertEquals(0, comment.getMinOccurs()); TypeSG potCommentST = potComment.getObjectSG().getTypeSG(); assertTrue(!potCommentST.isComplex()); assertEquals(JavaQNameImpl.getInstance(String.class), potCommentST.getRuntimeType()); // PurchaseOrderType.items // ParticleSG potItems = potChildren[3]; assertTrue(potItems.isElement()); assertEquals(new XsQName((String) null, "items"), potItems.getObjectSG().getName()); assertTrue(potItems.getObjectSG().getTypeSG().isComplex()); // purchaseOrder // ObjectSG[] elements = jschema.getElements(); assertNotNull(elements); assertEquals(2, elements.length); ObjectSG purchaseOrder = elements[1]; assertEquals(new XsQName((String) null, "purchaseOrder"), purchaseOrder.getName()); assertTrue(purchaseOrder.getTypeSG().isComplex()); assertTrue(purchaseOrder.getTypeSG().isGlobalType()); assertEquals(new XsQName((String) null, "PurchaseOrderType"), purchaseOrder.getTypeSG().getName()); } /** A test case to trigger a previous parser bug. */ public void testRestrictionMaxExclusive() throws Exception { final String schema = " \n" + " \n" + " \n" + " \n" + " \n" + " \n" + " \n" + " \n" + " \n" + " \n" + " \n" + " \n" + " \n" + " \n"; SchemaSG jschema = parse(schema, "testRestrictionMaxExclusive.xsd"); ObjectSG[] elements = jschema.getElements(); assertEquals(1, elements.length); ObjectSG quantity = elements[0]; String maxExclusive = quantity.getTypeSG().getSimpleTypeSG().getAtomicType().getMaxExclusive(); assertNotNull(maxExclusive); assertEquals("100", maxExclusive); } /** Test some basic functionality of the builtin datatype nonPositiveInteger. */ public void testNonPositiveInteger() throws Exception { final String schema = " \n" + " \n" + " \n" + " \n" + " \n" + " \n" + " \n" + " \n"; SchemaSG jschema = parse(schema, "testNonPositiveInteger.xsd"); // simple, atomic, with restriction and maxExclusive and maxInclusive TypeSG npi = jschema.getElements()[0].getTypeSG(); assertTrue(!npi.isComplex()); SimpleTypeSG npis = npi.getSimpleTypeSG(); assertTrue(npis.isAtomic()); assertTrue(!npis.isList()); assertTrue(!npis.isUnion()); assertEquals(new Long(0), npis.getAtomicType().getFractionDigits()); assertEquals("0", npis.getAtomicType().getMaxInclusive()); assertEquals("1", npis.getAtomicType().getMaxExclusive()); } /** Test some basic functionality of the builtin datatype negativeInteger. */ public void testNegativeInteger() throws Exception { final String schema = " \n" + " \n" + " \n" + " \n" + " \n" + " \n" + " \n" + " \n"; SchemaSG jschema = parse(schema, "testNegativeInteger.xsd"); // simple, atomic, with restrictions on maxInclusive and MaxExclusive TypeSG ni = jschema.getElements()[0].getTypeSG(); assertTrue(!ni.isComplex()); SimpleTypeSG nis = ni.getSimpleTypeSG(); assertTrue(nis.isAtomic()); assertTrue(!nis.isList()); assertTrue(!nis.isUnion()); assertEquals(new Long(0), nis.getAtomicType().getFractionDigits()); assertEquals("-1", nis.getAtomicType().getMaxInclusive()); assertEquals("0", nis.getAtomicType().getMaxExclusive()); } public void testNonNegativeIntegerType() throws Exception { final String schema = " \n" + " \n" + " \n" + " \n" + " \n" + " \n" + " \n" + " \n"; SchemaSG jschema = parse(schema, "testNonNegativeIntegerType.xsd"); // simple, atomic, with restriction on minInclusive and minExclusive TypeSG nni = jschema.getElements()[0].getTypeSG(); assertTrue(!nni.isComplex()); SimpleTypeSG nnis = nni.getSimpleTypeSG(); assertTrue(nnis.isAtomic()); assertTrue(!nnis.isList()); assertTrue(!nnis.isUnion()); assertEquals(new Long(0), nnis.getAtomicType().getFractionDigits()); assertEquals("-1", nnis.getAtomicType().getMinExclusive()); assertEquals("0", nnis.getAtomicType().getMinInclusive()); } public void testPositiveIntegerType() throws Exception { final String schema = " \n" + " \n" + " \n" + " \n" + " \n" + " \n" + " \n" + " \n"; SchemaSG jschema = parse(schema, "testPositiveIntegerType.xsd"); // simple, atomic, with restriction on minInclusive and minExclusive TypeSG pi = jschema.getElements()[0].getTypeSG(); assertTrue(!pi.isComplex()); SimpleTypeSG pis = pi.getSimpleTypeSG(); assertTrue(pis.isAtomic()); assertTrue(!pis.isList()); assertTrue(!pis.isUnion()); assertEquals(new Long(0), pis.getAtomicType().getFractionDigits()); assertEquals("0", pis.getAtomicType().getMinExclusive()); assertEquals("1", pis.getAtomicType().getMinInclusive()); } /** Test some basic functionality of the builtin datatype integer. */ public void testIntegerType() throws Exception { final String schema = " \n" + " \n" + " \n" + " \n" + " \n" + " \n" + " \n" + " \n"; SchemaSG jschema = parse(schema, "testIntegerType.xsd"); // simple, atomic, with restriction on fractionDigits ObjectSG[] elements = jschema.getElements(); TypeSG i = elements[0].getTypeSG(); assertTrue(!i.isComplex()); SimpleTypeSG is = i.getSimpleTypeSG(); assertTrue(is.isAtomic()); assertTrue(!is.isList()); assertTrue(!is.isUnion()); assertEquals(JavaQNameImpl.getInstance(BigInteger.class), is.getRuntimeType()); assertEquals(new Long(0), is.getAtomicType().getFractionDigits()); } /** Test built-in type NMTOKENS. */ public void testNmTokensType() throws Exception { final String schema = " \n" + " \n" + " \n" + " \n" + " \n" + " \n" + " \n" + " \n"; SchemaSG jschema = parse(schema, "testNmTokensType.xsd"); // list of one or more nmtoken's ObjectSG[] elements = jschema.getElements(); assertEquals(1, elements.length); TypeSG nmts = elements[0].getTypeSG(); assertTrue(!nmts.isComplex()); SimpleTypeSG nmtss = nmts.getSimpleTypeSG(); assertTrue(!nmtss.isAtomic()); assertTrue(nmtss.isList()); assertTrue(!nmtss.isUnion()); ListTypeSG nmtsl = nmtss.getListType(); assertEquals(new Long(1), nmtsl.getMinLength()); } /** Test for JAXME-46 */ public void testJira46() throws Exception { final String uri = "http://www.cnipa.it/schemas/2003/eGovIT/Busta1_0/"; final String schemaSpec = "\n" + " \n" + " \n" + " \n" + " \n" + " \n" + " \n" + " \n" + "\n"; InputSource isource = new InputSource(new StringReader(schemaSpec)); isource.setSystemId("jira46.xsd"); JAXBSchemaReader r = getSchemaReader(); XSParser parser = r.getSGFactory().newXSParser(); parser.setValidating(false); XSSchema schema = parser.parse(isource); XSAttribute[] attrs = schema.getAttributes(); assertEquals(1, attrs.length); XSAttribute idAttr = attrs[0]; assertTrue(idAttr instanceof JAXBAttribute); assertEquals(new XsQName(uri, "id"), idAttr.getName()); assertEquals(XSID.getInstance(), idAttr.getType()); assertTrue(idAttr.isOptional()); XSElement[] elements = schema.getElements(); assertEquals(1, elements.length); XSElement rifElem = elements[0]; assertFalse(rifElem.getType().isSimple()); XSComplexType ct = rifElem.getType().getComplexType(); XSAttributable[] rifAttrs = ct.getAttributes(); assertEquals(1, rifAttrs.length); XSAttribute idRef = (XSAttribute) rifAttrs[0]; assertTrue(idRef instanceof JAXBAttribute); assertFalse(idRef.equals(idAttr)); assertEquals(new XsQName(uri, "id"), idAttr.getName()); assertEquals(XSID.getInstance(), idAttr.getType()); assertFalse(idRef.isOptional()); } /** Test, whether a choice group with multiplicity > 1 is * rejected. */ public void testMultipleGroupRejected() throws Exception { final String schemaSpec = "\n" + " \n" + " \n" + " \n" + " \n" + " \n" + " \n" + " \n" + " \n" + " \n" + " \n" + " \n" + " \n" + " \n" + " \n" + " \n" + " \n" + "\n"; SchemaSG schema = parse(schemaSpec, "testMultipleGroupRejected.xsd"); try { schema.generate(); fail("Expected an exception"); } catch (SAXException e) { assertTrue(e.getMessage().indexOf("Model groups with maxOccurs > 1 are not yet supported.") != -1); } } }




© 2015 - 2025 Weber Informatics LLC | Privacy Policy