| org.apache.commons.collections.BulkTest org.apache.commons.collections.AbstractTestObject org.apache.commons.collections.map.AbstractTestMap
All known Subclasses: org.apache.commons.collections.TestSequencedHashMap, org.apache.commons.collections.map.TestTransformedMap, org.apache.commons.collections.bidimap.AbstractTestBidiMap, org.apache.commons.collections.map.TestPredicatedMap, org.apache.commons.collections.TestBeanMap, org.apache.commons.collections.TestMultiHashMap, org.apache.commons.collections.map.TestLazyMap, org.apache.commons.collections.TestFastHashMap, org.apache.commons.collections.map.TestCompositeMap, org.apache.commons.collections.map.TestFixedSizeMap, org.apache.commons.collections.TestTreeMap, org.apache.commons.collections.TestReferenceMap, org.apache.commons.collections.map.TestStaticBucketMap, org.apache.commons.collections.map.AbstractTestSortedMap, org.apache.commons.collections.TestDoubleOrderedMap, org.apache.commons.collections.map.AbstractTestIterableMap, org.apache.commons.collections.TestStaticBucketMap, org.apache.commons.collections.map.TestDefaultedMap,
AbstractTestMap | abstract public class AbstractTestMap extends AbstractTestObject (Code) | | Abstract test class for
java.util.Map methods and contracts.
The forces at work here are similar to those in
AbstractTestCollection .
If your class implements the full Map interface, including optional
operations, simply extend this class, and implement the
AbstractTestMap.makeEmptyMap() method.
On the other hand, if your map implementation is weird, you may have to
override one or more of the other protected methods. They're described
below.
Entry Population Methods
Override these methods if your map requires special entries:
Supported Operation Methods
Override these methods if your map doesn't support certain operations:
Fixture Methods
For tests on modification operations (puts and removes), fixtures are used
to verify that that operation results in correct state for the map and its
collection views. Basically, the modification is performed against your
map implementation, and an identical modification is performed against
a confirmed map implementation. A confirmed map implementation is
something like java.util.HashMap , which is known to conform
exactly to the
Map contract. After the modification takes place
on both your map implementation and the confirmed map implementation, the
two maps are compared to see if their state is identical. The comparison
also compares the collection views to make sure they're still the same.
The upshot of all that is that any test that modifies the map in
any way will verify that all of the map's state is still
correct, including the state of its collection views. So for instance
if a key is removed by the map's key set's iterator, then the entry set
is checked to make sure the key/value pair no longer appears.
The
AbstractTestMap.map field holds an instance of your collection implementation.
The
AbstractTestMap.entrySet ,
AbstractTestMap.keySet and
AbstractTestMap.values fields hold
that map's collection views. And the
AbstractTestMap.confirmed field holds
an instance of the confirmed collection implementation. The
AbstractTestMap.resetEmpty() and
AbstractTestMap.resetFull() methods set these fields to
empty or full maps, so that tests can proceed from a known state.
After a modification operation to both
AbstractTestMap.map and
AbstractTestMap.confirmed ,
the
AbstractTestMap.verify() method is invoked to compare the results. The
AbstractTestMap.verify method calls separate methods to verify the map and its three
collection views (
AbstractTestMap.verifyMap ,
AbstractTestMap.verifyEntrySet ,
AbstractTestMap.verifyKeySet , and
AbstractTestMap.verifyValues ). You may want to override
one of the verification methodsto perform additional verifications. For
instance, TestDoubleOrderedMap would want override its
AbstractTestMap.verifyValues() method to verify that the values are unique and in
ascending order.
Other Notes
If your
Map fails one of these tests by design, you may still use
this base set of cases. Simply override the test case (method) your map
fails and/or the methods that define the assumptions used by the test
cases. For example, if your map does not allow duplicate values, override
AbstractTestMap.isAllowDuplicateValues() and have it return false
author: Michael Smith author: Rodney Waldhoff author: Paul Jack author: Stephen Colebourne version: $Revision: 169097 $ $Date: 2005-05-07 18:13:40 +0100 (Sat, 07 May 2005) $ |
Field Summary | |
protected Map | confirmed HashMap created by reset(). | protected Set | entrySet Entry set of map created by reset(). | protected Set | keySet Key set of map created by reset(). | protected Map | map Map created by reset(). | protected Collection | values Values collection of map created by reset(). |
Method Summary | |
public void | addSampleMappings(Map m) Helper method to add all the mappings described by
AbstractTestMap.getSampleKeys() and
AbstractTestMap.getSampleValues() . | public BulkTest | bulkTestMapEntrySet() Bulk test
Map.entrySet . | public BulkTest | bulkTestMapKeySet() Bulk test
Map.keySet . | public BulkTest | bulkTestMapValues() Bulk test
Map.values . | public Map.Entry | cloneMapEntry(Map.Entry entry) Creates a new Map Entry that is independent of the first and the map. | public String | getCompatibilityVersion() Gets the compatability version, needed for package access. | public Object[] | getNewSampleValues() Returns a the set of values that can be used to replace the values
returned from
AbstractTestMap.getSampleValues() . | public Object[] | getOtherKeys() | public Object[] | getOtherNonNullStringElements() Returns a list of string elements suitable for return by
AbstractTestMap.getOtherKeys() or
AbstractTestMap.getOtherValues . | public Object[] | getOtherValues() | public Object[] | getSampleKeys() Returns the set of keys in the mappings used to test the map. | public Object[] | getSampleValues() Returns the set of values in the mappings used to test the map. | public boolean | isAllowDuplicateValues() Returns true if the maps produced by
AbstractTestMap.makeEmptyMap() and
AbstractTestMap.makeFullMap() supports duplicate values. | public boolean | isAllowNullKey() Returns true if the maps produced by
AbstractTestMap.makeEmptyMap() and
AbstractTestMap.makeFullMap() supports null keys. | public boolean | isAllowNullValue() Returns true if the maps produced by
AbstractTestMap.makeEmptyMap() and
AbstractTestMap.makeFullMap() supports null values. | public boolean | isGetStructuralModify() Returns true if the maps produced by
AbstractTestMap.makeEmptyMap() and
AbstractTestMap.makeFullMap() can cause structural modification on a get(). | public boolean | isPutAddSupported() Returns true if the maps produced by
AbstractTestMap.makeEmptyMap() and
AbstractTestMap.makeFullMap() support the put and putAll operations
adding new mappings. | public boolean | isPutChangeSupported() Returns true if the maps produced by
AbstractTestMap.makeEmptyMap() and
AbstractTestMap.makeFullMap() support the put and putAll operations
changing existing mappings. | public boolean | isRemoveSupported() Returns true if the maps produced by
AbstractTestMap.makeEmptyMap() and
AbstractTestMap.makeFullMap() support the remove and clear operations. | public boolean | isSetValueSupported() Returns true if the maps produced by
AbstractTestMap.makeEmptyMap() and
AbstractTestMap.makeFullMap() support the setValue operation on entrySet entries. | public boolean | isSubMapViewsSerializable() Returns whether the sub map views of SortedMap are serializable. | public Map | makeConfirmedMap() Override to return a map other than HashMap as the confirmed map. | abstract public Map | makeEmptyMap() Return a new, empty
Map to be used for testing. | public Map | makeFullMap() Return a new, populated map. | public Object | makeObject() Implements the superclass method to return the map to be tested. | public void | resetEmpty() Resets the
AbstractTestMap.map ,
AbstractTestMap.entrySet ,
AbstractTestMap.keySet ,
AbstractTestMap.values and
AbstractTestMap.confirmed fields to empty. | public void | resetFull() Resets the
AbstractTestMap.map ,
AbstractTestMap.entrySet ,
AbstractTestMap.keySet ,
AbstractTestMap.values and
AbstractTestMap.confirmed fields to full. | public void | tearDown() Erases any leftover instance variables by setting them to null. | public void | testEmptyMapCompatibility() Compare the current serialized form of the Map
against the canonical version in CVS. | public void | testEntrySetClearChangesMap() Tests that the
Map.entrySet collection is backed by
the underlying map for clear(). | public void | testEntrySetContains1() | public void | testEntrySetContains2() | public void | testEntrySetContains3() | public void | testEntrySetRemove1() | public void | testEntrySetRemove2() | public void | testEntrySetRemove3() | public void | testFullMapCompatibility() Compare the current serialized form of the Map
against the canonical version in CVS. | public void | testKeySetClearChangesMap() Tests that the
Map.keySet collection is backed by
the underlying map for clear(). | public void | testKeySetRemoveChangesMap() Tests that the
Map.keySet set is backed by
the underlying map by removing from the keySet set
and testing if the key was removed from the map. | public void | testMakeMap() Test to ensure that makeEmptyMap and makeFull returns a new non-null
map with each invocation. | public void | testMapClear() Tests
Map.clear . | public void | testMapContainsKey() Tests Map.containsKey(Object) by verifying it returns false for all
sample keys on a map created using an empty map and returns true for
all sample keys returned on a full map. | public void | testMapContainsValue() Tests Map.containsValue(Object) by verifying it returns false for all
sample values on an empty map and returns true for all sample values on
a full map. | public void | testMapEquals() | public void | testMapGet() | public void | testMapHashCode() | public void | testMapIsEmpty() | public void | testMapPut() | public void | testMapPutAll() | public void | testMapPutNullKey() | public void | testMapPutNullValue() | public void | testMapRemove() | public void | testMapSize() | public void | testMapToString() Tests Map.toString(). | public void | testSampleMappings() Test to ensure the test setup is working properly. | public void | testValuesClearChangesMap() Tests that the
Map.values collection is backed by
the underlying map for clear(). | public void | testValuesRemoveChangesMap() Tests that the
Map.values collection is backed by
the underlying map by removing from the values collection
and testing if the value was removed from the map. | public void | verify() Verifies that
AbstractTestMap.map is still equal to
AbstractTestMap.confirmed .
This method checks that the map is equal to the HashMap,
and that the map's collection views are still equal to
the HashMap's collection views. | public void | verifyEntrySet() | public void | verifyKeySet() | public void | verifyMap() | public void | verifyValues() |
confirmed | protected Map confirmed(Code) | | HashMap created by reset().
|
entrySet | protected Set entrySet(Code) | | Entry set of map created by reset().
|
keySet | protected Set keySet(Code) | | Key set of map created by reset().
|
map | protected Map map(Code) | | Map created by reset().
|
values | protected Collection values(Code) | | Values collection of map created by reset().
|
AbstractTestMap | public AbstractTestMap(String testName)(Code) | | JUnit constructor.
Parameters: testName - the test name |
cloneMapEntry | public Map.Entry cloneMapEntry(Map.Entry entry)(Code) | | Creates a new Map Entry that is independent of the first and the map.
|
getCompatibilityVersion | public String getCompatibilityVersion()(Code) | | Gets the compatability version, needed for package access.
|
getSampleKeys | public Object[] getSampleKeys()(Code) | | Returns the set of keys in the mappings used to test the map. This
method must return an array with the same length as
AbstractTestMap.getSampleValues() and all array elements must be different. The
default implementation constructs a set of String keys, and includes a
single null key if
AbstractTestMap.isAllowNullKey() returns true .
|
isGetStructuralModify | public boolean isGetStructuralModify()(Code) | | Returns true if the maps produced by
AbstractTestMap.makeEmptyMap() and
AbstractTestMap.makeFullMap() can cause structural modification on a get(). The example is LRUMap.
Default implementation returns false.
Override if your map class structurally modifies on get.
|
isPutChangeSupported | public boolean isPutChangeSupported()(Code) | | Returns true if the maps produced by
AbstractTestMap.makeEmptyMap() and
AbstractTestMap.makeFullMap() support the put and putAll operations
changing existing mappings.
Default implementation returns true.
Override if your collection class does not support put changing.
|
isSetValueSupported | public boolean isSetValueSupported()(Code) | | Returns true if the maps produced by
AbstractTestMap.makeEmptyMap() and
AbstractTestMap.makeFullMap() support the setValue operation on entrySet entries.
Default implementation returns isPutChangeSupported().
Override if your collection class does not support setValue but does
support put changing.
|
isSubMapViewsSerializable | public boolean isSubMapViewsSerializable()(Code) | | Returns whether the sub map views of SortedMap are serializable.
If the class being tested is based around a TreeMap then you should
override and return false as TreeMap has a bug in deserialization.
false |
makeConfirmedMap | public Map makeConfirmedMap()(Code) | | Override to return a map other than HashMap as the confirmed map.
a map that is known to be valid |
makeEmptyMap | abstract public Map makeEmptyMap()(Code) | | Return a new, empty
Map to be used for testing.
the map to be tested |
makeObject | public Object makeObject()(Code) | | Implements the superclass method to return the map to be tested.
the map to be tested |
tearDown | public void tearDown() throws Exception(Code) | | Erases any leftover instance variables by setting them to null.
|
testEmptyMapCompatibility | public void testEmptyMapCompatibility() throws Exception(Code) | | Compare the current serialized form of the Map
against the canonical version in CVS.
|
testEntrySetClearChangesMap | public void testEntrySetClearChangesMap()(Code) | | Tests that the
Map.entrySet collection is backed by
the underlying map for clear().
|
testEntrySetContains1 | public void testEntrySetContains1()(Code) | | |
testEntrySetContains2 | public void testEntrySetContains2()(Code) | | |
testEntrySetContains3 | public void testEntrySetContains3()(Code) | | |
testEntrySetRemove1 | public void testEntrySetRemove1()(Code) | | |
testEntrySetRemove2 | public void testEntrySetRemove2()(Code) | | |
testEntrySetRemove3 | public void testEntrySetRemove3()(Code) | | |
testFullMapCompatibility | public void testFullMapCompatibility() throws Exception(Code) | | Compare the current serialized form of the Map
against the canonical version in CVS.
|
testKeySetClearChangesMap | public void testKeySetClearChangesMap()(Code) | | Tests that the
Map.keySet collection is backed by
the underlying map for clear().
|
testKeySetRemoveChangesMap | public void testKeySetRemoveChangesMap()(Code) | | Tests that the
Map.keySet set is backed by
the underlying map by removing from the keySet set
and testing if the key was removed from the map.
|
testMakeMap | public void testMakeMap()(Code) | | Test to ensure that makeEmptyMap and makeFull returns a new non-null
map with each invocation.
|
testMapClear | public void testMapClear()(Code) | | Tests
Map.clear . If the map
AbstractTestMap.isRemoveSupported() can add and remove elements}, then
Map.size and
Map.isEmpty are used to ensure that map has no elements after
a call to clear. If the map does not support adding and removing
elements, this method checks to ensure clear throws an
UnsupportedOperationException.
|
testMapContainsKey | public void testMapContainsKey()(Code) | | Tests Map.containsKey(Object) by verifying it returns false for all
sample keys on a map created using an empty map and returns true for
all sample keys returned on a full map.
|
testMapContainsValue | public void testMapContainsValue()(Code) | | Tests Map.containsValue(Object) by verifying it returns false for all
sample values on an empty map and returns true for all sample values on
a full map.
|
testMapEquals | public void testMapEquals()(Code) | | Tests Map.equals(Object)
|
testMapGet | public void testMapGet()(Code) | | Tests Map.get(Object)
|
testMapHashCode | public void testMapHashCode()(Code) | | Tests Map.hashCode()
|
testMapIsEmpty | public void testMapIsEmpty()(Code) | | Tests Map.isEmpty()
|
testMapPut | public void testMapPut()(Code) | | Tests Map.put(Object, Object)
|
testMapPutAll | public void testMapPutAll()(Code) | | Tests Map.putAll(map)
|
testMapPutNullKey | public void testMapPutNullKey()(Code) | | Tests Map.put(null, value)
|
testMapPutNullValue | public void testMapPutNullValue()(Code) | | Tests Map.put(null, value)
|
testMapRemove | public void testMapRemove()(Code) | | Tests Map.remove(Object)
|
testMapSize | public void testMapSize()(Code) | | Tests Map.size()
|
testMapToString | public void testMapToString()(Code) | | 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.
|
testSampleMappings | public void testSampleMappings()(Code) | | Test to ensure the test setup is working properly. This method checks
to ensure that the getSampleKeys and getSampleValues methods are
returning results that look appropriate. That is, they both return a
non-null array of equal length. The keys array must not have any
duplicate values, and may only contain a (single) null key if
isNullKeySupported() returns true. The values array must only have a null
value if useNullValue() is true and may only have duplicate values if
isAllowDuplicateValues() returns true.
|
testValuesClearChangesMap | public void testValuesClearChangesMap()(Code) | | Tests that the
Map.values collection is backed by
the underlying map for clear().
|
testValuesRemoveChangesMap | public void testValuesRemoveChangesMap()(Code) | | Tests that the
Map.values collection is backed by
the underlying map by removing from the values collection
and testing if the value was removed from the map.
We should really test the "vice versa" case--that values removed
from the map are removed from the values collection--also,
but that's a more difficult test to construct (lacking a
"removeValue" method.)
See bug
9573.
|
verify | public void verify()(Code) | | Verifies that
AbstractTestMap.map is still equal to
AbstractTestMap.confirmed .
This method checks that the map is equal to the HashMap,
and that the map's collection views are still equal to
the HashMap's collection views. An equals test
is done on the maps and their collection views; their size and
isEmpty results are compared; their hashCodes are
compared; and containsAll tests are run on the
collection views.
|
verifyEntrySet | public void verifyEntrySet()(Code) | | |
verifyKeySet | public void verifyKeySet()(Code) | | |
verifyMap | public void verifyMap()(Code) | | |
verifyValues | public void verifyValues()(Code) | | |
Fields inherited from org.apache.commons.collections.AbstractTestObject | final public static int COLLECTIONS_MAJOR_VERSION(Code)(Java Doc)
|
|
|