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();
}
}