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.lang.reflect.InvocationHandler; 21561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughesimport java.lang.reflect.Method; 22561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughesimport java.lang.reflect.Proxy; 23561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughesimport java.util.AbstractMap; 24561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughesimport java.util.ArrayList; 25561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughesimport java.util.Arrays; 26561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughesimport java.util.Collection; 27561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughesimport java.util.HashMap; 28561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughesimport java.util.Iterator; 29561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughesimport java.util.Map; 30561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughesimport java.util.Set; 31561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughesimport java.util.TreeMap; 32561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes 33561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughesimport org.apache.harmony.testframework.serialization.SerializationTest; 34561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes 35561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughesimport tests.support.Support_MapTest2; 36561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughesimport tests.support.Support_UnmodifiableCollectionTest; 37561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes 38561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughespublic class HashMapTest extends junit.framework.TestCase { 39561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes class MockMap extends AbstractMap { 40561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes public Set entrySet() { 41561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes return null; 42561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes } 43561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes public int size(){ 44561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes return 0; 45561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes } 46561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes } 47561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes 48561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes private static class MockMapNull extends AbstractMap { 49561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes public Set entrySet() { 50561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes return null; 51561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes } 52561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes 53561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes public int size() { 54561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes return 10; 55561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes } 56561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes } 57561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes 58561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes interface MockInterface { 59561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes public String mockMethod(); 60561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes } 61561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes 62561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes class MockClass implements MockInterface { 63561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes public String mockMethod() { 64561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes return "This is a MockClass"; 65561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes } 66561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes } 67561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes 68561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes class MockHandler implements InvocationHandler { 69561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes 70561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes Object obj; 71561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes 72561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes public MockHandler(Object o) { 73561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes obj = o; 74561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes } 75561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes 76561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes public Object invoke(Object proxy, Method m, Object[] args) 77561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes throws Throwable { 78561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes 79561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes Object result = null; 80561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes 81561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes try { 82561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes 83561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes result = m.invoke(obj, args); 84561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes 85561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes } catch (Exception e) { 86561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes e.printStackTrace(); 87561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes } finally { 88561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes 89561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes } 90561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes return result; 91561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes } 92561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes 93561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes } 94561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes 95561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes 96561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes HashMap hm; 97561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes 98561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes final static int hmSize = 1000; 99561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes 100561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes static Object[] objArray; 101561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes 102561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes static Object[] objArray2; 103561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes { 104561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes objArray = new Object[hmSize]; 105561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes objArray2 = new Object[hmSize]; 106561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes for (int i = 0; i < objArray.length; i++) { 107561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes objArray[i] = new Integer(i); 108561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes objArray2[i] = objArray[i].toString(); 109561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes } 110561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes } 111561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes 112561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes /** 113561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes * @tests java.util.HashMap#HashMap() 114561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes */ 115561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes public void test_Constructor() { 116561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes // Test for method java.util.HashMap() 117561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes new Support_MapTest2(new HashMap()).runTest(); 118561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes 119561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes HashMap hm2 = new HashMap(); 120561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes assertEquals("Created incorrect HashMap", 0, hm2.size()); 121561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes } 122561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes 123561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes /** 124561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes * @tests java.util.HashMap#HashMap(int) 125561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes */ 126561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes public void test_ConstructorI() { 127561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes // Test for method java.util.HashMap(int) 128561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes HashMap hm2 = new HashMap(5); 129561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes assertEquals("Created incorrect HashMap", 0, hm2.size()); 130561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes try { 131561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes new HashMap(-1); 132561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes } catch (IllegalArgumentException e) { 133561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes return; 134561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes } 135561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes fail( 136561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes "Failed to throw IllegalArgumentException for initial capacity < 0"); 137561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes 138561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes HashMap empty = new HashMap(0); 139561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes assertNull("Empty hashmap access", empty.get("nothing")); 140561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes empty.put("something", "here"); 141561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes assertTrue("cannot get element", empty.get("something") == "here"); 142561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes } 143561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes 144561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes /** 145561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes * @tests java.util.HashMap#HashMap(int, float) 146561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes */ 147561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes public void test_ConstructorIF() { 148561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes // Test for method java.util.HashMap(int, float) 149561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes HashMap hm2 = new HashMap(5, (float) 0.5); 150561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes assertEquals("Created incorrect HashMap", 0, hm2.size()); 151561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes try { 152561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes new HashMap(0, 0); 153561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes } catch (IllegalArgumentException e) { 154561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes return; 155561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes } 156561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes fail( 157561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes "Failed to throw IllegalArgumentException for initial load factor <= 0"); 158561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes 159561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes HashMap empty = new HashMap(0, 0.75f); 160561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes assertNull("Empty hashtable access", empty.get("nothing")); 161561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes empty.put("something", "here"); 162561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes assertTrue("cannot get element", empty.get("something") == "here"); 163561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes } 164561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes 165561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes /** 166561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes * @tests java.util.HashMap#HashMap(java.util.Map) 167561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes */ 168561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes public void test_ConstructorLjava_util_Map() { 169561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes // Test for method java.util.HashMap(java.util.Map) 170561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes Map myMap = new TreeMap(); 171561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes for (int counter = 0; counter < hmSize; counter++) 172561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes myMap.put(objArray2[counter], objArray[counter]); 173561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes HashMap hm2 = new HashMap(myMap); 174561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes for (int counter = 0; counter < hmSize; counter++) 175561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes assertTrue("Failed to construct correct HashMap", hm 176561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes .get(objArray2[counter]) == hm2.get(objArray2[counter])); 177561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes 178561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes try { 179561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes Map mockMap = new MockMap(); 180561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes hm = new HashMap(mockMap); 181561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes fail("Should throw NullPointerException"); 182561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes } catch (NullPointerException e) { 183561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes //empty 184561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes } 185561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes 186561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes HashMap map = new HashMap(); 187561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes map.put("a", "a"); 188561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes SubMap map2 = new SubMap(map); 189561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes assertTrue(map2.containsKey("a")); 190561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes assertTrue(map2.containsValue("a")); 191561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes } 192561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes 193561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes /** 194561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes * @tests java.util.HashMap#clear() 195561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes */ 196561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes public void test_clear() { 197561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes hm.clear(); 198561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes assertEquals("Clear failed to reset size", 0, hm.size()); 199561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes for (int i = 0; i < hmSize; i++) 200561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes assertNull("Failed to clear all elements", 201561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes hm.get(objArray2[i])); 202561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes 203561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes // Check clear on a large loaded map of Integer keys 204561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes HashMap<Integer, String> map = new HashMap<Integer, String>(); 205561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes for (int i = -32767; i < 32768; i++) { 206561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes map.put(i, "foobar"); 207561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes } 208561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes map.clear(); 209561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes assertEquals("Failed to reset size on large integer map", 0, hm.size()); 210561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes for (int i = -32767; i < 32768; i++) { 211561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes assertNull("Failed to clear integer map values", map.get(i)); 212561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes } 213561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes } 214561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes 215561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes /** 216561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes * @tests java.util.HashMap#clone() 217561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes */ 218561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes public void test_clone() { 219561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes // Test for method java.lang.Object java.util.HashMap.clone() 220561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes HashMap hm2 = (HashMap) hm.clone(); 221561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes assertTrue("Clone answered equivalent HashMap", hm2 != hm); 222561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes for (int counter = 0; counter < hmSize; counter++) 223561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes assertTrue("Clone answered unequal HashMap", hm 224561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes .get(objArray2[counter]) == hm2.get(objArray2[counter])); 225561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes 226561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes HashMap map = new HashMap(); 227561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes map.put("key", "value"); 228561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes // get the keySet() and values() on the original Map 229561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes Set keys = map.keySet(); 230561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes Collection values = map.values(); 231561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes assertEquals("values() does not work", 232561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes "value", values.iterator().next()); 233561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes assertEquals("keySet() does not work", 234561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes "key", keys.iterator().next()); 235561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes AbstractMap map2 = (AbstractMap) map.clone(); 236561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes map2.put("key", "value2"); 237561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes Collection values2 = map2.values(); 238561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes assertTrue("values() is identical", values2 != values); 239561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes // values() and keySet() on the cloned() map should be different 240561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes assertEquals("values() was not cloned", 241561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes "value2", values2.iterator().next()); 242561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes map2.clear(); 243561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes map2.put("key2", "value3"); 244561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes Set key2 = map2.keySet(); 245561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes assertTrue("keySet() is identical", key2 != keys); 246561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes assertEquals("keySet() was not cloned", 247561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes "key2", key2.iterator().next()); 248561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes 249561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes // regresion test for HARMONY-4603 250561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes HashMap hashmap = new HashMap(); 251561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes MockClonable mock = new MockClonable(1); 252561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes hashmap.put(1, mock); 253561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes assertEquals(1, ((MockClonable) hashmap.get(1)).i); 254561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes HashMap hm3 = (HashMap)hashmap.clone(); 255561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes assertEquals(1, ((MockClonable) hm3.get(1)).i); 256561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes mock.i = 0; 257561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes assertEquals(0, ((MockClonable) hashmap.get(1)).i); 258561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes assertEquals(0, ((MockClonable) hm3.get(1)).i); 259561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes } 260561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes 261561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes /** 262561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes * @tests java.util.HashMap#containsKey(java.lang.Object) 263561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes */ 264561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes public void test_containsKeyLjava_lang_Object() { 265561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes // Test for method boolean 266561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes // java.util.HashMap.containsKey(java.lang.Object) 267561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes assertTrue("Returned false for valid key", hm.containsKey(new Integer( 268561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes 876).toString())); 269561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes assertTrue("Returned true for invalid key", !hm.containsKey("KKDKDKD")); 270561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes 271561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes HashMap m = new HashMap(); 272561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes m.put(null, "test"); 273561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes assertTrue("Failed with null key", m.containsKey(null)); 274561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes assertTrue("Failed with missing key matching null hash", !m 275561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes .containsKey(new Integer(0))); 276561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes } 277561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes 278561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes /** 279561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes * @tests java.util.HashMap#containsValue(java.lang.Object) 280561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes */ 281561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes public void test_containsValueLjava_lang_Object() { 282561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes // Test for method boolean 283561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes // java.util.HashMap.containsValue(java.lang.Object) 284561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes assertTrue("Returned false for valid value", hm 285561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes .containsValue(new Integer(875))); 286561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes assertTrue("Returned true for invalid valie", !hm 287561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes .containsValue(new Integer(-9))); 288561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes } 289561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes 290561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes /** 291561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes * @tests java.util.HashMap#entrySet() 292561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes */ 293561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes public void test_entrySet() { 294561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes // Test for method java.util.Set java.util.HashMap.entrySet() 295561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes Set s = hm.entrySet(); 296561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes Iterator i = s.iterator(); 297561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes assertTrue("Returned set of incorrect size", hm.size() == s.size()); 298561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes while (i.hasNext()) { 299561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes Map.Entry m = (Map.Entry) i.next(); 300561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes assertTrue("Returned incorrect entry set", hm.containsKey(m 301561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes .getKey()) 302561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes && hm.containsValue(m.getValue())); 303561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes } 304561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes 305561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes Iterator iter = s.iterator(); 306561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes s.remove(iter.next()); 307561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes assertEquals(1001, s.size()); 308561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes } 309561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes 310561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes /** 311561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes * @tests java.util.HashMap#get(java.lang.Object) 312561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes */ 313561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes public void test_getLjava_lang_Object() { 314561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes // Test for method java.lang.Object 315561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes // java.util.HashMap.get(java.lang.Object) 316561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes assertNull("Get returned non-null for non existent key", 317561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes hm.get("T")); 318561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes hm.put("T", "HELLO"); 319561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes assertEquals("Get returned incorrect value for existing key", "HELLO", hm.get("T") 320561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes ); 321561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes 322561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes HashMap m = new HashMap(); 323561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes m.put(null, "test"); 324561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes assertEquals("Failed with null key", "test", m.get(null)); 325561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes assertNull("Failed with missing key matching null hash", m 326561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes .get(new Integer(0))); 327561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes 328561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes // Regression for HARMONY-206 329561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes ReusableKey k = new ReusableKey(); 330561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes HashMap map = new HashMap(); 331561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes k.setKey(1); 332561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes map.put(k, "value1"); 333561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes 334561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes k.setKey(18); 335561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes assertNull(map.get(k)); 336561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes 337561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes k.setKey(17); 338561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes assertNull(map.get(k)); 339561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes } 340561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes 341561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes /** 342561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes * Tests for proxy object keys and values 343561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes */ 344561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes public void test_proxies() { 345561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes // Regression for HARMONY-6237 346561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes MockInterface proxyKey = (MockInterface) Proxy.newProxyInstance( 347561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes MockInterface.class.getClassLoader(), 348561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes new Class[] { MockInterface.class }, new MockHandler( 349561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes new MockClass())); 350561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes MockInterface proxyValue = (MockInterface) Proxy.newProxyInstance( 351561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes MockInterface.class.getClassLoader(), 352561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes new Class[] { MockInterface.class }, new MockHandler( 353561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes new MockClass())); 354561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes 355561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes // Proxy key 356561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes Object val = new Object(); 357561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes hm.put(proxyKey, val); 358561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes 359561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes assertEquals("Failed with proxy object key", val, hm 360561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes .get(proxyKey)); 361561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes assertTrue("Failed to find proxy key", hm.containsKey(proxyKey)); 362561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes assertEquals("Failed to remove proxy object key", val, 363561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes hm.remove(proxyKey)); 364561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes assertFalse("Should not have found proxy key", hm.containsKey(proxyKey)); 365561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes 366561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes // Proxy value 367561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes Object k = new Object(); 368561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes hm.put(k, proxyValue); 369561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes 370561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes assertTrue("Failed to find proxy object as value", hm.containsValue(proxyValue)); 371561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes 372561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes // Proxy key and value 373561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes HashMap map = new HashMap(); 374561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes map.put(proxyKey, proxyValue); 375561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes assertTrue("Failed to find proxy key", map.containsKey(proxyKey)); 376561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes assertEquals(1, map.size()); 377561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes Object[] entries = map.entrySet().toArray(); 378561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes Map.Entry entry = (Map.Entry)entries[0]; 379561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes assertTrue("Failed to find proxy association", map.entrySet().contains(entry)); 380561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes } 381561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes 382561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes /** 383561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes * @tests java.util.HashMap#isEmpty() 384561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes */ 385561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes public void test_isEmpty() { 386561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes // Test for method boolean java.util.HashMap.isEmpty() 387561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes assertTrue("Returned false for new map", new HashMap().isEmpty()); 388561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes assertTrue("Returned true for non-empty", !hm.isEmpty()); 389561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes } 390561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes 391561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes /** 392561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes * @tests java.util.HashMap#keySet() 393561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes */ 394561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes public void test_keySet() { 395561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes // Test for method java.util.Set java.util.HashMap.keySet() 396561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes Set s = hm.keySet(); 397561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes assertTrue("Returned set of incorrect size()", s.size() == hm.size()); 398561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes for (int i = 0; i < objArray.length; i++) 399561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes assertTrue("Returned set does not contain all keys", s 400561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes .contains(objArray[i].toString())); 401561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes 402561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes HashMap m = new HashMap(); 403561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes m.put(null, "test"); 404561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes assertTrue("Failed with null key", m.keySet().contains(null)); 405561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes assertNull("Failed with null key", m.keySet().iterator().next()); 406561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes 407561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes Map map = new HashMap(101); 408561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes map.put(new Integer(1), "1"); 409561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes map.put(new Integer(102), "102"); 410561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes map.put(new Integer(203), "203"); 411561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes Iterator it = map.keySet().iterator(); 412561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes Integer remove1 = (Integer) it.next(); 413561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes it.hasNext(); 414561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes it.remove(); 415561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes Integer remove2 = (Integer) it.next(); 416561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes it.remove(); 417561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes ArrayList list = new ArrayList(Arrays.asList(new Integer[] { 418561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes new Integer(1), new Integer(102), new Integer(203) })); 419561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes list.remove(remove1); 420561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes list.remove(remove2); 421561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes assertTrue("Wrong result", it.next().equals(list.get(0))); 422561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes assertEquals("Wrong size", 1, map.size()); 423561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes assertTrue("Wrong contents", map.keySet().iterator().next().equals( 424561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes list.get(0))); 425561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes 426561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes Map map2 = new HashMap(101); 427561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes map2.put(new Integer(1), "1"); 428561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes map2.put(new Integer(4), "4"); 429561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes Iterator it2 = map2.keySet().iterator(); 430561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes Integer remove3 = (Integer) it2.next(); 431561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes Integer next; 432561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes if (remove3.intValue() == 1) 433561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes next = new Integer(4); 434561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes else 435561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes next = new Integer(1); 436561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes it2.hasNext(); 437561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes it2.remove(); 438561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes assertTrue("Wrong result 2", it2.next().equals(next)); 439561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes assertEquals("Wrong size 2", 1, map2.size()); 440561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes assertTrue("Wrong contents 2", map2.keySet().iterator().next().equals( 441561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes next)); 442561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes } 443561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes 444561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes /** 445561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes * @tests java.util.HashMap#put(java.lang.Object, java.lang.Object) 446561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes */ 447561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes public void test_putLjava_lang_ObjectLjava_lang_Object() { 448561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes hm.put("KEY", "VALUE"); 449561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes assertEquals("Failed to install key/value pair", "VALUE", hm.get("KEY")); 450561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes 451561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes HashMap<Object,Object> m = new HashMap<Object,Object>(); 452561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes m.put(new Short((short) 0), "short"); 453561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes m.put(null, "test"); 454561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes m.put(new Integer(0), "int"); 455561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes assertEquals("Failed adding to bucket containing null", "short", m 456561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes .get(new Short((short) 0))); 457561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes assertEquals("Failed adding to bucket containing null2", "int", m 458561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes .get(new Integer(0))); 459561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes 460561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes // Check my actual key instance is returned 461561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes HashMap<Integer, String> map = new HashMap<Integer, String>(); 462561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes for (int i = -32767; i < 32768; i++) { 463561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes map.put(i, "foobar"); 464561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes } 465561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes Integer myKey = new Integer(0); 466561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes // Put a new value at the old key position 467561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes map.put(myKey, "myValue"); 468561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes assertTrue(map.containsKey(myKey)); 469561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes assertEquals("myValue", map.get(myKey)); 470561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes boolean found = false; 471561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes for (Iterator<Integer> itr = map.keySet().iterator(); itr.hasNext();) { 472561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes Integer key = itr.next(); 473561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes if (found = key == myKey) { 474561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes break; 475561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes } 476561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes } 477561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes assertFalse("Should not find new key instance in hashmap", found); 478561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes 479561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes // Add a new key instance and check it is returned 480561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes assertNotNull(map.remove(myKey)); 481561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes map.put(myKey, "myValue"); 482561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes assertTrue(map.containsKey(myKey)); 483561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes assertEquals("myValue", map.get(myKey)); 484561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes for (Iterator<Integer> itr = map.keySet().iterator(); itr.hasNext();) { 485561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes Integer key = itr.next(); 486561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes if (found = key == myKey) { 487561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes break; 488561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes } 489561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes } 490561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes assertTrue("Did not find new key instance in hashmap", found); 491561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes 492561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes // Ensure keys with identical hashcode are stored separately 493561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes HashMap<Object,Object> objmap = new HashMap<Object, Object>(); 494561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes for (int i = 0; i < 32768; i++) { 495561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes objmap.put(i, "foobar"); 496561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes } 497561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes // Put non-equal object with same hashcode 498561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes MyKey aKey = new MyKey(); 499561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes assertNull(objmap.put(aKey, "value")); 500561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes assertNull(objmap.remove(new MyKey())); 501561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes assertEquals("foobar", objmap.get(0)); 502561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes assertEquals("value", objmap.get(aKey)); 503561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes } 504561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes 505561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes static class MyKey { 506561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes public MyKey() { 507561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes super(); 508561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes } 509561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes 510561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes public int hashCode() { 511561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes return 0; 512561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes } 513561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes } 514561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes /** 515561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes * @tests java.util.HashMap#putAll(java.util.Map) 516561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes */ 517561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes public void test_putAllLjava_util_Map() { 518561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes // Test for method void java.util.HashMap.putAll(java.util.Map) 519561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes HashMap hm2 = new HashMap(); 520561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes hm2.putAll(hm); 521561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes for (int i = 0; i < 1000; i++) 522561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes assertTrue("Failed to clear all elements", hm2.get( 523561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes new Integer(i).toString()).equals((new Integer(i)))); 524561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes 525561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes Map mockMap = new MockMap(); 526561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes hm2 = new HashMap(); 527561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes hm2.putAll(mockMap); 528561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes assertEquals("Size should be 0", 0, hm2.size()); 529561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes } 530561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes 531561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes /** 532561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes * @tests java.util.HashMap#putAll(java.util.Map) 533561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes */ 534561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes public void test_putAllLjava_util_Map_Null() { 535561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes HashMap hashMap = new HashMap(); 536561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes try { 537561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes hashMap.putAll(new MockMapNull()); 538561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes fail("Should throw NullPointerException"); 539561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes } catch (NullPointerException e) { 540561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes // expected. 541561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes } 542561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes 543561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes try { 544561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes hashMap = new HashMap(new MockMapNull()); 545561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes fail("Should throw NullPointerException"); 546561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes } catch (NullPointerException e) { 547561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes // expected. 548561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes } 549561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes } 550561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes 551561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes /** 552561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes * @tests java.util.HashMap#remove(java.lang.Object) 553561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes */ 554561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes public void test_removeLjava_lang_Object() { 555561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes int size = hm.size(); 556561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes Integer y = new Integer(9); 557561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes Integer x = ((Integer) hm.remove(y.toString())); 558561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes assertTrue("Remove returned incorrect value", x.equals(new Integer(9))); 559561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes assertNull("Failed to remove given key", hm.get(new Integer(9))); 560561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes assertTrue("Failed to decrement size", hm.size() == (size - 1)); 561561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes assertNull("Remove of non-existent key returned non-null", hm 562561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes .remove("LCLCLC")); 563561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes 564561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes HashMap m = new HashMap(); 565561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes m.put(null, "test"); 566561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes assertNull("Failed with same hash as null", 567561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes m.remove(new Integer(0))); 568561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes assertEquals("Failed with null key", "test", m.remove(null)); 569561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes 570561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes HashMap<Integer, Object> map = new HashMap<Integer, Object>(); 571561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes for (int i = 0; i < 32768; i++) { 572561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes map.put(i, "const"); 573561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes } 574561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes Object[] values = new Object[32768]; 575561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes for (int i = 0; i < 32768; i++) { 576561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes values[i] = new Object(); 577561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes map.put(i, values[i]); 578561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes } 579561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes for (int i = 32767; i >= 0; i--) { 580561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes assertEquals("Failed to remove same value", values[i], map.remove(i)); 581561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes } 582561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes 583561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes // Ensure keys with identical hashcode are removed properly 584561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes map = new HashMap<Integer, Object>(); 585561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes for (int i = -32767; i < 32768; i++) { 586561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes map.put(i, "foobar"); 587561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes } 588561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes // Remove non equal object with same hashcode 589561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes assertNull(map.remove(new MyKey())); 590561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes assertEquals("foobar", map.get(0)); 591561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes map.remove(0); 592561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes assertNull(map.get(0)); 593561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes } 594561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes 595561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes /** 596561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes * Compatibility test to ensure we rehash the same way as the RI. 597561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes * Not required by the spec, but some apps seem sensitive to it. 598561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes */ 599561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes public void test_rehash() { 600561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes // This map should rehash on adding the ninth element. 601561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes HashMap<MyKey, Integer> hm = new HashMap<MyKey, Integer>(10, 0.5f); 602561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes 603561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes // Ordered set of keys. 604561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes MyKey[] keyOrder = new MyKey[9]; 605561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes for (int i = 0; i < keyOrder.length; i++) { 606561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes keyOrder[i] = new MyKey(); 607561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes } 608561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes 609561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes // Store eight elements 610561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes for (int i = 0; i < 8; i++) { 611561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes hm.put(keyOrder[i], i); 612561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes } 613561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes // Check expected ordering (inverse of adding order) 614561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes MyKey[] returnedKeys = hm.keySet().toArray(new MyKey[8]); 615561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes for (int i = 0; i < 8; i++) { 616561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes assertSame(keyOrder[i], returnedKeys[7 - i]); 617561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes } 618561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes 619561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes // The next put causes a rehash 620561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes hm.put(keyOrder[8], 8); 621561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes // Check expected new ordering (adding order) 622561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes returnedKeys = hm.keySet().toArray(new MyKey[8]); 623561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes for (int i = 0; i < 9; i++) { 624561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes assertSame(keyOrder[i], returnedKeys[i]); 625561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes } 626561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes } 627561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes 628561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes /** 629561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes * @tests java.util.HashMap#size() 630561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes */ 631561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes public void test_size() { 632561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes // Test for method int java.util.HashMap.size() 633561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes assertTrue("Returned incorrect size", 634561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes hm.size() == (objArray.length + 2)); 635561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes } 636561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes 637561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes /** 638561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes * @tests java.util.HashMap#values() 639561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes */ 640561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes public void test_values() { 641561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes // Test for method java.util.Collection java.util.HashMap.values() 642561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes Collection c = hm.values(); 643561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes assertTrue("Returned collection of incorrect size()", c.size() == hm 644561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes .size()); 645561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes for (int i = 0; i < objArray.length; i++) 646561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes assertTrue("Returned collection does not contain all keys", c 647561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes .contains(objArray[i])); 648561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes 649561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes HashMap myHashMap = new HashMap(); 650561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes for (int i = 0; i < 100; i++) 651561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes myHashMap.put(objArray2[i], objArray[i]); 652561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes Collection values = myHashMap.values(); 653561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes new Support_UnmodifiableCollectionTest( 654561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes "Test Returned Collection From HashMap.values()", values) 655561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes .runTest(); 656561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes values.remove(new Integer(0)); 657561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes assertTrue( 658561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes "Removing from the values collection should remove from the original map", 659561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes !myHashMap.containsValue(new Integer(0))); 660561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes 661561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes } 662561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes 663561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes /** 664561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes * @tests java.util.AbstractMap#toString() 665561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes */ 666561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes public void test_toString() { 667561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes 668561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes HashMap m = new HashMap(); 669561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes m.put(m, m); 670561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes String result = m.toString(); 671561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes assertTrue("should contain self ref", result.indexOf("(this") > -1); 672561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes } 673561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes 674561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes static class ReusableKey { 675561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes private int key = 0; 676561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes 677561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes public void setKey(int key) { 678561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes this.key = key; 679561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes } 680561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes 681561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes public int hashCode() { 682561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes return key; 683561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes } 684561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes 685561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes public boolean equals(Object o) { 686561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes if (o == this) { 687561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes return true; 688561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes } 689561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes if (!(o instanceof ReusableKey)) { 690561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes return false; 691561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes } 692561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes return key == ((ReusableKey) o).key; 693561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes } 694561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes } 695561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes 696561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes public void test_Map_Entry_hashCode() { 697561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes //Related to HARMONY-403 698561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes HashMap<Integer, Integer> map = new HashMap<Integer, Integer>(10); 699561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes Integer key = new Integer(1); 700561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes Integer val = new Integer(2); 701561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes map.put(key, val); 702561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes int expected = key.hashCode() ^ val.hashCode(); 703561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes assertEquals(expected, map.hashCode()); 704561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes key = new Integer(4); 705561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes val = new Integer(8); 706561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes map.put(key, val); 707561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes expected += key.hashCode() ^ val.hashCode(); 708561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes assertEquals(expected, map.hashCode()); 709561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes } 710561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes 711561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes class MockClonable implements Cloneable{ 712561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes public int i; 713561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes 714561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes public MockClonable(int i) { 715561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes this.i = i; 716561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes } 717561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes 718561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes @Override 719561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes protected Object clone() throws CloneNotSupportedException { 720561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes return new MockClonable(i); 721561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes } 722561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes } 723561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes 724561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes /* 725561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes * Regression test for HY-4750 726561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes */ 727561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes public void test_EntrySet() { 728561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes HashMap map = new HashMap(); 729561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes map.put(new Integer(1), "ONE"); 730561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes 731561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes Set entrySet = map.entrySet(); 732561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes Iterator e = entrySet.iterator(); 733561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes Object real = e.next(); 734561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes Map.Entry copyEntry = new MockEntry(); 735561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes assertEquals(real, copyEntry); 736561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes assertTrue(entrySet.contains(copyEntry)); 737561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes 738561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes entrySet.remove(copyEntry); 739561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes assertFalse(entrySet.contains(copyEntry)); 740561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes } 741561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes 742561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes private static class MockEntry implements Map.Entry { 743561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes 744561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes public Object getKey() { 745561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes return new Integer(1); 746561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes } 747561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes 748561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes public Object getValue() { 749561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes return "ONE"; 750561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes } 751561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes 752561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes public Object setValue(Object object) { 753561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes return null; 754561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes } 755561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes } 756561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes 757561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes /** 758561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes * Sets up the fixture, for example, open a network connection. This method 759561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes * is called before a test is executed. 760561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes */ 761561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes protected void setUp() { 762561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes hm = new HashMap(); 763561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes for (int i = 0; i < objArray.length; i++) 764561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes hm.put(objArray2[i], objArray[i]); 765561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes hm.put("test", null); 766561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes hm.put(null, "test"); 767561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes } 768561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes 769561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes 770561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes class SubMap<K, V> extends HashMap<K, V> { 771561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes public SubMap(Map<? extends K, ? extends V> m) { 772561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes super(m); 773561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes } 774561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes 775561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes public V put(K key, V value) { 776561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes throw new UnsupportedOperationException(); 777561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes } 778561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes } 779561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes 780561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes /** 781561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes * @tests serialization/deserialization. 782561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes */ 783561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes public void testSerializationSelf() throws Exception { 784561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes HashMap<String, String> hm = new HashMap<String, String>(); 785561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes hm.put("key", "value"); 786561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes 787561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes SerializationTest.verifySelf(hm); 788561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes 789561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes // regression for HARMONY-1583 790561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes hm.put(null, "null"); 791561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes SerializationTest.verifySelf(hm); 792561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes } 793561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes 794561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes /** 795561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes * @tests serialization/deserialization compatibility with RI. 796561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes */ 797561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes public void testSerializationCompatibility() throws Exception { 798561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes HashMap<String, String> hm = new HashMap<String, String>(); 799561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes hm.put("key", "value"); 800561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes 801561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes SerializationTest.verifyGolden(this, hm); 802561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes } 803561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes 804561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes} 805