1 8 package org.codehaus.dna.impl; 9 10 import java.io.StringReader ; 11 import java.lang.reflect.Proxy ; 12 import javax.xml.parsers.DocumentBuilder ; 13 import javax.xml.parsers.DocumentBuilderFactory ; 14 import javax.xml.parsers.ParserConfigurationException ; 15 import javax.xml.transform.sax.SAXResult ; 16 import junit.framework.TestCase; 17 18 import org.codehaus.dna.Configuration; 19 import org.codehaus.dna.impl.ConfigurationUtil; 20 import org.codehaus.dna.impl.DefaultConfiguration; 21 import org.w3c.dom.Comment ; 22 import org.w3c.dom.Document ; 23 import org.w3c.dom.Element ; 24 import org.w3c.dom.NamedNodeMap ; 25 import org.w3c.dom.Node ; 26 import org.w3c.dom.NodeList ; 27 import org.w3c.dom.Text ; 28 import org.xml.sax.ContentHandler ; 29 import org.xml.sax.InputSource ; 30 31 public class ConfigurationUtilTestCase 32 extends TestCase 33 { 34 private static final String DOC_FACTORY = "javax.xml.parsers.DocumentBuilderFactory"; 35 36 public void testToElementWithBasicConfiguration() 37 throws Exception 38 { 39 final String name = "meep"; 40 final DefaultConfiguration configuration = new DefaultConfiguration( name, "", "" ); 41 final Element element = ConfigurationUtil.toElement( configuration ); 42 assertEquals( "element.getNodeName()", name, element.getNodeName() ); 43 44 final NodeList nodeList = element.getChildNodes(); 45 assertEquals( "nodeList.getLength()", 0, nodeList.getLength() ); 46 47 final NamedNodeMap attributes = element.getAttributes(); 48 assertEquals( "attributes.getLength()", 0, attributes.getLength() ); 49 } 50 51 public void testToElementWithConfigurationWithValue() 52 throws Exception 53 { 54 final String name = "meep"; 55 final String value = "blah"; 56 final DefaultConfiguration configuration = new DefaultConfiguration( name, "", "" ); 57 configuration.setValue( value ); 58 final Element element = ConfigurationUtil.toElement( configuration ); 59 assertEquals( "element.getNodeName()", name, element.getNodeName() ); 60 61 final NodeList nodeList = element.getChildNodes(); 62 assertEquals( "nodeList.getLength()", 1, nodeList.getLength() ); 63 final Node node = nodeList.item( 0 ); 64 assertEquals( "element[0].value", value, node.getNodeValue() ); 65 66 final NamedNodeMap attributes = element.getAttributes(); 67 assertEquals( "attributes.getLength()", 0, attributes.getLength() ); 68 } 69 70 public void testToElementWithConfigurationWithAttributes() 71 throws Exception 72 { 73 final String name = "meep"; 74 final String key = "key"; 75 final String value = "value"; 76 77 final DefaultConfiguration configuration = new DefaultConfiguration( name, "", "" ); 78 configuration.setAttribute( key, value ); 79 80 final Element element = ConfigurationUtil.toElement( configuration ); 81 assertEquals( "element.getNodeName()", name, element.getNodeName() ); 82 83 final NodeList nodeList = element.getChildNodes(); 84 assertEquals( "nodeList.getLength()", 0, nodeList.getLength() ); 85 86 final NamedNodeMap attributes = element.getAttributes(); 87 assertEquals( "attributes.getLength()", 1, attributes.getLength() ); 88 final Node node = attributes.item( 0 ); 89 assertEquals( "attribute[0].name", key, node.getNodeName() ); 90 assertEquals( "attribute[0].value", value, node.getNodeValue() ); 91 } 92 93 public void testToElementWithConfigurationWithChildren() 94 throws Exception 95 { 96 final String name = "meep"; 97 final String childName = "moop"; 98 99 final DefaultConfiguration configuration = new DefaultConfiguration( name, "", "" ); 100 final DefaultConfiguration child = new DefaultConfiguration( childName, "", "" ); 101 configuration.addChild( child ); 102 103 final Element element = ConfigurationUtil.toElement( configuration ); 104 assertEquals( "element.getNodeName()", name, element.getNodeName() ); 105 106 final NodeList nodeList = element.getChildNodes(); 107 assertEquals( "nodeList.getLength()", 1, nodeList.getLength() ); 108 final Node node = nodeList.item( 0 ); 109 assertEquals( "element[0].name", childName, node.getNodeName() ); 110 111 final NamedNodeMap attributes = element.getAttributes(); 112 assertEquals( "attributes.getLength()", 0, attributes.getLength() ); 113 114 } 115 116 public void testToElementWithSevereError() 117 throws Exception 118 { 119 final String name = "meep"; 120 final DefaultConfiguration configuration = new DefaultConfiguration( name, "", "" ); 121 122 final String property = System.getProperty( DOC_FACTORY ); 123 try 124 { 125 System.setProperty( "javax.xml.parsers.DocumentBuilderFactory", 126 "I dont exist!!!" ); 127 ConfigurationUtil.toElement( configuration ); 128 } 129 catch( final IllegalStateException ise ) 130 { 131 return; 132 } 133 finally 134 { 135 if( null != property ) 136 { 137 System.setProperty( DOC_FACTORY, property ); 138 } 139 else 140 { 141 System.getProperties().remove( DOC_FACTORY ); 142 } 143 } 144 fail( "Expected to fail to create element as " + 145 "invlaid document factory property" ); 146 } 147 148 public void testToConfigurationFromBasicElement() 149 throws Exception 150 { 151 final Document document = createDocument(); 152 final String name = "meep"; 153 final Element element = document.createElement( name ); 154 final Configuration configuration = ConfigurationUtil.toConfiguration( element ); 155 156 assertEquals( "configuration.getName()", name, configuration.getName() ); 157 assertEquals( "configuration.getPath()", 158 ConfigurationUtil.ROOT_PATH, 159 configuration.getPath() ); 160 assertEquals( "configuration.getLocation()", 161 "dom-gen", 162 configuration.getLocation() ); 163 } 164 165 public void testToConfigurationFromElementWithValue() 166 throws Exception 167 { 168 final Document document = createDocument(); 169 final String name = "meep"; 170 final String value = "text"; 171 final Element element = document.createElement( name ); 172 final Text text = document.createTextNode( value ); 173 element.appendChild( text ); 174 final Configuration configuration = ConfigurationUtil.toConfiguration( element ); 175 176 assertEquals( "configuration.getName()", name, configuration.getName() ); 177 assertEquals( "configuration.getPath()", 178 ConfigurationUtil.ROOT_PATH, 179 configuration.getPath() ); 180 assertEquals( "configuration.getLocation()", 181 "dom-gen", 182 configuration.getLocation() ); 183 assertEquals( "configuration.getValue()", 184 value, 185 configuration.getValue() ); 186 } 187 188 public void testToConfigurationFromElementWithMultipleValueFragments() 189 throws Exception 190 { 191 final Document document = createDocument(); 192 final String name = "meep"; 193 final String value = "text"; 194 final Element element = document.createElement( name ); 195 final Text text = document.createTextNode( value ); 196 element.appendChild( text ); 197 final Text text2 = document.createTextNode( value ); 198 element.appendChild( text2 ); 199 final Configuration configuration = ConfigurationUtil.toConfiguration( element ); 200 201 assertEquals( "configuration.getName()", name, configuration.getName() ); 202 assertEquals( "configuration.getPath()", 203 ConfigurationUtil.ROOT_PATH, 204 configuration.getPath() ); 205 assertEquals( "configuration.getLocation()", 206 "dom-gen", 207 configuration.getLocation() ); 208 assertEquals( "configuration.getValue()", 209 value + value, 210 configuration.getValue() ); 211 } 212 213 public void testToConfigurationFromElementWithInternalComment() 214 throws Exception 215 { 216 final Document document = createDocument(); 217 final String name = "meep"; 218 final Element element = document.createElement( name ); 219 final Comment comment = document.createComment( "comment" ); 220 element.appendChild( comment ); 221 final Configuration configuration = ConfigurationUtil.toConfiguration( element ); 222 223 assertEquals( "configuration.getName()", name, configuration.getName() ); 224 assertEquals( "configuration.getPath()", 225 ConfigurationUtil.ROOT_PATH, 226 configuration.getPath() ); 227 assertEquals( "configuration.getLocation()", 228 "dom-gen", 229 configuration.getLocation() ); 230 assertEquals( "configuration.getValue()", 231 null, 232 configuration.getValue( null ) ); 233 } 234 235 public void testToConfigurationFromElementWithAttributes() 236 throws Exception 237 { 238 final Document document = createDocument(); 239 final String name = "meep"; 240 final String key = "key"; 241 final String value = "value"; 242 final Element element = document.createElement( name ); 243 element.setAttribute( key, value ); 244 final Configuration configuration = ConfigurationUtil.toConfiguration( element ); 245 246 assertEquals( "configuration.getName()", name, configuration.getName() ); 247 assertEquals( "configuration.getPath()", 248 ConfigurationUtil.ROOT_PATH, 249 configuration.getPath() ); 250 assertEquals( "configuration.getLocation()", 251 "dom-gen", 252 configuration.getLocation() ); 253 assertEquals( "configuration.getAttributeNames().length", 254 1, 255 configuration.getAttributeNames().length ); 256 assertEquals( "configuration.getAttribute( key )", 257 value, 258 configuration.getAttribute( key ) ); 259 } 260 261 public void testToConfigurationFromElementWithChildren() 262 throws Exception 263 { 264 final Document document = createDocument(); 265 final String name = "meep"; 266 final String childName = "lilmeep"; 267 final Element element = document.createElement( name ); 268 final Element childElement = document.createElement( childName ); 269 element.appendChild( childElement ); 270 271 final Configuration configuration = ConfigurationUtil.toConfiguration( element ); 272 273 assertEquals( "configuration.getName()", name, configuration.getName() ); 274 assertEquals( "configuration.getPath()", 275 ConfigurationUtil.ROOT_PATH, 276 configuration.getPath() ); 277 assertEquals( "configuration.getLocation()", 278 "dom-gen", 279 configuration.getLocation() ); 280 assertEquals( "configuration.getAttributeNames().length", 281 0, 282 configuration.getAttributeNames().length ); 283 assertEquals( "configuration.getChildren().length", 284 1, 285 configuration.getChildren().length ); 286 final Configuration child = configuration.getChildren()[ 0 ]; 287 assertEquals( "child.name", childName, child.getName() ); 288 assertEquals( "child.getPath()", "meep", child.getPath() ); 289 } 290 291 public void testSerializeToResult() 292 throws Exception 293 { 294 final String name = "meep"; 295 final DefaultConfiguration configuration = new DefaultConfiguration( name, "", "" ); 296 297 final MockInvocationRecorder recorder = new MockInvocationRecorder(); 298 recorder.addInvocation( SAXMethods.START_DOCUMENT, 299 new Object [ 0 ], 300 null ); 301 recorder.addInvocation( SAXMethods.START_ELEMENT, 302 new Object []{"", name, name, 303 MockSAXConfigurationSerializer.ATTRIBUTES}, 304 null ); 305 recorder.addInvocation( SAXMethods.END_ELEMENT, 306 new Object []{"", name, name}, 307 null ); 308 recorder.addInvocation( SAXMethods.END_DOCUMENT, 309 new Object [ 0 ], 310 null ); 311 312 final ContentHandler handler = (ContentHandler ) 313 Proxy.newProxyInstance( getClass().getClassLoader(), 314 new Class []{ContentHandler .class}, 315 recorder ); 316 317 final SAXResult result = new SAXResult ( handler ); 318 319 ConfigurationUtil.serializeToResult( result, configuration ); 320 } 321 322 public void testBuildFromXML() 323 throws Exception 324 { 325 final String data = "<element/>"; 326 final InputSource input = new InputSource (); 327 input.setCharacterStream( new StringReader ( data ) ); 328 final Configuration configuration = ConfigurationUtil.buildFromXML( input ); 329 assertEquals( "configuration.name", "element", configuration.getName() ); 330 assertEquals( "configuration.path", "", configuration.getPath() ); 331 assertEquals( "configuration.location", "", configuration.getLocation() ); 332 } 333 334 private Document createDocument() throws ParserConfigurationException 335 { 336 final DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance(); 337 final DocumentBuilder builder = factory.newDocumentBuilder(); 338 return builder.newDocument(); 339 } 340 341 public void testGeneratePathNameFromRootForRoot() 342 throws Exception 343 { 344 final String path = 345 ConfigurationUtil.generatePathName( "", "" ); 346 assertEquals( "", path ); 347 } 348 349 public void testGeneratePathNameFromRoot() 350 throws Exception 351 { 352 final String path = 353 ConfigurationUtil.generatePathName( "", "element" ); 354 355 assertEquals( "element", path ); 356 } 357 358 public void testGeneratePathNameFromNonRoot() 359 throws Exception 360 { 361 final String path = 362 ConfigurationUtil.generatePathName( "element", "child" ); 363 364 assertEquals( "element/child", path ); 365 } 366 367 public void testEqualsOnEmptyConfigurations() 368 throws Exception 369 { 370 final String name = "x"; 371 final DefaultConfiguration configuration1 = new DefaultConfiguration( name, "", "" ); 372 final DefaultConfiguration configuration2 = new DefaultConfiguration( name, "", "" ); 373 374 final boolean equal = 375 ConfigurationUtil.equals( configuration1, configuration2 ); 376 assertEquals( "config1 == config2", true, equal ); 377 } 378 379 public void testEqualsWithDifferentNames() 380 throws Exception 381 { 382 final DefaultConfiguration configuration1 = new DefaultConfiguration( "x", "", "" ); 383 final DefaultConfiguration configuration2 = new DefaultConfiguration( "y", "", "" ); 384 385 final boolean equal = 386 ConfigurationUtil.equals( configuration1, configuration2 ); 387 assertEquals( "config1 == config2", false, equal ); 388 } 389 390 public void testEqualsWithAttributes() 391 throws Exception 392 { 393 final DefaultConfiguration configuration1 = new DefaultConfiguration( "x", "", "" ); 394 configuration1.setAttribute( "key", "value" ); 395 final DefaultConfiguration configuration2 = new DefaultConfiguration( "x", "", "" ); 396 configuration2.setAttribute( "key", "value" ); 397 398 final boolean equal = 399 ConfigurationUtil.equals( configuration1, configuration2 ); 400 assertEquals( "config1 == config2", true, equal ); 401 } 402 403 public void testEqualsWithDifferentNumberOfAttributes() 404 throws Exception 405 { 406 final DefaultConfiguration configuration1 = new DefaultConfiguration( "x", "", "" ); 407 configuration1.setAttribute( "key", "value" ); 408 configuration1.setAttribute( "key2", "value" ); 409 final DefaultConfiguration configuration2 = new DefaultConfiguration( "x", "", "" ); 410 configuration2.setAttribute( "key", "value" ); 411 412 final boolean equal = 413 ConfigurationUtil.equals( configuration1, configuration2 ); 414 assertEquals( "config1 == config2", false, equal ); 415 } 416 417 public void testEqualsWithDifferentAttributeNames() 418 throws Exception 419 { 420 final DefaultConfiguration configuration1 = new DefaultConfiguration( "x", "", "" ); 421 configuration1.setAttribute( "key1", "value" ); 422 final DefaultConfiguration configuration2 = new DefaultConfiguration( "x", "", "" ); 423 configuration2.setAttribute( "key2", "value" ); 424 425 final boolean equal = 426 ConfigurationUtil.equals( configuration1, configuration2 ); 427 assertEquals( "config1 == config2", false, equal ); 428 } 429 430 public void testEqualsWithDifferentAttributeValues() 431 throws Exception 432 { 433 final DefaultConfiguration configuration1 = new DefaultConfiguration( "x", "", "" ); 434 configuration1.setAttribute( "key", "value1" ); 435 final DefaultConfiguration configuration2 = new DefaultConfiguration( "x", "", "" ); 436 configuration2.setAttribute( "key", "value2" ); 437 438 final boolean equal = 439 ConfigurationUtil.equals( configuration1, configuration2 ); 440 assertEquals( "config1 == config2", false, equal ); 441 } 442 443 public void testEqualsWithChild() 444 throws Exception 445 { 446 final DefaultConfiguration configuration1 = new DefaultConfiguration( "x", "", "" ); 447 final DefaultConfiguration child1 = new DefaultConfiguration( "x", "", "" ); 448 configuration1.addChild( child1 ); 449 final DefaultConfiguration configuration2 = new DefaultConfiguration( "x", "", "" ); 450 final DefaultConfiguration child2 = new DefaultConfiguration( "x", "", "" ); 451 configuration2.addChild( child2 ); 452 453 final boolean equal = 454 ConfigurationUtil.equals( configuration1, configuration2 ); 455 assertEquals( "config1 == config2", true, equal ); 456 } 457 458 public void testEqualsWithDifferentChildCount() 459 throws Exception 460 { 461 final DefaultConfiguration configuration1 = new DefaultConfiguration( "x", "", "" ); 462 final DefaultConfiguration child1 = new DefaultConfiguration( "x", "", "" ); 463 configuration1.addChild( child1 ); 464 final DefaultConfiguration configuration2 = new DefaultConfiguration( "x", "", "" ); 465 466 final boolean equal = 467 ConfigurationUtil.equals( configuration1, configuration2 ); 468 assertEquals( "config1 == config2", false, equal ); 469 } 470 471 public void testEqualsWithDifferentChildren() 472 throws Exception 473 { 474 final DefaultConfiguration configuration1 = new DefaultConfiguration( "x", "", "" ); 475 final DefaultConfiguration child1 = new DefaultConfiguration( "x", "", "" ); 476 configuration1.addChild( child1 ); 477 final DefaultConfiguration configuration2 = new DefaultConfiguration( "x", "", "" ); 478 final DefaultConfiguration child2 = new DefaultConfiguration( "y", "", "" ); 479 configuration2.addChild( child2 ); 480 481 final boolean equal = 482 ConfigurationUtil.equals( configuration1, configuration2 ); 483 assertEquals( "config1 == config2", false, equal ); 484 } 485 486 public void testEqualsWithContent() 487 throws Exception 488 { 489 final DefaultConfiguration configuration1 = new DefaultConfiguration( "x", "", "" ); 490 configuration1.setValue( "content" ); 491 final DefaultConfiguration configuration2 = new DefaultConfiguration( "x", "", "" ); 492 configuration2.setValue( "content" ); 493 494 final boolean equal = 495 ConfigurationUtil.equals( configuration1, configuration2 ); 496 assertEquals( "config1 == config2", true, equal ); 497 } 498 499 public void testEqualsWithDifferentContent() 500 throws Exception 501 { 502 final DefaultConfiguration configuration1 = new DefaultConfiguration( "x", "", "" ); 503 configuration1.setValue( "content1" ); 504 final DefaultConfiguration configuration2 = new DefaultConfiguration( "x", "", "" ); 505 configuration2.setValue( "content2" ); 506 507 final boolean equal = 508 ConfigurationUtil.equals( configuration1, configuration2 ); 509 assertEquals( "config1 == config2", false, equal ); 510 } 511 512 public void testEqualsWithContentOnOne() 513 throws Exception 514 { 515 final DefaultConfiguration configuration1 = new DefaultConfiguration( "x", "", "" ); 516 final DefaultConfiguration configuration2 = new DefaultConfiguration( "x", "", "" ); 517 configuration2.setValue( "content2" ); 518 519 final boolean equal = 520 ConfigurationUtil.equals( configuration1, configuration2 ); 521 assertEquals( "config1 == config2", false, equal ); 522 } 523 } 524 | Popular Tags |