1 /* 2 * Copyright 2001-2004 (C) MetaStuff, Ltd. All Rights Reserved. 3 * 4 * This software is open source. 5 * See the bottom of this file for the licence. 6 * 7 * $Id: TestNumber.java,v 1.13 2004/06/25 08:03:51 maartenc Exp $ 8 */ 9 10 package org.dom4j.xpath; 11 12 import junit.framework.Test; 13 import junit.framework.TestSuite; 14 import junit.textui.TestRunner; 15 16 import org.dom4j.AbstractTestCase; 17 import org.dom4j.Node; 18 import org.dom4j.XPath; 19 20 /*** Test harness for numeric XPath expressions 21 * 22 * @author <a href="mailto:james.strachan@metastuff.com">James Strachan</a> 23 * @version $Revision: 1.13 $ 24 */ 25 public class TestNumber extends AbstractTestCase { 26 27 protected static boolean VERBOSE = false; 28 29 protected static String[] paths = { 30 "2+2", 31 "2 + 2", 32 "2 + number(1) + 2", 33 "number(1) * 2", 34 "2 + count(//author) + 2", 35 "2 + (2 * 5)", 36 "count(//author) + count(//author/attribute::*)", 37 "(12 + count(//author) + count(//author/attribute::*)) div 2", 38 "count(//author)", 39 "count(//author/attribute::*)", 40 "2 + number(1) * 2", 41 "count(descendant::author)", 42 "count(ancestor::author)", 43 "count(descendant::*)", 44 "count(descendant::author)+1", 45 "count(ancestor::*)", 46 // "10 + count(ancestor-or-self::author) + 5", 47 "10 + count(descendant::author) * 5", 48 "10 + (count(descendant::author) * 5)", 49 }; 50 51 52 public static void main( String[] args ) { 53 TestRunner.run( suite() ); 54 } 55 56 public static Test suite() { 57 return new TestSuite( TestNumber.class ); 58 } 59 60 public TestNumber(String name) { 61 super(name); 62 } 63 64 // Test case(s) 65 //------------------------------------------------------------------------- 66 public void testXPaths() throws Exception { 67 Node element = document.selectSingleNode( "//author" ); 68 int size = paths.length; 69 for ( int i = 0; i < size; i++ ) { 70 testXPath( document, paths[i] ); 71 testXPath( element, paths[i] ); 72 } 73 log( "Finished successfully" ); 74 } 75 76 // Implementation methods 77 //------------------------------------------------------------------------- 78 protected void testXPath(Node node, String xpathText) throws Exception { 79 try { 80 XPath xpath = node.createXPath( xpathText ); 81 82 if ( VERBOSE ) { 83 log( " xpath: " + xpath ); 84 log( " for: " + node ); 85 } 86 87 Number number = xpath.numberValueOf( node ); 88 89 log( "Searched path: " + xpathText + " found: " + number ); 90 91 } 92 catch (Throwable e) { 93 log( "Caught exception: " + e ); 94 e.printStackTrace(); 95 assertTrue( "Failed to process: " + xpathText + " caught exception: " + e, false ); 96 } 97 } 98 99 } 100 101 102 103 104 /* 105 * Redistribution and use of this software and associated documentation 106 * ("Software"), with or without modification, are permitted provided 107 * that the following conditions are met: 108 * 109 * 1. Redistributions of source code must retain copyright 110 * statements and notices. Redistributions must also contain a 111 * copy of this document. 112 * 113 * 2. Redistributions in binary form must reproduce the 114 * above copyright notice, this list of conditions and the 115 * following disclaimer in the documentation and/or other 116 * materials provided with the distribution. 117 * 118 * 3. The name "DOM4J" must not be used to endorse or promote 119 * products derived from this Software without prior written 120 * permission of MetaStuff, Ltd. For written permission, 121 * please contact dom4j-info@metastuff.com. 122 * 123 * 4. Products derived from this Software may not be called "DOM4J" 124 * nor may "DOM4J" appear in their names without prior written 125 * permission of MetaStuff, Ltd. DOM4J is a registered 126 * trademark of MetaStuff, Ltd. 127 * 128 * 5. Due credit should be given to the DOM4J Project - 129 * http://www.dom4j.org 130 * 131 * THIS SOFTWARE IS PROVIDED BY METASTUFF, LTD. AND CONTRIBUTORS 132 * ``AS IS'' AND ANY EXPRESSED OR IMPLIED WARRANTIES, INCLUDING, BUT 133 * NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND 134 * FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL 135 * METASTUFF, LTD. OR ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, 136 * INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES 137 * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR 138 * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) 139 * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, 140 * STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) 141 * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED 142 * OF THE POSSIBILITY OF SUCH DAMAGE. 143 * 144 * Copyright 2001-2004 (C) MetaStuff, Ltd. All Rights Reserved. 145 * 146 * $Id: TestNumber.java,v 1.13 2004/06/25 08:03:51 maartenc Exp $ 147 */