...
| Code Block |
|---|
// require(groupId:'xmlunit', artifactId:'xmlunit', version:'1.1')
import groovy.xml.dom.DOMUtil
import groovy.xml.dom.DOMCategory
import groovy.xml.DOMBuilder
import org.custommonkey.xmlunit.Diff
import org.custommonkey.xmlunit.XMLUnit
def input = '''
<shopping>
<category type="groceries">
<item>Chocolate</item>
<item>Coffee</item>
</category>
<category type="supplies">
<item>Paper</item>
<item quantity="4">Pens</item>
</category>
<category type="present">
<item when="Aug 10">Kathryn's Birthday</item>
</category>
</shopping>
'''
def expectedResult = '''
<shopping>
<category type="groceries">
<item>Luxury Chocolate</item>
<item>Luxury Coffee</item>
</category>
<category type="supplies">
<item>Paper</item>
<item quantity="6" when="Urgent">Pens</item>
</category>
<category type="present">
<item>Mum's Birthday</item>
<item when="Oct 15">Monica's Birthday</item>
</category>
</shopping>
'''
def reader = new StringReader(input)
def doc = DOMBuilder.parse(reader)
def root = doc.documentElement
use(DOMCategory) {
// modify groceries: quality items please
def groceries = root.category.findAll{ it.'@type' == 'groceries' }[0].item
groceries.each { g ->
g.value = 'Luxury ' + g.text()
}
// modify supplies: we need extra pens
def supplies = root.category.findAll{ it.'@type' == 'supplies' }[0].item
supplies.findAll{ it.text() == 'Pens' }.each { s ->
s['@quantity'] = s.'@quantity'.toInteger() + 2
s['@when'] = 'Urgent'
}
// modify presents: August has come and gone
def presents = root.category.find{ it.'@type' == 'present' }
presents.item.each {
presents.removeChild(it)
}
presents.appendNode('item', "Mum's Birthday")
presents.appendNode('item', [when:'Oct 15'], "Monica's Birthday")
// check the when attributes
assert root.'**'.item.'@when'.grep{it} == ["Urgent", "Oct 15"]
}
// check the whole document using XmlUnit
XMLUnit.setIgnoreWhitespace(true)
def result = DOMUtil.serialize(root)
def xmlDiff = new Diff(result, expectedResult)
assert xmlDiff.identical()
|