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: TestRule.java,v 1.5 2004/06/25 08:03:50 maartenc Exp $
8 */
9
10 package org.dom4j.rule;
11
12 import java.util.ArrayList;
13 import java.util.Collections;
14
15 import junit.framework.Test;
16 import junit.framework.TestCase;
17 import junit.framework.TestSuite;
18 import junit.textui.TestRunner;
19
20 import org.dom4j.CDATA;
21 import org.dom4j.Document;
22 import org.dom4j.DocumentFactory;
23
24 /*** Tests the ordering of Rules
25 *
26 * @author <a href="mailto:jstrachan@apache.org">James Strachan</a>
27 * @version $Revision: 1.5 $
28 */
29 public class TestRule extends TestCase {
30
31 protected DocumentFactory factory = new DocumentFactory();
32
33 public TestRule(String name) {
34 super( name );
35 }
36
37 public static void main(String[] args) {
38 TestRunner.run( suite() );
39 }
40
41 public static Test suite() {
42 return new TestSuite( TestRule.class );
43 }
44
45 public void testOrder() throws Exception {
46 testGreater( "foo", "*" );
47 }
48
49 protected void testGreater(String expr1, String expr2) throws Exception {
50 System.out.println( "parsing: " + expr1 + " and " + expr2 );
51
52 Rule r1 = createRule( expr1 );
53 Rule r2 = createRule( expr2 );
54
55 System.out.println( "rule1: " + r1 + " rule2: " + r2 );
56
57 int value = r1.compareTo( r2 );
58
59 System.out.println( "Comparison: " + value );
60
61 assertTrue( "r1 > r2", value > 0 );
62
63 ArrayList list = new ArrayList();
64 list.add( r1 );
65 list.add( r2 );
66
67 Collections.sort( list );
68
69 assertTrue( "r2 should be first", list.get(0) == r2 );
70 assertTrue( "r1 should be next", list.get(1) == r1 );
71
72 list = new ArrayList();
73 list.add( r2 );
74 list.add( r1 );
75
76 Collections.sort( list );
77
78 assertTrue( "r2 should be first", list.get(0) == r2 );
79 assertTrue( "r1 should be next", list.get(1) == r1 );
80 /*
81 TreeSet set = new TreeSet();
82 set.add( r1 );
83 set.add( r2 );
84
85 assertTrue( "r2 should be first", set.first() == r2 );
86 assertTrue( "r1 should be next", set.last() == r1 );
87
88 Object[] array = set.toArray();
89
90 assertTrue( "r2 should be first", array[0] == r2 );
91 assertTrue( "r1 should be next", array[1] == r1 );
92
93 set = new TreeSet();
94 set.add( r2 );
95 set.add( r1 );
96
97 assertTrue( "r2 should be first", set.first() == r2 );
98 assertTrue( "r1 should be next", set.last() == r1 );
99
100 array = set.toArray();
101
102 assertTrue( "r2 should be first", array[0] == r2 );
103 assertTrue( "r1 should be next", array[1] == r1 );
104 */
105 }
106
107 public void testDocument() {
108 Rule rule = createRule( "/" );
109 Document document = factory.createDocument();
110 document.addElement( "foo" );
111
112 assertTrue( "/ matches document", rule.matches( document ) );
113 assertTrue( "/ does not match root element", ! rule.matches( document.getRootElement() ) );
114 }
115
116 public void testTextMatchesCDATA() {
117 CDATA cdata = factory.createCDATA( "<>&" );
118 Rule rule = createRule( "text()" );
119
120 assertTrue( "text() matches CDATA", rule.matches( cdata ) );
121 }
122
123 protected Rule createRule(String expr) {
124 Pattern pattern = factory.createPattern( expr );
125 return new Rule( pattern );
126 }
127 }
128
129
130
131
132 /*
133 * Redistribution and use of this software and associated documentation
134 * ("Software"), with or without modification, are permitted provided
135 * that the following conditions are met:
136 *
137 * 1. Redistributions of source code must retain copyright
138 * statements and notices. Redistributions must also contain a
139 * copy of this document.
140 *
141 * 2. Redistributions in binary form must reproduce the
142 * above copyright notice, this list of conditions and the
143 * following disclaimer in the documentation and/or other
144 * materials provided with the distribution.
145 *
146 * 3. The name "DOM4J" must not be used to endorse or promote
147 * products derived from this Software without prior written
148 * permission of MetaStuff, Ltd. For written permission,
149 * please contact dom4j-info@metastuff.com.
150 *
151 * 4. Products derived from this Software may not be called "DOM4J"
152 * nor may "DOM4J" appear in their names without prior written
153 * permission of MetaStuff, Ltd. DOM4J is a registered
154 * trademark of MetaStuff, Ltd.
155 *
156 * 5. Due credit should be given to the DOM4J Project -
157 * http://www.dom4j.org
158 *
159 * THIS SOFTWARE IS PROVIDED BY METASTUFF, LTD. AND CONTRIBUTORS
160 * ``AS IS'' AND ANY EXPRESSED OR IMPLIED WARRANTIES, INCLUDING, BUT
161 * NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND
162 * FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL
163 * METASTUFF, LTD. OR ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT,
164 * INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
165 * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
166 * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
167 * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT,
168 * STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
169 * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED
170 * OF THE POSSIBILITY OF SUCH DAMAGE.
171 *
172 * Copyright 2001-2004 (C) MetaStuff, Ltd. All Rights Reserved.
173 *
174 * $Id: TestRule.java,v 1.5 2004/06/25 08:03:50 maartenc Exp $
175 */