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