1 /*
2 * $Header$
3 * $Revision$
4 * $Date$
5 *
6 * ====================================================================
7 *
8 * Copyright 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 are
13 * met:
14 *
15 * * Redistributions of source code must retain the above copyright
16 * notice, this list of conditions and the following disclaimer.
17 *
18 * * Redistributions in binary form must reproduce the above copyright
19 * notice, this list of conditions and the following disclaimer in the
20 * documentation and/or other materials provided with the distribution.
21 *
22 * * Neither the name of the Jaxen Project nor the names of its
23 * contributors may be used to endorse or promote products derived
24 * from this software without specific prior written permission.
25 *
26 * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS
27 * IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED
28 * TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A
29 * PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER
30 * OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
31 * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
32 * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
33 * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
34 * LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
35 * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
36 * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
37 *
38 * ====================================================================
39 * This software consists of voluntary contributions made by many
40 * individuals on behalf of the Jaxen Project and was originally
41 * created by bob mcwhirter <bob@werken.com> and
42 * James Strachan <jstrachan@apache.org>. For more information on the
43 * Jaxen Project, please see <http://www.jaxen.org/>.
44 *
45 * $Id$
46 */
47
48
49
50 package org.jaxen.test;
51
52 import junit.framework.Test;
53 import junit.framework.TestCase;
54 import junit.framework.TestSuite;
55 import junit.textui.TestRunner;
56
57 import org.jaxen.JaxenException;
58 import org.jaxen.pattern.Pattern;
59 import org.jaxen.pattern.PatternParser;
60 import org.jaxen.saxpath.SAXPathException;
61 import org.jaxen.saxpath.helpers.XPathReaderFactory;
62
63 /*** Tests the use of priority in the Pattern implementations.
64 *
65 * @author <a href="mailto:jstrachan@apache.org">James Strachan</a>
66 * @version $Revision$
67 */
68 public class PriorityTest extends TestCase
69 {
70 public PriorityTest(String name)
71 {
72 super( name );
73 }
74
75 public static void main(String[] args)
76 {
77 TestRunner.run( suite() );
78 }
79
80 public static Test suite()
81 {
82 return new TestSuite( PriorityTest.class );
83 }
84
85 public void setUp()
86 {
87 System.setProperty( XPathReaderFactory.DRIVER_PROPERTY,
88 "" );
89 }
90
91 public void testDocumentNode() throws Exception
92 {
93 testPriority( "/", -0.5, Pattern.DOCUMENT_NODE );
94 }
95
96 public void testNameNode() throws Exception
97 {
98 testPriority( "foo", 0, Pattern.ELEMENT_NODE );
99 }
100
101 public void testQNameNode() throws Exception
102 {
103 testPriority( "foo:bar", 0, Pattern.ELEMENT_NODE );
104 }
105
106 public void testFilter() throws Exception
107 {
108 testPriority( "foo[@id='123']", 0.5, Pattern.ELEMENT_NODE );
109 }
110
111 public void testURI() throws Exception
112 {
113 testPriority( "foo:*", -0.25, Pattern.ELEMENT_NODE );
114 }
115
116 public void testNodeType() throws Exception
117 {
118 testPriority( "text()", -0.5, Pattern.TEXT_NODE );
119 }
120
121 public void testAttribute() throws Exception
122 {
123 testPriority( "@*", -0.5, Pattern.ATTRIBUTE_NODE );
124 }
125
126 public void testAnyNode() throws Exception
127 {
128 testPriority( "*", -0.5, Pattern.ELEMENT_NODE );
129 }
130
131 protected void testPriority(String expr, double priority, short nodeType)
132 throws JaxenException, SAXPathException
133 {
134
135 Pattern pattern = PatternParser.parse( expr );
136 double d = pattern.getPriority();
137 short nt = pattern.getMatchType();
138
139 assertEquals( "expr: " + expr,
140 new Double( priority ),
141 new Double( d ) );
142
143 assertEquals( "nodeType: " + expr,
144 nodeType,
145 nt );
146 }
147 }