diff --git a/src/java/org/apache/commons/collections/map/MultiValueMap.java b/src/java/org/apache/commons/collections/map/MultiValueMap.java index 2a6b790bf..c54a1a28e 100644 --- a/src/java/org/apache/commons/collections/map/MultiValueMap.java +++ b/src/java/org/apache/commons/collections/map/MultiValueMap.java @@ -206,12 +206,12 @@ public class MultiValueMap extends AbstractMapDecorator implements MultiMap { boolean result = false; Collection coll = getCollection(key); if (coll == null) { - coll = createCollection(1); - result = coll.add(value); + coll = createCollection(1); // might produce a non-empty collection + coll.add(value); if (coll.size() > 0) { // only add if non-zero size to maintain class state getMap().put(key, coll); - result = false; + result = true; // map definitely changed } } else { result = coll.add(value); @@ -308,19 +308,20 @@ public class MultiValueMap extends AbstractMapDecorator implements MultiMap { if (values == null || values.size() == 0) { return false; } + boolean result = false; Collection coll = getCollection(key); if (coll == null) { - coll = createCollection(values.size()); - boolean result = coll.addAll(values); + coll = createCollection(values.size()); // might produce a non-empty collection + coll.addAll(values); if (coll.size() > 0) { // only add if non-zero size to maintain class state getMap().put(key, coll); - result = false; + result = true; // map definitely changed } - return result; } else { - return coll.addAll(values); + result = coll.addAll(values); } + return result; } /** diff --git a/src/test/org/apache/commons/collections/map/TestMultiValueMap.java b/src/test/org/apache/commons/collections/map/TestMultiValueMap.java index 36b45d613..bd25c4481 100644 --- a/src/test/org/apache/commons/collections/map/TestMultiValueMap.java +++ b/src/test/org/apache/commons/collections/map/TestMultiValueMap.java @@ -31,7 +31,6 @@ import junit.framework.TestSuite; import org.apache.commons.collections.IteratorUtils; import org.apache.commons.collections.MultiMap; -import org.apache.commons.collections.TestMultiHashMap; /** * TestMultiValueMap. @@ -47,11 +46,11 @@ public class TestMultiValueMap extends TestCase { } public static Test suite() { - return new TestSuite(TestMultiHashMap.class); + return new TestSuite(TestMultiValueMap.class); } public static void main(String args[]) { - String[] testCaseName = { TestMultiHashMap.class.getName()}; + String[] testCaseName = { TestMultiValueMap.class.getName()}; junit.textui.TestRunner.main(testCaseName); } @@ -202,9 +201,9 @@ public class TestMultiValueMap extends TestCase { map.put("B", "BC"); assertEquals(2, map.size()); map.remove("A"); - assertEquals(2, map.size()); + assertEquals(1, map.size()); map.remove("B", "BC"); - assertEquals(2, map.size()); + assertEquals(1, map.size()); } public void testSize_Key() { @@ -250,6 +249,25 @@ public class TestMultiValueMap extends TestCase { assertEquals(false, map.containsValue("A", "AB")); } + public void testPutWithList() { + MultiValueMap test = MultiValueMap.decorate(new HashMap(), ArrayList.class); + assertEquals("a", test.put("A", "a")); + assertEquals("b", test.put("A", "b")); + assertEquals(1, test.size()); + assertEquals(2, test.size("A")); + assertEquals(2, test.totalSize()); + } + + public void testPutWithSet() { + MultiValueMap test = MultiValueMap.decorate(new HashMap(), HashSet.class); + assertEquals("a", test.put("A", "a")); + assertEquals("b", test.put("A", "b")); + assertEquals(null, test.put("A", "a")); + assertEquals(1, test.size()); + assertEquals(2, test.size("A")); + assertEquals(2, test.totalSize()); + } + public void testPutAll_Map1() { MultiMap original = new MultiValueMap(); original.put("key", "object1");