1f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* 2f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * Licensed to the Apache Software Foundation (ASF) under one or more 3f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * contributor license agreements. See the NOTICE file distributed with 4f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * this work for additional information regarding copyright ownership. 5f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * The ASF licenses this file to You under the Apache License, Version 2.0 6f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * (the "License"); you may not use this file except in compliance with 7f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * the License. You may obtain a copy of the License at 8f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * 9f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * http://www.apache.org/licenses/LICENSE-2.0 10f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * 11f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * Unless required by applicable law or agreed to in writing, software 12f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * distributed under the License is distributed on an "AS IS" BASIS, 13f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 14f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * See the License for the specific language governing permissions and 15f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * limitations under the License. 16f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 17f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 18f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Projectpackage tests.api.java.util; 19f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 20f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Projectimport dalvik.annotation.TestTargetNew; 21f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Projectimport dalvik.annotation.TestLevel; 22f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Projectimport dalvik.annotation.TestTargetClass; 23f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 24f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Projectimport java.util.AbstractMap; 25f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Projectimport java.util.AbstractSet; 2672e7c5a8d32494c81206971d4c1077e3f2b88f00Jesse Wilsonimport java.util.Collection; 27f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Projectimport java.util.Collections; 28f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Projectimport java.util.Comparator; 29f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Projectimport java.util.HashMap; 30f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Projectimport java.util.HashSet; 31f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Projectimport java.util.Hashtable; 32f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Projectimport java.util.IdentityHashMap; 33f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Projectimport java.util.Iterator; 34f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Projectimport java.util.LinkedHashMap; 35f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Projectimport java.util.Map; 36f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Projectimport java.util.Set; 37f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Projectimport java.util.TreeMap; 38f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Projectimport java.util.Vector; 39f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Projectimport java.util.WeakHashMap; 40f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 41f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project@TestTargetClass(AbstractMap.class) 42f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Projectpublic class AbstractMapTest extends junit.framework.TestCase { 43f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 44f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project static final String specialKey = "specialKey".intern(); 45f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 46f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project static final String specialValue = "specialValue".intern(); 47f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 48f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project // The impl of MyMap is not realistic, but serves to create a type 49f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project // that uses the default remove behavior. 50f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project class MyMap extends AbstractMap { 51f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project final Set mySet = new HashSet(1); 52f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 53f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project MyMap() { 54f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project mySet.add(new Map.Entry() { 55f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project public Object getKey() { 56f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project return specialKey; 57f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project } 58f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 59f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project public Object getValue() { 60f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project return specialValue; 61f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project } 62f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 63f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project public Object setValue(Object object) { 64f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project return null; 65f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project } 66f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project }); 67f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project } 68f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 69f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project public Object put(Object key, Object value) { 70f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project return null; 71f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project } 72f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 73f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project public Set entrySet() { 74f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project return mySet; 75f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project } 76f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project } 77f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 78f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /** 79f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * @tests java.util.AbstractMap#keySet() 80f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 81f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project @TestTargetNew( 82f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project level = TestLevel.PARTIAL_COMPLETE, 83f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project notes = "Doesn't verify returned set of keys.", 84f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project method = "keySet", 85f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project args = {} 86f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project ) 87f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project public void test_keySet() { 88f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project AbstractMap map1 = new HashMap(0); 89f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project assertSame("HashMap(0)", map1.keySet(), map1.keySet()); 90f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 91f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project AbstractMap map2 = new HashMap(10); 92f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project assertSame("HashMap(10)", map2.keySet(), map2.keySet()); 93f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 94f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project Map map3 = Collections.EMPTY_MAP; 95f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project assertSame("EMPTY_MAP", map3.keySet(), map3.keySet()); 96f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 97f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project AbstractMap map4 = new IdentityHashMap(1); 98f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project assertSame("IdentityHashMap", map4.keySet(), map4.keySet()); 99f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 100f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project AbstractMap map5 = new LinkedHashMap(122); 101f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project assertSame("LinkedHashMap", map5.keySet(), map5.keySet()); 102f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 103f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project AbstractMap map6 = new TreeMap(); 104f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project assertSame("TreeMap", map6.keySet(), map6.keySet()); 105f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 106f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project AbstractMap map7 = new WeakHashMap(); 107f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project assertSame("WeakHashMap", map7.keySet(), map7.keySet()); 108f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project } 109f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 110f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /** 111f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * @tests java.util.AbstractMap#remove(java.lang.Object) 112f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 113f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project @TestTargetNew( 114f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project level = TestLevel.PARTIAL_COMPLETE, 115f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project notes = "Doesn't verify UnsupportedOperationException.", 116f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project method = "remove", 117f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project args = {java.lang.Object.class} 118f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project ) 119f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project public void test_removeLjava_lang_Object() { 120f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project Object key = new Object(); 121f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project Object value = new Object(); 122f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 123f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project AbstractMap map1 = new HashMap(0); 124f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project map1.put("key", value); 125f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project assertSame("HashMap(0)", map1.remove("key"), value); 126f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 127f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project AbstractMap map4 = new IdentityHashMap(1); 128f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project map4.put(key, value); 129f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project assertSame("IdentityHashMap", map4.remove(key), value); 130f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 131f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project AbstractMap map5 = new LinkedHashMap(122); 132f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project map5.put(key, value); 133f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project assertSame("LinkedHashMap", map5.remove(key), value); 134f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 135f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project AbstractMap map6 = new TreeMap(new Comparator() { 136f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project // Bogus comparator 137f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project public int compare(Object object1, Object object2) { 138f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project return 0; 139f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project } 140f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project }); 141f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project map6.put(key, value); 142f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project assertSame("TreeMap", map6.remove(key), value); 143f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 144f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project AbstractMap map7 = new WeakHashMap(); 145f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project map7.put(key, value); 146f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project assertSame("WeakHashMap", map7.remove(key), value); 147f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 148f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project AbstractMap aSpecialMap = new MyMap(); 149f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project aSpecialMap.put(specialKey, specialValue); 150f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project Object valueOut = aSpecialMap.remove(specialKey); 151f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project assertSame("MyMap", valueOut, specialValue); 152f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project } 153f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 154f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /** 155f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * @tests java.util.AbstractMap#values() 156f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 157f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project @TestTargetNew( 158f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project level = TestLevel.PARTIAL_COMPLETE, 159f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project notes = "Doesn't verify returned Collection.", 160f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project method = "values", 161f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project args = {} 162f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project ) 163f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project public void test_values() { 164f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project AbstractMap map1 = new HashMap(0); 165f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project assertSame("HashMap(0)", map1.values(), map1.values()); 166f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 167f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project AbstractMap map2 = new HashMap(10); 168f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project assertSame("HashMap(10)", map2.values(), map2.values()); 169f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 170f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project Map map3 = Collections.EMPTY_MAP; 171f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project assertSame("EMPTY_MAP", map3.values(), map3.values()); 172f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 173f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project AbstractMap map4 = new IdentityHashMap(1); 174f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project assertSame("IdentityHashMap", map4.values(), map4.values()); 175f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 176f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project AbstractMap map5 = new LinkedHashMap(122); 177f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project assertSame("IdentityHashMap", map5.values(), map5.values()); 178f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 179f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project AbstractMap map6 = new TreeMap(); 180f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project assertSame("TreeMap", map6.values(), map6.values()); 181f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 182f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project AbstractMap map7 = new WeakHashMap(); 183f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project assertSame("WeakHashMap", map7.values(), map7.values()); 184f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project } 185f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 186f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /** 187f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * @tests java.util.AbstractMap#clone() 188f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 189f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project @TestTargetNew( 190f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project level = TestLevel.PARTIAL_COMPLETE, 191f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project notes = "Doesn't verify CloneNotSupportedException.", 192f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project method = "clone", 193f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project args = {} 194f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project ) 195f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project public void test_clone() { 196f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project class MyMap extends AbstractMap implements Cloneable { 197f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project private Map map = new HashMap(); 198f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 199f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project public Set entrySet() { 200f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project return map.entrySet(); 201f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project } 202f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 203f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project public Object put(Object key, Object value) { 204f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project return map.put(key, value); 205f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project } 206f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 207f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project public Map getMap() { 208f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project return map; 209f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project } 210f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 211f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project public Object clone() { 212f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project try { 213f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project return super.clone(); 214f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project } catch (CloneNotSupportedException e) { 215a0ebf91e58c17487a8bd1be6e64193193deae26fJesse Wilson throw new AssertionError(e); // android-changed 216f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project } 217f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project } 218f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project } 219f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project ; 220f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project MyMap map = new MyMap(); 221f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project map.put("one", "1"); 222f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project Map.Entry entry = (Map.Entry) map.entrySet().iterator().next(); 223f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project assertTrue("entry not added", entry.getKey() == "one" 224f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project && entry.getValue() == "1"); 225f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project MyMap mapClone = (MyMap) map.clone(); 226f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project assertTrue("clone not shallow", map.getMap() == mapClone.getMap()); 227f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project } 228f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 229f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project public class AMT extends AbstractMap { 230f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 231f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project // Very crude AbstractMap implementation 232f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project Vector values = new Vector(); 233f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project Vector keys = new Vector(); 234f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 235f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project public Set entrySet() { 236f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project return new AbstractSet() { 237f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project public Iterator iterator() { 238f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project return new Iterator() { 239f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project int index = 0; 240f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 241f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project public boolean hasNext() { 242f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project return index < values.size(); 243f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project } 244f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 245f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project public Object next() { 246f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project if (index < values.size()) { 247f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project Map.Entry me = new Map.Entry() { 248f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project Object v = values.elementAt(index); 249f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 250f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project Object k = keys.elementAt(index); 251f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 252f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project public Object getKey() { 253f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project return k; 254f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project } 255f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 256f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project public Object getValue() { 257f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project return v; 258f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project } 259f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 260f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project public Object setValue(Object value) { 261f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project return null; 262f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project } 263f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project }; 264f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project index++; 265f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project return me; 266f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project } 267f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project return null; 268f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project } 269f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 270f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project public void remove() { 271f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project } 272f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project }; 273f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project } 274f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 275f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project public int size() { 276f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project return values.size(); 277f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project } 278f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project }; 279f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project } 280f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 281f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project public Object put(Object k, Object v) { 282f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project keys.add(k); 283f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project values.add(v); 284f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project return v; 285f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project } 286f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project } 287f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 288f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /** 289f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * @tests {@link java.util.AbstractMap#putAll(Map)} 290f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 291f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project @TestTargetNew( 292f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project level = TestLevel.PARTIAL_COMPLETE, 293f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project notes = "Doesn't verify exceptions.", 294f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project method = "putAll", 295f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project args = {java.util.Map.class} 296f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project ) 297f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project public void test_putAllLMap() { 298f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project Hashtable ht = new Hashtable(); 299f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project AMT amt = new AMT(); 300f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project ht.put("this", "that"); 301f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project amt.putAll(ht); 302f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 303f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project assertEquals("Should be equal", amt, ht); 304f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project } 305f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 30672e7c5a8d32494c81206971d4c1077e3f2b88f00Jesse Wilson public void testEqualsWithNullValues() { 30772e7c5a8d32494c81206971d4c1077e3f2b88f00Jesse Wilson Map<String, String> a = new HashMap<String, String>(); 30872e7c5a8d32494c81206971d4c1077e3f2b88f00Jesse Wilson a.put("a", null); 30972e7c5a8d32494c81206971d4c1077e3f2b88f00Jesse Wilson a.put("b", null); 31072e7c5a8d32494c81206971d4c1077e3f2b88f00Jesse Wilson 31172e7c5a8d32494c81206971d4c1077e3f2b88f00Jesse Wilson Map<String, String> b = new HashMap<String, String>(); 31272e7c5a8d32494c81206971d4c1077e3f2b88f00Jesse Wilson a.put("c", "cat"); 31372e7c5a8d32494c81206971d4c1077e3f2b88f00Jesse Wilson a.put("d", "dog"); 31472e7c5a8d32494c81206971d4c1077e3f2b88f00Jesse Wilson 31572e7c5a8d32494c81206971d4c1077e3f2b88f00Jesse Wilson assertFalse(a.equals(b)); 31672e7c5a8d32494c81206971d4c1077e3f2b88f00Jesse Wilson assertFalse(b.equals(a)); 31772e7c5a8d32494c81206971d4c1077e3f2b88f00Jesse Wilson } 31872e7c5a8d32494c81206971d4c1077e3f2b88f00Jesse Wilson 31972e7c5a8d32494c81206971d4c1077e3f2b88f00Jesse Wilson public void testNullsOnViews() { 32072e7c5a8d32494c81206971d4c1077e3f2b88f00Jesse Wilson Map<String, String> nullHostile = new Hashtable<String, String>(); 32172e7c5a8d32494c81206971d4c1077e3f2b88f00Jesse Wilson 32272e7c5a8d32494c81206971d4c1077e3f2b88f00Jesse Wilson nullHostile.put("a", "apple"); 32372e7c5a8d32494c81206971d4c1077e3f2b88f00Jesse Wilson testNullsOnView(nullHostile.entrySet()); 32472e7c5a8d32494c81206971d4c1077e3f2b88f00Jesse Wilson 32572e7c5a8d32494c81206971d4c1077e3f2b88f00Jesse Wilson nullHostile.put("a", "apple"); 32672e7c5a8d32494c81206971d4c1077e3f2b88f00Jesse Wilson testNullsOnView(nullHostile.keySet()); 32772e7c5a8d32494c81206971d4c1077e3f2b88f00Jesse Wilson 32872e7c5a8d32494c81206971d4c1077e3f2b88f00Jesse Wilson nullHostile.put("a", "apple"); 32972e7c5a8d32494c81206971d4c1077e3f2b88f00Jesse Wilson testNullsOnView(nullHostile.values()); 33072e7c5a8d32494c81206971d4c1077e3f2b88f00Jesse Wilson } 33172e7c5a8d32494c81206971d4c1077e3f2b88f00Jesse Wilson 33272e7c5a8d32494c81206971d4c1077e3f2b88f00Jesse Wilson private void testNullsOnView(Collection<?> view) { 33372e7c5a8d32494c81206971d4c1077e3f2b88f00Jesse Wilson try { 33472e7c5a8d32494c81206971d4c1077e3f2b88f00Jesse Wilson assertFalse(view.contains(null)); 33572e7c5a8d32494c81206971d4c1077e3f2b88f00Jesse Wilson } catch (NullPointerException optional) { 33672e7c5a8d32494c81206971d4c1077e3f2b88f00Jesse Wilson } 33772e7c5a8d32494c81206971d4c1077e3f2b88f00Jesse Wilson 33872e7c5a8d32494c81206971d4c1077e3f2b88f00Jesse Wilson try { 33972e7c5a8d32494c81206971d4c1077e3f2b88f00Jesse Wilson assertFalse(view.remove(null)); 34072e7c5a8d32494c81206971d4c1077e3f2b88f00Jesse Wilson } catch (NullPointerException optional) { 34172e7c5a8d32494c81206971d4c1077e3f2b88f00Jesse Wilson } 34272e7c5a8d32494c81206971d4c1077e3f2b88f00Jesse Wilson 34372e7c5a8d32494c81206971d4c1077e3f2b88f00Jesse Wilson Set<Object> setOfNull = Collections.singleton(null); 34472e7c5a8d32494c81206971d4c1077e3f2b88f00Jesse Wilson assertFalse(view.equals(setOfNull)); 34572e7c5a8d32494c81206971d4c1077e3f2b88f00Jesse Wilson 34672e7c5a8d32494c81206971d4c1077e3f2b88f00Jesse Wilson try { 34772e7c5a8d32494c81206971d4c1077e3f2b88f00Jesse Wilson assertFalse(view.removeAll(setOfNull)); 34872e7c5a8d32494c81206971d4c1077e3f2b88f00Jesse Wilson } catch (NullPointerException optional) { 34972e7c5a8d32494c81206971d4c1077e3f2b88f00Jesse Wilson } 35072e7c5a8d32494c81206971d4c1077e3f2b88f00Jesse Wilson 35172e7c5a8d32494c81206971d4c1077e3f2b88f00Jesse Wilson try { 35272e7c5a8d32494c81206971d4c1077e3f2b88f00Jesse Wilson assertTrue(view.retainAll(setOfNull)); // destructive 35372e7c5a8d32494c81206971d4c1077e3f2b88f00Jesse Wilson } catch (NullPointerException optional) { 35472e7c5a8d32494c81206971d4c1077e3f2b88f00Jesse Wilson } 35572e7c5a8d32494c81206971d4c1077e3f2b88f00Jesse Wilson } 35672e7c5a8d32494c81206971d4c1077e3f2b88f00Jesse Wilson 357f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project protected void setUp() { 358f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project } 359f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 360f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project protected void tearDown() { 361f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project } 362f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project} 363