blob: 40b2a76e4271e20be2ec3040d7abde39d643f589 [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."
}
}