📄 abstracttestmap.java
字号:
resetFull();
values = map.values();
assertTrue(map.size() > 0);
assertTrue(values.size() > 0);
map.clear();
assertTrue(map.size() == 0);
assertTrue(values.size() == 0);
}
/**
* Tests that the {@link Map#keySet} collection is backed by
* the underlying map for clear().
*/
public void testKeySetClearChangesMap() {
if (!isRemoveSupported()) return;
// clear values, reflected in map
resetFull();
Set keySet = map.keySet();
assertTrue(map.size() > 0);
assertTrue(keySet.size() > 0);
keySet.clear();
assertTrue(map.size() == 0);
assertTrue(keySet.size() == 0);
// clear map, reflected in values
resetFull();
keySet = map.keySet();
assertTrue(map.size() > 0);
assertTrue(keySet.size() > 0);
map.clear();
assertTrue(map.size() == 0);
assertTrue(keySet.size() == 0);
}
/**
* Tests that the {@link Map#entrySet()} collection is backed by
* the underlying map for clear().
*/
public void testEntrySetClearChangesMap() {
if (!isRemoveSupported()) return;
// clear values, reflected in map
resetFull();
Set entrySet = map.entrySet();
assertTrue(map.size() > 0);
assertTrue(entrySet.size() > 0);
entrySet.clear();
assertTrue(map.size() == 0);
assertTrue(entrySet.size() == 0);
// clear map, reflected in values
resetFull();
entrySet = map.entrySet();
assertTrue(map.size() > 0);
assertTrue(entrySet.size() > 0);
map.clear();
assertTrue(map.size() == 0);
assertTrue(entrySet.size() == 0);
}
//-----------------------------------------------------------------------
public void testEntrySetContains1() {
resetFull();
Set entrySet = map.entrySet();
Map.Entry entry = (Map.Entry) entrySet.iterator().next();
assertEquals(true, entrySet.contains(entry));
}
public void testEntrySetContains2() {
resetFull();
Set entrySet = map.entrySet();
Map.Entry entry = (Map.Entry) entrySet.iterator().next();
Map.Entry test = cloneMapEntry(entry);
assertEquals(true, entrySet.contains(test));
}
public void testEntrySetContains3() {
resetFull();
Set entrySet = map.entrySet();
Map.Entry entry = (Map.Entry) entrySet.iterator().next();
HashMap temp = new HashMap();
temp.put(entry.getKey(), "A VERY DIFFERENT VALUE");
Map.Entry test = (Map.Entry) temp.entrySet().iterator().next();
assertEquals(false, entrySet.contains(test));
}
public void testEntrySetRemove1() {
if (!isRemoveSupported()) return;
resetFull();
int size = map.size();
Set entrySet = map.entrySet();
Map.Entry entry = (Map.Entry) entrySet.iterator().next();
Object key = entry.getKey();
assertEquals(true, entrySet.remove(entry));
assertEquals(false, map.containsKey(key));
assertEquals(size - 1, map.size());
}
public void testEntrySetRemove2() {
if (!isRemoveSupported()) return;
resetFull();
int size = map.size();
Set entrySet = map.entrySet();
Map.Entry entry = (Map.Entry) entrySet.iterator().next();
Object key = entry.getKey();
Map.Entry test = cloneMapEntry(entry);
assertEquals(true, entrySet.remove(test));
assertEquals(false, map.containsKey(key));
assertEquals(size - 1, map.size());
}
public void testEntrySetRemove3() {
if (!isRemoveSupported()) return;
resetFull();
int size = map.size();
Set entrySet = map.entrySet();
Map.Entry entry = (Map.Entry) entrySet.iterator().next();
Object key = entry.getKey();
HashMap temp = new HashMap();
temp.put(entry.getKey(), "A VERY DIFFERENT VALUE");
Map.Entry test = (Map.Entry) temp.entrySet().iterator().next();
assertEquals(false, entrySet.remove(test));
assertEquals(true, map.containsKey(key));
assertEquals(size, map.size());
}
//-----------------------------------------------------------------------
/**
* Tests that the {@link 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.
* <p>
* 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.)
* </p>
* <p>
* See bug <a href="http://issues.apache.org/bugzilla/show_bug.cgi?id=9573">
* 9573</a>.
* </p>
*/
public void testValuesRemoveChangesMap() {
resetFull();
Object[] sampleValues = getSampleValues();
Collection values = map.values();
for (int i = 0; i < sampleValues.length; i++) {
if (map.containsValue(sampleValues[i])) {
int j = 0; // loop counter prevents infinite loops when remove is broken
while (values.contains(sampleValues[i]) && j < 10000) {
try {
values.remove(sampleValues[i]);
} catch (UnsupportedOperationException e) {
// if values.remove is unsupported, just skip this test
return;
}
j++;
}
assertTrue("values().remove(obj) is broken", j < 10000);
assertTrue(
"Value should have been removed from the underlying map.",
!map.containsValue(sampleValues[i]));
}
}
}
/**
* Tests that the {@link 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 testKeySetRemoveChangesMap() {
resetFull();
Object[] sampleKeys = getSampleKeys();
Set keys = map.keySet();
for (int i = 0; i < sampleKeys.length; i++) {
try {
keys.remove(sampleKeys[i]);
} catch (UnsupportedOperationException e) {
// if key.remove is unsupported, just skip this test
return;
}
assertTrue(
"Key should have been removed from the underlying map.",
!map.containsKey(sampleKeys[i]));
}
}
// TODO: Need:
// testValuesRemovedFromEntrySetAreRemovedFromMap
// same for EntrySet/KeySet/values's
// Iterator.remove, removeAll, retainAll
/**
* Utility methods to create an array of Map.Entry objects
* out of the given key and value arrays.<P>
*
* @param keys the array of keys
* @param values the array of values
* @return an array of Map.Entry of those keys to those values
*/
private Map.Entry[] makeEntryArray(Object[] keys, Object[] values) {
Map.Entry[] result = new Map.Entry[keys.length];
for (int i = 0; i < keys.length; i++) {
Map map = makeConfirmedMap();
map.put(keys[i], values[i]);
result[i] = (Map.Entry) map.entrySet().iterator().next();
}
return result;
}
/**
* Bulk test {@link Map#entrySet()}. This method runs through all of
* the tests in {@link AbstractTestSet}.
* After modification operations, {@link #verify()} is invoked to ensure
* that the map and the other collection views are still valid.
*
* @return a {@link AbstractTestSet} instance for testing the map's entry set
*/
public BulkTest bulkTestMapEntrySet() {
return new TestMapEntrySet();
}
public class TestMapEntrySet extends AbstractTestSet {
public TestMapEntrySet() {
super("MapEntrySet");
}
// Have to implement manually; entrySet doesn't support addAll
public Object[] getFullElements() {
Object[] k = getSampleKeys();
Object[] v = getSampleValues();
return makeEntryArray(k, v);
}
// Have to implement manually; entrySet doesn't support addAll
public Object[] getOtherElements() {
Object[] k = getOtherKeys();
Object[] v = getOtherValues();
return makeEntryArray(k, v);
}
public Set makeEmptySet() {
return makeEmptyMap().entrySet();
}
public Set makeFullSet() {
return makeFullMap().entrySet();
}
public boolean isAddSupported() {
// Collection views don't support add operations.
return false;
}
public boolean isRemoveSupported() {
// Entry set should only support remove if map does
return AbstractTestMap.this.isRemoveSupported();
}
public boolean isGetStructuralModify() {
return AbstractTestMap.this.isGetStructuralModify();
}
public boolean isTestSerialization() {
return false;
}
public void resetFull() {
AbstractTestMap.this.resetFull();
collection = map.entrySet();
TestMapEntrySet.this.confirmed = AbstractTestMap.this.confirmed.entrySet();
}
public void resetEmpty() {
AbstractTestMap.this.resetEmpty();
collection = map.entrySet();
TestMapEntrySet.this.confirmed = AbstractTestMap.this.confirmed.entrySet();
}
public void testMapEntrySetIteratorEntry() {
resetFull();
Iterator it = collection.iterator();
int count = 0;
while (it.hasNext()) {
Map.Entry entry = (Map.Entry) it.next();
assertEquals(true, AbstractTestMap.this.map.containsKey(entry.getKey()));
assertEquals(true, AbstractTestMap.this.map.containsValue(entry.getValue()));
if (isGetStructuralModify() == false) {
assertEquals(AbstractTestMap.this.map.get(entry.getKey()), entry.getValue());
}
count++;
}
assertEquals(collection.size(), count);
}
public void testMapEntrySetIteratorEntrySetValue() {
Object key1 = getSampleKeys()[0];
Object key2 = (getSampleKeys().length ==1 ? getSampleKeys()[0] : getSampleKeys()[1]);
Object newValue1 = getNewSampleValues()[0];
Object newValue2 = (getNewSampleValues().length ==1 ? getNewSampleValues()[0] : getNewSampleValues()[1]);
resetFull();
// explicitly get entries as sample values/keys are connected for some maps
// such as BeanMap
Iterator it = TestMapEntrySet.this.collection.iterator();
Map.Entry entry1 = getEntry(it, key1);
it = TestMapEntrySet.this.collection.iterator();
Map.Entry entry2 = getEntry(it, key2);
Iterator itConfirmed = TestMapEntrySet.this.confirmed.iterator();
Map.Entry entryConfirmed1 = getEntry(itConfirmed, key1);
itConfirmed = TestMapEntrySet.this.confirmed.iterator();
Map.Entry entryConfirmed2 = getEntry(itConfirmed, key2);
verify();
if (isSetValueSupported() == false) {
try {
entry1.setValue(newValue1);
} catch (UnsupportedOperationException ex) {
}
return;
}
entry1.setValue(newValue1);
entryConfirmed1.setValue(newValue1);
assertEquals(newValue1, entry1.getValue());
assertEquals(true, AbstractTestMap.this.map.containsKey(entry1.getKey()));
assertEquals(true, AbstractTestMap.this.map.containsValue(newValue1));
assertEquals(newValue1, AbstractTestMap.this.map.get(entry1.getKey()));
verify();
entry1.setValue(newValue1);
entryConfirmed1.setValue(newValue1);
assertEquals(newValue1, entry1.getValue());
assertEquals(true, AbstractTestMap.this.map.containsKey(entry1.getKey()));
assertEquals(true, AbstractTestMap.this.map.containsValue(newValue1));
assertEquals(newValue1, AbstractTestMap.this.map.get(entry1.getKey()));
verify();
entry2.setValue(newValue2);
entryConfirmed2.setValue(newValue2);
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -