summaryrefslogtreecommitdiff
path: root/test/rexml/data/test/tests.xsl
diff options
context:
space:
mode:
Diffstat (limited to 'test/rexml/data/test/tests.xsl')
-rw-r--r--test/rexml/data/test/tests.xsl369
1 files changed, 369 insertions, 0 deletions
diff --git a/test/rexml/data/test/tests.xsl b/test/rexml/data/test/tests.xsl
new file mode 100644
index 0000000000..3ecd648b3b
--- /dev/null
+++ b/test/rexml/data/test/tests.xsl
@@ -0,0 +1,369 @@
+<stylesheet xmlns="http://www.w3.org/1999/XSL/Transform" version="1.0" xmlns:var="http://jaxen.org/test-harness/var">
+<!-- this is what I used to generate XPathTestBase. After generating I fixed the illegal strings (its quicker
+than fixing the xsl for that few errors) and reformatted the code. Its unlikely this code will be needed
+again, its just in cvs for completeness -->
+ <output method="text"/>
+ <template match="/">
+ <text>
+ /*
+ * $Header: /home/projects/jaxen/scm/jaxen/src/java/test/org/jaxen/XPathTestBase.java,v 1.32 2005/06/15 23:52:40 bewins Exp $
+ * $Revision: 1.32 $
+ * $Date: 2005/06/15 23:52:40 $
+ *
+ * ====================================================================
+ *
+ * Copyright (C) 2000-2002 bob mcwhirter &amp; James Strachan.
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ *
+ * 1. Redistributions of source code must retain the above copyright
+ * notice, this list of conditions, and the following disclaimer.
+ *
+ * 2. Redistributions in binary form must reproduce the above copyright
+ * notice, this list of conditions, and the disclaimer that follows
+ * these conditions in the documentation and/or other materials
+ * provided with the distribution.
+ *
+ * 3. The name "Jaxen" must not be used to endorse or promote products
+ * derived from this software without prior written permission. For
+ * written permission, please contact license@jaxen.org.
+ *
+ * 4. Products derived from this software may not be called "Jaxen", nor
+ * may "Jaxen" appear in their name, without prior written permission
+ * from the Jaxen Project Management (pm@jaxen.org).
+ *
+ * In addition, we request (but do not require) that you include in the
+ * end-user documentation provided with the redistribution and/or in the
+ * software itself an acknowledgement equivalent to the following:
+ * "This product includes software developed by the
+ * Jaxen Project (http://www.jaxen.org/)."
+ * Alternatively, the acknowledgment may be graphical using the logos
+ * available at http://www.jaxen.org/
+ *
+ * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
+ * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
+ * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+ * DISCLAIMED. IN NO EVENT SHALL THE Jaxen AUTHORS OR THE PROJECT
+ * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+ * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+ * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
+ * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
+ * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
+ * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
+ * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
+ * SUCH DAMAGE.
+ *
+ * ====================================================================
+ * This software consists of voluntary contributions made by many
+ * individuals on behalf of the Jaxen Project and was originally
+ * created by bob mcwhirter &lt;bob@werken.com> and
+ * James Strachan &lt;jstrachan@apache.org>. For more information on the
+ * Jaxen Project, please see &lt;http://www.jaxen.org/>.
+ *
+ * $Id: XPathTestBase.java,v 1.32 2005/06/15 23:52:40 bewins Exp $
+ */
+
+
+package org.jaxen;
+
+import junit.framework.TestCase;
+import org.jaxen.function.StringFunction;
+import org.jaxen.saxpath.helpers.XPathReaderFactory;
+
+import javax.xml.parsers.ParserConfigurationException;
+import java.util.ArrayList;
+import java.util.Iterator;
+import java.util.List;
+
+public abstract class XPathTestBase extends TestCase
+{
+ protected static String VAR_URI = "http://jaxen.org/test-harness/var";
+ protected static String TESTS_XML = "xml/test/tests.xml";
+
+ protected static boolean verbose = true;
+ protected static boolean debug = true;
+ private ContextSupport contextSupport;
+
+ public XPathTestBase(String name)
+ {
+ super( name );
+ }
+
+ public void setUp() throws ParserConfigurationException
+ {
+ this.contextSupport = null;
+ System.setProperty( XPathReaderFactory.DRIVER_PROPERTY,
+ "" );
+ log( "-----------------------------" );
+ }
+
+ public void log(String text)
+ {
+ log( verbose,
+ text );
+ }
+
+ public void log(boolean actualVerbose,
+ String text)
+ {
+ if ( ! actualVerbose )
+ {
+ return;
+ }
+
+ System.out.println( text );
+ }
+
+ protected void assertCountXPath(int expectedSize, Object context, String xpathStr) throws JaxenException {
+ try
+ {
+ assertCountXPath2(expectedSize, context, xpathStr);
+ }
+ catch (UnsupportedAxisException e)
+ {
+ log ( debug,
+ " ## SKIPPED -- Unsupported Axis" );
+ }
+ }
+
+ protected Object assertCountXPath2(int expectedSize, Object context, String xpathStr) throws JaxenException {
+ log ( debug,
+ " Select :: " + xpathStr );
+ BaseXPath xpath = new BaseXPath( xpathStr );
+ List results = xpath.selectNodes( getContext( context ) );
+ log ( debug,
+ " Expected Size :: " + expectedSize );
+ log ( debug,
+ " Result Size :: " + results.size() );
+
+ if ( expectedSize != results.size() )
+ {
+ log ( debug,
+ " ## FAILED" );
+ log ( debug,
+ " ## xpath: " + xpath + " = " + xpath.debug() );
+
+ Iterator resultIter = results.iterator();
+
+ while ( resultIter.hasNext() )
+ {
+ log ( debug,
+ " --> " + resultIter.next() );
+ }
+ }
+ assertEquals( xpathStr,
+ expectedSize,
+ results.size() );
+ if (expectedSize > 0) {
+ return results.get(0);
+ }
+ return null;
+ }
+
+ protected void assertInvalidXPath(Object context, String xpathStr) throws JaxenException {
+ try
+ {
+ log ( debug,
+ " Select :: " + xpathStr );
+ BaseXPath xpath = new BaseXPath( xpathStr );
+ List results = xpath.selectNodes( getContext( context ) );
+ log ( debug,
+ " Result Size :: " + results.size() );
+ fail("An exception was expected.");
+ }
+ catch (UnsupportedAxisException e)
+ {
+ log ( debug,
+ " ## SKIPPED -- Unsupported Axis" );
+ }
+ catch (JaxenException e) {
+ log (debug, " Caught expected exception "+e.getMessage());
+ }
+ }
+
+ protected void assertValueOfXPath(String expected, Object context, String xpathStr) throws JaxenException {
+ try
+ {
+ BaseXPath xpath = new BaseXPath( xpathStr );
+ Object node = xpath.evaluate( getContext( context ) );
+
+ String result = StringFunction.evaluate( node,
+ getNavigator() );
+
+ log ( debug,
+ " Select :: " + xpathStr );
+ log ( debug,
+ " Expected :: " + expected );
+ log ( debug,
+ " Result :: " + result );
+
+ if ( ! expected.equals( result ) )
+ {
+ log ( debug,
+ " ## FAILED" );
+ log ( debug,
+ " ## xpath: " + xpath + " = " + xpath.debug() );
+ }
+
+ assertEquals( xpathStr,
+ expected,
+ result );
+ }
+ catch (UnsupportedAxisException e)
+ {
+ log ( debug,
+ " ## SKIPPED -- Unsupported Axis " );
+
+ }
+ }
+ protected Context getContext(Object contextNode)
+ {
+ Context context = new Context( getContextSupport() );
+
+ List list = new ArrayList( 1 );
+ list.add( contextNode );
+ context.setNodeSet( list );
+
+ return context;
+ }
+
+ public ContextSupport getContextSupport()
+ {
+ if ( this.contextSupport == null )
+ {
+ this.contextSupport = new ContextSupport( new SimpleNamespaceContext(),
+ XPathFunctionContext.getInstance(),
+ new SimpleVariableContext(),
+ getNavigator() );
+ }
+
+ return this.contextSupport;
+ }
+
+ public abstract Navigator getNavigator();
+
+ public abstract Object getDocument(String url) throws Exception;
+
+ public void testGetNodeType() throws FunctionCallException, UnsupportedAxisException
+ {
+ Navigator nav = getNavigator();
+ Object document = nav.getDocument("xml/testNamespaces.xml");
+ int count = 0;
+ Iterator descendantOrSelfAxisIterator = nav.getDescendantOrSelfAxisIterator(document);
+ while (descendantOrSelfAxisIterator.hasNext()) {
+ Object node = descendantOrSelfAxisIterator.next();
+ Iterator namespaceAxisIterator = nav.getNamespaceAxisIterator(node);
+ while (namespaceAxisIterator.hasNext()) {
+ count++;
+ assertEquals("Node type mismatch", Pattern.NAMESPACE_NODE, nav.getNodeType(namespaceAxisIterator.next()));
+ }
+ }
+ assertEquals(25, count);
+ }
+
+ </text>
+ <apply-templates select="node()|@*"/>
+ <text>
+}
+ </text>
+ </template>
+ <template match="context">
+ <text>
+ public void test</text><value-of select="generate-id()"/><text>() throws JaxenException {
+ Navigator nav = getNavigator();
+ String url = "</text><value-of select="../@url"/><text>";
+ log( "Document [" + url + "]" );
+ Object document = nav.getDocument(url);
+
+ XPath contextpath = new BaseXPath("</text><value-of select="@select"/><text>", nav);
+ log( "Initial Context :: " + contextpath );
+ List list = contextpath.selectNodes(document);
+ </text>
+ <if test="count(namespace::*) > count(../namespace::*)">
+ <text>
+ SimpleNamespaceContext nsContext = new SimpleNamespaceContext();</text>
+ <for-each select="namespace::*[local-name() != 'var' and local-name() != 'xml']">
+ <text>
+ nsContext.addNamespace( "</text><value-of select="local-name()"/><text>", "</text><value-of select="."/><text>" );</text>
+ </for-each>
+ <text>
+ getContextSupport().setNamespaceContext( nsContext );</text>
+ </if>
+ <if test="@*[namespace-uri() = 'http://jaxen.org/test-harness/var']">
+ <text>
+ SimpleVariableContext varContext = new SimpleVariableContext();</text>
+ <for-each select="@*[namespace-uri() = 'http://jaxen.org/test-harness/var']">
+ <text>
+ varContext.setVariableValue(null, "</text><value-of select="local-name()"/><text>", "</text><value-of select="."/><text>" );</text>
+ </for-each>
+ <text>
+ getContextSupport().setVariableContext( varContext );</text>
+ </if>
+ <text>
+ Iterator iter = list.iterator();
+ while (iter.hasNext()) {
+ Object context = iter.next();</text>
+ <apply-templates select="node()|@*"/>
+ <text>
+ }
+ }</text>
+ </template>
+ <template match="test[@exception]">
+ <text>
+ assertInvalidXPath(context, "</text><value-of select='@select'/><text>");</text>
+ </template>
+ <template match="test[valueOf]">
+ <choose>
+ <when test="@count">
+ <text>
+ try
+ {
+ Object result = assertCountXPath2(</text><value-of select="@count"/><text>, context, "</text><value-of select="@select"/><text>");</text>
+ <for-each select="valueOf">
+ <text>
+ assertValueOfXPath("</text><value-of select="."/><text>", result, "</text><value-of select="@select"/><text>");</text>
+ </for-each>
+ <text>
+ }
+ catch (UnsupportedAxisException e)
+ {
+ log ( debug, " ## SKIPPED -- Unsupported Axis" );
+ }</text>
+ </when>
+ <otherwise>
+ <text>
+ try
+ {
+ BaseXPath xpath = new BaseXPath( "</text><value-of select="@select"/><text>" );
+ List results = xpath.selectNodes( getContext( context ) );
+ Object result = results.get(0);</text>
+ <for-each select="valueOf">
+ <text>
+ assertValueOfXPath("</text><value-of select="."/><text>", result, "</text><value-of select="@select"/><text>");</text>
+ </for-each>
+ <text>
+ }
+ catch (UnsupportedAxisException e)
+ {
+ log ( debug, " ## SKIPPED -- Unsupported Axis" );
+ }</text>
+ </otherwise>
+ </choose>
+ </template>
+ <template match="test">
+ <text>
+ assertCountXPath(</text><value-of select="@count"/><text>, context, "</text><value-of select="@select"/><text>");</text>
+ </template>
+ <template match="valueOf">
+ <text>
+ assertValueOfXPath("</text><value-of select="."/>", context, "<value-of select="@select"/><text>");</text>
+ </template>
+ <template match="comment()"><text>
+ /*</text><value-of select="."/><text>
+ */</text>
+ </template>
+ <template match="node()|@*"><apply-templates select="node()|@*"/></template>
+</stylesheet> \ No newline at end of file