📄 abstracttestbidimap.java
字号:
/*
* Licensed to the Apache Software Foundation (ASF) under one or more
* contributor license agreements. See the NOTICE file distributed with
* this work for additional information regarding copyright ownership.
* The ASF licenses this file to You under the Apache License, Version 2.0
* (the "License"); you may not use this file except in compliance with
* the License. You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package org.apache.commons.collections.bidimap;
import java.util.Collection;
import java.util.HashMap;
import java.util.Iterator;
import java.util.Map;
import java.util.Set;
import org.apache.commons.collections.BidiMap;
import org.apache.commons.collections.BulkTest;
import org.apache.commons.collections.MapIterator;
import org.apache.commons.collections.iterators.AbstractTestMapIterator;
import org.apache.commons.collections.map.AbstractTestMap;
/**
* Abstract test class for {@link BidiMap} methods and contracts.
*
* @version $Revision: 646780 $ $Date: 2008-04-10 13:48:07 +0100 (Thu, 10 Apr 2008) $
*
* @author Matthew Hawthorne
* @author Stephen Colebourne
*/
public abstract class AbstractTestBidiMap extends AbstractTestMap {
// Test data.
private static final Object[][] entriesKV =
new Object[][] {
new Object[] { "key1", "value1" },
new Object[] { "key2", "value2" },
new Object[] { "key3", "value3" }
};
private static final Object[][] entriesVK =
new Object[][] {
new Object[] { "value1", "key1" },
new Object[] { "value2", "key2" },
new Object[] { "value3", "key3" }
};
protected final Object[][] entries;
public AbstractTestBidiMap(String testName) {
super(testName);
entries = entriesKV;
}
public AbstractTestBidiMap() {
super("Inverse");
entries = entriesVK;
}
//-----------------------------------------------------------------------
/**
* Implement to create an empty <code>BidiMap</code>.
*
* @return an empty <code>BidiMap</code> implementation.
*/
public abstract BidiMap makeEmptyBidiMap();
/**
* Override to create a full <code>BidiMap</code> other than the default.
*
* @return a full <code>BidiMap</code> implementation.
*/
public BidiMap makeFullBidiMap() {
final BidiMap map = makeEmptyBidiMap();
for (int i = 0; i < entries.length; i++) {
map.put(entries[i][0], entries[i][1]);
}
return map;
}
/**
* Override to return the empty BidiMap.
*/
public final Map makeEmptyMap() {
return makeEmptyBidiMap();
}
/**
* Override to indicate to AbstractTestMap this is a BidiMap.
*/
public boolean isAllowDuplicateValues() {
return false;
}
/**
* Override as DualHashBidiMap didn't exist until version 3.
*/
public String getCompatibilityVersion() {
return "3";
}
// BidiPut
//-----------------------------------------------------------------------
public void testBidiPut() {
if (isPutAddSupported() == false || isPutChangeSupported() == false) return;
BidiMap map = makeEmptyBidiMap();
BidiMap inverse = map.inverseBidiMap();
assertEquals(0, map.size());
assertEquals(map.size(), inverse.size());
map.put("A", "B");
assertEquals(1, map.size());
assertEquals(map.size(), inverse.size());
assertEquals("B", map.get("A"));
assertEquals("A", inverse.get("B"));
map.put("A", "C");
assertEquals(1, map.size());
assertEquals(map.size(), inverse.size());
assertEquals("C", map.get("A"));
assertEquals("A", inverse.get("C"));
map.put("B", "C");
assertEquals(1, map.size());
assertEquals(map.size(), inverse.size());
assertEquals("C", map.get("B"));
assertEquals("B", inverse.get("C"));
map.put("E", "F");
assertEquals(2, map.size());
assertEquals(map.size(), inverse.size());
assertEquals("F", map.get("E"));
assertEquals("E", inverse.get("F"));
}
/**
* Verifies that {@link #map} is still equal to {@link #confirmed}.
* <p>
* This implementation checks the inverse map as well.
*/
public void verify() {
verifyInverse();
super.verify();
}
public void verifyInverse() {
assertEquals(map.size(), ((BidiMap) map).inverseBidiMap().size());
Map map1 = new HashMap(map);
Map map2 = new HashMap(((BidiMap) map).inverseBidiMap());
Set keys1 = map1.keySet();
Set keys2 = map2.keySet();
Collection values1 = map1.values();
Collection values2 = map2.values();
assertEquals(true, keys1.containsAll(values2));
assertEquals(true, values2.containsAll(keys1));
assertEquals(true, values1.containsAll(keys2));
assertEquals(true, keys2.containsAll(values1));
}
// testGetKey
//-----------------------------------------------------------------------
public void testBidiGetKey() {
doTestGetKey(makeFullBidiMap(), entries[0][0], entries[0][1]);
}
public void testBidiGetKeyInverse() {
doTestGetKey(
makeFullBidiMap().inverseBidiMap(),
entries[0][1],
entries[0][0]);
}
private final void doTestGetKey(BidiMap map, Object key, Object value) {
assertEquals("Value not found for key.", value, map.get(key));
assertEquals("Key not found for value.", key, map.getKey(value));
}
// testInverse
//-----------------------------------------------------------------------
public void testBidiInverse() {
final BidiMap map = makeFullBidiMap();
final BidiMap inverseMap = map.inverseBidiMap();
assertSame(
"Inverse of inverse is not equal to original.",
map,
inverseMap.inverseBidiMap());
assertEquals(
"Value not found for key.",
entries[0][0],
inverseMap.get(entries[0][1]));
assertEquals(
"Key not found for value.",
entries[0][1],
inverseMap.getKey(entries[0][0]));
}
//-----------------------------------------------------------------------
public void testBidiModifyEntrySet() {
if (isSetValueSupported() == false) return;
modifyEntrySet(makeFullBidiMap());
modifyEntrySet(makeFullBidiMap().inverseBidiMap());
}
private final void modifyEntrySet(BidiMap map) {
// Gets first entry
final Map.Entry entry = (Map.Entry)map.entrySet().iterator().next();
// Gets key and value
final Object key = entry.getKey();
final Object oldValue = entry.getValue();
// Sets new value
final Object newValue = "newValue";
entry.setValue(newValue);
assertEquals(
"Modifying entrySet did not affect underlying Map.",
newValue,
map.get(key));
assertNull(
"Modifying entrySet did not affect inverse Map.",
map.getKey(oldValue));
}
//-----------------------------------------------------------------------
public void testBidiClear() {
if (isRemoveSupported() == false) {
try {
makeFullBidiMap().clear();
fail();
} catch(UnsupportedOperationException ex) {}
return;
}
BidiMap map = makeFullBidiMap();
map.clear();
assertTrue("Map was not cleared.", map.isEmpty());
assertTrue("Inverse map was not cleared.", map.inverseBidiMap().isEmpty());
// Tests clear on inverse
map = makeFullBidiMap().inverseBidiMap();
map.clear();
assertTrue("Map was not cleared.", map.isEmpty());
assertTrue("Inverse map was not cleared.", map.inverseBidiMap().isEmpty());
}
//-----------------------------------------------------------------------
public void testBidiRemove() {
if (isRemoveSupported() == false) {
try {
makeFullBidiMap().remove(entries[0][0]);
fail();
} catch(UnsupportedOperationException ex) {}
try {
makeFullBidiMap().removeValue(entries[0][1]);
fail();
} catch(UnsupportedOperationException ex) {}
return;
}
remove(makeFullBidiMap(), entries[0][0]);
remove(makeFullBidiMap().inverseBidiMap(), entries[0][1]);
removeValue(makeFullBidiMap(), entries[0][1]);
removeValue(makeFullBidiMap().inverseBidiMap(), entries[0][0]);
assertEquals(null, makeFullBidiMap().removeValue("NotPresent"));
}
private final void remove(BidiMap map, Object key) {
final Object value = map.remove(key);
assertTrue("Key was not removed.", !map.containsKey(key));
assertNull("Value was not removed.", map.getKey(value));
}
private final void removeValue(BidiMap map, Object value) {
final Object key = map.removeValue(value);
assertTrue("Key was not removed.", !map.containsKey(key));
assertNull("Value was not removed.", map.getKey(value));
}
//-----------------------------------------------------------------------
public void testBidiKeySetValuesOrder() {
resetFull();
Iterator keys = map.keySet().iterator();
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -