1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18 package org.apache.commons.configuration;
19
20 import javax.xml.transform.Transformer;
21 import javax.xml.transform.TransformerFactory;
22 import javax.xml.transform.dom.DOMResult;
23 import javax.xml.transform.sax.SAXSource;
24
25 import org.apache.commons.jxpath.JXPathContext;
26 import org.w3c.dom.Document;
27 import org.w3c.dom.Node;
28 import org.xml.sax.InputSource;
29
30 import junit.framework.TestCase;
31
32 /***
33 * Test class for HierarchicalConfigurationXMLReader.
34 *
35 * @version $Id: TestHierarchicalConfigurationXMLReader.java 439648 2006-09-02 20:42:10Z oheger $
36 */
37 public class TestHierarchicalConfigurationXMLReader extends TestCase
38 {
39 private static final String TEST_FILE = "conf/testHierarchicalXMLConfiguration.xml";
40
41 private HierarchicalConfigurationXMLReader parser;
42
43 protected void setUp() throws Exception
44 {
45 XMLConfiguration config =
46 new XMLConfiguration();
47 config.setFileName(TEST_FILE);
48 config.load();
49 parser = new HierarchicalConfigurationXMLReader(config);
50 }
51
52 public void testParse() throws Exception
53 {
54 SAXSource source = new SAXSource(parser, new InputSource());
55 DOMResult result = new DOMResult();
56 Transformer trans = TransformerFactory.newInstance().newTransformer();
57 try
58 {
59
60
61 trans.transform(source, result);
62 }
63 catch(NoSuchMethodError ex)
64 {
65 return;
66 }
67 Node root = ((Document) result.getNode()).getDocumentElement();
68 JXPathContext ctx = JXPathContext.newContext(root);
69
70 assertEquals("Wrong name of root element", "config", root.getNodeName());
71 assertEquals("Wrong number of children of root", 1, ctx.selectNodes(
72 "/*").size());
73 assertEquals("Wrong number of tables", 2, ctx.selectNodes(
74 "/tables/table").size());
75 assertEquals("Wrong name of first table", "users", ctx
76 .getValue("/tables/table[1]/name"));
77 assertEquals("Wrong number of fields in first table", 5, ctx
78 .selectNodes("/tables/table[1]/fields/field").size());
79 assertEquals("Wrong attribute value", "system", ctx
80 .getValue("/tables/table[1]/@tableType"));
81 }
82 }