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  }