1561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes/* 2561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes * Licensed to the Apache Software Foundation (ASF) under one or more 3561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes * contributor license agreements. See the NOTICE file distributed with 4561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes * this work for additional information regarding copyright ownership. 5561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes * The ASF licenses this file to You under the Apache License, Version 2.0 6561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes * (the "License"); you may not use this file except in compliance with 7561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes * the License. You may obtain a copy of the License at 8561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes * 9561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes * http://www.apache.org/licenses/LICENSE-2.0 10561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes * 11561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes * Unless required by applicable law or agreed to in writing, software 12561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes * distributed under the License is distributed on an "AS IS" BASIS, 13561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 14561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes * See the License for the specific language governing permissions and 15561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes * limitations under the License. 16561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes */ 17561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes 18561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughespackage org.apache.harmony.luni.tests.java.util; 19561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes 20561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughesimport java.util.AbstractMap; 21561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughesimport java.util.AbstractSet; 22561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughesimport java.util.Collection; 23561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughesimport java.util.Collections; 24561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughesimport java.util.Comparator; 25561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughesimport java.util.HashMap; 26561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughesimport java.util.HashSet; 27561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughesimport java.util.Hashtable; 28561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughesimport java.util.IdentityHashMap; 29561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughesimport java.util.Iterator; 30561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughesimport java.util.LinkedHashMap; 31561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughesimport java.util.Map; 32561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughesimport java.util.Set; 33561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughesimport java.util.TreeMap; 34561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughesimport java.util.Vector; 35561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughesimport java.util.WeakHashMap; 36561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes 37561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughespublic class AbstractMapTest extends junit.framework.TestCase { 38561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes 39561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes static final String specialKey = "specialKey".intern(); 40561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes 41561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes static final String specialValue = "specialValue".intern(); 42561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes 43561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes // The impl of MyMap is not realistic, but serves to create a type 44561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes // that uses the default remove behavior. 45561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes class MyMap extends AbstractMap { 46561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes final Set mySet = new HashSet(1); 47561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes 48561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes MyMap() { 49561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes mySet.add(new Map.Entry() { 50561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes public Object getKey() { 51561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes return specialKey; 52561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes } 53561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes 54561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes public Object getValue() { 55561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes return specialValue; 56561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes } 57561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes 58561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes public Object setValue(Object object) { 59561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes return null; 60561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes } 61561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes }); 62561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes } 63561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes 64561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes public Object put(Object key, Object value) { 65561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes return null; 66561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes } 67561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes 68561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes public Set entrySet() { 69561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes return mySet; 70561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes } 71561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes } 72561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes 73561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes /** 74561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes * @tests java.util.AbstractMap#keySet() 75561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes */ 76561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes public void test_keySet() { 77561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes AbstractMap map1 = new HashMap(0); 78561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes assertSame("HashMap(0)", map1.keySet(), map1.keySet()); 79561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes 80561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes AbstractMap map2 = new HashMap(10); 81561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes assertSame("HashMap(10)", map2.keySet(), map2.keySet()); 82561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes 83561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes Map map3 = Collections.EMPTY_MAP; 84561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes assertSame("EMPTY_MAP", map3.keySet(), map3.keySet()); 85561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes 86561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes AbstractMap map4 = new IdentityHashMap(1); 87561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes assertSame("IdentityHashMap", map4.keySet(), map4.keySet()); 88561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes 89561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes AbstractMap map5 = new LinkedHashMap(122); 90561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes assertSame("LinkedHashMap", map5.keySet(), map5.keySet()); 91561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes 92561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes AbstractMap map6 = new TreeMap(); 93561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes assertSame("TreeMap", map6.keySet(), map6.keySet()); 94561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes 95561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes AbstractMap map7 = new WeakHashMap(); 96561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes assertSame("WeakHashMap", map7.keySet(), map7.keySet()); 97561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes } 98561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes 99561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes /** 100561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes * @tests java.util.AbstractMap#remove(java.lang.Object) 101561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes */ 102561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes public void test_removeLjava_lang_Object() { 103561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes Object key = new Object(); 104561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes Object value = new Object(); 105561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes 106561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes AbstractMap map1 = new HashMap(0); 107561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes map1.put("key", value); 108561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes assertSame("HashMap(0)", map1.remove("key"), value); 109561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes 110561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes AbstractMap map4 = new IdentityHashMap(1); 111561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes map4.put(key, value); 112561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes assertSame("IdentityHashMap", map4.remove(key), value); 113561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes 114561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes AbstractMap map5 = new LinkedHashMap(122); 115561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes map5.put(key, value); 116561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes assertSame("LinkedHashMap", map5.remove(key), value); 117561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes 118561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes AbstractMap map6 = new TreeMap(new Comparator() { 119561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes // Bogus comparator 120561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes public int compare(Object object1, Object object2) { 121561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes return 0; 122561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes } 123561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes }); 124561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes map6.put(key, value); 125561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes assertSame("TreeMap", map6.remove(key), value); 126561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes 127561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes AbstractMap map7 = new WeakHashMap(); 128561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes map7.put(key, value); 129561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes assertSame("WeakHashMap", map7.remove(key), value); 130561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes 131561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes AbstractMap aSpecialMap = new MyMap(); 132561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes aSpecialMap.put(specialKey, specialValue); 133561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes Object valueOut = aSpecialMap.remove(specialKey); 134561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes assertSame("MyMap", valueOut, specialValue); 135561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes } 136561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes 137561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes /** 138561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes * @tests java.util.AbstractMap#clear() 139561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes */ 140561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes public void test_clear() { 141561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes // normal clear() 142561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes AbstractMap map = new HashMap(); 143561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes map.put(1, 1); 144561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes map.clear(); 145561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes assertTrue(map.isEmpty()); 146561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes 147561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes // Special entrySet return a Set with no clear method. 148561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes AbstractMap myMap = new MocAbstractMap(); 149561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes try { 150561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes myMap.clear(); 151561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes fail("Should throw UnsupportedOprationException"); 152561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes } catch (UnsupportedOperationException e) { 153561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes // expected 154561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes } 155561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes } 156561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes 157561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes class MocAbstractMap<K, V> extends AbstractMap { 158561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes 159561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes public Set entrySet() { 160561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes Set set = new MySet(); 161561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes return set; 162561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes } 163561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes 164561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes class MySet extends HashSet { 165561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes public void clear() { 166561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes throw new UnsupportedOperationException(); 167561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes } 168561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes } 169561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes } 170561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes 171561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes /** 172561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes * @tests java.util.AbstractMap#containsKey(Object) 173561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes */ 174561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes public void test_containsKey() { 175561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes AbstractMap map = new AMT(); 176561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes 177561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes assertFalse(map.containsKey("k")); 178561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes assertFalse(map.containsKey(null)); 179561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes 180561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes map.put("k", "v"); 181561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes map.put("key", null); 182561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes map.put(null, "value"); 183561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes map.put(null, null); 184561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes 185561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes assertTrue(map.containsKey("k")); 186561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes assertTrue(map.containsKey("key")); 187561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes assertTrue(map.containsKey(null)); 188561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes } 189561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes 190561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes /** 191561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes * @tests java.util.AbstractMap#containsValue(Object) 192561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes */ 193561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes public void test_containValue() { 194561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes AbstractMap map = new AMT(); 195561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes 196561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes assertFalse(map.containsValue("v")); 197561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes assertFalse(map.containsValue(null)); 198561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes 199561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes map.put("k", "v"); 200561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes map.put("key", null); 201561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes map.put(null, "value"); 202561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes 203561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes assertTrue(map.containsValue("v")); 204561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes assertTrue(map.containsValue("value")); 205561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes assertTrue(map.containsValue(null)); 206561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes } 207561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes 208561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes /** 209561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes * @tests java.util.AbstractMap#get(Object) 210561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes */ 211561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes public void test_get() { 212561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes AbstractMap map = new AMT(); 213561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes assertNull(map.get("key")); 214561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes assertNull(map.get(null)); 215561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes 216561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes map.put("k", "v"); 217561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes map.put("key", null); 218561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes map.put(null, "value"); 219561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes 220561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes assertEquals("v", map.get("k")); 221561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes assertNull(map.get("key")); 222561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes assertEquals("value", map.get(null)); 223561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes } 224561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes 225561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes /** 226561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes * @tests java.util.AbstractMap#values() 227561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes */ 228561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes public void test_values() { 229561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes AbstractMap map1 = new HashMap(0); 230561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes assertSame("HashMap(0)", map1.values(), map1.values()); 231561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes 232561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes AbstractMap map2 = new HashMap(10); 233561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes assertSame("HashMap(10)", map2.values(), map2.values()); 234561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes 235561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes Map map3 = Collections.EMPTY_MAP; 236561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes assertSame("EMPTY_MAP", map3.values(), map3.values()); 237561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes 238561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes AbstractMap map4 = new IdentityHashMap(1); 239561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes assertSame("IdentityHashMap", map4.values(), map4.values()); 240561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes 241561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes AbstractMap map5 = new LinkedHashMap(122); 242561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes assertSame("IdentityHashMap", map5.values(), map5.values()); 243561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes 244561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes AbstractMap map6 = new TreeMap(); 245561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes assertSame("TreeMap", map6.values(), map6.values()); 246561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes 247561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes AbstractMap map7 = new WeakHashMap(); 248561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes assertSame("WeakHashMap", map7.values(), map7.values()); 249561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes } 250561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes 251561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes /** 252561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes * @tests java.util.AbstractMap#clone() 253561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes */ 254561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes public void test_clone() { 255561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes class MyMap extends AbstractMap implements Cloneable { 256561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes private Map map = new HashMap(); 257561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes 258561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes public Set entrySet() { 259561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes return map.entrySet(); 260561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes } 261561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes 262561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes public Object put(Object key, Object value) { 263561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes return map.put(key, value); 264561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes } 265561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes 266561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes public Map getMap() { 267561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes return map; 268561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes } 269561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes 270561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes public Object clone() { 271561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes try { 272561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes return super.clone(); 273561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes } catch (CloneNotSupportedException e) { 274561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes return null; 275561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes } 276561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes } 277561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes } 278561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes ; 279561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes MyMap map = new MyMap(); 280561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes map.put("one", "1"); 281561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes Map.Entry entry = (Map.Entry) map.entrySet().iterator().next(); 282561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes assertTrue("entry not added", entry.getKey() == "one" 283561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes && entry.getValue() == "1"); 284561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes MyMap mapClone = (MyMap) map.clone(); 285561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes assertTrue("clone not shallow", map.getMap() == mapClone.getMap()); 286561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes } 287561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes 288561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes public class AMT extends AbstractMap { 289561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes 290561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes // Very crude AbstractMap implementation 291561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes Vector values = new Vector(); 292561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes 293561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes Vector keys = new Vector(); 294561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes 295561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes public Set entrySet() { 296561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes return new AbstractSet() { 297561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes public Iterator iterator() { 298561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes return new Iterator() { 299561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes int index = 0; 300561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes 301561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes public boolean hasNext() { 302561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes return index < values.size(); 303561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes } 304561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes 305561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes public Object next() { 306561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes if (index < values.size()) { 307561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes Map.Entry me = new Map.Entry() { 308561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes Object v = values.elementAt(index); 309561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes 310561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes Object k = keys.elementAt(index); 311561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes 312561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes public Object getKey() { 313561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes return k; 314561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes } 315561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes 316561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes public Object getValue() { 317561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes return v; 318561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes } 319561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes 320561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes public Object setValue(Object value) { 321561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes return null; 322561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes } 323561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes }; 324561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes index++; 325561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes return me; 326561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes } 327561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes return null; 328561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes } 329561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes 330561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes public void remove() { 331561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes } 332561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes }; 333561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes } 334561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes 335561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes public int size() { 336561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes return values.size(); 337561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes } 338561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes }; 339561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes } 340561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes 341561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes public Object put(Object k, Object v) { 342561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes keys.add(k); 343561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes values.add(v); 344561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes return v; 345561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes } 346561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes } 347561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes 348561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes /** 349561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes * @tests {@link java.util.AbstractMap#putAll(Map)} 350561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes */ 351561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes public void test_putAllLMap() { 352561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes Hashtable ht = new Hashtable(); 353561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes AMT amt = new AMT(); 354561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes ht.put("this", "that"); 355561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes amt.putAll(ht); 356561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes assertEquals("Should be equal", amt, ht); 357561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes } 358561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes 359561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes public void testEqualsWithNullValues() { 360561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes Map<String, String> a = new HashMap<String, String>(); 361561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes a.put("a", null); 362561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes a.put("b", null); 363561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes 364561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes Map<String, String> b = new HashMap<String, String>(); 365561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes a.put("c", "cat"); 366561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes a.put("d", "dog"); 367561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes 368561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes assertFalse(a.equals(b)); 369561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes assertFalse(b.equals(a)); 370561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes } 371561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes 372561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes public void testNullsOnViews() { 373561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes Map<String, String> nullHostile = new Hashtable<String, String>(); 374561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes 375561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes nullHostile.put("a", "apple"); 376561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes testNullsOnView(nullHostile.entrySet()); 377561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes 378561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes nullHostile.put("a", "apple"); 379561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes testNullsOnView(nullHostile.keySet()); 380561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes 381561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes nullHostile.put("a", "apple"); 382561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes testNullsOnView(nullHostile.values()); 383561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes } 384561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes 385561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes private void testNullsOnView(Collection<?> view) { 386561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes try { 387561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes assertFalse(view.contains(null)); 388561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes } catch (NullPointerException optional) { 389561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes } 390561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes 391561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes try { 392561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes assertFalse(view.remove(null)); 393561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes } catch (NullPointerException optional) { 394561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes } 395561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes 396561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes Set<Object> setOfNull = Collections.singleton(null); 397561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes assertFalse(view.equals(setOfNull)); 398561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes 399561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes try { 400561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes assertFalse(view.removeAll(setOfNull)); 401561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes } catch (NullPointerException optional) { 402561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes } 403561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes 404561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes try { 405561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes assertTrue(view.retainAll(setOfNull)); // destructive 406561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes } catch (NullPointerException optional) { 407561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes } 408561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes } 409561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes 410561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes protected void setUp() { 411561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes } 412561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes 413561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes protected void tearDown() { 414561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes } 415561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes} 416