summaryrefslogtreecommitdiffstats
path: root/harmony-tests/src/test/java/org/apache/harmony/tests/java/util/EnumMapTest.java
diff options
context:
space:
mode:
Diffstat (limited to 'harmony-tests/src/test/java/org/apache/harmony/tests/java/util/EnumMapTest.java')
-rw-r--r--harmony-tests/src/test/java/org/apache/harmony/tests/java/util/EnumMapTest.java1175
1 files changed, 1175 insertions, 0 deletions
diff --git a/harmony-tests/src/test/java/org/apache/harmony/tests/java/util/EnumMapTest.java b/harmony-tests/src/test/java/org/apache/harmony/tests/java/util/EnumMapTest.java
new file mode 100644
index 0000000..2a37a18
--- /dev/null
+++ b/harmony-tests/src/test/java/org/apache/harmony/tests/java/util/EnumMapTest.java
@@ -0,0 +1,1175 @@
+/* Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements. See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package org.apache.harmony.tests.java.util;
+
+import dalvik.annotation.AndroidOnly;
+
+import java.util.ArrayList;
+import java.util.Collection;
+import java.util.EnumMap;
+import java.util.HashMap;
+import java.util.Iterator;
+import java.util.Map;
+import java.util.NoSuchElementException;
+import java.util.Set;
+
+import org.apache.harmony.testframework.serialization.SerializationTest;
+
+import junit.framework.TestCase;
+
+public class EnumMapTest extends TestCase {
+ enum Size {
+ Small, Middle, Big {};
+ }
+
+ enum Color {
+ Red, Green, Blue {};
+ }
+
+ enum Empty {
+ //Empty
+ }
+
+ private static class MockEntry<K, V> implements Map.Entry<K, V> {
+ private K key;
+
+ private V value;
+
+ public MockEntry(K key, V value) {
+ this.key = key;
+ this.value = value;
+ }
+
+ @Override
+ public int hashCode() {
+ return (key == null ? 0 : key.hashCode())
+ ^ (value == null ? 0 : value.hashCode());
+ }
+
+ public K getKey() {
+ return key;
+ }
+
+ public V getValue() {
+ return value;
+ }
+
+ public V setValue(V object) {
+ V oldValue = value;
+ value = object;
+ return oldValue;
+ }
+ }
+
+ /**
+ * java.util.EnumMap#EnumMap(Class)
+ */
+ @SuppressWarnings({ "unchecked", "boxing" })
+ public void test_ConstructorLjava_lang_Class() {
+ try {
+ new EnumMap((Class) null);
+ fail("Expected NullPointerException");
+ } catch (NullPointerException e) {
+ // Expected
+ }
+
+
+ try {
+ new EnumMap(Size.Big.getClass());
+ fail("Expected NullPointerException");
+ } catch (NullPointerException e) {
+ // Expected
+ }
+
+ try {
+ new EnumMap(Integer.class);
+ fail("Expected NullPointerException");
+ } catch (NullPointerException e) {
+ // Expected
+ }
+
+ EnumMap enumColorMap = new EnumMap<Color, Double>(Color.class);
+ assertNull("Return non-null for non mapped key", enumColorMap.put(
+ Color.Green, 2));
+ assertEquals("Get returned incorrect value for given key", 2,
+ enumColorMap.get(Color.Green));
+
+ EnumMap enumEmptyMap = new EnumMap<Empty, Double>(Empty.class);
+ try {
+ enumEmptyMap.put(Color.Red, 2);
+ fail("Expected ClassCastException");
+ } catch (ClassCastException e) {
+ // Expected
+ }
+
+ EnumMap enumSizeMap = new EnumMap(Size.class);
+ assertNull("Return non-null for non mapped key", enumSizeMap.put(
+ Size.Big, 2));
+ assertEquals("Get returned incorrect value for given key", 2,
+ enumSizeMap.get(Size.Big));
+ try {
+ enumSizeMap.put(Color.Red, 2);
+ fail("Expected ClassCastException");
+ } catch (ClassCastException e) {
+ // Expected
+ }
+
+ enumSizeMap = new EnumMap(Size.Middle.getClass());
+ assertNull("Return non-null for non mapped key", enumSizeMap.put(
+ Size.Small, 1));
+ assertEquals("Get returned incorrect value for given key", 1,
+ enumSizeMap.get(Size.Small));
+ try {
+ enumSizeMap.put(Color.Red, 2);
+ fail("Expected ClassCastException");
+ } catch (ClassCastException e) {
+ // Expected
+ }
+ }
+
+ /**
+ * java.util.EnumMap#EnumMap(EnumMap)
+ */
+ @SuppressWarnings({ "unchecked", "boxing" })
+ public void test_ConstructorLjava_util_EnumMap() {
+ EnumMap enumMap;
+ EnumMap enumColorMap = null;
+ try {
+ enumMap = new EnumMap(enumColorMap);
+ fail("Expected NullPointerException");
+ } catch (NullPointerException e) {
+ // Expected
+ }
+
+ enumColorMap = new EnumMap<Color, Double>(Color.class);
+ Double double1 = new Double(1);
+ enumColorMap.put(Color.Green, 2);
+ enumColorMap.put(Color.Blue, double1);
+
+ enumMap = new EnumMap(enumColorMap);
+ assertEquals("Constructor fails", 2, enumMap.get(Color.Green));
+ assertSame("Constructor fails", double1, enumMap.get(Color.Blue));
+ assertNull("Constructor fails", enumMap.get(Color.Red));
+ enumMap.put(Color.Red, 1);
+ assertEquals("Wrong value", 1, enumMap.get(Color.Red));
+
+ try {
+ enumMap.put(Size.Middle, 2);
+ fail("Expected ClassCastException");
+ } catch (ClassCastException e) {
+ // Expected
+ }
+ }
+
+ /**
+ * java.util.EnumMap#EnumMap(Map)
+ */
+ @SuppressWarnings({ "unchecked", "boxing" })
+ public void test_ConstructorLjava_util_Map() {
+ EnumMap enumMap;
+ Map enumColorMap = null;
+ try {
+ enumMap = new EnumMap(enumColorMap);
+ fail("Expected NullPointerException");
+ } catch (NullPointerException e) {
+ // Expected
+ }
+ enumColorMap = new EnumMap<Color, Double>(Color.class);
+ enumMap = new EnumMap(enumColorMap);
+ enumColorMap.put(Color.Blue, 3);
+ enumMap = new EnumMap(enumColorMap);
+
+ HashMap hashColorMap = null;
+ try {
+ enumMap = new EnumMap(hashColorMap);
+ fail("Expected NullPointerException");
+ } catch (NullPointerException e) {
+ // Expected
+ }
+
+ hashColorMap = new HashMap();
+ try {
+ enumMap = new EnumMap(hashColorMap);
+ fail("Expected IllegalArgumentException");
+ } catch (IllegalArgumentException e) {
+ // Expected
+ }
+
+ hashColorMap.put(Color.Green, 2);
+ enumMap = new EnumMap(hashColorMap);
+ assertEquals("Constructor fails", 2, enumMap.get(Color.Green));
+ assertNull("Constructor fails", enumMap.get(Color.Red));
+ enumMap.put(Color.Red, 1);
+ assertEquals("Wrong value", 1, enumMap.get(Color.Red));
+ hashColorMap.put(Size.Big, 3);
+ try {
+ enumMap = new EnumMap(hashColorMap);
+ fail("Expected ClassCastException");
+ } catch (ClassCastException e) {
+ // Expected
+ }
+
+ hashColorMap = new HashMap();
+ hashColorMap.put(new Integer(1), 1);
+ try {
+ enumMap = new EnumMap(hashColorMap);
+ fail("Expected ClassCastException");
+ } catch (ClassCastException e) {
+ // Expected
+ }
+ }
+
+ /**
+ * java.util.EnumMap#clear()
+ */
+ @SuppressWarnings({ "unchecked", "boxing" })
+ public void test_clear() {
+ EnumMap enumSizeMap = new EnumMap(Size.class);
+ enumSizeMap.put(Size.Small, 1);
+ enumSizeMap.clear();
+ assertNull("Failed to clear all elements", enumSizeMap.get(Size.Small));
+ }
+
+ /**
+ * java.util.EnumMap#containsKey(Object)
+ */
+ @SuppressWarnings( { "unchecked", "boxing" })
+ public void test_containsKeyLjava_lang_Object() {
+ EnumMap enumSizeMap = new EnumMap(Size.class);
+ assertFalse("Returned true for uncontained key", enumSizeMap
+ .containsKey(Size.Small));
+ enumSizeMap.put(Size.Small, 1);
+ assertTrue("Returned false for contained key", enumSizeMap
+ .containsKey(Size.Small));
+
+ enumSizeMap.put(Size.Big, null);
+ assertTrue("Returned false for contained key", enumSizeMap
+ .containsKey(Size.Big));
+
+ assertFalse("Returned true for uncontained key", enumSizeMap
+ .containsKey(Color.Red));
+ assertFalse("Returned true for uncontained key", enumSizeMap
+ .containsKey(new Integer("3")));
+ assertFalse("Returned true for uncontained key", enumSizeMap
+ .containsKey(null));
+ }
+
+ /**
+ * java.util.EnumMap#clone()
+ */
+ @SuppressWarnings( { "unchecked", "boxing" })
+ public void test_clone() {
+ EnumMap enumSizeMap = new EnumMap(Size.class);
+ Integer integer = new Integer("3");
+ enumSizeMap.put(Size.Small, integer);
+ EnumMap enumSizeMapClone = enumSizeMap.clone();
+ assertNotSame("Should not be same", enumSizeMap, enumSizeMapClone);
+ assertEquals("Clone answered unequal EnumMap", enumSizeMap,
+ enumSizeMapClone);
+
+ assertSame("Should be same", enumSizeMap.get(Size.Small),
+ enumSizeMapClone.get(Size.Small));
+ assertSame("Clone is not shallow clone", integer, enumSizeMapClone
+ .get(Size.Small));
+ enumSizeMap.remove(Size.Small);
+ assertSame("Clone is not shallow clone", integer, enumSizeMapClone
+ .get(Size.Small));
+ }
+
+ /**
+ * java.util.EnumMap#containsValue(Object)
+ */
+ @SuppressWarnings( { "unchecked", "boxing" })
+ public void test_containsValueLjava_lang_Object() {
+ EnumMap enumSizeMap = new EnumMap(Size.class);
+ Double double1 = new Double(3);
+ Double double2 = new Double(3);
+
+ assertFalse("Returned true for uncontained value", enumSizeMap
+ .containsValue(double1));
+ enumSizeMap.put(Size.Middle, 2);
+ enumSizeMap.put(Size.Small, double1);
+ assertTrue("Returned false for contained value", enumSizeMap
+ .containsValue(double1));
+ assertTrue("Returned false for contained value", enumSizeMap
+ .containsValue(double2));
+ assertTrue("Returned false for contained value", enumSizeMap
+ .containsValue(2));
+ assertFalse("Returned true for uncontained value", enumSizeMap
+ .containsValue(1));
+
+ assertFalse("Returned true for uncontained value", enumSizeMap
+ .containsValue(null));
+ enumSizeMap.put(Size.Big, null);
+ assertTrue("Returned false for contained value", enumSizeMap
+ .containsValue(null));
+ }
+
+ /**
+ * java.util.EnumMap#entrySet()
+ */
+ @AndroidOnly("Map.Entry is indirectly modified on RI when Iterator.next() is invoked")
+ @SuppressWarnings({ "unchecked", "boxing" })
+ public void test_entrySet() {
+ EnumMap enumSizeMap = new EnumMap(Size.class);
+ enumSizeMap.put(Size.Middle, 1);
+ enumSizeMap.put(Size.Big, null);
+ MockEntry mockEntry = new MockEntry(Size.Middle, 1);
+ Set set = enumSizeMap.entrySet();
+
+ Set set1 = enumSizeMap.entrySet();
+ assertSame("Should be same", set1, set);
+ try {
+ set.add(mockEntry);
+ fail("Should throw UnsupportedOperationException");
+ } catch (UnsupportedOperationException e) {
+ // Expected
+ }
+
+ assertTrue("Returned false for contained object", set
+ .contains(mockEntry));
+ mockEntry = new MockEntry(Size.Middle, null);
+ assertFalse("Returned true for uncontained object", set
+ .contains(mockEntry));
+ assertFalse("Returned true for uncontained object", set
+ .contains(Size.Small));
+ mockEntry = new MockEntry(new Integer(1), 1);
+ assertFalse("Returned true for uncontained object", set
+ .contains(mockEntry));
+ assertFalse("Returned true for uncontained object", set
+ .contains(new Integer(1)));
+
+ mockEntry = new MockEntry(Size.Big, null);
+ assertTrue("Returned false for contained object", set
+ .contains(mockEntry));
+ assertTrue("Returned false when the object can be removed", set
+ .remove(mockEntry));
+ assertFalse("Returned true for uncontained object", set
+ .contains(mockEntry));
+ assertFalse("Returned true when the object can not be removed", set
+ .remove(mockEntry));
+ mockEntry = new MockEntry(new Integer(1), 1);
+ assertFalse("Returned true when the object can not be removed", set
+ .remove(mockEntry));
+ assertFalse("Returned true when the object can not be removed", set
+ .remove(new Integer(1)));
+
+ // The set is backed by the map so changes to one are reflected by the
+ // other.
+ enumSizeMap.put(Size.Big, 3);
+ mockEntry = new MockEntry(Size.Big, 3);
+ assertTrue("Returned false for contained object", set
+ .contains(mockEntry));
+ enumSizeMap.remove(Size.Big);
+ assertFalse("Returned true for uncontained object", set
+ .contains(mockEntry));
+
+ assertEquals("Wrong size", 1, set.size());
+ set.clear();
+ assertEquals("Wrong size", 0, set.size());
+
+ enumSizeMap = new EnumMap(Size.class);
+ enumSizeMap.put(Size.Middle, 1);
+ enumSizeMap.put(Size.Big, null);
+ set = enumSizeMap.entrySet();
+ Collection c = new ArrayList();
+ c.add(new MockEntry(Size.Middle, 1));
+ assertTrue("Return wrong value", set.containsAll(c));
+ assertTrue("Remove does not success", set.removeAll(c));
+
+ enumSizeMap.put(Size.Middle, 1);
+ c.add(new MockEntry(Size.Big, 3));
+ assertTrue("Remove does not success", set.removeAll(c));
+ assertFalse("Should return false", set.removeAll(c));
+ assertEquals("Wrong size", 1, set.size());
+
+ enumSizeMap = new EnumMap(Size.class);
+ enumSizeMap.put(Size.Middle, 1);
+ enumSizeMap.put(Size.Big, null);
+ set = enumSizeMap.entrySet();
+ c = new ArrayList();
+ c.add(new MockEntry(Size.Middle, 1));
+ c.add(new MockEntry(Size.Big, 3));
+
+ assertTrue("Retain does not success", set.retainAll(c));
+ assertEquals("Wrong size", 1, set.size());
+ assertFalse("Should return false", set.retainAll(c));
+
+ enumSizeMap = new EnumMap(Size.class);
+ enumSizeMap.put(Size.Middle, 1);
+ enumSizeMap.put(Size.Big, null);
+
+ set = enumSizeMap.entrySet();
+ Object[] array = set.toArray();
+ assertEquals("Wrong length", 2, array.length);
+ Map.Entry entry = (Map.Entry) array[0];
+ assertEquals("Wrong key", Size.Middle, entry.getKey());
+ assertEquals("Wrong value", 1, entry.getValue());
+
+ Object[] array1 = new Object[10];
+ array1 = set.toArray();
+ assertEquals("Wrong length", 2, array1.length);
+ entry = (Map.Entry) array[0];
+ assertEquals("Wrong key", Size.Middle, entry.getKey());
+ assertEquals("Wrong value", 1, entry.getValue());
+
+ array1 = new Object[10];
+ array1 = set.toArray(array1);
+ assertEquals("Wrong length", 10, array1.length);
+ entry = (Map.Entry) array[1];
+ assertEquals("Wrong key", Size.Big, entry.getKey());
+ assertNull("Should be null", array1[2]);
+
+ set = enumSizeMap.entrySet();
+ Integer integer = new Integer("1");
+ assertFalse("Returned true when the object can not be removed", set
+ .remove(integer));
+ assertTrue("Returned false when the object can be removed", set
+ .remove(entry));
+
+ enumSizeMap = new EnumMap(Size.class);
+ enumSizeMap.put(Size.Middle, 1);
+ enumSizeMap.put(Size.Big, null);
+ set = enumSizeMap.entrySet();
+ Iterator iter = set.iterator();
+ entry = (Map.Entry) iter.next();
+ assertTrue("Returned false for contained object", set.contains(entry));
+ mockEntry = new MockEntry(Size.Middle, 2);
+ assertFalse("Returned true for uncontained object", set
+ .contains(mockEntry));
+ mockEntry = new MockEntry(new Integer(2), 2);
+ assertFalse("Returned true for uncontained object", set
+ .contains(mockEntry));
+ entry = (Map.Entry) iter.next();
+ assertTrue("Returned false for contained object", set.contains(entry));
+
+ enumSizeMap.put(Size.Middle, 1);
+ enumSizeMap.remove(Size.Big);
+ mockEntry = new MockEntry(Size.Big, null);
+ assertEquals("Wrong size", 1, set.size());
+ assertFalse("Returned true for uncontained object", set.contains(mockEntry));
+ enumSizeMap.put(Size.Big, 2);
+ mockEntry = new MockEntry(Size.Big, 2);
+ assertTrue("Returned false for contained object", set
+ .contains(mockEntry));
+
+ iter.remove();
+ try {
+ iter.remove();
+ fail("Should throw IllegalStateException");
+ } catch (IllegalStateException e) {
+ // Expected
+ }
+ try {
+ entry.setValue(2);
+ fail("Should throw IllegalStateException");
+ } catch (IllegalStateException e) {
+ // Expected
+ }
+ try {
+ set.contains(entry);
+ fail("Should throw IllegalStateException");
+ } catch (IllegalStateException e) {
+ // Expected
+ }
+
+ enumSizeMap = new EnumMap(Size.class);
+ enumSizeMap.put(Size.Middle, 1);
+ enumSizeMap.put(Size.Big, null);
+ set = enumSizeMap.entrySet();
+ iter = set.iterator();
+ entry = (Map.Entry) iter.next();
+ assertEquals("Wrong key", Size.Middle, entry.getKey());
+
+ assertTrue("Returned false for contained object", set.contains(entry));
+ enumSizeMap.put(Size.Middle, 3);
+ assertTrue("Returned false for contained object", set.contains(entry));
+ entry.setValue(2);
+ assertTrue("Returned false for contained object", set.contains(entry));
+ assertFalse("Returned true for uncontained object", set
+ .remove(new Integer(1)));
+
+ iter.next();
+ assertEquals("Wrong key", Size.Middle, entry.getKey());
+ set.clear();
+ assertEquals("Wrong size", 0, set.size());
+
+ enumSizeMap = new EnumMap(Size.class);
+ enumSizeMap.put(Size.Middle, 1);
+ enumSizeMap.put(Size.Big, null);
+ set = enumSizeMap.entrySet();
+ iter = set.iterator();
+ mockEntry = new MockEntry(Size.Middle, 1);
+
+ assertFalse("Wrong result", entry.equals(mockEntry));
+ try {
+ iter.remove();
+ fail("Should throw IllegalStateException");
+ } catch (IllegalStateException e) {
+ // Expected
+ }
+ entry = (Map.Entry) iter.next();
+ assertEquals("Wrong key", Size.Middle, entry.getKey());
+ assertTrue("Should return true", entry.equals(mockEntry));
+ assertEquals("Should be equal", mockEntry.hashCode(), entry.hashCode());
+ mockEntry = new MockEntry(Size.Big, 1);
+ assertFalse("Wrong result", entry.equals(mockEntry));
+
+ entry = (Map.Entry) iter.next();
+ assertFalse("Wrong result", entry.equals(mockEntry));
+ assertEquals("Wrong key", Size.Big, entry.getKey());
+ iter.remove();
+ assertFalse("Wrong result", entry.equals(mockEntry));
+ assertEquals("Wrong size", 1, set.size());
+ try {
+ iter.remove();
+ fail("Should throw IllegalStateException");
+ } catch (IllegalStateException e) {
+ // Expected
+ }
+ try {
+ iter.next();
+ fail("Should throw NoSuchElementException");
+ } catch (NoSuchElementException e) {
+ // Expected
+ }
+ }
+
+ /**
+ * java.util.EnumMap#equals(Object)
+ */
+ @SuppressWarnings( { "unchecked", "boxing" })
+ public void test_equalsLjava_lang_Object() {
+ EnumMap enumMap = new EnumMap(Size.class);
+ enumMap.put(Size.Small, 1);
+
+ EnumMap enumSizeMap = new EnumMap(Size.class);
+ assertFalse("Returned true for unequal EnumMap", enumSizeMap
+ .equals(enumMap));
+ enumSizeMap.put(Size.Small, 1);
+ assertTrue("Returned false for equal EnumMap", enumSizeMap
+ .equals(enumMap));
+ enumSizeMap.put(Size.Big, null);
+ assertFalse("Returned true for unequal EnumMap", enumSizeMap
+ .equals(enumMap));
+
+ enumMap.put(Size.Middle, null);
+ assertFalse("Returned true for unequal EnumMap", enumSizeMap
+ .equals(enumMap));
+ enumMap.remove(Size.Middle);
+ enumMap.put(Size.Big, 3);
+ assertFalse("Returned true for unequal EnumMap", enumSizeMap
+ .equals(enumMap));
+ enumMap.put(Size.Big, null);
+ assertTrue("Returned false for equal EnumMap", enumSizeMap
+ .equals(enumMap));
+
+ HashMap hashMap = new HashMap();
+ hashMap.put(Size.Small, 1);
+ assertFalse("Returned true for unequal EnumMap", hashMap
+ .equals(enumMap));
+ hashMap.put(Size.Big, null);
+ assertTrue("Returned false for equal EnumMap", enumMap.equals(hashMap));
+
+ assertFalse("Should return false", enumSizeMap
+ .equals(new Integer(1)));
+ }
+
+ /**
+ * java.util.EnumMap#keySet()
+ */
+ @SuppressWarnings( { "unchecked", "boxing" })
+ public void test_keySet() {
+ EnumMap enumSizeMap = new EnumMap(Size.class);
+ enumSizeMap.put(Size.Middle, 2);
+ enumSizeMap.put(Size.Big, null);
+ Set set = enumSizeMap.keySet();
+
+ Set set1 = enumSizeMap.keySet();
+ assertSame("Should be same", set1, set);
+ try {
+ set.add(Size.Big);
+ fail("Should throw UnsupportedOperationException");
+ } catch (UnsupportedOperationException e) {
+ // Expected
+ }
+
+ assertTrue("Returned false for contained object", set
+ .contains(Size.Middle));
+ assertTrue("Returned false for contained object", set
+ .contains(Size.Big));
+ assertFalse("Returned true for uncontained object", set
+ .contains(Size.Small));
+ assertFalse("Returned true for uncontained object", set
+ .contains(new Integer(1)));
+ assertTrue("Returned false when the object can be removed", set
+ .remove(Size.Big));
+ assertFalse("Returned true for uncontained object", set
+ .contains(Size.Big));
+ assertFalse("Returned true when the object can not be removed", set
+ .remove(Size.Big));
+ assertFalse("Returned true when the object can not be removed", set
+ .remove(new Integer(1)));
+
+ // The set is backed by the map so changes to one are reflected by the
+ // other.
+ enumSizeMap.put(Size.Big, 3);
+ assertTrue("Returned false for contained object", set
+ .contains(Size.Big));
+ enumSizeMap.remove(Size.Big);
+ assertFalse("Returned true for uncontained object", set
+ .contains(Size.Big));
+
+ assertEquals("Wrong size", 1, set.size());
+ set.clear();
+ assertEquals("Wrong size", 0, set.size());
+
+ enumSizeMap = new EnumMap(Size.class);
+ enumSizeMap.put(Size.Middle, 1);
+ enumSizeMap.put(Size.Big, null);
+ set = enumSizeMap.keySet();
+ Collection c = new ArrayList();
+ c.add(Size.Big);
+ assertTrue("Should return true", set.containsAll(c));
+ c.add(Size.Small);
+ assertFalse("Should return false", set.containsAll(c));
+ assertTrue("Should return true", set.removeAll(c));
+ assertEquals("Wrong size", 1, set.size());
+ assertFalse("Should return false", set.removeAll(c));
+ assertEquals("Wrong size", 1, set.size());
+ try {
+ set.addAll(c);
+ fail("Should throw UnsupportedOperationException");
+ } catch (UnsupportedOperationException e) {
+ // Expected
+ }
+
+ enumSizeMap.put(Size.Big, null);
+ assertEquals("Wrong size", 2, set.size());
+ assertTrue("Should return true", set.retainAll(c));
+ assertEquals("Wrong size", 1, set.size());
+ assertFalse("Should return false", set.retainAll(c));
+ assertEquals(1, set.size());
+ Object[] array = set.toArray();
+ assertEquals("Wrong length", 1, array.length);
+ assertEquals("Wrong key", Size.Big, array[0]);
+
+ enumSizeMap = new EnumMap(Size.class);
+ enumSizeMap.put(Size.Middle, 1);
+ enumSizeMap.put(Size.Big, null);
+ set = enumSizeMap.keySet();
+ c = new ArrayList();
+ c.add(Color.Blue);
+ assertFalse("Should return false", set.remove(c));
+ assertEquals("Wrong size", 2, set.size());
+ assertTrue("Should return true", set.retainAll(c));
+ assertEquals("Wrong size", 0, set.size());
+
+ enumSizeMap = new EnumMap(Size.class);
+ enumSizeMap.put(Size.Middle, 1);
+ enumSizeMap.put(Size.Big, null);
+ set = enumSizeMap.keySet();
+
+ Iterator iter = set.iterator();
+ Enum enumKey = (Enum) iter.next();
+ assertTrue("Returned false for contained object", set.contains(enumKey));
+ enumKey = (Enum) iter.next();
+ assertTrue("Returned false for contained object", set.contains(enumKey));
+
+ enumSizeMap.remove(Size.Big);
+ assertFalse("Returned true for uncontained object", set
+ .contains(enumKey));
+ iter.remove();
+ try {
+ iter.remove();
+ fail("Should throw IllegalStateException");
+ } catch (IllegalStateException e) {
+ // Expected
+ }
+ assertFalse("Returned true for uncontained object", set
+ .contains(enumKey));
+
+ iter = set.iterator();
+ enumKey = (Enum) iter.next();
+ assertTrue("Returned false for contained object", set.contains(enumKey));
+ enumSizeMap.put(Size.Middle, 3);
+ assertTrue("Returned false for contained object", set.contains(enumKey));
+
+ enumSizeMap = new EnumMap(Size.class);
+ enumSizeMap.put(Size.Middle, 1);
+ enumSizeMap.put(Size.Big, null);
+ set = enumSizeMap.keySet();
+ iter = set.iterator();
+ try {
+ iter.remove();
+ fail("Should throw IllegalStateException");
+ } catch (IllegalStateException e) {
+ // Expected
+ }
+ enumKey = (Enum) iter.next();
+ assertEquals("Wrong key", Size.Middle, enumKey);
+ assertSame("Wrong key", Size.Middle, enumKey);
+ assertFalse("Returned true for unequal object", iter.equals(enumKey));
+ iter.remove();
+ assertFalse("Returned true for uncontained object", set
+ .contains(enumKey));
+ try {
+ iter.remove();
+ fail("Should throw IllegalStateException");
+ } catch (IllegalStateException e) {
+ // Expected
+ }
+
+ assertEquals("Wrong size", 1, set.size());
+ enumKey = (Enum) iter.next();
+ assertEquals("Wrong key", Size.Big, enumKey);
+ iter.remove();
+ try {
+ iter.next();
+ fail("Should throw NoSuchElementException");
+ } catch (NoSuchElementException e) {
+ // Expected
+ }
+ }
+
+ /**
+ * java.util.EnumMap#get(Object)
+ */
+ @SuppressWarnings({ "unchecked", "boxing" })
+ public void test_getLjava_lang_Object() {
+ EnumMap enumSizeMap = new EnumMap(Size.class);
+ assertNull("Get returned non-null for non mapped key", enumSizeMap
+ .get(Size.Big));
+ enumSizeMap.put(Size.Big, 1);
+ assertEquals("Get returned incorrect value for given key", 1,
+ enumSizeMap.get(Size.Big));
+
+ assertNull("Get returned non-null for non mapped key", enumSizeMap
+ .get(Size.Small));
+ assertNull("Get returned non-null for non existent key", enumSizeMap
+ .get(Color.Red));
+ assertNull("Get returned non-null for non existent key", enumSizeMap
+ .get(new Integer(1)));
+ assertNull("Get returned non-null for non existent key", enumSizeMap
+ .get(null));
+
+ EnumMap enumColorMap = new EnumMap<Color, Double>(Color.class);
+ assertNull("Get returned non-null for non mapped key", enumColorMap
+ .get(Color.Green));
+ enumColorMap.put(Color.Green, 2);
+ assertEquals("Get returned incorrect value for given key", 2,
+ enumColorMap.get(Color.Green));
+ assertNull("Get returned non-null for non mapped key", enumColorMap
+ .get(Color.Blue));
+
+ enumColorMap.put(Color.Green, new Double(4));
+ assertEquals("Get returned incorrect value for given key",
+ new Double(4), enumColorMap.get(Color.Green));
+ enumColorMap.put(Color.Green, new Integer("3"));
+ assertEquals("Get returned incorrect value for given key", new Integer(
+ "3"), enumColorMap.get(Color.Green));
+ enumColorMap.put(Color.Green, null);
+ assertNull("Can not handle null value", enumColorMap.get(Color.Green));
+ Float f = new Float("3.4");
+ enumColorMap.put(Color.Green, f);
+ assertSame("Get returned incorrect value for given key", f,
+ enumColorMap.get(Color.Green));
+ }
+
+ /**
+ * java.util.EnumMap#put(Object,Object)
+ */
+ public void test_putLjava_lang_ObjectLjava_lang_Object() {
+ EnumMap enumSizeMap = new EnumMap(Size.class);
+ try {
+ enumSizeMap.put(Color.Red, 2);
+ fail("Expected ClassCastException");
+ } catch (ClassCastException e) {
+ // Expected
+ }
+ assertNull("Return non-null for non mapped key", enumSizeMap.put(
+ Size.Small, 1));
+
+ EnumMap enumColorMap = new EnumMap<Color, Double>(Color.class);
+ try {
+ enumColorMap.put(Size.Big, 2);
+ fail("Expected ClassCastException");
+ } catch (ClassCastException e) {
+ // Expected
+ }
+ try {
+ enumColorMap.put(null, 2);
+ fail("Expected NullPointerException");
+ } catch (NullPointerException e) {
+ // Expected
+ }
+ assertNull("Return non-null for non mapped key", enumColorMap.put(
+ Color.Green, 2));
+ assertEquals("Return wrong value", 2, enumColorMap.put(Color.Green,
+ new Double(4)));
+ assertEquals("Return wrong value", new Double(4), enumColorMap.put(
+ Color.Green, new Integer("3")));
+ assertEquals("Return wrong value", new Integer("3"), enumColorMap.put(
+ Color.Green, null));
+ Float f = new Float("3.4");
+ assertNull("Return non-null for non mapped key", enumColorMap.put(
+ Color.Green, f));
+ assertNull("Return non-null for non mapped key", enumColorMap.put(
+ Color.Blue, 2));
+ assertEquals("Return wrong value", 2, enumColorMap.put(Color.Blue,
+ new Double(4)));
+ }
+
+ /**
+ * java.util.EnumMap#putAll(Map)
+ */
+ @SuppressWarnings({ "unchecked", "boxing" })
+ public void test_putAllLjava_util_Map() {
+ EnumMap enumColorMap = new EnumMap<Color, Double>(Color.class);
+ enumColorMap.put(Color.Green, 2);
+
+ EnumMap enumSizeMap = new EnumMap(Size.class);
+ enumColorMap.putAll(enumSizeMap);
+
+ enumSizeMap.put(Size.Big, 1);
+ try {
+ enumColorMap.putAll(enumSizeMap);
+ fail("Expected ClassCastException");
+ } catch (ClassCastException e) {
+ // Expected
+ }
+
+ EnumMap enumColorMap1 = new EnumMap<Color, Double>(Color.class);
+ enumColorMap1.put(Color.Blue, 3);
+ enumColorMap.putAll(enumColorMap1);
+ assertEquals("Get returned incorrect value for given key", 3,
+ enumColorMap.get(Color.Blue));
+ assertEquals("Wrong Size", 2, enumColorMap.size());
+
+ enumColorMap = new EnumMap<Color, Double>(Color.class);
+
+ HashMap hashColorMap = null;
+ try {
+ enumColorMap.putAll(hashColorMap);
+ fail("Expected NullPointerException");
+ } catch (NullPointerException e) {
+ // Expected
+ }
+
+ hashColorMap = new HashMap();
+ enumColorMap.putAll(hashColorMap);
+
+ hashColorMap.put(Color.Green, 2);
+ enumColorMap.putAll(hashColorMap);
+ assertEquals("Get returned incorrect value for given key", 2,
+ enumColorMap.get(Color.Green));
+ assertNull("Get returned non-null for non mapped key", enumColorMap
+ .get(Color.Red));
+ hashColorMap.put(Color.Red, new Integer(1));
+ enumColorMap.putAll(hashColorMap);
+ assertEquals("Get returned incorrect value for given key", new Integer(
+ 2), enumColorMap.get(Color.Green));
+ hashColorMap.put(Size.Big, 3);
+ try {
+ enumColorMap.putAll(hashColorMap);
+ fail("Expected ClassCastException");
+ } catch (ClassCastException e) {
+ // Expected
+ }
+
+ hashColorMap = new HashMap();
+ hashColorMap.put(new Integer(1), 1);
+ try {
+ enumColorMap.putAll(hashColorMap);
+ fail("Expected ClassCastException");
+ } catch (ClassCastException e) {
+ // Expected
+ }
+ }
+
+ /**
+ * java.util.EnumMap#remove(Object)
+ */
+ @SuppressWarnings({ "unchecked", "boxing" })
+ public void test_removeLjava_lang_Object() {
+ EnumMap enumSizeMap = new EnumMap(Size.class);
+ assertNull("Remove of non-mapped key returned non-null", enumSizeMap
+ .remove(Size.Big));
+ enumSizeMap.put(Size.Big, 3);
+ enumSizeMap.put(Size.Middle, 2);
+
+ assertNull("Get returned non-null for non mapped key", enumSizeMap
+ .get(Size.Small));
+ assertEquals("Remove returned incorrect value", 3, enumSizeMap
+ .remove(Size.Big));
+ assertNull("Get returned non-null for non mapped key", enumSizeMap
+ .get(Size.Big));
+ assertNull("Remove of non-mapped key returned non-null", enumSizeMap
+ .remove(Size.Big));
+ assertNull("Remove of non-existent key returned non-null", enumSizeMap
+ .remove(Color.Red));
+ assertNull("Remove of non-existent key returned non-null", enumSizeMap
+ .remove(new Double(4)));
+ assertNull("Remove of non-existent key returned non-null", enumSizeMap
+ .remove(null));
+
+ EnumMap enumColorMap = new EnumMap<Color, Double>(Color.class);
+ assertNull("Get returned non-null for non mapped key", enumColorMap
+ .get(Color.Green));
+ enumColorMap.put(Color.Green, new Double(4));
+ assertEquals("Remove returned incorrect value", new Double(4),
+ enumColorMap.remove(Color.Green));
+ assertNull("Get returned non-null for non mapped key", enumColorMap
+ .get(Color.Green));
+ enumColorMap.put(Color.Green, null);
+ assertNull("Can not handle null value", enumColorMap
+ .remove(Color.Green));
+ assertNull("Get returned non-null for non mapped key", enumColorMap
+ .get(Color.Green));
+ }
+
+ /**
+ * java.util.EnumMap#size()
+ */
+ @SuppressWarnings({ "unchecked", "boxing" })
+ public void test_size() {
+ EnumMap enumSizeMap = new EnumMap(Size.class);
+ assertEquals("Wrong size", 0, enumSizeMap.size());
+ enumSizeMap.put(Size.Small, 1);
+ assertEquals("Wrong size", 1, enumSizeMap.size());
+ enumSizeMap.put(Size.Small, 0);
+ assertEquals("Wrong size", 1, enumSizeMap.size());
+ try {
+ enumSizeMap.put(Color.Red, 2);
+ fail("Expected ClassCastException");
+ } catch (ClassCastException e) {
+ // Expected
+ }
+ assertEquals("Wrong size", 1, enumSizeMap.size());
+
+ enumSizeMap.put(Size.Middle, null);
+ assertEquals("Wrong size", 2, enumSizeMap.size());
+ enumSizeMap.remove(Size.Big);
+ assertEquals("Wrong size", 2, enumSizeMap.size());
+ enumSizeMap.remove(Size.Middle);
+ assertEquals("Wrong size", 1, enumSizeMap.size());
+ enumSizeMap.remove(Color.Green);
+ assertEquals("Wrong size", 1, enumSizeMap.size());
+
+ EnumMap enumColorMap = new EnumMap<Color, Double>(Color.class);
+ enumColorMap.put(Color.Green, 2);
+ assertEquals("Wrong size", 1, enumColorMap.size());
+ enumColorMap.remove(Color.Green);
+ assertEquals("Wrong size", 0, enumColorMap.size());
+
+ EnumMap enumEmptyMap = new EnumMap<Empty, Double>(Empty.class);
+ assertEquals("Wrong size", 0, enumEmptyMap.size());
+ }
+
+ /**
+ * java.util.EnumMap#values()
+ */
+ @SuppressWarnings( { "unchecked", "boxing" })
+ public void test_values() {
+ EnumMap enumColorMap = new EnumMap<Color, Double>(Color.class);
+ enumColorMap.put(Color.Red, 1);
+ enumColorMap.put(Color.Blue, null);
+ Collection collection = enumColorMap.values();
+
+ Collection collection1 = enumColorMap.values();
+ assertSame("Should be same", collection1, collection);
+ try {
+ collection.add(new Integer(1));
+ fail("Should throw UnsupportedOperationException");
+ } catch (UnsupportedOperationException e) {
+ // Expected
+ }
+
+ assertTrue("Returned false for contained object", collection
+ .contains(1));
+ assertTrue("Returned false for contained object", collection
+ .contains(null));
+ assertFalse("Returned true for uncontained object", collection
+ .contains(2));
+
+ assertTrue("Returned false when the object can be removed", collection
+ .remove(null));
+ assertFalse("Returned true for uncontained object", collection
+ .contains(null));
+ assertFalse("Returned true when the object can not be removed",
+ collection.remove(null));
+
+ // The set is backed by the map so changes to one are reflected by the
+ // other.
+ enumColorMap.put(Color.Blue, 3);
+ assertTrue("Returned false for contained object", collection
+ .contains(3));
+ enumColorMap.remove(Color.Blue);
+ assertFalse("Returned true for uncontained object", collection
+ .contains(3));
+
+ assertEquals("Wrong size", 1, collection.size());
+ collection.clear();
+ assertEquals("Wrong size", 0, collection.size());
+
+ enumColorMap = new EnumMap<Color, Double>(Color.class);
+ enumColorMap.put(Color.Red, 1);
+ enumColorMap.put(Color.Blue, null);
+ collection = enumColorMap.values();
+ Collection c = new ArrayList();
+ c.add(new Integer(1));
+ assertTrue("Should return true", collection.containsAll(c));
+ c.add(new Double(3.4));
+ assertFalse("Should return false", collection.containsAll(c));
+ assertTrue("Should return true", collection.removeAll(c));
+ assertEquals("Wrong size", 1, collection.size());
+ assertFalse("Should return false", collection.removeAll(c));
+ assertEquals("Wrong size", 1, collection.size());
+ try {
+ collection.addAll(c);
+ fail("Should throw UnsupportedOperationException");
+ } catch (UnsupportedOperationException e) {
+ // Expected
+ }
+
+ enumColorMap.put(Color.Red, 1);
+ assertEquals("Wrong size", 2, collection.size());
+ assertTrue("Should return true", collection.retainAll(c));
+ assertEquals("Wrong size", 1, collection.size());
+ assertFalse("Should return false", collection.retainAll(c));
+ assertEquals(1, collection.size());
+ Object[] array = collection.toArray();
+ assertEquals("Wrong length", 1, array.length);
+ assertEquals("Wrong key", 1, array[0]);
+
+ enumColorMap = new EnumMap<Color, Double>(Color.class);
+ enumColorMap.put(Color.Red, 1);
+ enumColorMap.put(Color.Blue, null);
+ collection = enumColorMap.values();
+
+ assertEquals("Wrong size", 2, collection.size());
+ assertFalse("Returned true when the object can not be removed",
+ collection.remove(new Integer("10")));
+
+ Iterator iter = enumColorMap.values().iterator();
+ Object value = iter.next();
+ assertTrue("Returned false for contained object", collection
+ .contains(value));
+ value = iter.next();
+ assertTrue("Returned false for contained object", collection
+ .contains(value));
+
+ enumColorMap.put(Color.Green, 1);
+ enumColorMap.remove(Color.Blue);
+ assertFalse("Returned true for uncontained object", collection
+ .contains(value));
+ iter.remove();
+ try {
+ iter.remove();
+ fail("Should throw IllegalStateException");
+ } catch (IllegalStateException e) {
+ // Expected
+ }
+ assertFalse("Returned true for uncontained object", collection
+ .contains(value));
+
+ iter = enumColorMap.values().iterator();
+ value = iter.next();
+ assertTrue("Returned false for contained object", collection
+ .contains(value));
+ enumColorMap.put(Color.Green, 3);
+ assertTrue("Returned false for contained object", collection
+ .contains(value));
+ assertTrue("Returned false for contained object", collection
+ .remove(new Integer("1")));
+ assertEquals("Wrong size", 1, collection.size());
+ collection.clear();
+ assertEquals("Wrong size", 0, collection.size());
+
+ enumColorMap = new EnumMap<Color, Double>(Color.class);
+ Integer integer1 = new Integer(1);
+ enumColorMap.put(Color.Green, integer1);
+ enumColorMap.put(Color.Blue, null);
+ collection = enumColorMap.values();
+ iter = enumColorMap.values().iterator();
+ try {
+ iter.remove();
+ fail("Should throw IllegalStateException");
+ } catch (IllegalStateException e) {
+ // Expected
+ }
+ value = iter.next();
+ assertEquals("Wrong value", integer1, value);
+ assertSame("Wrong value", integer1, value);
+ assertFalse("Returned true for unequal object", iter.equals(value));
+ iter.remove();
+ assertFalse("Returned true for unequal object", iter.equals(value));
+ try {
+ iter.remove();
+ fail("Should throw IllegalStateException");
+ } catch (IllegalStateException e) {
+ // Expected
+ }
+ assertEquals("Wrong size", 1, collection.size());
+ value = iter.next();
+ assertFalse("Returned true for unequal object", iter.equals(value));
+ iter.remove();
+ try {
+ iter.next();
+ fail("Should throw NoSuchElementException");
+ } catch (NoSuchElementException e) {
+ // Expected
+ }
+ }
+
+ /**
+ * serialization/deserialization.
+ */
+ @SuppressWarnings({ "unchecked", "boxing" })
+ public void testSerializationSelf() throws Exception {
+ EnumMap enumColorMap = new EnumMap<Color, Double>(Color.class);
+ enumColorMap.put(Color.Blue, 3);
+ SerializationTest.verifySelf(enumColorMap);
+ }
+
+ /**
+ * serialization/deserialization compatibility with RI.
+ */
+ @SuppressWarnings({ "unchecked", "boxing" })
+ public void testSerializationCompatibility() throws Exception {
+ EnumMap enumColorMap = new EnumMap<Color, Double>(Color.class);
+ enumColorMap.put(Color.Red, 1);
+ enumColorMap.put(Color.Blue, 3);
+ SerializationTest.verifyGolden(this, enumColorMap);
+ }
+
+ /**
+ * Sets up the fixture.
+ */
+ @Override
+ protected void setUp() throws Exception {
+ super.setUp();
+ }
+
+ /**
+ * Tears down the fixture.
+ */
+ @Override
+ protected void tearDown() throws Exception{
+ super.tearDown();
+ }
+}