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