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/branches/collections_jdk5_branch@468685 13f79535-47bb-0310-9956-ffa450edef68
This commit is contained in:
Stephen Colebourne 2006-10-28 12:30:27 +00:00
parent c440b250f2
commit c5a502a084
2 changed files with 32 additions and 13 deletions

View File

@ -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
}
} else {
result = coll.addAll(values);
}
return result;
} else {
return coll.addAll(values);
}
}
/**

View File

@ -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");