COLLECTIONS-228 - MultiValueMap put and putAll do not return the correct values

git-svn-id: https://svn.apache.org/repos/asf/jakarta/commons/proper/collections/trunk@468684 13f79535-47bb-0310-9956-ffa450edef68
This commit is contained in:
Stephen Colebourne 2006-10-28 12:27:01 +00:00
parent 139636b502
commit 5e313d14b2
3 changed files with 33 additions and 13 deletions

View File

@ -57,6 +57,7 @@ If this causes major headaches to anyone please contact commons-dev at jakarta.a
<li>Flat3Map - Fix setValue in MapIterator and EntrySetIterator to work correctly [COLLECTIONS-217]</li>
<li>ExtendedProperties - Include property name had confused static/instance semantics [COLLECTIONS-214]</li>
<li>CollectionUtils - Fix removeAll() method which was completely broken [COLLECTIONS-219]</li>
<li>MultiValueMap - Fix put() and putAll() to return correct results [COLLECTIONS-228]</li>
</ul>
<center><h3>JAVADOC</h3></center>

View File

@ -205,12 +205,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);
@ -307,19 +307,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;
}
/**

View File

@ -30,7 +30,6 @@ import junit.framework.TestSuite;
import org.apache.commons.collections.IteratorUtils;
import org.apache.commons.collections.MultiMap;
import org.apache.commons.collections.TestMultiHashMap;
/**
* TestMultiValueMap.
@ -46,11 +45,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);
}
@ -201,9 +200,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() {
@ -249,6 +248,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");