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

This page was automatically generated by Maven