1
2
3
4
5
6
7
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 }