package org.apache.geronimo.kernel.basic;
import junit.framework.TestCase;
public class BasicProxyMapTest extends TestCase {
private BasicProxyMap map;
public void testPut() {
Object key1 = new Object();
Object value1 = new Object();
Object key2 = new Object();
Object value2 = new Object();
// test expected start conditions
assertEquals(0,map.size());
assertTrue(map.isEmpty());
assertNull(map.get(key1));
assertFalse(map.containsKey(key1));
assertFalse(map.containsValue(value1));
// test put
assertNull(map.put(key1, value1));
assertEquals(1,map.size());
assertFalse(map.isEmpty());
assertSame(value1, map.put(key1,value2));
assertSame(value2, map.put(key1,value1));
assertNull(map.put(key2, value2));
assertEquals(2,map.size());
}
public void testContains() {
Object key1 = new Object();
Object value1 = new Object();
Object key2 = new Object();
Object value2 = new Object();
map.put(key1,value1);
map.put(key2, value2);
assertTrue(map.containsKey(key1));
assertTrue(map.containsValue(value1));
assertTrue(map.containsKey(key2));
assertTrue(map.containsValue(value2));
assertFalse(map.containsKey(new Object()));
assertFalse(map.containsValue(new Object()));
}
public void testGet() {
Object key1 = new Object();
Object value1 = new Object();
Object key2 = new Object();
Object value2 = new Object();
map.put(key1,value1);
map.put(key2, value2);
assertSame(value1,map.get(key1));
assertSame(value2,map.get(key2));
assertNull(map.get(new Object()));
}
public void testRemove() {
Object key1 = new Object();
Object value1 = new Object();
Object key2 = new Object();
Object value2 = new Object();
map.put(key1,value1);
map.put(key2, value2);
assertSame(value1,map.remove(key1));
assertEquals(1,map.size());
assertFalse(map.isEmpty());
assertFalse(map.containsKey(key1));
assertFalse(map.containsValue(value1));
assertNull(map.get(key1));
assertNull(map.put(key1, value1));
}
public void testClear() {
Object key1 = new Object();
Object value1 = new Object();
Object key2 = new Object();
Object value2 = new Object();
map.put(key1,value1);
map.put(key2, value2);
map.clear();
assertEquals(0,map.size());
assertTrue(map.isEmpty());
assertNull(map.get(key1));
assertFalse(map.containsKey(key1));
assertFalse(map.containsValue(value1));
}
public void testIdentitySemantic() {
Object value1 = new Object();
Object value2 = new Object();
class IdentityTest {
public int hashCode() { return 1; }
public boolean equals(Object o) { return true; }
}
class IdentityTest2 {
public int hashCode() { return 1; }
public boolean equals(Object o) { return false; }
}
Object key1 = new IdentityTest();
Object key2 = new IdentityTest();
assertNull(map.put(key1, value1));
assertNull(map.get(key2));
assertNull(map.put(key2, value2));
assertSame(value1, map.get(key1));
assertSame(value2, map.get(key2));
map.clear();
key1 = new IdentityTest2();
key2 = new IdentityTest2();
assertNull(map.put(key1, value1));
assertNull(map.get(key2));
assertNull(map.put(key2, value2));
assertSame(value1, map.get(key1));
assertSame(value2, map.get(key2));
}
public void testWeakSemantic() {
int MAX = 256;
Object [] keys = new Object[MAX];
Object [] values = new Object[MAX];
for (int i=0;i<MAX;i++) {
keys[i] = new Object(); values[i] = new Object();
assertNull(map.put(keys[i],values[i]));
}
for (int i=0;i<MAX;i++) {
assertEquals(values[i], map.get(keys[i]));
}
// now add a number of entries that will be available for GCing
for (int i=0;i<MAX;i++) {
assertNull(map.put(new Object(), new Object()));
}
System.gc();
try {Thread.sleep(1000);} catch (InterruptedException ie) {}
assertEquals(MAX,map.size());
for (int i=0;i<MAX;i++) {
assertSame(values[i], map.get(keys[i]));
}
}
protected void setUp() throws Exception {
map = new BasicProxyMap();
}
}