Author: veithen Date: Mon Dec 22 08:21:05 2008 New Revision: 728721 URL: http://svn.apache.org/viewvc?rev=728721&view=rev Log: Added some integration tests for DOOM with Saxon and Xalan. Changed the exception thrown by NodeImpl#compareDocumentPosition from UnsupportedOperationException to DOMException(NOT_SUPPORTED_ERR) to make this work with Saxon 8.9.
Added: webservices/commons/trunk/modules/axiom/modules/axiom-integration/src/test/java/org/apache/axiom/om/impl/dom/ webservices/commons/trunk/modules/axiom/modules/axiom-integration/src/test/java/org/apache/axiom/om/impl/dom/jaxp/ webservices/commons/trunk/modules/axiom/modules/axiom-integration/src/test/java/org/apache/axiom/om/impl/dom/jaxp/TransformerTest.java (with props) webservices/commons/trunk/modules/axiom/modules/axiom-integration/src/test/resources/org/apache/axiom/om/impl/dom/ webservices/commons/trunk/modules/axiom/modules/axiom-integration/src/test/resources/org/apache/axiom/om/impl/dom/jaxp/ webservices/commons/trunk/modules/axiom/modules/axiom-integration/src/test/resources/org/apache/axiom/om/impl/dom/jaxp/identity.xslt (with props) webservices/commons/trunk/modules/axiom/modules/axiom-integration/src/test/resources/org/apache/axiom/om/impl/dom/jaxp/input.xml (with props) webservices/commons/trunk/modules/axiom/modules/axiom-integration/src/test/resources/org/apache/axiom/om/impl/dom/jaxp/output.xml (with props) webservices/commons/trunk/modules/axiom/modules/axiom-integration/src/test/resources/org/apache/axiom/om/impl/dom/jaxp/stylesheet.xslt (with props) Modified: webservices/commons/trunk/modules/axiom/modules/axiom-dom/src/main/java/org/apache/axiom/om/impl/dom/NodeImpl.java webservices/commons/trunk/modules/axiom/modules/axiom-integration/pom.xml Modified: webservices/commons/trunk/modules/axiom/modules/axiom-dom/src/main/java/org/apache/axiom/om/impl/dom/NodeImpl.java URL: http://svn.apache.org/viewvc/webservices/commons/trunk/modules/axiom/modules/axiom-dom/src/main/java/org/apache/axiom/om/impl/dom/NodeImpl.java?rev=728721&r1=728720&r2=728721&view=diff ============================================================================== --- webservices/commons/trunk/modules/axiom/modules/axiom-dom/src/main/java/org/apache/axiom/om/impl/dom/NodeImpl.java (original) +++ webservices/commons/trunk/modules/axiom/modules/axiom-dom/src/main/java/org/apache/axiom/om/impl/dom/NodeImpl.java Mon Dec 22 08:21:05 2008 @@ -518,9 +518,12 @@ throw new UnsupportedOperationException("TODO"); } - public short compareDocumentPosition(Node arg0) throws DOMException { - // TODO TODO - throw new UnsupportedOperationException("TODO"); + public short compareDocumentPosition(Node other) throws DOMException { + // This is not yet implemented. In the meantime, we throw a DOMException + // and not an UnsupportedOperationException, since this works better with + // some other libraries (such as Saxon 8.9). + throw new DOMException(DOMException.NOT_SUPPORTED_ERR, DOMMessageFormatter + .formatMessage(DOMMessageFormatter.DOM_DOMAIN, "NOT_SUPPORTED_ERR", null)); } public String getTextContent() throws DOMException { Modified: webservices/commons/trunk/modules/axiom/modules/axiom-integration/pom.xml URL: http://svn.apache.org/viewvc/webservices/commons/trunk/modules/axiom/modules/axiom-integration/pom.xml?rev=728721&r1=728720&r2=728721&view=diff ============================================================================== --- webservices/commons/trunk/modules/axiom/modules/axiom-integration/pom.xml (original) +++ webservices/commons/trunk/modules/axiom/modules/axiom-integration/pom.xml Mon Dec 22 08:21:05 2008 @@ -39,6 +39,11 @@ <version>${axiom.version}</version> </dependency> <dependency> + <groupId>org.apache.ws.commons.axiom</groupId> + <artifactId>axiom-dom</artifactId> + <version>${axiom.version}</version> + </dependency> + <dependency> <groupId>junit</groupId> <artifactId>junit</artifactId> </dependency> @@ -70,7 +75,12 @@ <dependency> <groupId>net.sf.saxon</groupId> <artifactId>saxon</artifactId> - <version>8.5.1</version> + <version>8.9</version> + </dependency> + <dependency> + <groupId>net.sf.saxon</groupId> + <artifactId>saxon-dom</artifactId> + <version>8.9</version> </dependency> </dependencies> <build> Added: webservices/commons/trunk/modules/axiom/modules/axiom-integration/src/test/java/org/apache/axiom/om/impl/dom/jaxp/TransformerTest.java URL: http://svn.apache.org/viewvc/webservices/commons/trunk/modules/axiom/modules/axiom-integration/src/test/java/org/apache/axiom/om/impl/dom/jaxp/TransformerTest.java?rev=728721&view=auto ============================================================================== --- webservices/commons/trunk/modules/axiom/modules/axiom-integration/src/test/java/org/apache/axiom/om/impl/dom/jaxp/TransformerTest.java (added) +++ webservices/commons/trunk/modules/axiom/modules/axiom-integration/src/test/java/org/apache/axiom/om/impl/dom/jaxp/TransformerTest.java Mon Dec 22 08:21:05 2008 @@ -0,0 +1,87 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you under the Apache License, Version 2.0 (the + * "License"); you may not use this file except in compliance + * with the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, + * software distributed under the License is distributed on an + * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, either express or implied. See the License for the + * specific language governing permissions and limitations + * under the License. + */ + +package org.apache.axiom.om.impl.dom.jaxp; + +import javax.xml.parsers.DocumentBuilder; +import javax.xml.parsers.DocumentBuilderFactory; +import javax.xml.transform.Transformer; +import javax.xml.transform.TransformerFactory; +import javax.xml.transform.dom.DOMResult; +import javax.xml.transform.dom.DOMSource; + +import org.custommonkey.xmlunit.XMLTestCase; +import org.custommonkey.xmlunit.XMLUnit; +import org.w3c.dom.Document; +import org.w3c.dom.Element; + +public class TransformerTest extends XMLTestCase { + private void testStylesheet(TransformerFactory tf) throws Exception { + DocumentBuilderFactory dbf = new DOOMDocumentBuilderFactory(); + DocumentBuilder builder = dbf.newDocumentBuilder(); + Document input = builder.parse(TransformerTest.class.getResourceAsStream("input.xml")); + Document stylesheet + = builder.parse(TransformerTest.class.getResourceAsStream("stylesheet.xslt")); + Document expected = builder.parse(TransformerTest.class.getResourceAsStream("output.xml")); + Document actual = builder.newDocument(); + Transformer transformer = tf.newTransformer(new DOMSource(stylesheet)); + transformer.transform(new DOMSource(input), new DOMResult(actual)); + XMLUnit.setIgnoreWhitespace(true); + assertXMLEqual(expected, actual); + } + + public void testStylesheetWithXalan() throws Exception { + testStylesheet(new org.apache.xalan.processor.TransformerFactoryImpl()); + } + + public void testStyleSheetWithSaxon() throws Exception { + testStylesheet(new net.sf.saxon.TransformerFactoryImpl()); + } + + // This test failed with Saxon 8.9 because NodeImpl#compareDocumentPosition + // threw an UnsupportedOperationException instead of a DOMException. + private void testIdentity(TransformerFactory tf) throws Exception { + DocumentBuilderFactory dbf = new DOOMDocumentBuilderFactory(); + DocumentBuilder builder = dbf.newDocumentBuilder(); + + Document document = builder.newDocument(); + Element root = document.createElement("root"); + Element element = document.createElementNS("urn:mynamespace", "element1"); + element.setAttribute("att", "testValue"); + element.appendChild(document.createTextNode("test")); + root.appendChild(element); + document.appendChild(root); + + Document stylesheet + = builder.parse(TransformerTest.class.getResourceAsStream("identity.xslt")); + Document output = builder.newDocument(); + Transformer transformer = tf.newTransformer(new DOMSource(stylesheet)); + transformer.transform(new DOMSource(document), new DOMResult(output)); + XMLUnit.setIgnoreWhitespace(false); + assertXMLEqual(document, output); + } + + public void testIdentityWithXalan() throws Exception { + testIdentity(new org.apache.xalan.processor.TransformerFactoryImpl()); + } + + public void testIdentityWithSaxon() throws Exception { + testIdentity(new net.sf.saxon.TransformerFactoryImpl()); + } +} Propchange: webservices/commons/trunk/modules/axiom/modules/axiom-integration/src/test/java/org/apache/axiom/om/impl/dom/jaxp/TransformerTest.java ------------------------------------------------------------------------------ svn:eol-style = native Added: webservices/commons/trunk/modules/axiom/modules/axiom-integration/src/test/resources/org/apache/axiom/om/impl/dom/jaxp/identity.xslt URL: http://svn.apache.org/viewvc/webservices/commons/trunk/modules/axiom/modules/axiom-integration/src/test/resources/org/apache/axiom/om/impl/dom/jaxp/identity.xslt?rev=728721&view=auto ============================================================================== --- webservices/commons/trunk/modules/axiom/modules/axiom-integration/src/test/resources/org/apache/axiom/om/impl/dom/jaxp/identity.xslt (added) +++ webservices/commons/trunk/modules/axiom/modules/axiom-integration/src/test/resources/org/apache/axiom/om/impl/dom/jaxp/identity.xslt Mon Dec 22 08:21:05 2008 @@ -0,0 +1,9 @@ +<?xml version="1.0" encoding="ISO-8859-1"?> +<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform"> + <xsl:output method="xml"/> + <xsl:template match="node()|@*"> + <xsl:copy> + <xsl:apply-templates select="node()|@*"/> + </xsl:copy> + </xsl:template> +</xsl:stylesheet> \ No newline at end of file Propchange: webservices/commons/trunk/modules/axiom/modules/axiom-integration/src/test/resources/org/apache/axiom/om/impl/dom/jaxp/identity.xslt ------------------------------------------------------------------------------ svn:eol-style = native Added: webservices/commons/trunk/modules/axiom/modules/axiom-integration/src/test/resources/org/apache/axiom/om/impl/dom/jaxp/input.xml URL: http://svn.apache.org/viewvc/webservices/commons/trunk/modules/axiom/modules/axiom-integration/src/test/resources/org/apache/axiom/om/impl/dom/jaxp/input.xml?rev=728721&view=auto ============================================================================== --- webservices/commons/trunk/modules/axiom/modules/axiom-integration/src/test/resources/org/apache/axiom/om/impl/dom/jaxp/input.xml (added) +++ webservices/commons/trunk/modules/axiom/modules/axiom-integration/src/test/resources/org/apache/axiom/om/impl/dom/jaxp/input.xml Mon Dec 22 08:21:05 2008 @@ -0,0 +1,18 @@ +<?xml version="1.0" encoding="utf-8"?> +<sales> + <division id="North"> + <revenue>10</revenue> + <growth>9</growth> + <bonus>7</bonus> + </division> + <division id="South"> + <revenue>4</revenue> + <growth>3</growth> + <bonus>4</bonus> + </division> + <division id="West"> + <revenue>6</revenue> + <growth>-1.5</growth> + <bonus>2</bonus> + </division> +</sales> Propchange: webservices/commons/trunk/modules/axiom/modules/axiom-integration/src/test/resources/org/apache/axiom/om/impl/dom/jaxp/input.xml ------------------------------------------------------------------------------ svn:eol-style = native Added: webservices/commons/trunk/modules/axiom/modules/axiom-integration/src/test/resources/org/apache/axiom/om/impl/dom/jaxp/output.xml URL: http://svn.apache.org/viewvc/webservices/commons/trunk/modules/axiom/modules/axiom-integration/src/test/resources/org/apache/axiom/om/impl/dom/jaxp/output.xml?rev=728721&view=auto ============================================================================== --- webservices/commons/trunk/modules/axiom/modules/axiom-integration/src/test/resources/org/apache/axiom/om/impl/dom/jaxp/output.xml (added) +++ webservices/commons/trunk/modules/axiom/modules/axiom-integration/src/test/resources/org/apache/axiom/om/impl/dom/jaxp/output.xml Mon Dec 22 08:21:05 2008 @@ -0,0 +1,19 @@ +<?xml version="1.0" encoding="utf-8"?> +<svg width="3in" height="3in" + xmlns="http://www.w3.org/2000/svg"> + <g style="stroke: #000000"> + <line x1="0" x2="150" y1="150" y2="150"/> + <line x1="0" x2="0" y1="0" y2="150"/> + <text x="0" y="10">Revenue</text> + <text x="150" y="165">Division</text> + <rect x="10" y="50" width="20" height="100"/> + <text x="10" y="165">North</text> + <text x="10" y="45">10</text> + <rect x="50" y="110" width="20" height="40"/> + <text x="50" y="165">South</text> + <text x="50" y="105">4</text> + <rect x="90" y="90" width="20" height="60"/> + <text x="90" y="165">West</text> + <text x="90" y="85">6</text> + </g> +</svg> Propchange: webservices/commons/trunk/modules/axiom/modules/axiom-integration/src/test/resources/org/apache/axiom/om/impl/dom/jaxp/output.xml ------------------------------------------------------------------------------ svn:eol-style = native Added: webservices/commons/trunk/modules/axiom/modules/axiom-integration/src/test/resources/org/apache/axiom/om/impl/dom/jaxp/stylesheet.xslt URL: http://svn.apache.org/viewvc/webservices/commons/trunk/modules/axiom/modules/axiom-integration/src/test/resources/org/apache/axiom/om/impl/dom/jaxp/stylesheet.xslt?rev=728721&view=auto ============================================================================== --- webservices/commons/trunk/modules/axiom/modules/axiom-integration/src/test/resources/org/apache/axiom/om/impl/dom/jaxp/stylesheet.xslt (added) +++ webservices/commons/trunk/modules/axiom/modules/axiom-integration/src/test/resources/org/apache/axiom/om/impl/dom/jaxp/stylesheet.xslt Mon Dec 22 08:21:05 2008 @@ -0,0 +1,45 @@ +<?xml version="1.0" encoding="utf-8"?> +<xsl:stylesheet version="1.0" + xmlns:xsl="http://www.w3.org/1999/XSL/Transform" + xmlns="http://www.w3.org/2000/svg"> + + <xsl:output method="xml" indent="yes" media-type="image/svg"/> + + <xsl:template match="/"> + <svg width = "3in" height="3in"> + <g style = "stroke: #000000"> + <!-- draw the axes --> + <line x1="0" x2="150" y1="150" y2="150"/> + <line x1="0" x2="0" y1="0" y2="150"/> + <text x="0" y="10">Revenue</text> + <text x="150" y="165">Division</text> + <xsl:for-each select="sales/division"> + <!-- define some useful variables --> + + <!-- the bar's x position --> + <xsl:variable name="pos" + select="(position()*40)-30"/> + + <!-- the bar's height --> + <xsl:variable name="height" + select="revenue*10"/> + + <!-- the rectangle --> + <rect x="{$pos}" y="{150-$height}" + width="20" height="{$height}"/> + + <!-- the text label --> + <text x="{$pos}" y="165"> + <xsl:value-of select="@id"/> + </text> + + <!-- the bar value --> + <text x="{$pos}" y="{145-$height}"> + <xsl:value-of select="revenue"/> + </text> + </xsl:for-each> + </g> + </svg> + </xsl:template> + +</xsl:stylesheet> \ No newline at end of file Propchange: webservices/commons/trunk/modules/axiom/modules/axiom-integration/src/test/resources/org/apache/axiom/om/impl/dom/jaxp/stylesheet.xslt ------------------------------------------------------------------------------ svn:eol-style = native