blob: 81b25bef7db8001320f92d3336b818e39712e09f [file] [log] [blame]
package groovy.xml
/**
* Test the building of namespaced XML using GroovyMarkup
*/
class NamespaceNodeTest extends TestXmlSupport {
void testTree_FAILS() {if (notYetImplemented()) return
def builder = NodeBuilder.newInstance()
def xmlns = new NamespaceBuilder(builder)
def xsd = xmlns.namespace('http://www.w3.org/2001/XMLSchema', 'xsd')
def root = xsd.schema(xmlns: ['foo': 'http://someOtherNamespace']) {
annotation {
documentation("Purchase order schema for Example.com.")
//documentation(xmlns=[xml.lang:'en']) ["Purchase order schema for Example.com."]
}
element(name: 'purchaseOrder', type: 'PurchaseOrderType')
element(name: 'comment', type: 'xsd:string')
complexType(name: 'PurchaseOrderType') {
sequence {
element(name: 'shipTo', type: 'USAddress')
element(name: 'billTo', type: 'USAddress')
element(minOccurs: '0', ref: 'comment')
element(name: 'items', type: 'Items')
}
attribute(name: 'orderDate', type: 'xsd:date')
}
complexType(name: 'USAddress') {
sequence {
element(name: 'name', type: 'xsd:string')
element(name: 'street', type: 'xsd:string')
element(name: 'city', type: 'xsd:string')
element(name: 'state', type: 'xsd:string')
element(name: 'zip', type: 'xsd:decimal')
}
attribute(fixed: 'US', name: 'country', type: 'xsd:NMTOKEN')
}
complexType(name: 'Items') {
sequence {
element(maxOccurs: 'unbounded', minOccurs: '0', name: 'item') {
complexType {
sequence {
element(name: 'productName', type: 'xsd:string')
element(name: 'quantity') {
simpleType {
restriction(base: 'xsd:positiveInteger') {
maxExclusive(value: '100')
}
}
}
element(name: 'USPrice', type: 'xsd:decimal')
element(minOccurs: '0', ref: 'comment')
element(minOccurs: '0', name: 'shipDate', type: 'xsd:date')
}
attribute(name: 'partNum', type: 'SKU', use: 'required')
}
}
}
}
/* Stock Keeping Unit, a code for identifying products */
simpleType(name: 'SKU') {
restriction(base: 'xsd:string') {
pattern(value: '\\d{3}-[A-Z]{2}')
}
}
}
assert root != null
assertGPaths(root)
}
void assertGPaths(Node root) {
Namespace xsd = new Namespace('http://www.w3.org/2001/XMLSchema', 'xsd')
def children = root.children()
println "has children $children"
def name = root.name()
println "name is of type ${name.getClass()} with value $name"
root.children().each {println "has a child with name ${it.name()} and content $it"}
def foo = xsd.annotation
println "qname is $foo"
println "qname url is $foo.namespaceURI"
println "qname prefix is $foo.prefix"
println "qname localPart is $foo.localPart"
def a = root[xsd.annotation]
println "Found results $a"
def e = root[xsd.annotation][xsd.documentation]
String text = e.text()
println "Found element: $e with text: $text"
assert text == "Purchase order schema for Example.com."
}
}