    1   package org.apache.commons.configuration;
    2
    3   /*
    4    * Copyright 2002-2004 The Apache Software Foundation.
    5    *
    6    * Licensed under the Apache License, Version 2.0 (the "License")
    7    * you may not use this file except in compliance with the License.
    8    * You may obtain a copy of the License at
    9    *
    10   *     http://www.apache.org/licenses/LICENSE-2.0
    11   *
    12   * Unless required by applicable law or agreed to in writing, software
    13   * distributed under the License is distributed on an "AS IS" BASIS,
    14   * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
    15   * See the License for the specific language governing permissions and
    16   * limitations under the License.
    17   */
    18
    19  import junit.framework.TestCase;
    20
    21  /***
    22   * Test class for ConfigurationKey.
    23   *
    24   * @version $Id: TestConfigurationKey.java,v 1.3 2004/02/27 17:41:34 epugh Exp $
    25   */
    26  public class TestConfigurationKey extends TestCase
    27  {
    28      private static final String TESTPROPS = "tables.table(0).fields.field(1)";
    29
    30      private static final String TESTATTR = "[@dataType]";
    31
    32      private static final String TESTKEY = TESTPROPS + TESTATTR;
    33
    34      public void testAppend()
    35      {
    36          ConfigurationKey key = new ConfigurationKey();
    37          key.append("tables").append("table.").appendIndex(0);
    38          key.append("fields.").append("field").appendIndex(1);
    39          key.appendAttribute("dataType");
    40          assertEquals(TESTKEY, key.toString());
    41      }
    42
    43      public void testIterate()
    44      {
    45          ConfigurationKey key = new ConfigurationKey(TESTKEY);
    46          ConfigurationKey.KeyIterator it = key.iterator();
    47          assertTrue(it.hasNext());
    48          assertEquals("tables", it.nextKey());
    49          assertEquals("table", it.nextKey());
    50          assertTrue(it.hasIndex());
    51          assertEquals(0, it.getIndex());
    52          assertEquals("fields", it.nextKey());
    53          assertFalse(it.hasIndex());
    54          assertEquals("field", it.nextKey(true));
    55          assertEquals(1, it.getIndex());
    56          assertFalse(it.isAttribute());
    57          assertEquals("field", it.currentKey(true));
    58          assertEquals("dataType", it.nextKey());
    59          assertEquals("[@dataType]", it.currentKey(true));
    60          assertTrue(it.isAttribute());
    61          assertFalse(it.hasNext());
    62
    63          key = new ConfigurationKey();
    64          assertFalse(key.iterator().hasNext());
    65          key.append("simple");
    66          it = key.iterator();
    67          assertTrue(it.hasNext());
    68          assertEquals("simple", it.next());
    69      }
    70
    71      public void testAttribute()
    72      {
    73          assertTrue(ConfigurationKey.isAttributeKey(TESTATTR));
    74          assertFalse(ConfigurationKey.isAttributeKey(TESTPROPS));
    75          assertFalse(ConfigurationKey.isAttributeKey(TESTKEY));
    76
    77          ConfigurationKey key = new ConfigurationKey(TESTPROPS);
    78          key.append(TESTATTR);
    79          assertEquals(TESTKEY, key.toString());
    80      }
    81
    82      public void testLength()
    83      {
    84          ConfigurationKey key = new ConfigurationKey(TESTPROPS);
    85          assertEquals(TESTPROPS.length(), key.length());
    86          key.appendAttribute("dataType");
    87          assertEquals(TESTKEY.length(), key.length());
    88          key.setLength(TESTPROPS.length());
    89          assertEquals(TESTPROPS.length(), key.length());
    90          assertEquals(TESTPROPS, key.toString());
    91      }
    92
    93      public void testConstructAttributeKey()
    94      {
    95          assertEquals("[@attribute]", ConfigurationKey.constructAttributeKey("attribute"));
    96          assertEquals("attribute", ConfigurationKey.attributeName("[@attribute]"));
    97          assertEquals("attribute", ConfigurationKey.attributeName("attribute"));
    98      }
    99
    100     public void testEquals()
    101     {
    102         ConfigurationKey k1 = new ConfigurationKey(TESTKEY);
    103         ConfigurationKey k2 = new ConfigurationKey(TESTKEY);
    104         assertTrue(k1.equals(k2));
    105         assertTrue(k2.equals(k1));
    106         k2.append("anotherPart");
    107         assertFalse(k1.equals(k2));
    108         assertFalse(k2.equals(k1));
    109         assertFalse(k1.equals(null));
    110         assertTrue(k1.equals(TESTKEY));
    111     }
    112
    113     public void testCommonKey()
    114     {
    115         ConfigurationKey k1 = new ConfigurationKey(TESTKEY);
    116         ConfigurationKey k2 = new ConfigurationKey("tables.table(0).name");
    117         ConfigurationKey kc = k1.commonKey(k2);
    118         assertEquals(new ConfigurationKey("tables.table(0)"), kc);
    119         assertEquals(kc, k2.commonKey(k1));
    120
    121         k2 = new ConfigurationKey("tables.table(1).fields.field(1)");
    122         kc = k1.commonKey(k2);
    123         assertEquals(new ConfigurationKey("tables"), kc);
    124
    125         k2 = new ConfigurationKey("completely.different.key");
    126         kc = k1.commonKey(k2);
    127         assertEquals(0, kc.length());
    128
    129         k2 = new ConfigurationKey();
    130         kc = k1.commonKey(k2);
    131         assertEquals(0, kc.length());
    132
    133         kc = k1.commonKey(k1);
    134         assertEquals(kc, k1);
    135     }
    136
    137     public void testDifferenceKey()
    138     {
    139         ConfigurationKey k1 = new ConfigurationKey(TESTKEY);
    140         ConfigurationKey kd = k1.differenceKey(k1);
    141         assertEquals(0, kd.length());
    142
    143         ConfigurationKey k2 = new ConfigurationKey("tables.table(0).name");
    144         kd = k1.differenceKey(k2);
    145         assertEquals("name", kd.toString());
    146
    147         k2 = new ConfigurationKey("tables.table(1).fields.field(1)");
    148         kd = k1.differenceKey(k2);
    149         assertEquals("table(1).fields.field(1)", kd.toString());
    150
    151         k2 = new ConfigurationKey("completely.different.key");
    152         kd = k1.differenceKey(k2);
    153         assertEquals(k2, kd);
    154     }
    155 }