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 org.apache.commons.configuration.ConfigurationException;
20  import org.apache.commons.configuration.HierarchicalConfiguration;
21  
22  /***
23   * Test class for UnionCombiner.
24   *
25   * @version $Id: TestUnionCombiner.java 439648 2006-09-02 20:42:10Z oheger $
26   */
27  public class TestUnionCombiner extends AbstractCombinerTest
28  {
29      /***
30       * Creates the combiner.
31       *
32       * @return the combiner
33       */
34      protected NodeCombiner createCombiner()
35      {
36          return new UnionCombiner();
37      }
38  
39      /***
40       * Tests combination of simple values (no lists).
41       */
42      public void testSimpleValues() throws ConfigurationException
43      {
44          HierarchicalConfiguration config = createCombinedConfiguration();
45          assertEquals("Too few bgcolors", 1, config.getMaxIndex("gui.bgcolor"));
46          assertEquals("Wrong first color", "green", config
47                  .getString("gui.bgcolor(0)"));
48          assertEquals("Wrong second color", "black", config
49                  .getString("gui.bgcolor(1)"));
50          assertEquals("Wrong number of selcolors", 0, config
51                  .getMaxIndex("gui.selcolor"));
52          assertEquals("Wrong selcolor", "yellow", config
53                  .getString("gui.selcolor"));
54      }
55  
56      /***
57       * Tests combinations of elements with attributes.
58       */
59      public void testSimpleValuesWithAttributes() throws ConfigurationException
60      {
61          HierarchicalConfiguration config = createCombinedConfiguration();
62          assertEquals("Too few level elements", 1, config
63                  .getMaxIndex("gui.level"));
64          assertEquals("Wrong value of first element", 1, config
65                  .getInt("gui.level(0)"));
66          assertEquals("Wrong value of second element", 4, config
67                  .getInt("gui.level(1)"));
68          assertEquals("Wrong value of first attribute", 2, config
69                  .getInt("gui.level(0)[@default]"));
70          assertFalse("Found wrong attribute", config
71                  .containsKey("gui.level(0)[@min]"));
72          assertEquals("Wrong value of second attribute", 1, config
73                  .getInt("gui.level(1)[@min]"));
74      }
75  
76      /***
77       * Tests combination of attributes.
78       */
79      public void testAttributes() throws ConfigurationException
80      {
81          HierarchicalConfiguration config = createCombinedConfiguration();
82          assertEquals("Too few attributes", 1, config
83                  .getMaxIndex("database.tables.table(0)[@id]"));
84          assertEquals("Wrong value of first attribute", 1, config
85                  .getInt("database.tables.table(0)[@id](0)"));
86          assertEquals("Wrong value of second attribute", 2, config
87                  .getInt("database.tables.table(0)[@id](1)"));
88      }
89  
90      /***
91       * Tests combination of lists.
92       */
93      public void testLists() throws ConfigurationException
94      {
95          HierarchicalConfiguration config = createCombinedConfiguration();
96          assertEquals("Too few list elements", 2, config
97                  .getMaxIndex("net.service.url"));
98          assertEquals("Wrong first service", "http://service1.org", config
99                  .getString("net.service.url(0)"));
100         assertEquals("Wrong second service", "http://service2.org", config
101                 .getString("net.service.url(1)"));
102         assertEquals("Wrong service attribute", 2, config
103                 .getInt("net.service.url(2)[@type]"));
104         assertEquals("Wrong number of server elements", 3, config
105                 .getMaxIndex("net.server.url"));
106     }
107 
108     /***
109      * Tests combining a list of tables. Per default the table elements will be
110      * combined. But if they are defined as list elements, the resulting tree
111      * should contain two table nodes.
112      */
113     public void testTableList() throws ConfigurationException
114     {
115         combiner.addListNode("table");
116         HierarchicalConfiguration config = createCombinedConfiguration();
117         assertEquals("Wrong name of first table", "documents", config
118                 .getString("database.tables.table(0).name"));
119         assertEquals("Wrong id of first table", 1, config
120                 .getInt("database.tables.table(0)[@id]"));
121         assertEquals("Wrong name of second table", "tasks", config
122                 .getString("database.tables.table(1).name"));
123         assertEquals("Wrong id of second table", 2, config
124                 .getInt("database.tables.table(1)[@id]"));
125     }
126 }