📄 abstracttestbidimap.java
字号:
Iterator values = map.values().iterator();
for (; keys.hasNext() && values.hasNext();) {
Object key = keys.next();
Object value = values.next();
assertSame(map.get(key), value);
}
assertEquals(false, keys.hasNext());
assertEquals(false, values.hasNext());
}
//-----------------------------------------------------------------------
public void testBidiRemoveByKeySet() {
if (isRemoveSupported() == false) return;
removeByKeySet(makeFullBidiMap(), entries[0][0], entries[0][1]);
removeByKeySet(makeFullBidiMap().inverseBidiMap(), entries[0][1], entries[0][0]);
}
private final void removeByKeySet(BidiMap map, Object key, Object value) {
map.keySet().remove(key);
assertTrue("Key was not removed.", !map.containsKey(key));
assertTrue("Value was not removed.", !map.containsValue(value));
assertTrue(
"Key was not removed from inverse map.",
!map.inverseBidiMap().containsValue(key));
assertTrue(
"Value was not removed from inverse map.",
!map.inverseBidiMap().containsKey(value));
}
//-----------------------------------------------------------------------
public void testBidiRemoveByEntrySet() {
if (isRemoveSupported() == false) return;
removeByEntrySet(makeFullBidiMap(), entries[0][0], entries[0][1]);
removeByEntrySet(makeFullBidiMap().inverseBidiMap(), entries[0][1], entries[0][0]);
}
private final void removeByEntrySet(BidiMap map, Object key, Object value) {
Map temp = new HashMap();
temp.put(key, value);
map.entrySet().remove(temp.entrySet().iterator().next());
assertTrue("Key was not removed.", !map.containsKey(key));
assertTrue("Value was not removed.", !map.containsValue(value));
assertTrue(
"Key was not removed from inverse map.",
!map.inverseBidiMap().containsValue(key));
assertTrue(
"Value was not removed from inverse map.",
!map.inverseBidiMap().containsKey(value));
}
//-----------------------------------------------------------------------
public BulkTest bulkTestMapEntrySet() {
return new TestBidiMapEntrySet();
}
public class TestBidiMapEntrySet extends TestMapEntrySet {
public TestBidiMapEntrySet() {
super();
}
public void testMapEntrySetIteratorEntrySetValueCrossCheck() {
Object key1 = getSampleKeys()[0];
Object key2 = getSampleKeys()[1];
Object newValue1 = getNewSampleValues()[0];
Object newValue2 = getNewSampleValues()[1];
resetFull();
// explicitly get entries as sample values/keys are connected for some maps
// such as BeanMap
Iterator it = TestBidiMapEntrySet.this.collection.iterator();
Map.Entry entry1 = getEntry(it, key1);
it = TestBidiMapEntrySet.this.collection.iterator();
Map.Entry entry2 = getEntry(it, key2);
Iterator itConfirmed = TestBidiMapEntrySet.this.confirmed.iterator();
Map.Entry entryConfirmed1 = getEntry(itConfirmed, key1);
itConfirmed = TestBidiMapEntrySet.this.confirmed.iterator();
Map.Entry entryConfirmed2 = getEntry(itConfirmed, key2);
TestBidiMapEntrySet.this.verify();
if (isSetValueSupported() == false) {
try {
entry1.setValue(newValue1);
} catch (UnsupportedOperationException ex) {
}
return;
}
// these checked in superclass
entry1.setValue(newValue1);
entryConfirmed1.setValue(newValue1);
entry2.setValue(newValue2);
entryConfirmed2.setValue(newValue2);
// at this point
// key1=newValue1, key2=newValue2
try {
entry2.setValue(newValue1); // should remove key1
} catch (IllegalArgumentException ex) {
return; // simplest way of dealing with tricky situation
}
entryConfirmed2.setValue(newValue1);
AbstractTestBidiMap.this.confirmed.remove(key1);
assertEquals(newValue1, entry2.getValue());
assertEquals(true, AbstractTestBidiMap.this.map.containsKey(entry2.getKey()));
assertEquals(true, AbstractTestBidiMap.this.map.containsValue(newValue1));
assertEquals(newValue1, AbstractTestBidiMap.this.map.get(entry2.getKey()));
assertEquals(false, AbstractTestBidiMap.this.map.containsKey(key1));
assertEquals(false, AbstractTestBidiMap.this.map.containsValue(newValue2));
TestBidiMapEntrySet.this.verify();
// check for ConcurrentModification
it.next(); // if you fail here, maybe you should be throwing an IAE, see above
if (isRemoveSupported()) {
it.remove();
}
}
}
public BulkTest bulkTestInverseMap() {
return new TestInverseBidiMap(this);
}
public class TestInverseBidiMap extends AbstractTestBidiMap {
final AbstractTestBidiMap main;
public TestInverseBidiMap(AbstractTestBidiMap main) {
super();
this.main = main;
}
public BidiMap makeEmptyBidiMap() {
return main.makeEmptyBidiMap().inverseBidiMap();
}
public BidiMap makeFullBidiMap() {
return main.makeFullBidiMap().inverseBidiMap();
}
public Map makeFullMap() {
return ((BidiMap) main.makeFullMap()).inverseBidiMap();
}
public Object[] getSampleKeys() {
return main.getSampleValues();
}
public Object[] getSampleValues() {
return main.getSampleKeys();
}
public String getCompatibilityVersion() {
return main.getCompatibilityVersion();
}
public boolean isAllowNullKey() {
return main.isAllowNullKey();
}
public boolean isAllowNullValue() {
return main.isAllowNullValue();
}
public boolean isPutAddSupported() {
return main.isPutAddSupported();
}
public boolean isPutChangeSupported() {
return main.isPutChangeSupported();
}
public boolean isSetValueSupported() {
return main.isSetValueSupported();
}
public boolean isRemoveSupported() {
return main.isRemoveSupported();
}
}
//-----------------------------------------------------------------------
public BulkTest bulkTestBidiMapIterator() {
return new TestBidiMapIterator();
}
public class TestBidiMapIterator extends AbstractTestMapIterator {
public TestBidiMapIterator() {
super("TestBidiMapIterator");
}
public Object[] addSetValues() {
return AbstractTestBidiMap.this.getNewSampleValues();
}
public boolean supportsRemove() {
return AbstractTestBidiMap.this.isRemoveSupported();
}
public boolean supportsSetValue() {
return AbstractTestBidiMap.this.isSetValueSupported();
}
public MapIterator makeEmptyMapIterator() {
resetEmpty();
return ((BidiMap) AbstractTestBidiMap.this.map).mapIterator();
}
public MapIterator makeFullMapIterator() {
resetFull();
return ((BidiMap) AbstractTestBidiMap.this.map).mapIterator();
}
public Map getMap() {
// assumes makeFullMapIterator() called first
return AbstractTestBidiMap.this.map;
}
public Map getConfirmedMap() {
// assumes makeFullMapIterator() called first
return AbstractTestBidiMap.this.confirmed;
}
public void verify() {
super.verify();
AbstractTestBidiMap.this.verify();
}
}
//-----------------------------------------------------------------------
public void testBidiMapIteratorSet() {
Object newValue1 = getOtherValues()[0];
Object newValue2 = getOtherValues()[1];
resetFull();
BidiMap bidi = (BidiMap) map;
MapIterator it = bidi.mapIterator();
assertEquals(true, it.hasNext());
Object key1 = it.next();
if (isSetValueSupported() == false) {
try {
it.setValue(newValue1);
fail();
} catch (UnsupportedOperationException ex) {
}
return;
}
it.setValue(newValue1);
confirmed.put(key1, newValue1);
assertSame(key1, it.getKey());
assertSame(newValue1, it.getValue());
assertEquals(true, bidi.containsKey(key1));
assertEquals(true, bidi.containsValue(newValue1));
assertEquals(newValue1, bidi.get(key1));
verify();
it.setValue(newValue1); // same value - should be OK
confirmed.put(key1, newValue1);
assertSame(key1, it.getKey());
assertSame(newValue1, it.getValue());
assertEquals(true, bidi.containsKey(key1));
assertEquals(true, bidi.containsValue(newValue1));
assertEquals(newValue1, bidi.get(key1));
verify();
Object key2 = it.next();
it.setValue(newValue2);
confirmed.put(key2, newValue2);
assertSame(key2, it.getKey());
assertSame(newValue2, it.getValue());
assertEquals(true, bidi.containsKey(key2));
assertEquals(true, bidi.containsValue(newValue2));
assertEquals(newValue2, bidi.get(key2));
verify();
// at this point
// key1=newValue1, key2=newValue2
try {
it.setValue(newValue1); // should remove key1
fail();
} catch (IllegalArgumentException ex) {
return; // simplest way of dealing with tricky situation
}
confirmed.put(key2, newValue1);
AbstractTestBidiMap.this.confirmed.remove(key1);
assertEquals(newValue1, it.getValue());
assertEquals(true, bidi.containsKey(it.getKey()));
assertEquals(true, bidi.containsValue(newValue1));
assertEquals(newValue1, bidi.get(it.getKey()));
assertEquals(false, bidi.containsKey(key1));
assertEquals(false, bidi.containsValue(newValue2));
verify();
// check for ConcurrentModification
it.next(); // if you fail here, maybe you should be throwing an IAE, see above
if (isRemoveSupported()) {
it.remove();
}
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -