001 /*
002 * Copyright 2005,2009 Ivan SZKIBA
003 *
004 * Licensed under the Apache License, Version 2.0 (the "License");
005 * you may not use this file except in compliance with the License.
006 * You may obtain a copy of the License at
007 *
008 * http://www.apache.org/licenses/LICENSE-2.0
009 *
010 * Unless required by applicable law or agreed to in writing, software
011 * distributed under the License is distributed on an "AS IS" BASIS,
012 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
013 * See the License for the specific language governing permissions and
014 * limitations under the License.
015 */
016 package org.ini4j;
017
018 import static org.junit.Assert.assertArrayEquals;
019 import static org.junit.Assert.assertEquals;
020 import static org.junit.Assert.assertFalse;
021 import static org.junit.Assert.assertNotNull;
022 import static org.junit.Assert.assertNull;
023 import static org.junit.Assert.assertTrue;
024
025 import org.junit.Before;
026 import org.junit.Test;
027
028 import java.util.Arrays;
029 import java.util.HashMap;
030 import java.util.Map;
031 import java.util.Map.Entry;
032 import java.util.Set;
033
034 public class BasicMultiMapTest extends Ini4jCase
035 {
036 private static final String KEY1 = "key1";
037 private static final String KEY2 = "key2";
038 private static final String KEY3 = "key3";
039 private static final String VALUE1 = "value1";
040 private static final String VALUE2 = "value2";
041 private static final String VALUE3 = "value3";
042 private static final String[] VALUES = { VALUE1, VALUE2, VALUE3 };
043 private MultiMap<String, String> _map;
044
045 @Before @Override public void setUp() throws Exception
046 {
047 super.setUp();
048 _map = new BasicMultiMap<String, String>();
049 }
050
051 @Test public void testAdd()
052 {
053 _map.add(KEY1, VALUE1);
054 _map.add(KEY1, VALUE2);
055 _map.add(KEY1, VALUE3);
056 assertEquals(3, _map.length(KEY1));
057 _map.add(KEY1, VALUE3, 0);
058 assertEquals(4, _map.length(KEY1));
059 assertEquals(VALUE3, _map.get(KEY1, 0));
060 assertEquals(VALUE3, _map.get(KEY1, 3));
061 _map.clear();
062 assertTrue(_map.isEmpty());
063 }
064
065 @Test public void testAll()
066 {
067 _map.putAll(KEY1, Arrays.asList(VALUES));
068 assertEquals(VALUES.length, _map.length(KEY1));
069 String[] values = _map.getAll(KEY1).toArray(new String[] {});
070
071 assertArrayEquals(VALUES, values);
072 }
073
074 @Test public void testContainsValue()
075 {
076 _map.putAll(KEY1, Arrays.asList(VALUES));
077 assertTrue(_map.containsValue(VALUE1));
078 assertTrue(_map.containsValue(VALUE2));
079 assertTrue(_map.containsValue(VALUE3));
080 _map.clear();
081 _map.put(KEY2, VALUE1);
082 assertFalse(_map.containsValue(VALUE3));
083 }
084
085 @Test public void testEntrySet()
086 {
087 _map.putAll(KEY1, Arrays.asList(VALUES));
088 _map.put(KEY2, VALUE2);
089 _map.put(KEY3, VALUE3);
090 Set<Entry<String, String>> set = _map.entrySet();
091
092 assertNotNull(set);
093 assertEquals(3, set.size());
094 for (Entry<String, String> e : set)
095 {
096 if (e.getKey().equals(KEY1))
097 {
098 assertEquals(VALUES[2], e.getValue());
099 e.setValue(VALUES[1]);
100 }
101 else if (e.getKey().equals(KEY2))
102 {
103 assertEquals(VALUE2, e.getValue());
104 e.setValue(VALUE3);
105 }
106 else if (e.getKey().equals(KEY3))
107 {
108 assertEquals(VALUE3, e.getValue());
109 e.setValue(VALUE2);
110 }
111 }
112
113 assertEquals(VALUES[1], _map.get(KEY1));
114 assertEquals(VALUES.length, _map.length(KEY1));
115 assertEquals(VALUE3, _map.get(KEY2));
116 assertEquals(VALUE2, _map.get(KEY3));
117 }
118
119 @Test public void testGetEmpty()
120 {
121 assertNull(_map.get(KEY1));
122 assertNull(_map.get(KEY1, 1));
123 }
124
125 @Test public void testPut()
126 {
127 _map.put(KEY1, VALUE1);
128 _map.add(KEY1, VALUE2);
129 assertEquals(VALUE2, _map.get(KEY1, 1));
130 _map.put(KEY1, VALUE3, 1);
131 assertEquals(VALUE3, _map.get(KEY1, 1));
132 assertEquals(VALUE3, _map.get(KEY1));
133 }
134
135 @Test public void testPutAll()
136 {
137 _map.put(KEY1, VALUE1);
138 _map.put(KEY2, VALUE1);
139 _map.add(KEY2, VALUE2);
140 MultiMap<String, String> other = new BasicMultiMap<String, String>();
141
142 other.putAll(_map);
143 assertEquals(2, other.size());
144 assertEquals(2, other.length(KEY2));
145 assertEquals(1, other.length(KEY1));
146 assertEquals(VALUE1, _map.get(KEY1));
147 assertEquals(VALUE1, _map.get(KEY2, 0));
148 assertEquals(VALUE2, _map.get(KEY2, 1));
149 Map<String, String> regular = new HashMap<String, String>(_map);
150
151 _map.clear();
152 _map.putAll(regular);
153 assertEquals(regular.keySet(), _map.keySet());
154 }
155
156 @Test public void testRemove()
157 {
158 _map.add(KEY1, VALUE1);
159 _map.add(KEY2, VALUE1);
160 _map.add(KEY2, VALUE2);
161 _map.add(KEY3, VALUE1);
162 _map.add(KEY3, VALUE2);
163 _map.add(KEY3, VALUE3);
164 assertEquals(VALUE2, _map.get(KEY3, 1));
165 _map.remove(KEY3, 1);
166 assertEquals(VALUE3, _map.get(KEY3, 1));
167 _map.remove(KEY3, 1);
168 assertEquals(VALUE1, _map.get(KEY3));
169 _map.remove(KEY3, 0);
170 assertEquals(0, _map.length(KEY3));
171 assertFalse(_map.containsKey(KEY3));
172 _map.remove(KEY2);
173 assertFalse(_map.containsKey(KEY2));
174 _map.remove(KEY1);
175 assertFalse(_map.containsKey(KEY1));
176 assertEquals(0, _map.size());
177 assertTrue(_map.isEmpty());
178 assertNull(_map.remove(KEY1));
179 assertNull(_map.remove(KEY1, 1));
180 }
181
182 @Test public void testValues()
183 {
184 _map.put(KEY1, VALUE1);
185 _map.put(KEY2, VALUE2);
186 _map.add(KEY2, VALUE3);
187 String[] values = _map.values().toArray(new String[] {});
188
189 Arrays.sort(values);
190 assertArrayEquals(values, VALUES);
191 }
192 }