    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  package org.apache.commons.configuration.tree;
    18
    19  import java.io.File;
    20
    21  import org.apache.commons.configuration.ConfigurationException;
    22  import org.apache.commons.configuration.HierarchicalConfiguration;
    23  import org.apache.commons.configuration.XMLConfiguration;
    24
    25  import junit.framework.TestCase;
    26
    27  /***
    28   * A base class for testing combiner implementations. This base class provides
    29   * some functionality for loading the test configurations, which are to be
    30   * combined. Concrete sub classes only need to create the correct combiner
    31   * object.
    32   *
    33   * @version $Id: AbstractCombinerTest.java 439648 2006-09-02 20:42:10Z oheger $
    34   */
    35  public abstract class AbstractCombinerTest extends TestCase
    36  {
    37      /*** Constant for the first test configuration. */
    38      static File CONF1 = new File("conf/testcombine1.xml");
    39
    40      /*** Constant for the second test configuration. */
    41      static File CONF2 = new File("conf/testcombine2.xml");
    42
    43      /*** The combiner to be tested. */
    44      protected NodeCombiner combiner;
    45
    46      protected void setUp() throws Exception
    47      {
    48          super.setUp();
    49          combiner = createCombiner();
    50      }
    51
    52      /***
    53       * Creates the combiner to be tested. This method is called by
    54       * <code>setUp()</code>. It must be implemented in concrete sub classes.
    55       *
    56       * @return the combiner to be tested
    57       */
    58      protected abstract NodeCombiner createCombiner();
    59
    60      /***
    61       * Constructs a union configuration based on the source configurations.
    62       *
    63       * @return the union configuration
    64       * @throws ConfigurationException if an error occurs
    65       */
    66      protected HierarchicalConfiguration createCombinedConfiguration()
    67              throws ConfigurationException
    68      {
    69          XMLConfiguration conf1 = new XMLConfiguration(CONF1);
    70          XMLConfiguration conf2 = new XMLConfiguration(CONF2);
    71          ConfigurationNode cn = combiner.combine(conf1.getRootNode(), conf2
    72                  .getRootNode());
    73
    74          HierarchicalConfiguration result = new HierarchicalConfiguration();
    75          result.setRootNode(cn);
    76
    77          return result;
    78      }
    79
    80      /***
    81       * Tests a newly created combiner.
    82       */
    83      public void testInit()
    84      {
    85          assertTrue("Combiner has list nodes", combiner.getListNodes().isEmpty());
    86          assertFalse("Node is list node", combiner
    87                  .isListNode(new DefaultConfigurationNode("test")));
    88      }
    89
    90  }