| package groovy.xml.dom; |
| |
| import java.io.*; |
| import groovy.xml.*; |
| import org.codehaus.groovy.sandbox.markup.*; |
| import org.codehaus.groovy.tools.xml.*; |
| |
| class DOMTest extends GroovyTestCase { |
| |
| benchmark = false; |
| |
| void testDOMParser() { |
| xml = new StringReader("<html><head><title class='mytitle'>Test</title></head><body><p class='mystyle'>This is a test.</p></body></html>"); |
| doc = DOMBuilder.parse(xml); |
| html = doc.documentElement; |
| |
| if (!benchmark) { assertCorrect html } |
| } |
| |
| void testDOMBuilder() { |
| html = DOMBuilder.newInstance(). |
| |
| html { |
| head { |
| title (class:"mytitle", "Test") |
| } |
| body { |
| p (class:"mystyle", "This is a test.") |
| } |
| } |
| |
| if (!benchmark) { assertCorrect html } |
| } |
| |
| void testStreamingDOMBuilder() { |
| |
| doc = new StreamingDOMBuilder().bind { |
| html { |
| head { |
| title (class:"mytitle", "Test") |
| } |
| body { |
| p (class:"mystyle", "This is a test.") |
| } |
| } |
| }() |
| |
| if (!benchmark) { assertCorrect doc.documentElement } |
| } |
| void assertCorrect(html) { |
| use (groovy.xml.dom.DOMCategory) { |
| assert html.head.title.textContent == "Test"; |
| assert html.body.p.textContent == "This is a test."; |
| assert html.find { it.tagName == "body" }.tagName == "body"; |
| assert html.getElementsByTagName("*").findAll { if (it["@class"] != "") { return it } }.size() == 2; |
| } |
| shouldFail (MissingPropertyException) { html.head }; |
| } |
| |
| static void main(args) { |
| // Relative results: |
| // Test 5th May 2004 |
| // Parser: 1.0 |
| // Builder: 1.05 |
| // Streaming: 0.77 |
| x = args.size() == 0 ? 1000 : Integer.parseInt(args[0]); |
| mydomtest = new DOMTest(); |
| standard = 0; |
| mydomtest.benchmark = true; |
| [mydomtest.testDOMParser, mydomtest.testDOMBuilder, mydomtest.testStreamingDOMBuilder].each { |
| // Run the method once to fill any caches and to load classes |
| it(); |
| start = System.currentTimeMillis(); |
| for (i in 1..x) { |
| it(); |
| } |
| elapsed = System.currentTimeMillis() - start; |
| result = i * 1000 / elapsed; |
| |
| standard = (standard == 0 ? result : standard); |
| factor = result/standard; |
| |
| println "${it.method}: ${factor}x (${result} trees/s)"; |
| } |
| } |
| } |