1adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project/* 2adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * Licensed to the Apache Software Foundation (ASF) under one or more 3adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * contributor license agreements. See the NOTICE file distributed with 4adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * this work for additional information regarding copyright ownership. 5adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * The ASF licenses this file to You under the Apache License, Version 2.0 6adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * (the "License"); you may not use this file except in compliance with 7adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * the License. You may obtain a copy of the License at 8adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * 9adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * http://www.apache.org/licenses/LICENSE-2.0 10adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * 11adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * Unless required by applicable law or agreed to in writing, software 12adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * distributed under the License is distributed on an "AS IS" BASIS, 13adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 14adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * See the License for the specific language governing permissions and 15adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * limitations under the License. 16adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project */ 17adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 18ab762bb740405d0fefcccf4a0899a234f995be13Narayan Kamathpackage org.apache.harmony.tests.java.util; 19adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 204c89023ef86f29fa9add7db2574f2169fe842577Narayan Kamathimport libcore.java.util.SpliteratorTester; 21ba45f538a14c08015021e899f5883f07ed2ff237Narayan Kamathimport org.apache.harmony.testframework.serialization.SerializationTest; 22adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Projectimport tests.support.Support_MapTest2; 23adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Projectimport tests.support.Support_UnmodifiableCollectionTest; 24ba45f538a14c08015021e899f5883f07ed2ff237Narayan Kamathimport java.lang.reflect.InvocationHandler; 25ba45f538a14c08015021e899f5883f07ed2ff237Narayan Kamathimport java.lang.reflect.Method; 26ba45f538a14c08015021e899f5883f07ed2ff237Narayan Kamathimport java.util.AbstractMap; 27ba45f538a14c08015021e899f5883f07ed2ff237Narayan Kamathimport java.util.ArrayList; 28ba45f538a14c08015021e899f5883f07ed2ff237Narayan Kamathimport java.util.Arrays; 29ba45f538a14c08015021e899f5883f07ed2ff237Narayan Kamathimport java.util.Collection; 30ba45f538a14c08015021e899f5883f07ed2ff237Narayan Kamathimport java.util.Collections; 314c89023ef86f29fa9add7db2574f2169fe842577Narayan Kamathimport java.util.Comparator; 3260796efea3a74e02aea384b8eb56103ea21b880bPrzemyslaw Szczepaniakimport java.util.ConcurrentModificationException; 33ba45f538a14c08015021e899f5883f07ed2ff237Narayan Kamathimport java.util.HashMap; 3460796efea3a74e02aea384b8eb56103ea21b880bPrzemyslaw Szczepaniakimport java.util.HashSet; 35ba45f538a14c08015021e899f5883f07ed2ff237Narayan Kamathimport java.util.Iterator; 36ba45f538a14c08015021e899f5883f07ed2ff237Narayan Kamathimport java.util.Map; 37ba45f538a14c08015021e899f5883f07ed2ff237Narayan Kamathimport java.util.Random; 38ba45f538a14c08015021e899f5883f07ed2ff237Narayan Kamathimport java.util.Set; 394c89023ef86f29fa9add7db2574f2169fe842577Narayan Kamathimport java.util.Spliterator; 40ba45f538a14c08015021e899f5883f07ed2ff237Narayan Kamathimport java.util.TreeMap; 41adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 42adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Projectpublic class HashMapTest extends junit.framework.TestCase { 43adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project class MockMap extends AbstractMap { 44adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project public Set entrySet() { 4519ab821c3b1da5812590140a21ad9d551a3a3ec5Joshua Bloch return Collections.EMPTY_SET; 46adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 47ba45f538a14c08015021e899f5883f07ed2ff237Narayan Kamath 48ba45f538a14c08015021e899f5883f07ed2ff237Narayan Kamath public int size() { 49adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project return 0; 50adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 51adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 52f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes 53adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project private static class MockMapNull extends AbstractMap { 54adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project public Set entrySet() { 55adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project return null; 56adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 57adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 58adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project public int size() { 59adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project return 10; 60adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 61adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 62f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes 63ba45f538a14c08015021e899f5883f07ed2ff237Narayan Kamath interface MockInterface { 64ba45f538a14c08015021e899f5883f07ed2ff237Narayan Kamath public String mockMethod(); 65ba45f538a14c08015021e899f5883f07ed2ff237Narayan Kamath } 66ba45f538a14c08015021e899f5883f07ed2ff237Narayan Kamath 67ba45f538a14c08015021e899f5883f07ed2ff237Narayan Kamath class MockClass implements MockInterface { 68ba45f538a14c08015021e899f5883f07ed2ff237Narayan Kamath public String mockMethod() { 69ba45f538a14c08015021e899f5883f07ed2ff237Narayan Kamath return "This is a MockClass"; 70ba45f538a14c08015021e899f5883f07ed2ff237Narayan Kamath } 71ba45f538a14c08015021e899f5883f07ed2ff237Narayan Kamath } 72ba45f538a14c08015021e899f5883f07ed2ff237Narayan Kamath 73ba45f538a14c08015021e899f5883f07ed2ff237Narayan Kamath class MockHandler implements InvocationHandler { 74ba45f538a14c08015021e899f5883f07ed2ff237Narayan Kamath 75ba45f538a14c08015021e899f5883f07ed2ff237Narayan Kamath Object obj; 76ba45f538a14c08015021e899f5883f07ed2ff237Narayan Kamath 77ba45f538a14c08015021e899f5883f07ed2ff237Narayan Kamath public MockHandler(Object o) { 78ba45f538a14c08015021e899f5883f07ed2ff237Narayan Kamath obj = o; 79ba45f538a14c08015021e899f5883f07ed2ff237Narayan Kamath } 80ba45f538a14c08015021e899f5883f07ed2ff237Narayan Kamath 81ba45f538a14c08015021e899f5883f07ed2ff237Narayan Kamath public Object invoke(Object proxy, Method m, Object[] args) 82ba45f538a14c08015021e899f5883f07ed2ff237Narayan Kamath throws Throwable { 83ba45f538a14c08015021e899f5883f07ed2ff237Narayan Kamath Object result = null; 84ba45f538a14c08015021e899f5883f07ed2ff237Narayan Kamath 85ba45f538a14c08015021e899f5883f07ed2ff237Narayan Kamath try { 86ba45f538a14c08015021e899f5883f07ed2ff237Narayan Kamath result = m.invoke(obj, args); 87ba45f538a14c08015021e899f5883f07ed2ff237Narayan Kamath } catch (Exception e) { 88ba45f538a14c08015021e899f5883f07ed2ff237Narayan Kamath e.printStackTrace(); 89ba45f538a14c08015021e899f5883f07ed2ff237Narayan Kamath } 90ba45f538a14c08015021e899f5883f07ed2ff237Narayan Kamath return result; 91ba45f538a14c08015021e899f5883f07ed2ff237Narayan Kamath } 92ba45f538a14c08015021e899f5883f07ed2ff237Narayan Kamath } 93ba45f538a14c08015021e899f5883f07ed2ff237Narayan Kamath 94ba45f538a14c08015021e899f5883f07ed2ff237Narayan Kamath 95adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project HashMap hm; 96adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 97adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project final static int hmSize = 1000; 98adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 99740cbf1565815f08d9fb3a0a8d4a581cdc0d2a9dJorg Pleumann Object[] objArray; 100adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 101740cbf1565815f08d9fb3a0a8d4a581cdc0d2a9dJorg Pleumann Object[] objArray2; 102f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes 103adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project /** 104229e34b182b98e1dba15d3dc6341954986ae2b7aBrian Carlstrom * java.util.HashMap#HashMap() 105adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project */ 106adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project public void test_Constructor() { 107adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project // Test for method java.util.HashMap() 108adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project new Support_MapTest2(new HashMap()).runTest(); 109adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 110adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project HashMap hm2 = new HashMap(); 111adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project assertEquals("Created incorrect HashMap", 0, hm2.size()); 112adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 113adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 114adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project /** 115229e34b182b98e1dba15d3dc6341954986ae2b7aBrian Carlstrom * java.util.HashMap#HashMap(int) 116adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project */ 117adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project public void test_ConstructorI() { 118adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project // Test for method java.util.HashMap(int) 119adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project HashMap hm2 = new HashMap(5); 120adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project assertEquals("Created incorrect HashMap", 0, hm2.size()); 121adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project try { 122adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project new HashMap(-1); 123adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project fail("IllegalArgumentException expected"); 124adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } catch (IllegalArgumentException e) { 125adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project //expected 126adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 127adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 128adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project HashMap empty = new HashMap(0); 129adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project assertNull("Empty hashmap access", empty.get("nothing")); 130adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project empty.put("something", "here"); 131adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project assertTrue("cannot get element", empty.get("something") == "here"); 132adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 133adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 134adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project /** 135229e34b182b98e1dba15d3dc6341954986ae2b7aBrian Carlstrom * java.util.HashMap#HashMap(int, float) 136adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project */ 137adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project public void test_ConstructorIF() { 138adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project // Test for method java.util.HashMap(int, float) 139adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project HashMap hm2 = new HashMap(5, (float) 0.5); 140adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project assertEquals("Created incorrect HashMap", 0, hm2.size()); 141adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project try { 142adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project new HashMap(0, 0); 143adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project fail("IllegalArgumentException expected"); 144adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } catch (IllegalArgumentException e) { 145adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project //expected 146adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 147adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 148adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project HashMap empty = new HashMap(0, 0.75f); 149adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project assertNull("Empty hashtable access", empty.get("nothing")); 150adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project empty.put("something", "here"); 151adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project assertTrue("cannot get element", empty.get("something") == "here"); 152adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 153adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 154adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project /** 155229e34b182b98e1dba15d3dc6341954986ae2b7aBrian Carlstrom * java.util.HashMap#HashMap(java.util.Map) 156adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project */ 157adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project public void test_ConstructorLjava_util_Map() { 158adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project // Test for method java.util.HashMap(java.util.Map) 159adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project Map myMap = new TreeMap(); 160adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project for (int counter = 0; counter < hmSize; counter++) 161adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project myMap.put(objArray2[counter], objArray[counter]); 162adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project HashMap hm2 = new HashMap(myMap); 163adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project for (int counter = 0; counter < hmSize; counter++) 164adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project assertTrue("Failed to construct correct HashMap", hm 165adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project .get(objArray2[counter]) == hm2.get(objArray2[counter])); 16619ab821c3b1da5812590140a21ad9d551a3a3ec5Joshua Bloch 16719ab821c3b1da5812590140a21ad9d551a3a3ec5Joshua Bloch Map mockMap = new MockMap(); 16819ab821c3b1da5812590140a21ad9d551a3a3ec5Joshua Bloch hm = new HashMap(mockMap); 16919ab821c3b1da5812590140a21ad9d551a3a3ec5Joshua Bloch assertEquals(hm, mockMap); 170adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 171adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 172adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project /** 173229e34b182b98e1dba15d3dc6341954986ae2b7aBrian Carlstrom * java.util.HashMap#clear() 174adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project */ 175adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project public void test_clear() { 176adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project hm.clear(); 177adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project assertEquals("Clear failed to reset size", 0, hm.size()); 178adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project for (int i = 0; i < hmSize; i++) 179adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project assertNull("Failed to clear all elements", 180adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project hm.get(objArray2[i])); 181f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes 182ba45f538a14c08015021e899f5883f07ed2ff237Narayan Kamath // Check clear on a large loaded map of Integer keys 183ba45f538a14c08015021e899f5883f07ed2ff237Narayan Kamath HashMap<Integer, String> map = new HashMap<Integer, String>(); 184ba45f538a14c08015021e899f5883f07ed2ff237Narayan Kamath for (int i = -32767; i < 32768; i++) { 185ba45f538a14c08015021e899f5883f07ed2ff237Narayan Kamath map.put(i, "foobar"); 186ba45f538a14c08015021e899f5883f07ed2ff237Narayan Kamath } 187ba45f538a14c08015021e899f5883f07ed2ff237Narayan Kamath map.clear(); 188ba45f538a14c08015021e899f5883f07ed2ff237Narayan Kamath assertEquals("Failed to reset size on large integer map", 0, hm.size()); 189ba45f538a14c08015021e899f5883f07ed2ff237Narayan Kamath for (int i = -32767; i < 32768; i++) { 190ba45f538a14c08015021e899f5883f07ed2ff237Narayan Kamath assertNull("Failed to clear integer map values", map.get(i)); 191ba45f538a14c08015021e899f5883f07ed2ff237Narayan Kamath } 192adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 193adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 194adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project /** 195229e34b182b98e1dba15d3dc6341954986ae2b7aBrian Carlstrom * java.util.HashMap#clone() 196adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project */ 197adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project public void test_clone() { 198adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project // Test for method java.lang.Object java.util.HashMap.clone() 199adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project HashMap hm2 = (HashMap) hm.clone(); 200adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project assertTrue("Clone answered equivalent HashMap", hm2 != hm); 201adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project for (int counter = 0; counter < hmSize; counter++) 202adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project assertTrue("Clone answered unequal HashMap", hm 203adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project .get(objArray2[counter]) == hm2.get(objArray2[counter])); 204adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 205adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project HashMap map = new HashMap(); 206adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project map.put("key", "value"); 207adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project // get the keySet() and values() on the original Map 208adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project Set keys = map.keySet(); 209adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project Collection values = map.values(); 210f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes assertEquals("values() does not work", 211adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project "value", values.iterator().next()); 212f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes assertEquals("keySet() does not work", 213adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project "key", keys.iterator().next()); 214adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project AbstractMap map2 = (AbstractMap) map.clone(); 215adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project map2.put("key", "value2"); 216adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project Collection values2 = map2.values(); 217adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project assertTrue("values() is identical", values2 != values); 218adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project // values() and keySet() on the cloned() map should be different 219f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes assertEquals("values() was not cloned", 220adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project "value2", values2.iterator().next()); 221adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project map2.clear(); 222adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project map2.put("key2", "value3"); 223adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project Set key2 = map2.keySet(); 224adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project assertTrue("keySet() is identical", key2 != keys); 225f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes assertEquals("keySet() was not cloned", 226adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project "key2", key2.iterator().next()); 227f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes 228adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project // regresion test for HARMONY-4603 229adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project HashMap hashmap = new HashMap(); 230adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project MockClonable mock = new MockClonable(1); 231adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project hashmap.put(1, mock); 232adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project assertEquals(1, ((MockClonable) hashmap.get(1)).i); 233ba45f538a14c08015021e899f5883f07ed2ff237Narayan Kamath HashMap hm3 = (HashMap) hashmap.clone(); 234adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project assertEquals(1, ((MockClonable) hm3.get(1)).i); 235adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project mock.i = 0; 236adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project assertEquals(0, ((MockClonable) hashmap.get(1)).i); 237adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project assertEquals(0, ((MockClonable) hm3.get(1)).i); 238adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 239adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 240adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project /** 241229e34b182b98e1dba15d3dc6341954986ae2b7aBrian Carlstrom * java.util.HashMap#containsKey(java.lang.Object) 242adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project */ 243adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project public void test_containsKeyLjava_lang_Object() { 244adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project // Test for method boolean 245adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project // java.util.HashMap.containsKey(java.lang.Object) 246adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project assertTrue("Returned false for valid key", hm.containsKey(new Integer( 247adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 876).toString())); 248adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project assertTrue("Returned true for invalid key", !hm.containsKey("KKDKDKD")); 249adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 250adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project HashMap m = new HashMap(); 251adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project m.put(null, "test"); 252adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project assertTrue("Failed with null key", m.containsKey(null)); 253adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project assertTrue("Failed with missing key matching null hash", !m 254adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project .containsKey(new Integer(0))); 255adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 256adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 257adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project /** 258229e34b182b98e1dba15d3dc6341954986ae2b7aBrian Carlstrom * java.util.HashMap#containsValue(java.lang.Object) 259adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project */ 260adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project public void test_containsValueLjava_lang_Object() { 261adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project // Test for method boolean 262adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project // java.util.HashMap.containsValue(java.lang.Object) 263adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project assertTrue("Returned false for valid value", hm 264adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project .containsValue(new Integer(875))); 265adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project assertTrue("Returned true for invalid valie", !hm 266adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project .containsValue(new Integer(-9))); 267adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 268adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 269adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project /** 270229e34b182b98e1dba15d3dc6341954986ae2b7aBrian Carlstrom * java.util.HashMap#entrySet() 271adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project */ 272adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project public void test_entrySet() { 273adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project // Test for method java.util.Set java.util.HashMap.entrySet() 274adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project Set s = hm.entrySet(); 275adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project Iterator i = s.iterator(); 276adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project assertTrue("Returned set of incorrect size", hm.size() == s.size()); 277adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project while (i.hasNext()) { 278adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project Map.Entry m = (Map.Entry) i.next(); 279adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project assertTrue("Returned incorrect entry set", hm.containsKey(m 280adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project .getKey()) 281adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project && hm.containsValue(m.getValue())); 282adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 283ba45f538a14c08015021e899f5883f07ed2ff237Narayan Kamath 284ba45f538a14c08015021e899f5883f07ed2ff237Narayan Kamath Iterator iter = s.iterator(); 285ba45f538a14c08015021e899f5883f07ed2ff237Narayan Kamath s.remove(iter.next()); 286ba45f538a14c08015021e899f5883f07ed2ff237Narayan Kamath assertEquals(1001, s.size()); 287adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 288adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 289adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project /** 290229e34b182b98e1dba15d3dc6341954986ae2b7aBrian Carlstrom * java.util.HashMap#entrySet() 29119ab821c3b1da5812590140a21ad9d551a3a3ec5Joshua Bloch */ 29219ab821c3b1da5812590140a21ad9d551a3a3ec5Joshua Bloch public void test_entrySetEquals() { 29319ab821c3b1da5812590140a21ad9d551a3a3ec5Joshua Bloch Set s1 = hm.entrySet(); 29419ab821c3b1da5812590140a21ad9d551a3a3ec5Joshua Bloch Set s2 = new HashMap(hm).entrySet(); 29519ab821c3b1da5812590140a21ad9d551a3a3ec5Joshua Bloch assertEquals(s1, s2); 29619ab821c3b1da5812590140a21ad9d551a3a3ec5Joshua Bloch } 29719ab821c3b1da5812590140a21ad9d551a3a3ec5Joshua Bloch 29819ab821c3b1da5812590140a21ad9d551a3a3ec5Joshua Bloch /** 299229e34b182b98e1dba15d3dc6341954986ae2b7aBrian Carlstrom * java.util.HashMap#entrySet() 30019ab821c3b1da5812590140a21ad9d551a3a3ec5Joshua Bloch */ 30119ab821c3b1da5812590140a21ad9d551a3a3ec5Joshua Bloch public void test_removeFromViews() { 30219ab821c3b1da5812590140a21ad9d551a3a3ec5Joshua Bloch hm.put("A", null); 30319ab821c3b1da5812590140a21ad9d551a3a3ec5Joshua Bloch hm.put("B", null); 30419ab821c3b1da5812590140a21ad9d551a3a3ec5Joshua Bloch assertTrue(hm.keySet().remove("A")); 30519ab821c3b1da5812590140a21ad9d551a3a3ec5Joshua Bloch 30619ab821c3b1da5812590140a21ad9d551a3a3ec5Joshua Bloch Map<String, String> m2 = new HashMap<String, String>(); 30719ab821c3b1da5812590140a21ad9d551a3a3ec5Joshua Bloch m2.put("B", null); 30819ab821c3b1da5812590140a21ad9d551a3a3ec5Joshua Bloch assertTrue(hm.entrySet().remove(m2.entrySet().iterator().next())); 30919ab821c3b1da5812590140a21ad9d551a3a3ec5Joshua Bloch } 31019ab821c3b1da5812590140a21ad9d551a3a3ec5Joshua Bloch 311ba45f538a14c08015021e899f5883f07ed2ff237Narayan Kamath 31219ab821c3b1da5812590140a21ad9d551a3a3ec5Joshua Bloch /** 313229e34b182b98e1dba15d3dc6341954986ae2b7aBrian Carlstrom * java.util.HashMap#get(java.lang.Object) 314adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project */ 315adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project public void test_getLjava_lang_Object() { 316adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project // Test for method java.lang.Object 317adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project // java.util.HashMap.get(java.lang.Object) 318adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project assertNull("Get returned non-null for non existent key", 319adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project hm.get("T")); 320adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project hm.put("T", "HELLO"); 321adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project assertEquals("Get returned incorrect value for existing key", "HELLO", hm.get("T") 322ba45f538a14c08015021e899f5883f07ed2ff237Narayan Kamath ); 323adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 324adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project HashMap m = new HashMap(); 325adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project m.put(null, "test"); 326adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project assertEquals("Failed with null key", "test", m.get(null)); 327adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project assertNull("Failed with missing key matching null hash", m 328adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project .get(new Integer(0))); 329f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes 330adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project // Regression for HARMONY-206 331adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project ReusableKey k = new ReusableKey(); 332adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project HashMap map = new HashMap(); 333adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project k.setKey(1); 334adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project map.put(k, "value1"); 335adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 336adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project k.setKey(18); 337adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project assertNull(map.get(k)); 338adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 339adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project k.setKey(17); 340adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project assertNull(map.get(k)); 341adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 342adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 343adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project /** 344229e34b182b98e1dba15d3dc6341954986ae2b7aBrian Carlstrom * java.util.HashMap#isEmpty() 345adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project */ 346adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project public void test_isEmpty() { 347adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project // Test for method boolean java.util.HashMap.isEmpty() 348adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project assertTrue("Returned false for new map", new HashMap().isEmpty()); 349adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project assertTrue("Returned true for non-empty", !hm.isEmpty()); 350adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 351adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 352adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project /** 353229e34b182b98e1dba15d3dc6341954986ae2b7aBrian Carlstrom * java.util.HashMap#keySet() 354adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project */ 355adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project public void test_keySet() { 356adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project // Test for method java.util.Set java.util.HashMap.keySet() 357adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project Set s = hm.keySet(); 358adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project assertTrue("Returned set of incorrect size()", s.size() == hm.size()); 359adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project for (int i = 0; i < objArray.length; i++) 360adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project assertTrue("Returned set does not contain all keys", s 361adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project .contains(objArray[i].toString())); 362adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 363adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project HashMap m = new HashMap(); 364adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project m.put(null, "test"); 365adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project assertTrue("Failed with null key", m.keySet().contains(null)); 366adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project assertNull("Failed with null key", m.keySet().iterator().next()); 367adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 368adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project Map map = new HashMap(101); 369adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project map.put(new Integer(1), "1"); 370adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project map.put(new Integer(102), "102"); 371adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project map.put(new Integer(203), "203"); 372adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project Iterator it = map.keySet().iterator(); 373adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project Integer remove1 = (Integer) it.next(); 374adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project it.hasNext(); 375adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project it.remove(); 376adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project Integer remove2 = (Integer) it.next(); 377adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project it.remove(); 378adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project ArrayList list = new ArrayList(Arrays.asList(new Integer[] { 379adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project new Integer(1), new Integer(102), new Integer(203) })); 380adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project list.remove(remove1); 381adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project list.remove(remove2); 382adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project assertTrue("Wrong result", it.next().equals(list.get(0))); 383adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project assertEquals("Wrong size", 1, map.size()); 384adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project assertTrue("Wrong contents", map.keySet().iterator().next().equals( 385adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project list.get(0))); 386adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 387adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project Map map2 = new HashMap(101); 388adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project map2.put(new Integer(1), "1"); 389adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project map2.put(new Integer(4), "4"); 390adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project Iterator it2 = map2.keySet().iterator(); 391adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project Integer remove3 = (Integer) it2.next(); 392adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project Integer next; 393adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project if (remove3.intValue() == 1) 394adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project next = new Integer(4); 395adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project else 396adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project next = new Integer(1); 397adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project it2.hasNext(); 398adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project it2.remove(); 399adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project assertTrue("Wrong result 2", it2.next().equals(next)); 400adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project assertEquals("Wrong size 2", 1, map2.size()); 401adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project assertTrue("Wrong contents 2", map2.keySet().iterator().next().equals( 402adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project next)); 403adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 404adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 405adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project /** 406229e34b182b98e1dba15d3dc6341954986ae2b7aBrian Carlstrom * java.util.HashMap#put(java.lang.Object, java.lang.Object) 407adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project */ 408adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project public void test_putLjava_lang_ObjectLjava_lang_Object() { 409adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project hm.put("KEY", "VALUE"); 410ba45f538a14c08015021e899f5883f07ed2ff237Narayan Kamath assertEquals("Failed to install key/value pair", "VALUE", hm.get("KEY")); 411adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 412ba45f538a14c08015021e899f5883f07ed2ff237Narayan Kamath HashMap<Object, Object> m = new HashMap<Object, Object>(); 413adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project m.put(new Short((short) 0), "short"); 414adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project m.put(null, "test"); 415adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project m.put(new Integer(0), "int"); 416ba45f538a14c08015021e899f5883f07ed2ff237Narayan Kamath assertEquals("Failed adding to bucket containing null", "short", m 417ba45f538a14c08015021e899f5883f07ed2ff237Narayan Kamath .get(new Short((short) 0))); 418ba45f538a14c08015021e899f5883f07ed2ff237Narayan Kamath assertEquals("Failed adding to bucket containing null2", "int", m 419ba45f538a14c08015021e899f5883f07ed2ff237Narayan Kamath .get(new Integer(0))); 420ba45f538a14c08015021e899f5883f07ed2ff237Narayan Kamath 421ba45f538a14c08015021e899f5883f07ed2ff237Narayan Kamath // Check my actual key instance is returned 422ba45f538a14c08015021e899f5883f07ed2ff237Narayan Kamath HashMap<Integer, String> map = new HashMap<Integer, String>(); 423ba45f538a14c08015021e899f5883f07ed2ff237Narayan Kamath for (int i = -32767; i < 32768; i++) { 424ba45f538a14c08015021e899f5883f07ed2ff237Narayan Kamath map.put(i, "foobar"); 425ba45f538a14c08015021e899f5883f07ed2ff237Narayan Kamath } 426ba45f538a14c08015021e899f5883f07ed2ff237Narayan Kamath Integer myKey = new Integer(0); 427ba45f538a14c08015021e899f5883f07ed2ff237Narayan Kamath // Put a new value at the old key position 428ba45f538a14c08015021e899f5883f07ed2ff237Narayan Kamath map.put(myKey, "myValue"); 429ba45f538a14c08015021e899f5883f07ed2ff237Narayan Kamath assertTrue(map.containsKey(myKey)); 430ba45f538a14c08015021e899f5883f07ed2ff237Narayan Kamath assertEquals("myValue", map.get(myKey)); 431ba45f538a14c08015021e899f5883f07ed2ff237Narayan Kamath boolean found = false; 432ba45f538a14c08015021e899f5883f07ed2ff237Narayan Kamath for (Iterator<Integer> itr = map.keySet().iterator(); itr.hasNext(); ) { 433ba45f538a14c08015021e899f5883f07ed2ff237Narayan Kamath Integer key = itr.next(); 434ba45f538a14c08015021e899f5883f07ed2ff237Narayan Kamath if (found = key == myKey) { 435ba45f538a14c08015021e899f5883f07ed2ff237Narayan Kamath break; 436ba45f538a14c08015021e899f5883f07ed2ff237Narayan Kamath } 437ba45f538a14c08015021e899f5883f07ed2ff237Narayan Kamath } 438ba45f538a14c08015021e899f5883f07ed2ff237Narayan Kamath assertFalse("Should not find new key instance in hashmap", found); 439ba45f538a14c08015021e899f5883f07ed2ff237Narayan Kamath 440ba45f538a14c08015021e899f5883f07ed2ff237Narayan Kamath // Add a new key instance and check it is returned 441ba45f538a14c08015021e899f5883f07ed2ff237Narayan Kamath assertNotNull(map.remove(myKey)); 442ba45f538a14c08015021e899f5883f07ed2ff237Narayan Kamath map.put(myKey, "myValue"); 443ba45f538a14c08015021e899f5883f07ed2ff237Narayan Kamath assertTrue(map.containsKey(myKey)); 444ba45f538a14c08015021e899f5883f07ed2ff237Narayan Kamath assertEquals("myValue", map.get(myKey)); 445ba45f538a14c08015021e899f5883f07ed2ff237Narayan Kamath for (Iterator<Integer> itr = map.keySet().iterator(); itr.hasNext(); ) { 446ba45f538a14c08015021e899f5883f07ed2ff237Narayan Kamath Integer key = itr.next(); 447ba45f538a14c08015021e899f5883f07ed2ff237Narayan Kamath if (found = key == myKey) { 448ba45f538a14c08015021e899f5883f07ed2ff237Narayan Kamath break; 449ba45f538a14c08015021e899f5883f07ed2ff237Narayan Kamath } 450ba45f538a14c08015021e899f5883f07ed2ff237Narayan Kamath } 451ba45f538a14c08015021e899f5883f07ed2ff237Narayan Kamath assertTrue("Did not find new key instance in hashmap", found); 452ba45f538a14c08015021e899f5883f07ed2ff237Narayan Kamath 453ba45f538a14c08015021e899f5883f07ed2ff237Narayan Kamath // Ensure keys with identical hashcode are stored separately 454ba45f538a14c08015021e899f5883f07ed2ff237Narayan Kamath HashMap<Object, Object> objmap = new HashMap<Object, Object>(); 455ba45f538a14c08015021e899f5883f07ed2ff237Narayan Kamath for (int i = 0; i < 32768; i++) { 456ba45f538a14c08015021e899f5883f07ed2ff237Narayan Kamath objmap.put(i, "foobar"); 457ba45f538a14c08015021e899f5883f07ed2ff237Narayan Kamath } 458ba45f538a14c08015021e899f5883f07ed2ff237Narayan Kamath // Put non-equal object with same hashcode 459ba45f538a14c08015021e899f5883f07ed2ff237Narayan Kamath MyKey aKey = new MyKey(); 460ba45f538a14c08015021e899f5883f07ed2ff237Narayan Kamath assertNull(objmap.put(aKey, "value")); 461ba45f538a14c08015021e899f5883f07ed2ff237Narayan Kamath assertNull(objmap.remove(new MyKey())); 462ba45f538a14c08015021e899f5883f07ed2ff237Narayan Kamath assertEquals("foobar", objmap.get(0)); 463ba45f538a14c08015021e899f5883f07ed2ff237Narayan Kamath assertEquals("value", objmap.get(aKey)); 464ba45f538a14c08015021e899f5883f07ed2ff237Narayan Kamath } 465ba45f538a14c08015021e899f5883f07ed2ff237Narayan Kamath 466ba45f538a14c08015021e899f5883f07ed2ff237Narayan Kamath static class MyKey { 467ba45f538a14c08015021e899f5883f07ed2ff237Narayan Kamath public MyKey() { 468ba45f538a14c08015021e899f5883f07ed2ff237Narayan Kamath super(); 469ba45f538a14c08015021e899f5883f07ed2ff237Narayan Kamath } 470ba45f538a14c08015021e899f5883f07ed2ff237Narayan Kamath 471ba45f538a14c08015021e899f5883f07ed2ff237Narayan Kamath public int hashCode() { 472ba45f538a14c08015021e899f5883f07ed2ff237Narayan Kamath return 0; 473ba45f538a14c08015021e899f5883f07ed2ff237Narayan Kamath } 474adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 475adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 476adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project /** 477229e34b182b98e1dba15d3dc6341954986ae2b7aBrian Carlstrom * java.util.HashMap#putAll(java.util.Map) 478adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project */ 479adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project public void test_putAllLjava_util_Map() { 480adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project // Test for method void java.util.HashMap.putAll(java.util.Map) 481adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project HashMap hm2 = new HashMap(); 482adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project hm2.putAll(hm); 483adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project for (int i = 0; i < 1000; i++) 484adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project assertTrue("Failed to clear all elements", hm2.get( 485adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project new Integer(i).toString()).equals((new Integer(i)))); 486f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes 487adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project Map mockMap = new MockMap(); 488adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project hm2 = new HashMap(); 489adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project hm2.putAll(mockMap); 490adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project assertEquals("Size should be 0", 0, hm2.size()); 491adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 492f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes 493adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project /** 494229e34b182b98e1dba15d3dc6341954986ae2b7aBrian Carlstrom * java.util.HashMap#putAll(java.util.Map) 495adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project */ 496adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project public void test_putAllLjava_util_Map_Null() { 497adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project HashMap hashMap = new HashMap(); 498adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project try { 499adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project hashMap.putAll(new MockMapNull()); 500adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project fail("Should throw NullPointerException"); 501adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } catch (NullPointerException e) { 502adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project // expected. 503adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 504adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 505adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project try { 506adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project hashMap = new HashMap(new MockMapNull()); 507adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project fail("Should throw NullPointerException"); 508adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } catch (NullPointerException e) { 509adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project // expected. 510adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 51119ab821c3b1da5812590140a21ad9d551a3a3ec5Joshua Bloch } 51219ab821c3b1da5812590140a21ad9d551a3a3ec5Joshua Bloch 51319ab821c3b1da5812590140a21ad9d551a3a3ec5Joshua Bloch public void test_putAllLjava_util_Map_Resize() { 51419ab821c3b1da5812590140a21ad9d551a3a3ec5Joshua Bloch Random rnd = new Random(666); 51519ab821c3b1da5812590140a21ad9d551a3a3ec5Joshua Bloch 51619ab821c3b1da5812590140a21ad9d551a3a3ec5Joshua Bloch Map<Integer,Integer> m1 = new HashMap<Integer, Integer>(); 51719ab821c3b1da5812590140a21ad9d551a3a3ec5Joshua Bloch int MID = 10000; 51819ab821c3b1da5812590140a21ad9d551a3a3ec5Joshua Bloch for (int i = 0; i < MID; i++) { 51919ab821c3b1da5812590140a21ad9d551a3a3ec5Joshua Bloch Integer j = rnd.nextInt(); 52019ab821c3b1da5812590140a21ad9d551a3a3ec5Joshua Bloch m1.put(j, j); 52119ab821c3b1da5812590140a21ad9d551a3a3ec5Joshua Bloch } 52219ab821c3b1da5812590140a21ad9d551a3a3ec5Joshua Bloch 52319ab821c3b1da5812590140a21ad9d551a3a3ec5Joshua Bloch Map<Integer,Integer> m2 = new HashMap<Integer, Integer>(); 52419ab821c3b1da5812590140a21ad9d551a3a3ec5Joshua Bloch int HI = 30000; 52519ab821c3b1da5812590140a21ad9d551a3a3ec5Joshua Bloch for (int i = MID; i < HI; i++) { 52619ab821c3b1da5812590140a21ad9d551a3a3ec5Joshua Bloch Integer j = rnd.nextInt(); 52719ab821c3b1da5812590140a21ad9d551a3a3ec5Joshua Bloch m2.put(j, j); 52819ab821c3b1da5812590140a21ad9d551a3a3ec5Joshua Bloch } 529f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes 53019ab821c3b1da5812590140a21ad9d551a3a3ec5Joshua Bloch m1.putAll(m2); 53119ab821c3b1da5812590140a21ad9d551a3a3ec5Joshua Bloch 53219ab821c3b1da5812590140a21ad9d551a3a3ec5Joshua Bloch rnd = new Random(666); 53319ab821c3b1da5812590140a21ad9d551a3a3ec5Joshua Bloch for (int i = 0; i < HI; i++) { 53419ab821c3b1da5812590140a21ad9d551a3a3ec5Joshua Bloch Integer j = rnd.nextInt(); 53519ab821c3b1da5812590140a21ad9d551a3a3ec5Joshua Bloch assertEquals(j, m1.get(j)); 53619ab821c3b1da5812590140a21ad9d551a3a3ec5Joshua Bloch } 53719ab821c3b1da5812590140a21ad9d551a3a3ec5Joshua Bloch } 538adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 539adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project /** 540229e34b182b98e1dba15d3dc6341954986ae2b7aBrian Carlstrom * java.util.HashMap#remove(java.lang.Object) 541adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project */ 542a072e981b99e7dd0ecc0be06d8c237e41179a6b4Andreas Gampe @SuppressWarnings("CollectionIncompatibleType") 543adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project public void test_removeLjava_lang_Object() { 544adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project int size = hm.size(); 545adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project Integer y = new Integer(9); 546adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project Integer x = ((Integer) hm.remove(y.toString())); 547adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project assertTrue("Remove returned incorrect value", x.equals(new Integer(9))); 548adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project assertNull("Failed to remove given key", hm.get(new Integer(9))); 549adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project assertTrue("Failed to decrement size", hm.size() == (size - 1)); 550adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project assertNull("Remove of non-existent key returned non-null", hm 551adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project .remove("LCLCLC")); 552adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 553adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project HashMap m = new HashMap(); 554adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project m.put(null, "test"); 555adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project assertNull("Failed with same hash as null", 556adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project m.remove(new Integer(0))); 557adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project assertEquals("Failed with null key", "test", m.remove(null)); 558ba45f538a14c08015021e899f5883f07ed2ff237Narayan Kamath 559ba45f538a14c08015021e899f5883f07ed2ff237Narayan Kamath HashMap<Integer, Object> map = new HashMap<Integer, Object>(); 560ba45f538a14c08015021e899f5883f07ed2ff237Narayan Kamath for (int i = 0; i < 32768; i++) { 561ba45f538a14c08015021e899f5883f07ed2ff237Narayan Kamath map.put(i, "const"); 562ba45f538a14c08015021e899f5883f07ed2ff237Narayan Kamath } 563ba45f538a14c08015021e899f5883f07ed2ff237Narayan Kamath Object[] values = new Object[32768]; 564ba45f538a14c08015021e899f5883f07ed2ff237Narayan Kamath for (int i = 0; i < 32768; i++) { 565ba45f538a14c08015021e899f5883f07ed2ff237Narayan Kamath values[i] = new Object(); 566ba45f538a14c08015021e899f5883f07ed2ff237Narayan Kamath map.put(i, values[i]); 567ba45f538a14c08015021e899f5883f07ed2ff237Narayan Kamath } 568ba45f538a14c08015021e899f5883f07ed2ff237Narayan Kamath for (int i = 32767; i >= 0; i--) { 569ba45f538a14c08015021e899f5883f07ed2ff237Narayan Kamath assertEquals("Failed to remove same value", values[i], map.remove(i)); 570ba45f538a14c08015021e899f5883f07ed2ff237Narayan Kamath } 571ba45f538a14c08015021e899f5883f07ed2ff237Narayan Kamath 572ba45f538a14c08015021e899f5883f07ed2ff237Narayan Kamath // Ensure keys with identical hashcode are removed properly 573ba45f538a14c08015021e899f5883f07ed2ff237Narayan Kamath map = new HashMap<Integer, Object>(); 574ba45f538a14c08015021e899f5883f07ed2ff237Narayan Kamath for (int i = -32767; i < 32768; i++) { 575ba45f538a14c08015021e899f5883f07ed2ff237Narayan Kamath map.put(i, "foobar"); 576ba45f538a14c08015021e899f5883f07ed2ff237Narayan Kamath } 577ba45f538a14c08015021e899f5883f07ed2ff237Narayan Kamath // Remove non equal object with same hashcode 578ba45f538a14c08015021e899f5883f07ed2ff237Narayan Kamath assertNull(map.remove(new MyKey())); 579ba45f538a14c08015021e899f5883f07ed2ff237Narayan Kamath assertEquals("foobar", map.get(0)); 580ba45f538a14c08015021e899f5883f07ed2ff237Narayan Kamath map.remove(0); 581ba45f538a14c08015021e899f5883f07ed2ff237Narayan Kamath assertNull(map.get(0)); 582adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 583adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 584adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project /** 585229e34b182b98e1dba15d3dc6341954986ae2b7aBrian Carlstrom * java.util.HashMap#size() 586adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project */ 587adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project public void test_size() { 588adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project // Test for method int java.util.HashMap.size() 589adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project assertTrue("Returned incorrect size", 590adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project hm.size() == (objArray.length + 2)); 591adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 592adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 593adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project /** 594229e34b182b98e1dba15d3dc6341954986ae2b7aBrian Carlstrom * java.util.HashMap#values() 595adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project */ 596adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project public void test_values() { 597adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project // Test for method java.util.Collection java.util.HashMap.values() 598adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project Collection c = hm.values(); 599adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project assertTrue("Returned collection of incorrect size()", c.size() == hm 600adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project .size()); 601adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project for (int i = 0; i < objArray.length; i++) 602adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project assertTrue("Returned collection does not contain all keys", c 603adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project .contains(objArray[i])); 604adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 605adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project HashMap myHashMap = new HashMap(); 606adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project for (int i = 0; i < 100; i++) 607adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project myHashMap.put(objArray2[i], objArray[i]); 608adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project Collection values = myHashMap.values(); 609adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project new Support_UnmodifiableCollectionTest( 610adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project "Test Returned Collection From HashMap.values()", values) 611adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project .runTest(); 612adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project values.remove(new Integer(0)); 613adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project assertTrue( 614adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project "Removing from the values collection should remove from the original map", 615adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project !myHashMap.containsValue(new Integer(0))); 616adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 617adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 618adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 619ba45f538a14c08015021e899f5883f07ed2ff237Narayan Kamath /** 620ba45f538a14c08015021e899f5883f07ed2ff237Narayan Kamath * java.util.AbstractMap#toString() 621ba45f538a14c08015021e899f5883f07ed2ff237Narayan Kamath */ 622ba45f538a14c08015021e899f5883f07ed2ff237Narayan Kamath public void test_toString() { 623ba45f538a14c08015021e899f5883f07ed2ff237Narayan Kamath 624ba45f538a14c08015021e899f5883f07ed2ff237Narayan Kamath HashMap m = new HashMap(); 625ba45f538a14c08015021e899f5883f07ed2ff237Narayan Kamath m.put(m, m); 626ba45f538a14c08015021e899f5883f07ed2ff237Narayan Kamath String result = m.toString(); 627ba45f538a14c08015021e899f5883f07ed2ff237Narayan Kamath assertTrue("should contain self ref", result.indexOf("(this") > -1); 628ba45f538a14c08015021e899f5883f07ed2ff237Narayan Kamath } 629ba45f538a14c08015021e899f5883f07ed2ff237Narayan Kamath 630adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project static class ReusableKey { 631adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project private int key = 0; 632adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 633adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project public void setKey(int key) { 634adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project this.key = key; 635adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 636adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 637adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project public int hashCode() { 638adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project return key; 639adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 640adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 641adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project public boolean equals(Object o) { 642adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project if (o == this) { 643adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project return true; 644adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 645adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project if (!(o instanceof ReusableKey)) { 646adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project return false; 647adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 648adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project return key == ((ReusableKey) o).key; 649adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 650adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 651ba45f538a14c08015021e899f5883f07ed2ff237Narayan Kamath 652adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project public void test_Map_Entry_hashCode() { 653adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project //Related to HARMONY-403 654adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project HashMap<Integer, Integer> map = new HashMap<Integer, Integer>(10); 655adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project Integer key = new Integer(1); 656adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project Integer val = new Integer(2); 657adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project map.put(key, val); 658adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project int expected = key.hashCode() ^ val.hashCode(); 659adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project assertEquals(expected, map.hashCode()); 660adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project key = new Integer(4); 661adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project val = new Integer(8); 662adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project map.put(key, val); 663adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project expected += key.hashCode() ^ val.hashCode(); 664adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project assertEquals(expected, map.hashCode()); 665f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes } 666f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes 667ba45f538a14c08015021e899f5883f07ed2ff237Narayan Kamath class MockClonable implements Cloneable { 668adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project public int i; 669f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes 670adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project public MockClonable(int i) { 671adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project this.i = i; 672adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 673f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes 674adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project @Override 675adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project protected Object clone() throws CloneNotSupportedException { 676adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project return new MockClonable(i); 677adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 678adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 679f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes 680ba45f538a14c08015021e899f5883f07ed2ff237Narayan Kamath /* 681ba45f538a14c08015021e899f5883f07ed2ff237Narayan Kamath * Regression test for HY-4750 682ba45f538a14c08015021e899f5883f07ed2ff237Narayan Kamath */ 683ba45f538a14c08015021e899f5883f07ed2ff237Narayan Kamath public void test_EntrySet() { 684ba45f538a14c08015021e899f5883f07ed2ff237Narayan Kamath HashMap map = new HashMap(); 685ba45f538a14c08015021e899f5883f07ed2ff237Narayan Kamath map.put(new Integer(1), "ONE"); 686ba45f538a14c08015021e899f5883f07ed2ff237Narayan Kamath 687ba45f538a14c08015021e899f5883f07ed2ff237Narayan Kamath Set entrySet = map.entrySet(); 688ba45f538a14c08015021e899f5883f07ed2ff237Narayan Kamath Iterator e = entrySet.iterator(); 689ba45f538a14c08015021e899f5883f07ed2ff237Narayan Kamath Object real = e.next(); 690ba45f538a14c08015021e899f5883f07ed2ff237Narayan Kamath Map.Entry copyEntry = new MockEntry(); 691ba45f538a14c08015021e899f5883f07ed2ff237Narayan Kamath assertEquals(real, copyEntry); 692ba45f538a14c08015021e899f5883f07ed2ff237Narayan Kamath assertTrue(entrySet.contains(copyEntry)); 693ba45f538a14c08015021e899f5883f07ed2ff237Narayan Kamath 694ba45f538a14c08015021e899f5883f07ed2ff237Narayan Kamath entrySet.remove(copyEntry); 695ba45f538a14c08015021e899f5883f07ed2ff237Narayan Kamath assertFalse(entrySet.contains(copyEntry)); 696ba45f538a14c08015021e899f5883f07ed2ff237Narayan Kamath } 697ba45f538a14c08015021e899f5883f07ed2ff237Narayan Kamath 69860796efea3a74e02aea384b8eb56103ea21b880bPrzemyslaw Szczepaniak public void test_forEach() throws Exception { 69960796efea3a74e02aea384b8eb56103ea21b880bPrzemyslaw Szczepaniak HashMap<String, String> map = new HashMap<>(); 70060796efea3a74e02aea384b8eb56103ea21b880bPrzemyslaw Szczepaniak map.put("one", "1"); 70160796efea3a74e02aea384b8eb56103ea21b880bPrzemyslaw Szczepaniak map.put("two", "2"); 70260796efea3a74e02aea384b8eb56103ea21b880bPrzemyslaw Szczepaniak map.put("three", "3"); 70360796efea3a74e02aea384b8eb56103ea21b880bPrzemyslaw Szczepaniak 70460796efea3a74e02aea384b8eb56103ea21b880bPrzemyslaw Szczepaniak HashMap<String, String> output = new HashMap<>(); 70560796efea3a74e02aea384b8eb56103ea21b880bPrzemyslaw Szczepaniak map.forEach((k, v) -> output.put(k,v)); 70660796efea3a74e02aea384b8eb56103ea21b880bPrzemyslaw Szczepaniak assertEquals(map, output); 70760796efea3a74e02aea384b8eb56103ea21b880bPrzemyslaw Szczepaniak 70860796efea3a74e02aea384b8eb56103ea21b880bPrzemyslaw Szczepaniak HashSet<String> setOutput = new HashSet<>(); 70960796efea3a74e02aea384b8eb56103ea21b880bPrzemyslaw Szczepaniak map.keySet().forEach((k) -> setOutput.add(k)); 71060796efea3a74e02aea384b8eb56103ea21b880bPrzemyslaw Szczepaniak assertEquals(map.keySet(), setOutput); 71160796efea3a74e02aea384b8eb56103ea21b880bPrzemyslaw Szczepaniak 71260796efea3a74e02aea384b8eb56103ea21b880bPrzemyslaw Szczepaniak setOutput.clear(); 71360796efea3a74e02aea384b8eb56103ea21b880bPrzemyslaw Szczepaniak map.values().forEach((v) -> setOutput.add(v)); 71460796efea3a74e02aea384b8eb56103ea21b880bPrzemyslaw Szczepaniak assertEquals(new HashSet<>(map.values()), setOutput); 71560796efea3a74e02aea384b8eb56103ea21b880bPrzemyslaw Szczepaniak 71660796efea3a74e02aea384b8eb56103ea21b880bPrzemyslaw Szczepaniak HashSet<Map.Entry<String,String>> entrySetOutput = new HashSet<>(); 71760796efea3a74e02aea384b8eb56103ea21b880bPrzemyslaw Szczepaniak map.entrySet().forEach((v) -> entrySetOutput.add(v)); 71860796efea3a74e02aea384b8eb56103ea21b880bPrzemyslaw Szczepaniak assertEquals(map.entrySet(), entrySetOutput); 71960796efea3a74e02aea384b8eb56103ea21b880bPrzemyslaw Szczepaniak } 72060796efea3a74e02aea384b8eb56103ea21b880bPrzemyslaw Szczepaniak 72160796efea3a74e02aea384b8eb56103ea21b880bPrzemyslaw Szczepaniak public void test_forEach_NPE() throws Exception { 72260796efea3a74e02aea384b8eb56103ea21b880bPrzemyslaw Szczepaniak HashMap<String, String> map = new HashMap<>(); 72360796efea3a74e02aea384b8eb56103ea21b880bPrzemyslaw Szczepaniak try { 72460796efea3a74e02aea384b8eb56103ea21b880bPrzemyslaw Szczepaniak map.forEach(null); 72560796efea3a74e02aea384b8eb56103ea21b880bPrzemyslaw Szczepaniak fail(); 72660796efea3a74e02aea384b8eb56103ea21b880bPrzemyslaw Szczepaniak } catch(NullPointerException expected) {} 72760796efea3a74e02aea384b8eb56103ea21b880bPrzemyslaw Szczepaniak 72860796efea3a74e02aea384b8eb56103ea21b880bPrzemyslaw Szczepaniak try { 72960796efea3a74e02aea384b8eb56103ea21b880bPrzemyslaw Szczepaniak map.keySet().forEach(null); 73060796efea3a74e02aea384b8eb56103ea21b880bPrzemyslaw Szczepaniak fail(); 73160796efea3a74e02aea384b8eb56103ea21b880bPrzemyslaw Szczepaniak } catch(NullPointerException expected) {} 73260796efea3a74e02aea384b8eb56103ea21b880bPrzemyslaw Szczepaniak 73360796efea3a74e02aea384b8eb56103ea21b880bPrzemyslaw Szczepaniak try { 73460796efea3a74e02aea384b8eb56103ea21b880bPrzemyslaw Szczepaniak map.values().forEach(null); 73560796efea3a74e02aea384b8eb56103ea21b880bPrzemyslaw Szczepaniak fail(); 73660796efea3a74e02aea384b8eb56103ea21b880bPrzemyslaw Szczepaniak } catch(NullPointerException expected) {} 73760796efea3a74e02aea384b8eb56103ea21b880bPrzemyslaw Szczepaniak 73860796efea3a74e02aea384b8eb56103ea21b880bPrzemyslaw Szczepaniak try { 73960796efea3a74e02aea384b8eb56103ea21b880bPrzemyslaw Szczepaniak map.entrySet().forEach(null); 74060796efea3a74e02aea384b8eb56103ea21b880bPrzemyslaw Szczepaniak fail(); 74160796efea3a74e02aea384b8eb56103ea21b880bPrzemyslaw Szczepaniak } catch(NullPointerException expected) {} 74260796efea3a74e02aea384b8eb56103ea21b880bPrzemyslaw Szczepaniak } 74360796efea3a74e02aea384b8eb56103ea21b880bPrzemyslaw Szczepaniak 74460796efea3a74e02aea384b8eb56103ea21b880bPrzemyslaw Szczepaniak public void test_forEach_CME() throws Exception { 74560796efea3a74e02aea384b8eb56103ea21b880bPrzemyslaw Szczepaniak HashMap<String, String> map = new HashMap<>(); 74660796efea3a74e02aea384b8eb56103ea21b880bPrzemyslaw Szczepaniak map.put("one", "1"); 74760796efea3a74e02aea384b8eb56103ea21b880bPrzemyslaw Szczepaniak map.put("two", "2"); 74860796efea3a74e02aea384b8eb56103ea21b880bPrzemyslaw Szczepaniak map.put("three", "3"); 74960796efea3a74e02aea384b8eb56103ea21b880bPrzemyslaw Szczepaniak 75060796efea3a74e02aea384b8eb56103ea21b880bPrzemyslaw Szczepaniak HashMap<String, String> outputMap = new HashMap<>(); 75160796efea3a74e02aea384b8eb56103ea21b880bPrzemyslaw Szczepaniak try { 75260796efea3a74e02aea384b8eb56103ea21b880bPrzemyslaw Szczepaniak map.forEach(new java.util.function.BiConsumer<String, String>() { 75360796efea3a74e02aea384b8eb56103ea21b880bPrzemyslaw Szczepaniak @Override 75460796efea3a74e02aea384b8eb56103ea21b880bPrzemyslaw Szczepaniak public void accept(String k, String v) { 75560796efea3a74e02aea384b8eb56103ea21b880bPrzemyslaw Szczepaniak outputMap.put(k, v); 75660796efea3a74e02aea384b8eb56103ea21b880bPrzemyslaw Szczepaniak map.put("foo1", v); 75760796efea3a74e02aea384b8eb56103ea21b880bPrzemyslaw Szczepaniak } 75860796efea3a74e02aea384b8eb56103ea21b880bPrzemyslaw Szczepaniak }); 75960796efea3a74e02aea384b8eb56103ea21b880bPrzemyslaw Szczepaniak fail(); 76060796efea3a74e02aea384b8eb56103ea21b880bPrzemyslaw Szczepaniak } catch(ConcurrentModificationException expected) {} 76160796efea3a74e02aea384b8eb56103ea21b880bPrzemyslaw Szczepaniak // We should get a CME and DO NOT continue forEach evaluation 76260796efea3a74e02aea384b8eb56103ea21b880bPrzemyslaw Szczepaniak assertEquals(1, outputMap.size()); 76360796efea3a74e02aea384b8eb56103ea21b880bPrzemyslaw Szczepaniak 76460796efea3a74e02aea384b8eb56103ea21b880bPrzemyslaw Szczepaniak outputMap.clear(); 76560796efea3a74e02aea384b8eb56103ea21b880bPrzemyslaw Szczepaniak try { 76660796efea3a74e02aea384b8eb56103ea21b880bPrzemyslaw Szczepaniak map.keySet().forEach(new java.util.function.Consumer<String>() { 76760796efea3a74e02aea384b8eb56103ea21b880bPrzemyslaw Szczepaniak @Override 76860796efea3a74e02aea384b8eb56103ea21b880bPrzemyslaw Szczepaniak public void accept(String k) { 76960796efea3a74e02aea384b8eb56103ea21b880bPrzemyslaw Szczepaniak outputMap.put(k, "foo"); 77060796efea3a74e02aea384b8eb56103ea21b880bPrzemyslaw Szczepaniak map.put("foo2", "boo"); 77160796efea3a74e02aea384b8eb56103ea21b880bPrzemyslaw Szczepaniak } 77260796efea3a74e02aea384b8eb56103ea21b880bPrzemyslaw Szczepaniak }); 77360796efea3a74e02aea384b8eb56103ea21b880bPrzemyslaw Szczepaniak fail(); 77460796efea3a74e02aea384b8eb56103ea21b880bPrzemyslaw Szczepaniak } catch(ConcurrentModificationException expected) {} 77560796efea3a74e02aea384b8eb56103ea21b880bPrzemyslaw Szczepaniak // We should get a CME and DO NOT continue forEach evaluation 77660796efea3a74e02aea384b8eb56103ea21b880bPrzemyslaw Szczepaniak assertEquals(1, outputMap.size()); 77760796efea3a74e02aea384b8eb56103ea21b880bPrzemyslaw Szczepaniak 77860796efea3a74e02aea384b8eb56103ea21b880bPrzemyslaw Szczepaniak outputMap.clear(); 77960796efea3a74e02aea384b8eb56103ea21b880bPrzemyslaw Szczepaniak try { 78060796efea3a74e02aea384b8eb56103ea21b880bPrzemyslaw Szczepaniak map.values().forEach(new java.util.function.Consumer<String>() { 78160796efea3a74e02aea384b8eb56103ea21b880bPrzemyslaw Szczepaniak @Override 78260796efea3a74e02aea384b8eb56103ea21b880bPrzemyslaw Szczepaniak public void accept(String k) { 78360796efea3a74e02aea384b8eb56103ea21b880bPrzemyslaw Szczepaniak outputMap.put(k, "foo"); 78460796efea3a74e02aea384b8eb56103ea21b880bPrzemyslaw Szczepaniak map.put("foo3", "boo"); 78560796efea3a74e02aea384b8eb56103ea21b880bPrzemyslaw Szczepaniak } 78660796efea3a74e02aea384b8eb56103ea21b880bPrzemyslaw Szczepaniak }); 78760796efea3a74e02aea384b8eb56103ea21b880bPrzemyslaw Szczepaniak fail(); 78860796efea3a74e02aea384b8eb56103ea21b880bPrzemyslaw Szczepaniak } catch(ConcurrentModificationException expected) {} 78960796efea3a74e02aea384b8eb56103ea21b880bPrzemyslaw Szczepaniak // We should get a CME and DO NOT continue forEach evaluation 79060796efea3a74e02aea384b8eb56103ea21b880bPrzemyslaw Szczepaniak assertEquals(1, outputMap.size()); 79160796efea3a74e02aea384b8eb56103ea21b880bPrzemyslaw Szczepaniak 79260796efea3a74e02aea384b8eb56103ea21b880bPrzemyslaw Szczepaniak outputMap.clear(); 79360796efea3a74e02aea384b8eb56103ea21b880bPrzemyslaw Szczepaniak try { 79460796efea3a74e02aea384b8eb56103ea21b880bPrzemyslaw Szczepaniak map.entrySet().forEach(new java.util.function.Consumer<Map.Entry<String,String>>() { 79560796efea3a74e02aea384b8eb56103ea21b880bPrzemyslaw Szczepaniak @Override 79660796efea3a74e02aea384b8eb56103ea21b880bPrzemyslaw Szczepaniak public void accept(Map.Entry<String,String> k) { 79760796efea3a74e02aea384b8eb56103ea21b880bPrzemyslaw Szczepaniak outputMap.put(k.getKey(), "foo"); 79860796efea3a74e02aea384b8eb56103ea21b880bPrzemyslaw Szczepaniak map.put("foo4", "boo"); 79960796efea3a74e02aea384b8eb56103ea21b880bPrzemyslaw Szczepaniak } 80060796efea3a74e02aea384b8eb56103ea21b880bPrzemyslaw Szczepaniak }); 80160796efea3a74e02aea384b8eb56103ea21b880bPrzemyslaw Szczepaniak fail(); 80260796efea3a74e02aea384b8eb56103ea21b880bPrzemyslaw Szczepaniak } catch(ConcurrentModificationException expected) {} 80360796efea3a74e02aea384b8eb56103ea21b880bPrzemyslaw Szczepaniak // We should get a CME and DO NOT continue forEach evaluation 80460796efea3a74e02aea384b8eb56103ea21b880bPrzemyslaw Szczepaniak assertEquals(1, outputMap.size()); 80560796efea3a74e02aea384b8eb56103ea21b880bPrzemyslaw Szczepaniak } 80660796efea3a74e02aea384b8eb56103ea21b880bPrzemyslaw Szczepaniak 807ba45f538a14c08015021e899f5883f07ed2ff237Narayan Kamath private static class MockEntry implements Map.Entry { 808ba45f538a14c08015021e899f5883f07ed2ff237Narayan Kamath 809ba45f538a14c08015021e899f5883f07ed2ff237Narayan Kamath public Object getKey() { 810ba45f538a14c08015021e899f5883f07ed2ff237Narayan Kamath return new Integer(1); 811ba45f538a14c08015021e899f5883f07ed2ff237Narayan Kamath } 812ba45f538a14c08015021e899f5883f07ed2ff237Narayan Kamath 813ba45f538a14c08015021e899f5883f07ed2ff237Narayan Kamath public Object getValue() { 814ba45f538a14c08015021e899f5883f07ed2ff237Narayan Kamath return "ONE"; 815ba45f538a14c08015021e899f5883f07ed2ff237Narayan Kamath } 816ba45f538a14c08015021e899f5883f07ed2ff237Narayan Kamath 817ba45f538a14c08015021e899f5883f07ed2ff237Narayan Kamath public Object setValue(Object object) { 818ba45f538a14c08015021e899f5883f07ed2ff237Narayan Kamath return null; 819ba45f538a14c08015021e899f5883f07ed2ff237Narayan Kamath } 820ba45f538a14c08015021e899f5883f07ed2ff237Narayan Kamath } 821ba45f538a14c08015021e899f5883f07ed2ff237Narayan Kamath 8224c89023ef86f29fa9add7db2574f2169fe842577Narayan Kamath public void test_spliterator_keySet() { 8234c89023ef86f29fa9add7db2574f2169fe842577Narayan Kamath HashMap<String, String> hashMap = new HashMap<>(); 8244c89023ef86f29fa9add7db2574f2169fe842577Narayan Kamath hashMap.put("a", "1"); 8254c89023ef86f29fa9add7db2574f2169fe842577Narayan Kamath hashMap.put("b", "2"); 8264c89023ef86f29fa9add7db2574f2169fe842577Narayan Kamath hashMap.put("c", "3"); 8274c89023ef86f29fa9add7db2574f2169fe842577Narayan Kamath hashMap.put("d", "4"); 8284c89023ef86f29fa9add7db2574f2169fe842577Narayan Kamath hashMap.put("e", "5"); 8294c89023ef86f29fa9add7db2574f2169fe842577Narayan Kamath hashMap.put("f", "6"); 8304c89023ef86f29fa9add7db2574f2169fe842577Narayan Kamath hashMap.put("g", "7"); 8314c89023ef86f29fa9add7db2574f2169fe842577Narayan Kamath hashMap.put("h", "8"); 8324c89023ef86f29fa9add7db2574f2169fe842577Narayan Kamath hashMap.put("i", "9"); 8334c89023ef86f29fa9add7db2574f2169fe842577Narayan Kamath hashMap.put("j", "10"); 8344c89023ef86f29fa9add7db2574f2169fe842577Narayan Kamath hashMap.put("k", "11"); 8354c89023ef86f29fa9add7db2574f2169fe842577Narayan Kamath hashMap.put("l", "12"); 8364c89023ef86f29fa9add7db2574f2169fe842577Narayan Kamath hashMap.put("m", "13"); 8374c89023ef86f29fa9add7db2574f2169fe842577Narayan Kamath hashMap.put("n", "14"); 8384c89023ef86f29fa9add7db2574f2169fe842577Narayan Kamath hashMap.put("o", "15"); 8394c89023ef86f29fa9add7db2574f2169fe842577Narayan Kamath hashMap.put("p", "16"); 8404c89023ef86f29fa9add7db2574f2169fe842577Narayan Kamath 8414c89023ef86f29fa9add7db2574f2169fe842577Narayan Kamath Set<String> keys = hashMap.keySet(); 8424c89023ef86f29fa9add7db2574f2169fe842577Narayan Kamath ArrayList<String> expectedKeys = new ArrayList<>(keys); 8434c89023ef86f29fa9add7db2574f2169fe842577Narayan Kamath 8444c89023ef86f29fa9add7db2574f2169fe842577Narayan Kamath SpliteratorTester.runBasicIterationTests(keys.spliterator(), expectedKeys); 8454c89023ef86f29fa9add7db2574f2169fe842577Narayan Kamath SpliteratorTester.runBasicSplitTests(keys, expectedKeys); 8464c89023ef86f29fa9add7db2574f2169fe842577Narayan Kamath SpliteratorTester.testSpliteratorNPE(keys.spliterator()); 847a73ca5822d77cff8b675ead6e5a3ad190183ba1cNarayan Kamath 848a73ca5822d77cff8b675ead6e5a3ad190183ba1cNarayan Kamath assertTrue(keys.spliterator().hasCharacteristics(Spliterator.SIZED | Spliterator.DISTINCT)); 849a73ca5822d77cff8b675ead6e5a3ad190183ba1cNarayan Kamath 850a73ca5822d77cff8b675ead6e5a3ad190183ba1cNarayan Kamath SpliteratorTester.runSizedTests(keys.spliterator(), 16); 851a73ca5822d77cff8b675ead6e5a3ad190183ba1cNarayan Kamath SpliteratorTester.runDistinctTests(keys); 852508f0abe4f8686d29466b2c364cb4f60bf0484b5Tobias Thierer SpliteratorTester.assertSupportsTrySplit(keys); 8534c89023ef86f29fa9add7db2574f2169fe842577Narayan Kamath } 8544c89023ef86f29fa9add7db2574f2169fe842577Narayan Kamath 8554c89023ef86f29fa9add7db2574f2169fe842577Narayan Kamath public void test_spliterator_valueSet() { 8564c89023ef86f29fa9add7db2574f2169fe842577Narayan Kamath HashMap<String, String> hashMap = new HashMap<>(); 8574c89023ef86f29fa9add7db2574f2169fe842577Narayan Kamath hashMap.put("a", "1"); 8584c89023ef86f29fa9add7db2574f2169fe842577Narayan Kamath hashMap.put("b", "2"); 8594c89023ef86f29fa9add7db2574f2169fe842577Narayan Kamath hashMap.put("c", "3"); 8604c89023ef86f29fa9add7db2574f2169fe842577Narayan Kamath hashMap.put("d", "4"); 8614c89023ef86f29fa9add7db2574f2169fe842577Narayan Kamath hashMap.put("e", "5"); 8624c89023ef86f29fa9add7db2574f2169fe842577Narayan Kamath hashMap.put("f", "6"); 8634c89023ef86f29fa9add7db2574f2169fe842577Narayan Kamath hashMap.put("g", "7"); 8644c89023ef86f29fa9add7db2574f2169fe842577Narayan Kamath hashMap.put("h", "8"); 8654c89023ef86f29fa9add7db2574f2169fe842577Narayan Kamath hashMap.put("i", "9"); 8664c89023ef86f29fa9add7db2574f2169fe842577Narayan Kamath hashMap.put("j", "10"); 8674c89023ef86f29fa9add7db2574f2169fe842577Narayan Kamath hashMap.put("k", "11"); 8684c89023ef86f29fa9add7db2574f2169fe842577Narayan Kamath hashMap.put("l", "12"); 8694c89023ef86f29fa9add7db2574f2169fe842577Narayan Kamath hashMap.put("m", "13"); 8704c89023ef86f29fa9add7db2574f2169fe842577Narayan Kamath hashMap.put("n", "14"); 8714c89023ef86f29fa9add7db2574f2169fe842577Narayan Kamath hashMap.put("o", "15"); 8724c89023ef86f29fa9add7db2574f2169fe842577Narayan Kamath hashMap.put("p", "16"); 8734c89023ef86f29fa9add7db2574f2169fe842577Narayan Kamath 8744c89023ef86f29fa9add7db2574f2169fe842577Narayan Kamath Collection<String> values = hashMap.values(); 8754c89023ef86f29fa9add7db2574f2169fe842577Narayan Kamath ArrayList<String> expectedValues = new ArrayList<>(values); 8764c89023ef86f29fa9add7db2574f2169fe842577Narayan Kamath 8774c89023ef86f29fa9add7db2574f2169fe842577Narayan Kamath SpliteratorTester.runBasicIterationTests(values.spliterator(), expectedValues); 8784c89023ef86f29fa9add7db2574f2169fe842577Narayan Kamath SpliteratorTester.runBasicSplitTests(values, expectedValues); 8794c89023ef86f29fa9add7db2574f2169fe842577Narayan Kamath SpliteratorTester.testSpliteratorNPE(values.spliterator()); 880a73ca5822d77cff8b675ead6e5a3ad190183ba1cNarayan Kamath 881a73ca5822d77cff8b675ead6e5a3ad190183ba1cNarayan Kamath assertTrue(values.spliterator().hasCharacteristics(Spliterator.SIZED)); 882a73ca5822d77cff8b675ead6e5a3ad190183ba1cNarayan Kamath 883a73ca5822d77cff8b675ead6e5a3ad190183ba1cNarayan Kamath SpliteratorTester.runSizedTests(values.spliterator(), 16); 884508f0abe4f8686d29466b2c364cb4f60bf0484b5Tobias Thierer SpliteratorTester.assertSupportsTrySplit(values); 8854c89023ef86f29fa9add7db2574f2169fe842577Narayan Kamath } 8864c89023ef86f29fa9add7db2574f2169fe842577Narayan Kamath 8874c89023ef86f29fa9add7db2574f2169fe842577Narayan Kamath public void test_spliterator_entrySet() { 8884c89023ef86f29fa9add7db2574f2169fe842577Narayan Kamath HashMap<String, String> hashMap = new HashMap<>(); 8894c89023ef86f29fa9add7db2574f2169fe842577Narayan Kamath hashMap.put("a", "1"); 8904c89023ef86f29fa9add7db2574f2169fe842577Narayan Kamath hashMap.put("b", "2"); 8914c89023ef86f29fa9add7db2574f2169fe842577Narayan Kamath hashMap.put("c", "3"); 8924c89023ef86f29fa9add7db2574f2169fe842577Narayan Kamath hashMap.put("d", "4"); 8934c89023ef86f29fa9add7db2574f2169fe842577Narayan Kamath hashMap.put("e", "5"); 8944c89023ef86f29fa9add7db2574f2169fe842577Narayan Kamath hashMap.put("f", "6"); 8954c89023ef86f29fa9add7db2574f2169fe842577Narayan Kamath hashMap.put("g", "7"); 8964c89023ef86f29fa9add7db2574f2169fe842577Narayan Kamath hashMap.put("h", "8"); 8974c89023ef86f29fa9add7db2574f2169fe842577Narayan Kamath hashMap.put("i", "9"); 8984c89023ef86f29fa9add7db2574f2169fe842577Narayan Kamath hashMap.put("j", "10"); 8994c89023ef86f29fa9add7db2574f2169fe842577Narayan Kamath hashMap.put("k", "11"); 9004c89023ef86f29fa9add7db2574f2169fe842577Narayan Kamath hashMap.put("l", "12"); 9014c89023ef86f29fa9add7db2574f2169fe842577Narayan Kamath hashMap.put("m", "13"); 9024c89023ef86f29fa9add7db2574f2169fe842577Narayan Kamath hashMap.put("n", "14"); 9034c89023ef86f29fa9add7db2574f2169fe842577Narayan Kamath hashMap.put("o", "15"); 9044c89023ef86f29fa9add7db2574f2169fe842577Narayan Kamath hashMap.put("p", "16"); 9054c89023ef86f29fa9add7db2574f2169fe842577Narayan Kamath 9064c89023ef86f29fa9add7db2574f2169fe842577Narayan Kamath Set<Map.Entry<String, String>> values = hashMap.entrySet(); 9074c89023ef86f29fa9add7db2574f2169fe842577Narayan Kamath ArrayList<Map.Entry<String, String>> expectedValues = new ArrayList<>(values); 9084c89023ef86f29fa9add7db2574f2169fe842577Narayan Kamath 9094c89023ef86f29fa9add7db2574f2169fe842577Narayan Kamath Comparator<Map.Entry<String, String>> comparator = 9104c89023ef86f29fa9add7db2574f2169fe842577Narayan Kamath (a, b) -> (a.getKey().compareTo(b.getKey())); 9114c89023ef86f29fa9add7db2574f2169fe842577Narayan Kamath 9124c89023ef86f29fa9add7db2574f2169fe842577Narayan Kamath SpliteratorTester.runBasicIterationTests(values.spliterator(), expectedValues); 9134c89023ef86f29fa9add7db2574f2169fe842577Narayan Kamath SpliteratorTester.runBasicSplitTests(values, expectedValues, comparator); 9144c89023ef86f29fa9add7db2574f2169fe842577Narayan Kamath SpliteratorTester.testSpliteratorNPE(values.spliterator()); 915a73ca5822d77cff8b675ead6e5a3ad190183ba1cNarayan Kamath 916a73ca5822d77cff8b675ead6e5a3ad190183ba1cNarayan Kamath assertTrue(values.spliterator().hasCharacteristics(Spliterator.SIZED | Spliterator.DISTINCT)); 917a73ca5822d77cff8b675ead6e5a3ad190183ba1cNarayan Kamath 918a73ca5822d77cff8b675ead6e5a3ad190183ba1cNarayan Kamath SpliteratorTester.runSizedTests(values.spliterator(), 16); 919a73ca5822d77cff8b675ead6e5a3ad190183ba1cNarayan Kamath SpliteratorTester.runDistinctTests(values); 920508f0abe4f8686d29466b2c364cb4f60bf0484b5Tobias Thierer SpliteratorTester.assertSupportsTrySplit(values); 9214c89023ef86f29fa9add7db2574f2169fe842577Narayan Kamath } 9224c89023ef86f29fa9add7db2574f2169fe842577Narayan Kamath 923adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project /** 924adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * Sets up the fixture, for example, open a network connection. This method 925adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * is called before a test is executed. 926adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project */ 927adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project protected void setUp() { 928740cbf1565815f08d9fb3a0a8d4a581cdc0d2a9dJorg Pleumann objArray = new Object[hmSize]; 929740cbf1565815f08d9fb3a0a8d4a581cdc0d2a9dJorg Pleumann objArray2 = new Object[hmSize]; 930740cbf1565815f08d9fb3a0a8d4a581cdc0d2a9dJorg Pleumann for (int i = 0; i < objArray.length; i++) { 931740cbf1565815f08d9fb3a0a8d4a581cdc0d2a9dJorg Pleumann objArray[i] = new Integer(i); 932740cbf1565815f08d9fb3a0a8d4a581cdc0d2a9dJorg Pleumann objArray2[i] = objArray[i].toString(); 933740cbf1565815f08d9fb3a0a8d4a581cdc0d2a9dJorg Pleumann } 934740cbf1565815f08d9fb3a0a8d4a581cdc0d2a9dJorg Pleumann 935adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project hm = new HashMap(); 936adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project for (int i = 0; i < objArray.length; i++) 937adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project hm.put(objArray2[i], objArray[i]); 938adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project hm.put("test", null); 939adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project hm.put(null, "test"); 940adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 941adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 942adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project protected void tearDown() { 943740cbf1565815f08d9fb3a0a8d4a581cdc0d2a9dJorg Pleumann hm = null; 944740cbf1565815f08d9fb3a0a8d4a581cdc0d2a9dJorg Pleumann objArray = null; 945740cbf1565815f08d9fb3a0a8d4a581cdc0d2a9dJorg Pleumann objArray2 = null; 946adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 947ba45f538a14c08015021e899f5883f07ed2ff237Narayan Kamath 948ba45f538a14c08015021e899f5883f07ed2ff237Narayan Kamath class SubMap<K, V> extends HashMap<K, V> { 949ba45f538a14c08015021e899f5883f07ed2ff237Narayan Kamath public SubMap(Map<? extends K, ? extends V> m) { 950ba45f538a14c08015021e899f5883f07ed2ff237Narayan Kamath super(m); 951ba45f538a14c08015021e899f5883f07ed2ff237Narayan Kamath } 952ba45f538a14c08015021e899f5883f07ed2ff237Narayan Kamath 953ba45f538a14c08015021e899f5883f07ed2ff237Narayan Kamath public V put(K key, V value) { 954ba45f538a14c08015021e899f5883f07ed2ff237Narayan Kamath throw new UnsupportedOperationException(); 955ba45f538a14c08015021e899f5883f07ed2ff237Narayan Kamath } 956ba45f538a14c08015021e899f5883f07ed2ff237Narayan Kamath } 957ba45f538a14c08015021e899f5883f07ed2ff237Narayan Kamath 958ba45f538a14c08015021e899f5883f07ed2ff237Narayan Kamath /** 959ba45f538a14c08015021e899f5883f07ed2ff237Narayan Kamath * serialization/deserialization. 960ba45f538a14c08015021e899f5883f07ed2ff237Narayan Kamath */ 961ba45f538a14c08015021e899f5883f07ed2ff237Narayan Kamath public void testSerializationSelf() throws Exception { 962ba45f538a14c08015021e899f5883f07ed2ff237Narayan Kamath HashMap<String, String> hm = new HashMap<String, String>(); 963ba45f538a14c08015021e899f5883f07ed2ff237Narayan Kamath hm.put("key", "value"); 964ba45f538a14c08015021e899f5883f07ed2ff237Narayan Kamath 965ba45f538a14c08015021e899f5883f07ed2ff237Narayan Kamath SerializationTest.verifySelf(hm); 966ba45f538a14c08015021e899f5883f07ed2ff237Narayan Kamath 967ba45f538a14c08015021e899f5883f07ed2ff237Narayan Kamath // regression for HARMONY-1583 968ba45f538a14c08015021e899f5883f07ed2ff237Narayan Kamath hm.put(null, "null"); 969ba45f538a14c08015021e899f5883f07ed2ff237Narayan Kamath SerializationTest.verifySelf(hm); 970ba45f538a14c08015021e899f5883f07ed2ff237Narayan Kamath } 971adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project} 9724c89023ef86f29fa9add7db2574f2169fe842577Narayan Kamath 973