Fix for problem with JDK 1.6 where removing an entry from an EnumMap's
entrySet can invalidate the entry since it is just an index into the
original map.  We work around this problem by making a copy of the
entry before removing it.

Patch by: jat
Review by: tobyr (desk review)



git-svn-id: https://google-web-toolkit.googlecode.com/svn/trunk@1550 8db76d5a-ed1c-0410-87a9-c151d255dfc7
diff --git a/user/test/com/google/gwt/emultest/java/util/EnumMapTest.java b/user/test/com/google/gwt/emultest/java/util/EnumMapTest.java
index 51bc6a8..4a9ee16 100644
--- a/user/test/com/google/gwt/emultest/java/util/EnumMapTest.java
+++ b/user/test/com/google/gwt/emultest/java/util/EnumMapTest.java
@@ -124,9 +124,31 @@
     Set<Map.Entry<E, Integer>> mapEntrySet = numberMap.entrySet();
     assertEquals(mapEntrySet, numbersEntrySet);
 
-    Map.Entry<E, Integer> entry = numbers.entrySet().iterator().next();
+    final Map.Entry<E, Integer> entry = numbers.entrySet().iterator().next();
+    /*
+     * Copy entry because it is no longer valid after
+     * numbersEntrySet.remove(entry).
+     */
+    Map.Entry<E, Integer> entryCopy = new Map.Entry<E, Integer>() {
+      E key = entry.getKey();
+      Integer value = entry.getValue();
+      
+      public E getKey() {
+        return key;
+      }
+
+      public Integer getValue() {
+        return value;
+      }
+
+      public Integer setValue(Integer value) {
+        Integer oldValue = this.value;
+        this.value = value;
+        return oldValue;
+      }
+    };
     numbersEntrySet.remove(entry);
-    mapEntrySet.remove(entry);
+    mapEntrySet.remove(entryCopy);
     assertEquals(mapEntrySet, numbersEntrySet);
     assertEquals(numberMap, numbers);