1   
2   
3   
4   
5   
6   
7   
8   package org.dom4j;
9   
10  import junit.framework.TestCase;
11  
12  import java.io.File;
13  
14  import org.apache.xalan.processor.TransformerFactoryImpl;
15  import org.apache.xerces.jaxp.SAXParserFactoryImpl;
16  
17  import org.dom4j.io.SAXReader;
18  import org.dom4j.util.NodeComparator;
19  
20  /***
21   * An abstract base class for some DOM4J test cases
22   * 
23   * @author <a href="mailto:jstrachan@apache.org">James Strachan </a>
24   * @version $Revision: 1.24 $
25   */
26  public class AbstractTestCase extends TestCase {
27      protected Document document;
28  
29      protected AbstractTestCase() {
30          super();
31      }
32  
33      protected AbstractTestCase(String name) {
34          super(name);
35      }
36  
37      protected void log(String text) {
38          System.out.println(text);
39      }
40  
41      protected Document getDocument() {
42          return document;
43      }
44  
45      protected Document getDocument(String path) throws Exception {
46          return getDocument(path, new SAXReader());
47      }
48  
49      protected Document getDocument(String path, SAXReader reader)
50              throws Exception {
51          return reader.read(getFile(path));
52      }
53  
54      protected File getFile(String path) {
55          return new File(System.getProperty("user.dir"), path);
56      }
57  
58      public void assertDocumentsEqual(Document doc1, Document doc2)
59              throws Exception {
60          try {
61              assertTrue("Doc1 not null", doc1 != null);
62              assertTrue("Doc2 not null", doc2 != null);
63  
64              doc1.normalize();
65              doc2.normalize();
66  
67              assertNodesEqual(doc1, doc2);
68  
69              NodeComparator comparator = new NodeComparator();
70              assertTrue("Documents are equal",
71                      comparator.compare(doc1, doc2) == 0);
72          } catch (Exception e) {
73              log("Failed during comparison of: " + doc1 + " and: " + doc2);
74              throw e;
75          }
76      }
77  
78      public void assertNodesEqual(Document n1, Document n2) {
79          
80          assertNodesEqual(n1.getDocType(), n2.getDocType());
81          assertNodesEqualContent(n1, n2);
82      }
83  
84      public void assertNodesEqual(Element n1, Element n2) {
85          assertNodesEqual(n1.getQName(), n2.getQName());
86  
87          int c1 = n1.attributeCount();
88          int c2 = n2.attributeCount();
89  
90          assertEquals("Elements have same number of attributes (" + c1 + ", "
91                  + c2 + " for: " + n1 + " and " + n2, c1, c2);
92  
93          for (int i = 0; i < c1; i++) {
94              Attribute a1 = n1.attribute(i);
95              Attribute a2 = n2.attribute(a1.getQName());
96              assertNodesEqual(a1, a2);
97          }
98  
99          assertNodesEqualContent(n1, n2);
100     }
101 
102     public void assertNodesEqual(Attribute n1, Attribute n2) {
103         assertNodesEqual(n1.getQName(), n2.getQName());
104 
105         assertEquals("Attribute values for: " + n1 + " and " + n2, n1
106                 .getValue(), n2.getValue());
107     }
108 
109     public void assertNodesEqual(QName n1, QName n2) {
110         assertEquals("URIs equal for: " + n1.getQualifiedName() + " and "
111                 + n2.getQualifiedName(), n1.getNamespaceURI(), n2
112                 .getNamespaceURI());
113         assertEquals("qualified names equal", n1.getQualifiedName(), n2
114                 .getQualifiedName());
115     }
116 
117     public void assertNodesEqual(CharacterData t1, CharacterData t2) {
118         assertEquals("Text equal for: " + t1 + " and " + t2, t1.getText(), t2
119                 .getText());
120     }
121 
122     public void assertNodesEqual(DocumentType o1, DocumentType o2) {
123         if (o1 != o2) {
124             if (o1 == null) {
125                 assertTrue("Missing DocType: " + o2, false);
126             } else if (o2 == null) {
127                 assertTrue("Missing DocType: " + o1, false);
128             } else {
129                 assertEquals("DocType name equal", o1.getName(), o2.getName());
130                 assertEquals("DocType publicID equal", o1.getPublicID(), o2
131                         .getPublicID());
132                 assertEquals("DocType systemID equal", o1.getSystemID(), o2
133                         .getSystemID());
134             }
135         }
136     }
137 
138     public void assertNodesEqual(Entity o1, Entity o2) {
139         assertEquals("Entity names equal", o1.getName(), o2.getName());
140         assertEquals("Entity values equal", o1.getText(), o2.getText());
141     }
142 
143     public void assertNodesEqual(ProcessingInstruction n1,
144             ProcessingInstruction n2) {
145         assertEquals("PI targets equal", n1.getTarget(), n2.getTarget());
146         assertEquals("PI text equal", n1.getText(), n2.getText());
147     }
148 
149     public void assertNodesEqual(Namespace n1, Namespace n2) {
150         assertEquals("Namespace prefixes not equal", n1.getPrefix(), n2
151                 .getPrefix());
152         assertEquals("Namespace URIs not equal", n1.getURI(), n2.getURI());
153     }
154 
155     public void assertNodesEqualContent(Branch b1, Branch b2) {
156         int c1 = b1.nodeCount();
157         int c2 = b2.nodeCount();
158 
159         if (c1 != c2) {
160             log("Content of: " + b1);
161             log("is: " + b1.content());
162             log("Content of: " + b2);
163             log("is: " + b2.content());
164         }
165 
166         assertEquals("Branches have same number of children (" + c1 + ", " + c2
167                 + " for: " + b1 + " and " + b2, c1, c2);
168 
169         for (int i = 0; i < c1; i++) {
170             Node n1 = b1.node(i);
171             Node n2 = b2.node(i);
172             assertNodesEqual(n1, n2);
173         }
174     }
175 
176     public void assertNodesEqual(Node n1, Node n2) {
177         int nodeType1 = n1.getNodeType();
178         int nodeType2 = n2.getNodeType();
179         assertTrue("Nodes are of same type: ", nodeType1 == nodeType2);
180 
181         switch (nodeType1) {
182             case Node.ELEMENT_NODE:
183                 assertNodesEqual((Element) n1, (Element) n2);
184 
185                 break;
186 
187             case Node.DOCUMENT_NODE:
188                 assertNodesEqual((Document) n1, (Document) n2);
189 
190                 break;
191 
192             case Node.ATTRIBUTE_NODE:
193                 assertNodesEqual((Attribute) n1, (Attribute) n2);
194 
195                 break;
196 
197             case Node.TEXT_NODE:
198                 assertNodesEqual((Text) n1, (Text) n2);
199 
200                 break;
201 
202             case Node.CDATA_SECTION_NODE:
203                 assertNodesEqual((CDATA) n1, (CDATA) n2);
204 
205                 break;
206 
207             case Node.ENTITY_REFERENCE_NODE:
208                 assertNodesEqual((Entity) n1, (Entity) n2);
209 
210                 break;
211 
212             case Node.PROCESSING_INSTRUCTION_NODE:
213                 assertNodesEqual((ProcessingInstruction) n1,
214                         (ProcessingInstruction) n2);
215 
216                 break;
217 
218             case Node.COMMENT_NODE:
219                 assertNodesEqual((Comment) n1, (Comment) n2);
220 
221                 break;
222 
223             case Node.DOCUMENT_TYPE_NODE:
224                 assertNodesEqual((DocumentType) n1, (DocumentType) n2);
225 
226                 break;
227 
228             case Node.NAMESPACE_NODE:
229                 assertNodesEqual((Namespace) n1, (Namespace) n2);
230 
231                 break;
232 
233             default:
234                 assertTrue("Invalid node types. node1: " + n1 + " and node2: "
235                         + n2, false);
236         }
237     }
238 
239     
240     
241     protected void setUp() throws Exception {
242         System.setProperty("javax.xml.parsers.SAXParserFactory",
243                 SAXParserFactoryImpl.class.getName());
244         System.setProperty("javax.xml.transform.TransformerFactory",
245                 TransformerFactoryImpl.class.getName());
246         document = DocumentHelper.createDocument();
247 
248         Element root = document.addElement("root");
249 
250         Element author1 = root.addElement("author").addAttribute("name",
251                 "James").addAttribute("location", "UK").addText(
252                 "James Strachan");
253 
254         Element url1 = author1.addElement("url");
255         url1.addText("http://sourceforge.net/users/jstrachan/");
256 
257         Element author2 = root.addElement("author").addAttribute("name", "Bob")
258                 .addAttribute("location", "Canada").addText("Bob McWhirter");
259 
260         Element url2 = author2.addElement("url");
261         url2.addText("http://sourceforge.net/users/werken/");
262     }
263 
264     /***
265      * DOCUMENT ME!
266      * 
267      * @return the root element of the document
268      */
269     protected Element getRootElement() {
270         Element root = document.getRootElement();
271         assertTrue("Document has root element", root != null);
272 
273         return root;
274     }
275 }
276 
277 
278 
279 
280 
281 
282 
283 
284 
285 
286 
287 
288 
289 
290 
291 
292 
293 
294 
295 
296 
297 
298 
299 
300 
301 
302 
303 
304 
305 
306 
307 
308 
309 
310 
311 
312