assertNotNull(schemaTypes);
assertEquals(4, schemaTypes.length);
// Items
XSType items = schemaTypes[2];
assertEquals(new XsQName((String) null, "Items"), items.getName());
assertTrue(items.isGlobal());
XSComplexType itemsComplexType = assertComplexType(items);
XSParticle itemsParticle = assertComplexContent(itemsComplexType);
XSGroup itemsGroup = assertGroup(itemsParticle);
assertSequence(itemsGroup);
// Items.item
XSParticle[] itemsChildren = itemsGroup.getParticles();
assertEquals(1, itemsChildren.length);
XSParticle item = itemsChildren[0];
XSElement itemElement = assertElement(item);
assertEquals(new XsQName((String) null, "item"), itemElement.getName());
assertTrue(!itemElement.isGlobal());
XSComplexType itemComplexType = assertComplexType(itemElement.getType());
assertEquals(0, item.getMinOccurs());
assertEquals(-1, item.getMaxOccurs());
XSParticle itemParticle = assertComplexContent(itemComplexType);
XSGroup itemGroup = assertGroup(itemParticle);
assertSequence(itemGroup);
// Items.item.partNum
// <xsd:attribute name='partNum' type='SKU' use='required'/>
XSAttributable[] itemAttributes = itemComplexType.getAttributes();
assertEquals(1, itemAttributes.length);
XSAttribute partNum = (XSAttribute) itemAttributes[0];
assertEquals(new XsQName((String) null, "partNum"), partNum.getName());
assertTrue(!partNum.isOptional());
XSType partNumType = partNum.getType();
assertEquals(new XsQName((String) null, "SKU"), partNumType.getName());
assertTrue(partNumType.isGlobal());
XSParticle[] itemGroupParticles = itemGroup.getParticles();
assertEquals(5, itemGroupParticles.length);
// Items.item.productName
// <xsd:element name='productName' type='xsd:string'/>
XSParticle productName = itemGroupParticles[0];
assertEquals(1, productName.getMinOccurs());
assertEquals(1, productName.getMaxOccurs());
XSElement productNameElement = assertElement(productName);
assertEquals(new XsQName((String) null, "productName"), productNameElement.getName());
assertSimpleType(productNameElement.getType());
assertEquals(XSString.getInstance(), productNameElement.getType());
// Items.item.quantity
XSParticle quantity = itemGroupParticles[1];
assertEquals(1, quantity.getMinOccurs());
assertEquals(1, quantity.getMaxOccurs());
XSElement quantityElement = assertElement(quantity);
assertEquals(new XsQName((String) null, "quantity"), quantityElement.getName());
XSSimpleType quantitySimpleType = assertSimpleType(quantityElement.getType());
assertEquals(XSPositiveInteger.getInstance(), assertRestriction(quantitySimpleType));
// Items.item.USPrice
// <xsd:element name='USPrice' type='xsd:decimal'/>
XSParticle usPrice = itemGroupParticles[2];
assertEquals(1, usPrice.getMinOccurs());
assertEquals(1, usPrice.getMaxOccurs());
XSElement usPriceElement = assertElement(usPrice);
assertEquals(new XsQName((String) null, "USPrice"), usPriceElement.getName());
assertEquals(XSDecimal.getInstance(), usPriceElement.getType());
// Items.item.comment
// <xsd:element ref='comment' minOccurs='0'/>
XSParticle comment = itemGroupParticles[3];
assertEquals(comment.getMinOccurs(), 0);
assertEquals(comment.getMaxOccurs(), 1);
XSElement commentElement = assertElement(comment);
assertEquals(new XsQName((String) null, "comment"), commentElement.getName());
assertEquals(XSString.getInstance(), commentElement.getType());
// Items.item.shipDate
// <xsd:element name='shipDate' type='xsd:date' minOccurs='0'/>
XSParticle shipDate = itemGroupParticles[4];
assertEquals(shipDate.getMinOccurs(), 0);
assertEquals(shipDate.getMaxOccurs(), 1);
XSElement shipDateElement = assertElement(shipDate);
assertEquals(XSDate.getInstance(), shipDateElement.getType());
// PurchaseOrderType
XSType purchaseOrderType = schemaTypes[0];
assertTrue(purchaseOrderType.isGlobal());
assertEquals(new XsQName((String) null, "PurchaseOrderType"), purchaseOrderType.getName());
XSComplexType purchaseOrderTypeComplexType = assertComplexType(purchaseOrderType);
XSParticle purchaseOrderTypeParticle = assertComplexContent(purchaseOrderTypeComplexType);
XSGroup purchaseOrderTypeGroup = assertGroup(purchaseOrderTypeParticle);
assertSequence(purchaseOrderTypeGroup);
XSAttributable[] potAttributes = purchaseOrderTypeComplexType.getAttributes();
assertEquals(1, potAttributes.length);
// PurchaseOrderType.orderDate
// <xsd:attribute name='orderDate' type='xsd:date'/>
XSAttribute orderDate = (XSAttribute) potAttributes[0];
assertEquals(new XsQName((String) null, "orderDate"), orderDate.getName());
assertEquals(XSDate.getInstance(), orderDate.getType());
XSParticle[] potChildren = purchaseOrderTypeGroup.getParticles();
assertEquals(4, potChildren.length);
// PurchaseOrderType.shipTo
// <xsd:element name='shipTo' type='USAddress'/>
XSParticle shipTo = potChildren[0];
assertEquals(1, shipTo.getMinOccurs());
assertEquals(1, shipTo.getMaxOccurs());
XSElement shipToElement = assertElement(shipTo);
assertEquals(new XsQName((String) null, "shipTo"), shipToElement.getName());
XSType shipToType = shipToElement.getType();
assertTrue(shipToType.isGlobal());
assertEquals(new XsQName((String) null, "USAddress"), shipToType.getName());
// PurchaseOrderType.billTo
// <xsd:element name='billTo' type='USAddress'/>
XSParticle billTo = potChildren[1];
assertEquals(1, billTo.getMinOccurs());
assertEquals(1, billTo.getMaxOccurs());
XSElement billToElement = assertElement(billTo);
assertEquals(new XsQName((String) null, "billTo"), billToElement.getName());
XSType billToType = billToElement.getType();
assertEquals(shipToType, billToType);
// PurchaseOrderType.comment
// <xsd:element ref='comment' minOccurs='0'/>
XSParticle potComment = potChildren[2];
assertEquals(0, potComment.getMinOccurs());
assertEquals(1, potComment.getMaxOccurs());
XSElement potCommentElement = assertElement(potComment);
assertEquals(new XsQName((String) null, "comment"), potCommentElement.getName());
assertEquals(potCommentElement.getType(), commentElement.getType());
// PurchaseOrderType.items
// <xsd:element name='items' type='Items'/>
XSParticle potItems = potChildren[3];
assertEquals(1, potItems.getMinOccurs());
assertEquals(1, potItems.getMaxOccurs());
XSElement potItemsElement = assertElement(potItems);
assertEquals(new XsQName((String) null, "items"), potItemsElement.getName());
assertEquals(items, potItemsElement.getType());
// SKU
XSType sku = schemaTypes[3];
assertTrue(sku.isGlobal());
assertEquals(new XsQName((String) null, "SKU"), sku.getName());
XSSimpleType skuSimpleType = assertSimpleType(sku);
assertEquals(XSString.getInstance(), assertRestriction(skuSimpleType));
assertEquals(sku, partNumType);
// TODO: test restriction pattern
// USAddress
// <xsd:complexType name='USAddress'>
// <xsd:sequence>
XSType usAddress = schemaTypes[1];
assertTrue(usAddress.isGlobal());
assertEquals(new XsQName((String) null, "USAddress"), usAddress.getName());
assertTrue(usAddress.isGlobal());
XSComplexType usAddressComplexType = assertComplexType(usAddress);
XSParticle usAddressParticle = assertComplexContent(usAddressComplexType);
XSGroup usAddressGroup = assertGroup(usAddressParticle);
assertSequence(usAddressGroup);
// USAddress.country
// <xsd:attribute name='country' type='xsd:string' fixed='US'/>
// ToDo: test attribute fixed='US'
XSAttributable[] usAddressAttributes = usAddressComplexType.getAttributes();
assertEquals(1, usAddressAttributes.length);
XSAttribute country = (XSAttribute) usAddressAttributes[0];
assertEquals(new XsQName((String) null, "country"), country.getName());
assertEquals(XSNMToken.getInstance(), country.getType());
// USAddress children
String [] nameShouldBe = {"name", "street", "city", "state", "zip"};
XSParticle[] usAddressChildren = usAddressGroup.getParticles();
assertEquals(5, usAddressChildren.length);
for (int i = 0; i < usAddressChildren.length; i++) {
XSParticle child = usAddressChildren[i];
assertEquals(1, child.getMinOccurs());
assertEquals(1, child.getMaxOccurs());
XSElement element = assertElement(child);
assertEquals(new XsQName((String) null, nameShouldBe[i]), element.getName());
assertEquals(i == 4 ? XSDecimal.getInstance() : XSString.getInstance(), element.getType());
}
// purchaseOrder
// <xsd:element name='purchaseOrder' type='PurchaseOrderType'/>
XSElement[] schemaElements = schema.getElements();
assertEquals(2, schemaElements.length);
XSElement purchaseOrder = schemaElements[0];
assertEquals(new XsQName((String) null, "purchaseOrder"), purchaseOrder.getName());
assertEquals(purchaseOrderType, purchaseOrder.getType());
assertEquals(new XsQName((String) null, "comment"), schemaElements[1].getName());
}