KickJava   Java API By Example, From Geeks To Geeks.

Java > Open Source Codes > org > jaxen > JaxenHandlerTest


1 /*
2  * $Header: /home/projects/jaxen/scm/jaxen/src/java/test/org/jaxen/JaxenHandlerTest.java,v 1.14 2005/06/17 13:51:15 elharo Exp $
3  * $Revision: 1.14 $
4  * $Date: 2005/06/17 13:51:15 $
5  *
6  * ====================================================================
7  *
8  * Copyright (C) 2000-2002 bob mcwhirter & James Strachan.
9  * All rights reserved.
10  *
11  * Redistribution and use in source and binary forms, with or without
12  * modification, are permitted provided that the following conditions
13  * are met:
14  *
15  * 1. Redistributions of source code must retain the above copyright
16  * notice, this list of conditions, and the following disclaimer.
17  *
18  * 2. Redistributions in binary form must reproduce the above copyright
19  * notice, this list of conditions, and the disclaimer that follows
20  * these conditions in the documentation and/or other materials
21  * provided with the distribution.
22  *
23  * 3. The name "Jaxen" must not be used to endorse or promote products
24  * derived from this software without prior written permission. For
25  * written permission, please contact license@jaxen.org.
26  *
27  * 4. Products derived from this software may not be called "Jaxen", nor
28  * may "Jaxen" appear in their name, without prior written permission
29  * from the Jaxen Project Management (pm@jaxen.org).
30  *
31  * In addition, we request (but do not require) that you include in the
32  * end-user documentation provided with the redistribution and/or in the
33  * software itself an acknowledgement equivalent to the following:
34  * "This product includes software developed by the
35  * Jaxen Project (http://www.jaxen.org/)."
36  * Alternatively, the acknowledgment may be graphical using the logos
37  * available at http://www.jaxen.org/
38  *
39  * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
40  * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
41  * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
42  * DISCLAIMED. IN NO EVENT SHALL THE Jaxen AUTHORS OR THE PROJECT
43  * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
44  * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
45  * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
46  * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
47  * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
48  * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
49  * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
50  * SUCH DAMAGE.
51  *
52  * ====================================================================
53  * This software consists of voluntary contributions made by many
54  * individuals on behalf of the Jaxen Project and was originally
55  * created by bob mcwhirter <bob@werken.com> and
56  * James Strachan <jstrachan@apache.org>. For more information on the
57  * Jaxen Project, please see <http://www.jaxen.org/>.
58  *
59  * $Id: JaxenHandlerTest.java,v 1.14 2005/06/17 13:51:15 elharo Exp $
60  */

61
62
63
64 package org.jaxen;
65
66 import junit.framework.TestCase;
67
68 import org.jaxen.expr.DefaultXPathFactory;
69 import org.jaxen.expr.XPathExpr;
70 import org.jaxen.saxpath.SAXPathException;
71 import org.jaxen.saxpath.XPathReader;
72 import org.jaxen.saxpath.XPathSyntaxException;
73 import org.jaxen.saxpath.helpers.XPathReaderFactory;
74
75 public class JaxenHandlerTest extends TestCase
76 {
77     
78     private String JavaDoc[] paths = {
79         "foo[.='bar']",
80         "foo[.!='bar']",
81         "/",
82         "*",
83         "//foo",
84         "/*",
85         "/.",
86         "/foo[/bar[/baz]]",
87         "/foo/bar/baz[(1 or 2) + 3 * 4 + 8 and 9]",
88         "/foo/bar/baz",
89         ".[1]",
90         "self::node()",
91         ".",
92         "count(/)",
93         "foo[1]",
94         "/baz[(1 or 2) + 3 * 4 + 8 and 9]",
95         "foo/bar[/baz[(1 or 2) - 3 mod 4 + 8 and 9 div 8]]",
96         "foo/bar/yeah:baz[a/b/c and toast]",
97         "/foo/bar[../x='123']",
98         "/foo[@bar='1234']",
99         "foo|bar",
100         "/foo|/bar[@id='1234']",
101         "count(//author/attribute::*)",
102         "$author",
103          "10 + $foo",
104         "10 + (count(descendant::author) * 5)",
105         "10 + count(descendant::author) * 5",
106         "2 + (2 * 5)",
107         "sum(count(//author), 5)",
108         "sum(count(//author),count(//author/attribute::*))",
109         "12 + sum(count(//author),count(//author/attribute::*)) div 2",
110         "text()[.='foo']",
111         "/*/*[@id='123']",
112         "/child::node()/child::node()[@id='_13563275']",
113         "$foo:bar",
114         "//foo:bar",
115         "/foo/bar[@a='1' and @c!='2']",
116     };
117
118     private String JavaDoc[] bogusPaths = { "//:p" ,
119         // this path is bogus because of a trailing /
120
"/foo/bar/",
121         
122         // This path is bogus because '/' is not division, but
123
// rather just the step separator.
124
"12 + sum(count(//author),count(//author/attribute::*)) / 2",
125         "id()/2",
126         "+"
127     };
128     
129     public JaxenHandlerTest(String JavaDoc name)
130     {
131         super( name );
132     }
133
134     public void testValidPaths()
135     {
136             
137         String JavaDoc path = null;
138
139         try
140         {
141             // XXX Jiffie solution?
142
XPathReader reader = XPathReaderFactory.createReader();
143             JaxenHandler handler = new JaxenHandler();
144             handler.setXPathFactory( new DefaultXPathFactory() );
145             reader.setXPathHandler( handler );
146
147             for ( int i = 0; i < paths.length; i++ ) {
148                 path = paths[i];
149                 reader.parse(path);
150                 handler.getXPathExpr(false);
151                 handler.getXPathExpr();
152             }
153         }
154         catch (Exception JavaDoc e)
155         {
156             e.printStackTrace();
157             fail( path + " -> " + e.getMessage() );
158         }
159     }
160
161     public void testBogusPaths() throws SAXPathException
162     {
163         XPathReader reader = XPathReaderFactory.createReader();
164         JaxenHandler handler = new JaxenHandler();
165         handler.setXPathFactory( new DefaultXPathFactory() );
166         reader.setXPathHandler( handler );
167         
168         for ( int i = 0; i < bogusPaths.length; i++ ) {
169             String JavaDoc path = bogusPaths[i];
170
171             try
172             {
173                 reader.parse(path);
174                 XPathExpr xpath = handler.getXPathExpr(false);
175                 fail( "Parsed bogus path as: " + xpath );
176             }
177             catch (XPathSyntaxException e)
178             {
179             }
180         }
181     }
182 }
183
Popular Tags