]> source.dussan.org Git - vaadin-framework.git/commitdiff
Test for #6212 Memory leak in KeyMapper
authorArtur Signell <artur.signell@itmill.com>
Tue, 28 Dec 2010 12:35:53 +0000 (12:35 +0000)
committerArtur Signell <artur.signell@itmill.com>
Tue, 28 Dec 2010 12:35:53 +0000 (12:35 +0000)
svn changeset:16689/svn branch:6.5

tests/src/com/vaadin/tests/server/TestKeyMapper.java [new file with mode: 0644]

diff --git a/tests/src/com/vaadin/tests/server/TestKeyMapper.java b/tests/src/com/vaadin/tests/server/TestKeyMapper.java
new file mode 100644 (file)
index 0000000..02ea45c
--- /dev/null
@@ -0,0 +1,102 @@
+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