package com.vaadin.tests.server;
import static org.junit.Assert.assertEquals;
import static org.junit.Assert.assertNotSame;
import static org.junit.Assert.fail;
import java.lang.reflect.Field;
import java.util.HashMap;
import org.junit.Test;
import com.vaadin.server.KeyMapper;
public class KeyMapperTest {
@Test
public void testAdd() {
KeyMapper<Object> mapper = new KeyMapper<>();
Object o1 = new Object();
Object o2 = new Object();
Object o3 = new Object();
// Create new ids
String key1 = mapper.key(o1);
String key2 = mapper.key(o2);
String key3 = mapper.key(o3);
assertEquals(mapper.get(key1), o1);
assertEquals(mapper.get(key2), o2);
assertEquals(mapper.get(key3), o3);
assertNotSame(key1, key2);
assertNotSame(key1, key3);
assertNotSame(key2, key3);
assertSize(mapper, 3);
// Key should not add if there already is a mapping
assertEquals(mapper.key(o3), key3);
assertSize(mapper, 3);
// Remove -> add should return a new key
mapper.remove(o1);
String newkey1 = mapper.key(o1);
assertNotSame(key1, newkey1);
}
@Test
public void testRemoveAll() {
KeyMapper<Object> mapper = new KeyMapper<>();
Object o1 = new Object();
Object o2 = new Object();
Object o3 = new Object();
// Create new ids
mapper.key(o1);
mapper.key(o2);
mapper.key(o3);
assertSize(mapper, 3);
mapper.removeAll();
assertSize(mapper, 0);
}
@Test
public void testRemove() {
KeyMapper<Object> mapper = new KeyMapper<>();
Object o1 = new Object();
Object o2 = new Object();
Object o3 = new Object();
// Create new ids
mapper.key(o1);
mapper.key(o2);
mapper.key(o3);
assertSize(mapper, 3);
mapper.remove(o1);
assertSize(mapper, 2);
mapper.key(o1);
assertSize(mapper, 3);
mapper.remove(o1);
assertSize(mapper, 2);
mapper.remove(o2);
mapper.remove(o3);
assertSize(mapper, 0);
}
private void assertSize(KeyMapper<?> mapper, int i) {
try {
Field f1 = KeyMapper.class.getDeclaredField("objectKeyMap");
Field f2 = KeyMapper.class.getDeclaredField("keyObjectMap");
f1.setAccessible(true);
f2.setAccessible(true);
HashMap<?, ?> h1 = (HashMap<?, ?>) f1.get(mapper);
HashMap<?, ?> h2 = (HashMap<?, ?>) f2.get(mapper);
assertEquals(i, h1.size());
assertEquals(i, h2.size());
} catch (Throwable t) {
t.printStackTrace();
fail();
}
}
}