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