1 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 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 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 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 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 313 | Popular Tags |