Added new testing code submitted by Paul Jack < pjack at sfaf dot org >
git-svn-id: https://svn.apache.org/repos/asf/jakarta/commons/proper/collections/trunk@130703 13f79535-47bb-0310-9956-ffa450edef68
This commit is contained in:
parent
5d8832a059
commit
1e22afa5b0
|
@ -1,7 +1,7 @@
|
||||||
/*
|
/*
|
||||||
* $Header: /home/jerenkrantz/tmp/commons/commons-convert/cvs/home/cvs/jakarta-commons//collections/src/test/org/apache/commons/collections/TestDoubleOrderedMap.java,v 1.3 2002/02/22 02:18:50 mas Exp $
|
* $Header: /home/jerenkrantz/tmp/commons/commons-convert/cvs/home/cvs/jakarta-commons//collections/src/test/org/apache/commons/collections/TestDoubleOrderedMap.java,v 1.4 2002/05/28 06:51:03 mas Exp $
|
||||||
* $Revision: 1.3 $
|
* $Revision: 1.4 $
|
||||||
* $Date: 2002/02/22 02:18:50 $
|
* $Date: 2002/05/28 06:51:03 $
|
||||||
*
|
*
|
||||||
* ====================================================================
|
* ====================================================================
|
||||||
*
|
*
|
||||||
|
@ -2828,4 +2828,15 @@ public class TestDoubleOrderedMap extends TestMap {
|
||||||
public static void main(final String unusedArgs[]) {
|
public static void main(final String unusedArgs[]) {
|
||||||
junit.textui.TestRunner.run(TestDoubleOrderedMap.class);
|
junit.textui.TestRunner.run(TestDoubleOrderedMap.class);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Override the Map.put() test because it tries put with the same key
|
||||||
|
* which is invalid in the modified double ordered map contract. (The
|
||||||
|
* DoubleOrderedMap documentation states that an IllegalArgumentException
|
||||||
|
* is thrown when a key is tried to be put into the map again. This
|
||||||
|
* differs from the standard Map contract which would replace the value
|
||||||
|
* for that key and return it.
|
||||||
|
**/
|
||||||
|
public void testMapPut() {
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -1,7 +1,7 @@
|
||||||
/*
|
/*
|
||||||
* $Header: /home/jerenkrantz/tmp/commons/commons-convert/cvs/home/cvs/jakarta-commons//collections/src/test/org/apache/commons/collections/TestLRUMap.java,v 1.20 2002/05/09 03:20:59 mas Exp $
|
* $Header: /home/jerenkrantz/tmp/commons/commons-convert/cvs/home/cvs/jakarta-commons//collections/src/test/org/apache/commons/collections/TestLRUMap.java,v 1.21 2002/05/28 06:51:03 mas Exp $
|
||||||
* $Revision: 1.20 $
|
* $Revision: 1.21 $
|
||||||
* $Date: 2002/05/09 03:20:59 $
|
* $Date: 2002/05/28 06:51:03 $
|
||||||
*
|
*
|
||||||
* ====================================================================
|
* ====================================================================
|
||||||
*
|
*
|
||||||
|
@ -68,12 +68,13 @@ import java.util.ArrayList;
|
||||||
import java.util.Iterator;
|
import java.util.Iterator;
|
||||||
import java.util.Map;
|
import java.util.Map;
|
||||||
import java.util.HashMap;
|
import java.util.HashMap;
|
||||||
|
import java.util.Set;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
*
|
*
|
||||||
* @author <a href="mailto:jstrachan@apache.org">James Strachan</a>
|
* @author <a href="mailto:jstrachan@apache.org">James Strachan</a>
|
||||||
* @author <a href="mailto:morgand@apache.org">Morgan Delagrange</a>
|
* @author <a href="mailto:morgand@apache.org">Morgan Delagrange</a>
|
||||||
* @version $Id: TestLRUMap.java,v 1.20 2002/05/09 03:20:59 mas Exp $
|
* @version $Id: TestLRUMap.java,v 1.21 2002/05/28 06:51:03 mas Exp $
|
||||||
*/
|
*/
|
||||||
public class TestLRUMap extends TestSequencedHashMap
|
public class TestLRUMap extends TestSequencedHashMap
|
||||||
{
|
{
|
||||||
|
@ -221,6 +222,13 @@ public class TestLRUMap extends TestSequencedHashMap
|
||||||
assertTrue("newest key is '2'",counter.get(1).equals("2"));
|
assertTrue("newest key is '2'",counter.get(1).equals("2"));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
protected void entrySetEqualsMap(Set set, Map m) {
|
||||||
|
// Overridden because LRUMap.get(Object) actually alters the map,
|
||||||
|
// so there's no way to verify that the entry set and map contain
|
||||||
|
// the same entries
|
||||||
|
}
|
||||||
|
|
||||||
private class LRUCounter extends LRUMap {
|
private class LRUCounter extends LRUMap {
|
||||||
int removedCount = 0;
|
int removedCount = 0;
|
||||||
ArrayList list = new ArrayList(3);
|
ArrayList list = new ArrayList(3);
|
||||||
|
|
|
@ -1,7 +1,7 @@
|
||||||
/*
|
/*
|
||||||
* $Header: /home/jerenkrantz/tmp/commons/commons-convert/cvs/home/cvs/jakarta-commons//collections/src/test/org/apache/commons/collections/Attic/TestMap.java,v 1.15 2002/05/08 17:54:28 morgand Exp $
|
* $Header: /home/jerenkrantz/tmp/commons/commons-convert/cvs/home/cvs/jakarta-commons//collections/src/test/org/apache/commons/collections/Attic/TestMap.java,v 1.16 2002/05/28 06:51:03 mas Exp $
|
||||||
* $Revision: 1.15 $
|
* $Revision: 1.16 $
|
||||||
* $Date: 2002/05/08 17:54:28 $
|
* $Date: 2002/05/28 06:51:03 $
|
||||||
*
|
*
|
||||||
* ====================================================================
|
* ====================================================================
|
||||||
*
|
*
|
||||||
|
@ -64,12 +64,16 @@ package org.apache.commons.collections;
|
||||||
import junit.framework.*;
|
import junit.framework.*;
|
||||||
import java.io.IOException;
|
import java.io.IOException;
|
||||||
import java.io.Serializable;
|
import java.io.Serializable;
|
||||||
|
import java.util.ArrayList;
|
||||||
|
import java.util.Arrays;
|
||||||
import java.util.Collection;
|
import java.util.Collection;
|
||||||
import java.util.ConcurrentModificationException;
|
import java.util.ConcurrentModificationException;
|
||||||
import java.util.Map;
|
import java.util.Map;
|
||||||
import java.util.Collection;
|
import java.util.Collection;
|
||||||
|
import java.util.Collections;
|
||||||
import java.util.Set;
|
import java.util.Set;
|
||||||
import java.util.Iterator;
|
import java.util.Iterator;
|
||||||
|
import java.util.HashMap;
|
||||||
import java.util.HashSet;
|
import java.util.HashSet;
|
||||||
import java.util.NoSuchElementException;
|
import java.util.NoSuchElementException;
|
||||||
|
|
||||||
|
@ -88,7 +92,7 @@ import java.util.NoSuchElementException;
|
||||||
*
|
*
|
||||||
* @author Michael Smith
|
* @author Michael Smith
|
||||||
* @author Rodney Waldhoff
|
* @author Rodney Waldhoff
|
||||||
* @version $Id: TestMap.java,v 1.15 2002/05/08 17:54:28 morgand Exp $
|
* @version $Id: TestMap.java,v 1.16 2002/05/28 06:51:03 mas Exp $
|
||||||
*/
|
*/
|
||||||
public abstract class TestMap extends TestObject {
|
public abstract class TestMap extends TestObject {
|
||||||
|
|
||||||
|
@ -462,8 +466,8 @@ public abstract class TestMap extends TestObject {
|
||||||
Map fm = makeFullMap();
|
Map fm = makeFullMap();
|
||||||
|
|
||||||
for(int i = 0; i < keys.length; i++) {
|
for(int i = 0; i < keys.length; i++) {
|
||||||
assertTrue("Map must contain key for a mapping in the map.",
|
assertTrue("Map must contain key for a mapping in the map. " +
|
||||||
fm.containsKey(keys[i]));
|
"Missing: " + keys[i], fm.containsKey(keys[i]));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -564,18 +568,227 @@ public abstract class TestMap extends TestObject {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
// TODO: test entrySet().clear()
|
/**
|
||||||
// TODO: test entrySet().add() throws OperationNotSupported
|
* Tests Map.entrySet().clear() using Map.isEmpty() and
|
||||||
// TODO: test entrySet().addAll() throws OperationNotSupported
|
* Map.entrySet().isEmpty().
|
||||||
// TODO: test entrySet().contains(Object)
|
**/
|
||||||
// TODO: test entrySet().containsAll(Collection)
|
public void testEntrySetClear() {
|
||||||
// TODO: test entrySet().equals(Object)
|
if (!isAddRemoveModifiable()) return;
|
||||||
// TODO: test entrySet().hashCode()
|
Map m = makeFullMap();
|
||||||
// TODO: test entrySet().toArray()
|
Set set = m.entrySet();
|
||||||
// TODO: test entrySet().toArray(Object[] a)
|
set.clear();
|
||||||
// TODO: test entrySet().remove(Object)
|
assertTrue("entrySet should be empty after clear", set.isEmpty());
|
||||||
// TODO: test entrySet().removeAll(Collection)
|
assertTrue("map should be empty after entrySet.clear()", m.isEmpty());
|
||||||
// TODO: test entrySet().retainAll(Collection)
|
}
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Tests Map.entrySet().add(Object);
|
||||||
|
**/
|
||||||
|
public void testEntrySetAdd() {
|
||||||
|
Map m = makeFullMap();
|
||||||
|
Set set = m.entrySet();
|
||||||
|
try {
|
||||||
|
set.add(new Object());
|
||||||
|
fail("entrySet().add should raise UnsupportedOperationException");
|
||||||
|
} catch (UnsupportedOperationException e) {
|
||||||
|
// expected
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Tests Map.entrySet().addAll(Collection);
|
||||||
|
**/
|
||||||
|
public void testEntrySetAddAll() {
|
||||||
|
Map m = makeFullMap();
|
||||||
|
Set set = m.entrySet();
|
||||||
|
try {
|
||||||
|
set.addAll(java.util.Collections.singleton(new Object()));
|
||||||
|
fail("entrySet().addAll(Collection) should raise " +
|
||||||
|
"UnsupportedOperationException");
|
||||||
|
} catch (UnsupportedOperationException e) {
|
||||||
|
// expected
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Tests Map.entrySetContainsAll(Collection)
|
||||||
|
**/
|
||||||
|
public void testEntrySetContainsAll() {
|
||||||
|
Map m = makeFullMap();
|
||||||
|
Set set = m.entrySet();
|
||||||
|
|
||||||
|
java.util.ArrayList list = new java.util.ArrayList();
|
||||||
|
Iterator iterator = set.iterator();
|
||||||
|
while (iterator.hasNext()) {
|
||||||
|
Map.Entry entry = (Map.Entry)iterator.next();
|
||||||
|
list.add(new DefaultMapEntry(entry.getKey(), entry.getValue()));
|
||||||
|
|
||||||
|
assertTrue("entrySet().containsAll failed", set.containsAll(list));
|
||||||
|
}
|
||||||
|
|
||||||
|
list.add(new Object());
|
||||||
|
assertTrue("entrySet().containsAll failed", !set.containsAll(list));
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Tests entrySet().equals(Object)
|
||||||
|
**/
|
||||||
|
public void testEntrySetEquals() {
|
||||||
|
Map m = makeFullMap();
|
||||||
|
Map m2 = new HashMap(m);
|
||||||
|
assertTrue("Equal maps should have equal entrySets",
|
||||||
|
m.entrySet().equals(m2.entrySet()));
|
||||||
|
|
||||||
|
assertTrue("entrySet.equals(null) returned true",
|
||||||
|
!m.entrySet().equals(null));
|
||||||
|
assertTrue("Unequal maps should have unequal entrySets",
|
||||||
|
!m.entrySet().equals(Collections.EMPTY_SET));
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Test entrySet().hashCde()
|
||||||
|
**/
|
||||||
|
public void testEntrySetHashCode() {
|
||||||
|
Map m = makeFullMap();
|
||||||
|
Map m2 = new HashMap(m);
|
||||||
|
Set set = m.entrySet();
|
||||||
|
Set set2 = m2.entrySet();
|
||||||
|
assertTrue("hashCode of equal entrySets should be same",
|
||||||
|
set.hashCode() == set2.hashCode());
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Test entrySet().toArray() and entrySet().toArray(Object[])
|
||||||
|
**/
|
||||||
|
public void testEntrySetToArray() {
|
||||||
|
Map m = makeFullMap();
|
||||||
|
Set set = m.entrySet();
|
||||||
|
Object[] a = set.toArray();
|
||||||
|
assertTrue("entrySet.toArray() should be same size as map",
|
||||||
|
a.length == m.size());
|
||||||
|
|
||||||
|
a = set.toArray(new Object[0]);
|
||||||
|
assertTrue("entrySet.toArray(new Object[0]) should be same size " +
|
||||||
|
"as map", a.length == m.size());
|
||||||
|
|
||||||
|
a = new Object[m.size() * 2];
|
||||||
|
a[m.size()] = new Object();
|
||||||
|
a = set.toArray(a);
|
||||||
|
assertTrue("entrySet.toArray(new Object[m.size * 2]) should set " +
|
||||||
|
"last element to null", a[m.size()] == null);
|
||||||
|
|
||||||
|
a = set.toArray(new Map.Entry[0]);
|
||||||
|
assertTrue("entrySet.toArray(new Map.Entry[0]) should return " +
|
||||||
|
"instanceof Map.Entry[]", a instanceof Map.Entry[]);
|
||||||
|
|
||||||
|
try {
|
||||||
|
a = set.toArray(new String[0]);
|
||||||
|
fail("entrySet.toArray(new String[]) should raise " +
|
||||||
|
"ArrayStoreException.");
|
||||||
|
} catch (ArrayStoreException e) {
|
||||||
|
// expected
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Tests entrySet().remove(Object)
|
||||||
|
**/
|
||||||
|
public void testEntrySetRemove2() {
|
||||||
|
if (!isAddRemoveModifiable()) return;
|
||||||
|
|
||||||
|
Map m = makeFullMap();
|
||||||
|
Set set = m.entrySet();
|
||||||
|
|
||||||
|
boolean r = set.remove(null);
|
||||||
|
assertTrue("entrySet.remove(null) should return false", !r);
|
||||||
|
|
||||||
|
r = set.remove("Not a Map.Entry");
|
||||||
|
assertTrue("entrySet.remove should return false for non-Map.Entry",
|
||||||
|
!r);
|
||||||
|
|
||||||
|
m = makeEmptyMap();
|
||||||
|
set = m.entrySet();
|
||||||
|
|
||||||
|
Object[] keys = getSampleKeys();
|
||||||
|
Object[] values = getSampleValues();
|
||||||
|
|
||||||
|
for(int i = 0; i < keys.length; i++) {
|
||||||
|
// remove on all elements should return false because the map is
|
||||||
|
// empty.
|
||||||
|
r = set.remove(new DefaultMapEntry(keys[i], values[i]));
|
||||||
|
assertTrue("entrySet.remove for nonexistent entry should " +
|
||||||
|
"return false", !r);
|
||||||
|
}
|
||||||
|
|
||||||
|
// reset to full map to check actual removes
|
||||||
|
m = makeFullMap();
|
||||||
|
set = m.entrySet();
|
||||||
|
|
||||||
|
int size = m.size();
|
||||||
|
Map.Entry entry = (Map.Entry)set.iterator().next();
|
||||||
|
r = set.remove(entry);
|
||||||
|
assertTrue("entrySet.remove for internal entry should return true", r);
|
||||||
|
assertTrue("entrySet.size should shrink after successful remove",
|
||||||
|
set.size() == size - 1);
|
||||||
|
assertTrue("map size should shrink after succuessful entrySet.remove",
|
||||||
|
m.size() == size - 1);
|
||||||
|
entrySetEqualsMap(set, m);
|
||||||
|
|
||||||
|
size--;
|
||||||
|
entry = (Map.Entry)set.iterator().next();
|
||||||
|
entry = new DefaultMapEntry(entry.getKey(), entry.getValue());
|
||||||
|
r = set.remove(entry);
|
||||||
|
assertTrue("entrySet.remove for external entry should return true", r);
|
||||||
|
assertTrue("entrySet.size should shrink after successful remove",
|
||||||
|
set.size() == size - 1);
|
||||||
|
assertTrue("map size should shrink after succuessful entrySet.remove",
|
||||||
|
m.size() == size - 1);
|
||||||
|
assertTrue("After remove, entrySet should not contain element",
|
||||||
|
!set.contains(entry));
|
||||||
|
entrySetEqualsMap(set, m);
|
||||||
|
r = set.remove(entry);
|
||||||
|
assertTrue("second entrySet.remove should return false", !r);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Tests entrySet().removeAll() and entrySet().retainAll()
|
||||||
|
**/
|
||||||
|
public void testEntrySetBulkRemoveOperations() {
|
||||||
|
if (!isAddRemoveModifiable()) return;
|
||||||
|
|
||||||
|
Map m = makeFullMap();
|
||||||
|
Set set = m.entrySet();
|
||||||
|
Map m2 = new HashMap(m);
|
||||||
|
Set set2 = m2.entrySet();
|
||||||
|
|
||||||
|
Object[] entries = set2.toArray();
|
||||||
|
Collection c = Arrays.asList(entries).subList(2, 5);
|
||||||
|
boolean r = set.removeAll(c);
|
||||||
|
set2.removeAll(c);
|
||||||
|
assertTrue("entrySet().removeAll() returned false", r);
|
||||||
|
assertTrue("entrySet().removeAll() failed", m2.equals(m));
|
||||||
|
assertTrue("entrySet().removeAll() returned true", !set.removeAll(c));
|
||||||
|
|
||||||
|
m = makeFullMap();
|
||||||
|
set = m.entrySet();
|
||||||
|
m2 = new HashMap(m);
|
||||||
|
set2 = m2.entrySet();
|
||||||
|
entries = set2.toArray();
|
||||||
|
c = Arrays.asList(entries).subList(2, 5);
|
||||||
|
r = set.retainAll(c);
|
||||||
|
set2.retainAll(c);
|
||||||
|
assertTrue("entrySet().retainAll returned false", r);
|
||||||
|
assertTrue("entrySet().retainAll() failed", m2.equals(m));
|
||||||
|
assertTrue("entrySet().retainAll returned true", !set.retainAll(c));
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Tests:
|
* Tests:
|
||||||
|
@ -694,8 +907,8 @@ public abstract class TestMap extends TestObject {
|
||||||
while(iter.hasNext()) {
|
while(iter.hasNext()) {
|
||||||
Map.Entry entry = (Map.Entry)iter.next();
|
Map.Entry entry = (Map.Entry)iter.next();
|
||||||
|
|
||||||
assertTrue("Entry key from entry set iterator must exist in map",
|
assertTrue("Entry key from entry set iterator must exist in map: " +
|
||||||
m.containsKey(entry.getKey()));
|
entry, m.containsKey(entry.getKey()));
|
||||||
try {
|
try {
|
||||||
iter.remove();
|
iter.remove();
|
||||||
// note: we do not check that the mapping was actually removed
|
// note: we do not check that the mapping was actually removed
|
||||||
|
@ -725,6 +938,25 @@ public abstract class TestMap extends TestObject {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* utility method to ensure that a set of Map.Entry objects matches those
|
||||||
|
* found in the specified map.
|
||||||
|
**/
|
||||||
|
protected void entrySetEqualsMap(Set set, Map m) {
|
||||||
|
Iterator iterator = set.iterator();
|
||||||
|
while (iterator.hasNext()) {
|
||||||
|
Map.Entry entry = (Map.Entry)iterator.next();
|
||||||
|
Object key = entry.getKey();
|
||||||
|
Object value = entry.getValue();
|
||||||
|
assertTrue("map should contain key found in entrySet",
|
||||||
|
m.containsKey(key));
|
||||||
|
Object v2 = m.get(key);
|
||||||
|
assertTrue("map should contain entry found in entrySet",
|
||||||
|
(value == null) ? v2 == null : value.equals(v2));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Tests whether the map's entrySet() is backed by the map by making sure
|
* Tests whether the map's entrySet() is backed by the map by making sure
|
||||||
* a put in the map is reflected in the entrySet. This test does nothing
|
* a put in the map is reflected in the entrySet. This test does nothing
|
||||||
|
@ -742,13 +974,14 @@ public abstract class TestMap extends TestObject {
|
||||||
m.isEmpty(), s.isEmpty());
|
m.isEmpty(), s.isEmpty());
|
||||||
assertEquals("entrySet() must adjust size when map changes.",
|
assertEquals("entrySet() must adjust size when map changes.",
|
||||||
m.size(), s.size());
|
m.size(), s.size());
|
||||||
// TODO: test set and map reflect the same contents
|
|
||||||
|
entrySetEqualsMap(s, m);
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Tests whether the map's entrySet() is backed by the map by making sure
|
* Tests whether the map's entrySet() is backed by the map by making sure
|
||||||
* a remove from the map is reflected in the entrySet. This test does nothing
|
* a remove from the map is reflected in the entrySet. This test does
|
||||||
* if add/remove modifications are not supported.
|
* nothing if add/remove modifications are not supported.
|
||||||
**/
|
**/
|
||||||
public void testEntrySetChangesWithMapRemove() {
|
public void testEntrySetChangesWithMapRemove() {
|
||||||
if(!isAddRemoveModifiable()) return;
|
if(!isAddRemoveModifiable()) return;
|
||||||
|
@ -765,13 +998,46 @@ public abstract class TestMap extends TestObject {
|
||||||
m.isEmpty(), s.isEmpty());
|
m.isEmpty(), s.isEmpty());
|
||||||
assertEquals("entrySet() must adjust size when map changes.",
|
assertEquals("entrySet() must adjust size when map changes.",
|
||||||
m.size(), s.size());
|
m.size(), s.size());
|
||||||
//TODO: test set and map reflect the same contents
|
entrySetEqualsMap(s, m);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
// TODO: test entrySet() changes after Map.remove
|
|
||||||
// TODO: test entrySet() changes after Map.clear
|
/**
|
||||||
// TODO: test entrySet() changes after Map.putAll
|
* Tests whether the map's entrySet() is backed by the map by making sure
|
||||||
|
* a clear on the map is reflected in the entrySet. This test does
|
||||||
|
* nothing if add/remove modifications are not supported.
|
||||||
|
**/
|
||||||
|
public void testEntrySetChangesWithMapClear() {
|
||||||
|
if (!isAddRemoveModifiable()) return;
|
||||||
|
|
||||||
|
Map m = makeFullMap();
|
||||||
|
Set s = m.entrySet();
|
||||||
|
m.clear();
|
||||||
|
assertTrue("entrySet() must be empty after map.clear()", s.isEmpty());
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Tests whether the map's entrySet() is backed by the map by making sure
|
||||||
|
* a putAll on the map is reflected in the entrySet. This test does
|
||||||
|
* nothing if add/remove modifications are not supported.
|
||||||
|
**/
|
||||||
|
public void testEntrySetChangesWithMapPutAll() {
|
||||||
|
if (!isAddRemoveModifiable()) return;
|
||||||
|
|
||||||
|
Map m = makeFullMap();
|
||||||
|
Set s = m.entrySet();
|
||||||
|
|
||||||
|
Map m2 = new HashMap();
|
||||||
|
m2.put("1", "One");
|
||||||
|
m2.put("2", "Two");
|
||||||
|
m2.put("3", "Three");
|
||||||
|
|
||||||
|
m.putAll(m2);
|
||||||
|
entrySetEqualsMap(s, m);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Tests whether the map's entrySet() is backed by the map by making sure
|
* Tests whether the map's entrySet() is backed by the map by making sure
|
||||||
|
@ -801,24 +1067,89 @@ public abstract class TestMap extends TestObject {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
// TODO: test map changes after entrySet().remove
|
/**
|
||||||
// TODO: test map changes after entrySet().removeAll
|
* Tests Map.equals(Object)
|
||||||
// TODO: test map changes after entrySet().retainAll
|
**/
|
||||||
|
|
||||||
public void testMapEquals() {
|
public void testMapEquals() {
|
||||||
// XXX finish me
|
Map m = makeEmptyMap();
|
||||||
|
assertTrue("Empty maps unequal.", m.equals(new HashMap()));
|
||||||
|
|
||||||
|
m = makeFullMap();
|
||||||
|
Map m2 = new HashMap();
|
||||||
|
m2.putAll(m);
|
||||||
|
assertTrue("Full maps unequal.", m.equals(m2));
|
||||||
|
|
||||||
|
// modify the HashMap created from the full map and make sure this
|
||||||
|
// change results in map.equals() to return false.
|
||||||
|
Iterator iter = m2.keySet().iterator();
|
||||||
|
iter.next();
|
||||||
|
iter.remove();
|
||||||
|
assertTrue("Different maps equal.", !m.equals(m2));
|
||||||
|
|
||||||
|
assertTrue("equals(null) returned true.", !m.equals(null));
|
||||||
|
assertTrue("equals(new Object()) returned true.",
|
||||||
|
!m.equals(new Object()));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Tests Map.get(Object)
|
||||||
|
**/
|
||||||
public void testMapGet() {
|
public void testMapGet() {
|
||||||
// XXX finish me
|
Map m = makeEmptyMap();
|
||||||
|
|
||||||
|
Object[] keys = getSampleKeys();
|
||||||
|
Object[] values = getSampleValues();
|
||||||
|
|
||||||
|
for (int i = 0; i < keys.length; i++) {
|
||||||
|
assertTrue("Empty map.get() should return null.",
|
||||||
|
m.get(keys[i]) == null);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
m = makeFullMap();
|
||||||
|
for (int i = 0; i < keys.length; i++) {
|
||||||
|
assertEquals("Full map.get() should return value from mapping.",
|
||||||
|
values[i], m.get(keys[i]));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Tests Map.hashCode()
|
||||||
|
**/
|
||||||
public void testMapHashCode() {
|
public void testMapHashCode() {
|
||||||
// XXX finish me
|
Map m = makeEmptyMap();
|
||||||
|
Map m2 = new HashMap();
|
||||||
|
assertTrue("Empty maps have different hashCodes.",
|
||||||
|
m.hashCode() == m2.hashCode());
|
||||||
|
|
||||||
|
m = makeFullMap();
|
||||||
|
m2.putAll(m);
|
||||||
|
assertTrue("Equal maps have different hashCodes.",
|
||||||
|
m.hashCode() == m2.hashCode());
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Tests Map.toString(). Since the format of the string returned by the
|
||||||
|
* toString() method is not defined in the Map interface, there is no
|
||||||
|
* common way to test the results of the toString() method. Thereforce,
|
||||||
|
* it is encouraged that Map implementations override this test with one
|
||||||
|
* that checks the format matches any format defined in its API. This
|
||||||
|
* default implementation just verifies that the toString() method does
|
||||||
|
* not return null.
|
||||||
|
**/
|
||||||
|
public void testMapToString() {
|
||||||
|
Map m = makeEmptyMap();
|
||||||
|
String s = m.toString();
|
||||||
|
assertTrue("Empty map toString() should not return null", s != null);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Tests Map.keySet()
|
||||||
|
**/
|
||||||
public void testMapKeySet() {
|
public void testMapKeySet() {
|
||||||
// XXX finish me
|
Map m = makeFullMap();
|
||||||
|
Map m2 = new HashMap(m);
|
||||||
|
assertTrue("Equal maps have unequal keySets.",
|
||||||
|
m.keySet().equals(m2.keySet()));
|
||||||
}
|
}
|
||||||
|
|
||||||
//-------TEST AGAINST OPTIONAL OPERATIONS, ENABLE IN TEST SUBCLASSES
|
//-------TEST AGAINST OPTIONAL OPERATIONS, ENABLE IN TEST SUBCLASSES
|
||||||
|
@ -986,29 +1317,150 @@ public abstract class TestMap extends TestObject {
|
||||||
assertEquals("Map is the right size",map.size(), getSampleKeys().length);
|
assertEquals("Map is the right size",map.size(), getSampleKeys().length);
|
||||||
}
|
}
|
||||||
|
|
||||||
/*
|
/**
|
||||||
// optional operation
|
* Tests Map.put(Object, Object)
|
||||||
public void testMapClear() {
|
**/
|
||||||
// XXX finish me
|
|
||||||
}
|
|
||||||
|
|
||||||
// optional operation
|
|
||||||
public void testMapPut() {
|
public void testMapPut() {
|
||||||
// XXX finish me
|
if (!isAddRemoveModifiable()) return;
|
||||||
|
|
||||||
|
Map m = makeEmptyMap();
|
||||||
|
|
||||||
|
Object[] keys = getSampleKeys();
|
||||||
|
Object[] values = getSampleValues();
|
||||||
|
Object[] newValues = getNewSampleValues();
|
||||||
|
|
||||||
|
for(int i = 0; i < keys.length; i++) {
|
||||||
|
Object o = m.put(keys[i], values[i]);
|
||||||
|
assertTrue("First map.put should return null", o == null);
|
||||||
|
assertTrue("Map should contain key after put",
|
||||||
|
m.containsKey(keys[i]));
|
||||||
|
assertTrue("Map should contain value after put",
|
||||||
|
m.containsValue(values[i]));
|
||||||
}
|
}
|
||||||
|
|
||||||
// optional operation
|
for(int i = 0; i < keys.length; i++) {
|
||||||
|
Object o = m.put(keys[i], newValues[i]);
|
||||||
|
assertEquals("Second map.put should return previous value",
|
||||||
|
values[i], o);
|
||||||
|
assertTrue("Map should still contain key after put",
|
||||||
|
m.containsKey(keys[i]));
|
||||||
|
assertTrue("Map should contain new value after put",
|
||||||
|
m.containsValue(newValues[i]));
|
||||||
|
|
||||||
|
// if duplicates are allowed, we're not guarunteed that the value
|
||||||
|
// no longer exists, so don't try checking that.
|
||||||
|
if(!useDuplicateValues()) {
|
||||||
|
assertTrue("Map should not contain old value after second put",
|
||||||
|
!m.containsValue(values[i]));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Tests Map.putAll(Collection)
|
||||||
|
**/
|
||||||
public void testMapPutAll() {
|
public void testMapPutAll() {
|
||||||
// XXX finish me
|
if (!isAddRemoveModifiable()) return;
|
||||||
|
|
||||||
|
Map m = makeEmptyMap();
|
||||||
|
Map m2 = makeFullMap();
|
||||||
|
|
||||||
|
m.putAll(m2);
|
||||||
|
|
||||||
|
assertTrue("Maps should be equal after putAll", m.equals(m2));
|
||||||
|
|
||||||
|
// repeat test with a different map implementation
|
||||||
|
|
||||||
|
m2 = new HashMap();
|
||||||
|
Object[] keys = getSampleKeys();
|
||||||
|
Object[] values = getSampleValues();
|
||||||
|
for(int i = 0; i < keys.length; i++) {
|
||||||
|
m2.put(keys[i], values[i]);
|
||||||
}
|
}
|
||||||
|
|
||||||
// optional operation
|
m = makeEmptyMap();
|
||||||
|
m.putAll(m2);
|
||||||
|
|
||||||
|
assertTrue("Maps should be equal after putAll", m.equals(m2));
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Tests Map.remove(Object)
|
||||||
|
**/
|
||||||
public void testMapRemove() {
|
public void testMapRemove() {
|
||||||
// XXX finish me
|
if (!isAddRemoveModifiable()) return;
|
||||||
|
|
||||||
|
Map m = makeEmptyMap();
|
||||||
|
Object[] keys = getSampleKeys();
|
||||||
|
for(int i = 0; i < keys.length; i++) {
|
||||||
|
Object o = m.remove(keys[i]);
|
||||||
|
assertTrue("First map.remove should return null", o == null);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
m = makeFullMap();
|
||||||
|
int startSize = m.size();
|
||||||
|
|
||||||
|
Object[] values = getSampleValues();
|
||||||
|
|
||||||
|
for(int i = 0; i < keys.length; i++) {
|
||||||
|
Object o = m.remove(keys[i]);
|
||||||
|
|
||||||
|
assertEquals("map.remove with valid key should return value",
|
||||||
|
values[i], o);
|
||||||
|
assertEquals("map.remove should reduce size by one",
|
||||||
|
(startSize - i) - 1, m.size());
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Tests Map.values()
|
||||||
|
**/
|
||||||
public void testMapValues() {
|
public void testMapValues() {
|
||||||
// XXX finish me
|
Map m = makeFullMap();
|
||||||
|
|
||||||
|
// since Collection.equals is reference-based, have to do
|
||||||
|
// this the long way...
|
||||||
|
|
||||||
|
Object[] values = getSampleValues();
|
||||||
|
|
||||||
|
Collection c = m.values();
|
||||||
|
|
||||||
|
assertEquals("values() should have same size as map",
|
||||||
|
m.size(), c.size());
|
||||||
|
|
||||||
|
assertEquals("values() should have same number of sample values",
|
||||||
|
values.length, c.size());
|
||||||
|
|
||||||
|
boolean[] matched = new boolean[values.length];
|
||||||
|
|
||||||
|
Iterator iter = c.iterator();
|
||||||
|
while(iter.hasNext()) {
|
||||||
|
Object o = iter.next();
|
||||||
|
boolean found = false;
|
||||||
|
|
||||||
|
for(int i = 0; i < values.length; i++) {
|
||||||
|
// skip values already matched
|
||||||
|
if(matched[i]) continue;
|
||||||
|
|
||||||
|
if((o == null && values[i] == null) ||
|
||||||
|
(o != null && o.equals(values[i]))) {
|
||||||
|
matched[i] = true;
|
||||||
|
found = true;
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
if(!found) {
|
||||||
|
// no match for this element
|
||||||
|
fail("values() returned an unexpected value");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
for(int i = 0; i < matched.length; i++) {
|
||||||
|
if(!matched[i]) {
|
||||||
|
fail("values() did not return all values from map");
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
|
|
@ -1,7 +1,7 @@
|
||||||
/*
|
/*
|
||||||
* $Header: /home/jerenkrantz/tmp/commons/commons-convert/cvs/home/cvs/jakarta-commons//collections/src/test/org/apache/commons/collections/TestMultiHashMap.java,v 1.3 2002/02/26 00:13:37 morgand Exp $
|
* $Header: /home/jerenkrantz/tmp/commons/commons-convert/cvs/home/cvs/jakarta-commons//collections/src/test/org/apache/commons/collections/TestMultiHashMap.java,v 1.4 2002/05/28 06:51:03 mas Exp $
|
||||||
* $Revision: 1.3 $
|
* $Revision: 1.4 $
|
||||||
* $Date: 2002/02/26 00:13:37 $
|
* $Date: 2002/05/28 06:51:03 $
|
||||||
*
|
*
|
||||||
* ====================================================================
|
* ====================================================================
|
||||||
*
|
*
|
||||||
|
@ -242,4 +242,26 @@ public class TestMultiHashMap extends TestMap
|
||||||
// for.
|
// for.
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// Next four are overriden
|
||||||
|
// because MultiHashMap values are always a collection
|
||||||
|
|
||||||
|
// TODO: implement the tests to ensure that Map.get(Object) returns the
|
||||||
|
// appropriate collection of values
|
||||||
|
|
||||||
|
public void testMapGet() {
|
||||||
|
}
|
||||||
|
|
||||||
|
public void testMapPut() {
|
||||||
|
}
|
||||||
|
|
||||||
|
public void testMapPutAll() {
|
||||||
|
}
|
||||||
|
|
||||||
|
public void testMapRemove() {
|
||||||
|
}
|
||||||
|
|
||||||
|
public void testMapValues() {
|
||||||
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in New Issue