    1   /*
    2    * Licensed to the Apache Software Foundation (ASF) under one or more
    3    * contributor license agreements.  See the NOTICE file distributed with
    4    * this work for additional information regarding copyright ownership.
    5    * The ASF licenses this file to You under the Apache License, Version 2.0
    6    * (the "License"); you may not use this file except in compliance with
    7    * the License.  You may obtain a copy of the License at
    8    *
    9    *     http://www.apache.org/licenses/LICENSE-2.0
    10   *
    11   * Unless required by applicable law or agreed to in writing, software
    12   * distributed under the License is distributed on an "AS IS" BASIS,
    13   * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
    14   * See the License for the specific language governing permissions and
    15   * limitations under the License.
    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 640458 2008-03-24 16:30:44Z 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              //When executed on a JDK 1.3 this line throws a NoSuchMethodError
    60              //somewhere deep in Xalan. We simply ignore this.
    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", "database", 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  }