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
20ba45f538a14c08015021e899f5883f07ed2ff237Narayan Kamathimport tests.support.Support_MapTest2;
21ba45f538a14c08015021e899f5883f07ed2ff237Narayan Kamathimport tests.support.Support_UnmodifiableCollectionTest;
22adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Projectimport java.util.ArrayList;
23adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Projectimport java.util.Arrays;
24adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Projectimport java.util.Collection;
25adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Projectimport java.util.ConcurrentModificationException;
26adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Projectimport java.util.Enumeration;
27adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Projectimport java.util.HashSet;
28adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Projectimport java.util.Hashtable;
29adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Projectimport java.util.Iterator;
30adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Projectimport java.util.Map;
31adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Projectimport java.util.NoSuchElementException;
32adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Projectimport java.util.Set;
33adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Projectimport java.util.TreeMap;
34adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Projectimport java.util.Vector;
35adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project
36adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Projectpublic class HashtableTest extends junit.framework.TestCase {
37adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project
38adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    private Hashtable ht10;
39adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project
40adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    private Hashtable ht100;
41adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project
42adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    private Hashtable htfull;
43adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project
44adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    private Vector keyVector;
45adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project
46adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    private Vector elmVector;
47adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project
48adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    private String h10sVal;
49adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project
50adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    /**
51229e34b182b98e1dba15d3dc6341954986ae2b7aBrian Carlstrom     * java.util.Hashtable#Hashtable()
52adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     */
53adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    public void test_Constructor() {
54adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        // Test for method java.util.Hashtable()
55adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        new Support_MapTest2(new Hashtable()).runTest();
56adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project
57adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        Hashtable h = new Hashtable();
58adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project
59adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        assertEquals("Created incorrect hashtable", 0, h.size());
60adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    }
61adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project
62adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    /**
63229e34b182b98e1dba15d3dc6341954986ae2b7aBrian Carlstrom     * java.util.Hashtable#Hashtable(int)
64adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     */
65adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    public void test_ConstructorI() {
66adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        // Test for method java.util.Hashtable(int)
67adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        Hashtable h = new Hashtable(9);
68adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project
69adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        assertEquals("Created incorrect hashtable", 0, h.size());
70adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project
71adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        Hashtable empty = new Hashtable(0);
72adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        assertNull("Empty hashtable access", empty.get("nothing"));
73adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        empty.put("something", "here");
74adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        assertTrue("cannot get element", empty.get("something") == "here");
75adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    }
76adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project
77adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    /**
78229e34b182b98e1dba15d3dc6341954986ae2b7aBrian Carlstrom     * java.util.Hashtable#Hashtable(int, float)
79adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     */
80adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    public void test_ConstructorIF() {
81adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        // Test for method java.util.Hashtable(int, float)
82adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        Hashtable h = new java.util.Hashtable(10, 0.5f);
83adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        assertEquals("Created incorrect hashtable", 0, h.size());
84adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project
85adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        Hashtable empty = new Hashtable(0, 0.75f);
86adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        assertNull("Empty hashtable access", empty.get("nothing"));
87adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        empty.put("something", "here");
88adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        assertTrue("cannot get element", empty.get("something") == "here");
89f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes
90adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        try {
91adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            new Hashtable(-1, 0.75f);
92adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            fail("IllegalArgumentException expected");
93adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        } catch (IllegalArgumentException e) {
94adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            //expected
95adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        }
96f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes
97adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        try {
98adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            new Hashtable(0, -0.75f);
99adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            fail("IllegalArgumentException expected");
100adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        } catch (IllegalArgumentException e) {
101adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            //expected
102adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        }
103adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    }
104adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project
105adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    /**
106229e34b182b98e1dba15d3dc6341954986ae2b7aBrian Carlstrom     * java.util.Hashtable#Hashtable(java.util.Map)
107adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     */
108adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    public void test_ConstructorLjava_util_Map() {
109adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        // Test for method java.util.Hashtable(java.util.Map)
110adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        Map map = new TreeMap();
111adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        Object firstVal = "Gabba";
112adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        Object secondVal = new Integer(5);
113adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        map.put("Gah", firstVal);
114adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        map.put("Ooga", secondVal);
115adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        Hashtable ht = new Hashtable(map);
116adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        assertTrue("a) Incorrect Hashtable constructed",
117adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project                ht.get("Gah") == firstVal);
118adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        assertTrue("b) Incorrect Hashtable constructed",
119adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project                ht.get("Ooga") == secondVal);
120f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes
121adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        try {
122adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            new Hashtable(null);
123adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            fail("NullPointerException expected");
124adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        } catch (NullPointerException e) {
125adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            //expected
126adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        }
127adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    }
128adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project
129ba45f538a14c08015021e899f5883f07ed2ff237Narayan Kamath    public void test_HashTable_Constructor() {
130ba45f538a14c08015021e899f5883f07ed2ff237Narayan Kamath        Hashtable hashTable = new Hashtable();
131ba45f538a14c08015021e899f5883f07ed2ff237Narayan Kamath        hashTable.put(hashTable, hashTable.keySet());
132ba45f538a14c08015021e899f5883f07ed2ff237Narayan Kamath        new Hashtable(hashTable);
133c0a4d9b35cbdd33dcc8e6a78a829573f0ed9bf6dJoshua Bloch    }
134ba45f538a14c08015021e899f5883f07ed2ff237Narayan Kamath
135c0a4d9b35cbdd33dcc8e6a78a829573f0ed9bf6dJoshua Bloch    /**
136229e34b182b98e1dba15d3dc6341954986ae2b7aBrian Carlstrom     * java.util.Hashtable#clear()
137adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     */
138adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    public void test_clear() {
139adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        // Test for method void java.util.Hashtable.clear()
140adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        Hashtable h = hashtableClone(htfull);
141adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        h.clear();
142adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        assertEquals("Hashtable was not cleared", 0, h.size());
143adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        Enumeration el = h.elements();
144adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        Enumeration keys = h.keys();
145adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        assertTrue("Hashtable improperly cleared", !el.hasMoreElements()
146adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project                && !(keys.hasMoreElements()));
147adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    }
148adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project
149adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    /**
150229e34b182b98e1dba15d3dc6341954986ae2b7aBrian Carlstrom     * java.util.Hashtable#clone()
151adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     */
152adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    public void test_clone() {
153adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        // Test for method java.lang.Object java.util.Hashtable.clone()
154adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project
155adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        Hashtable h = (Hashtable) htfull.clone();
156adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        assertTrue("Clone different size than original", h.size() == htfull
157adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project                .size());
158adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project
159adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        Enumeration org = htfull.keys();
160adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        Enumeration cpy = h.keys();
161adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project
162adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        String okey, ckey;
163adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        while (org.hasMoreElements()) {
164adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            assertTrue("Key comparison failed", (okey = (String) org
165adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project                    .nextElement()).equals(ckey = (String) cpy.nextElement()));
166adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            assertTrue("Value comparison failed", ((String) htfull.get(okey))
167adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project                    .equals((String) h.get(ckey)));
168adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        }
169adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        assertTrue("Copy has more keys than original", !cpy.hasMoreElements());
170adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    }
171adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project
172adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    /**
173229e34b182b98e1dba15d3dc6341954986ae2b7aBrian Carlstrom     * java.util.Hashtable#contains(java.lang.Object)
174adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     */
175adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    public void test_containsLjava_lang_Object() {
176adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        // Test for method boolean
177adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        // java.util.Hashtable.contains(java.lang.Object)
178adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        assertTrue("Element not found", ht10.contains("Val 7"));
179adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        assertTrue("Invalid element found", !ht10.contains("ZZZZZZZZZZZZZZZZ"));
180f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes
181adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        try {
182adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            ht10.contains(null);
183adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            fail("NullPointerException expected");
184adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        } catch (NullPointerException e) {
185adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            //expected
186adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        }
187adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    }
188adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project
189adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    /**
190229e34b182b98e1dba15d3dc6341954986ae2b7aBrian Carlstrom     * java.util.Hashtable#containsKey(java.lang.Object)
191adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     */
192adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    public void test_containsKeyLjava_lang_Object() {
193adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        // Test for method boolean
194adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        // java.util.Hashtable.containsKey(java.lang.Object)
195adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project
196adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        assertTrue("Failed to find key", htfull.containsKey("FKey 4"));
197adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        assertTrue("Failed to find key", !htfull.containsKey("FKey 99"));
198f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes
199adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        try {
200adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            htfull.containsKey(null);
201adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            fail("NullPointerException expected");
202adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        } catch (NullPointerException e) {
203adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            //expected
204adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        }
205adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    }
206adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project
207adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    /**
208229e34b182b98e1dba15d3dc6341954986ae2b7aBrian Carlstrom     * java.util.Hashtable#containsValue(java.lang.Object)
209adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     */
210adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    public void test_containsValueLjava_lang_Object() {
211adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        // Test for method boolean
212adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        // java.util.Hashtable.containsValue(java.lang.Object)
213adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        Enumeration e = elmVector.elements();
214adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        while (e.hasMoreElements())
215adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            assertTrue("Returned false for valid value", ht10.containsValue(e
216adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project                    .nextElement()));
217adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        assertTrue("Returned true for invalid value", !ht10
218adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project                .containsValue(new Object()));
219adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project
220adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        try {
221adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            ht10.containsValue(null);
222adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            fail("NullPointerException expected");
223adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        } catch (NullPointerException ee) {
224adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            //expected
225adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        }
226adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    }
227adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project
228adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    /**
229229e34b182b98e1dba15d3dc6341954986ae2b7aBrian Carlstrom     * java.util.Hashtable#elements()
230adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     */
231adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    public void test_elements() {
232adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        // Test for method java.util.Enumeration java.util.Hashtable.elements()
233adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        Enumeration elms = ht10.elements();
234adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        int i = 0;
235adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        while (elms.hasMoreElements()) {
236adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            String s = (String) elms.nextElement();
237adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            assertTrue("Missing key from enumeration", elmVector.contains(s));
238adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            ++i;
239adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        }
240adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project
241adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        assertEquals("All keys not retrieved", 10, ht10.size());
242ba45f538a14c08015021e899f5883f07ed2ff237Narayan Kamath
2434df29e1e1cf169ff6c77b8dd247de8c79b81d552Neil Fuller        assertFalse(elms.hasMoreElements());
244ba45f538a14c08015021e899f5883f07ed2ff237Narayan Kamath        try {
2454df29e1e1cf169ff6c77b8dd247de8c79b81d552Neil Fuller            elms.nextElement();
246ba45f538a14c08015021e899f5883f07ed2ff237Narayan Kamath            fail("should throw NoSuchElementException");
247ba45f538a14c08015021e899f5883f07ed2ff237Narayan Kamath        } catch (NoSuchElementException e) {
248ba45f538a14c08015021e899f5883f07ed2ff237Narayan Kamath            // Expected
249ba45f538a14c08015021e899f5883f07ed2ff237Narayan Kamath        }
250adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    }
251adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project
2525d175dd4d7b128492ef7e3da6a77d80b8fd0aa22Tobias Thierer// BEGIN Android-removed
253c0a4d9b35cbdd33dcc8e6a78a829573f0ed9bf6dJoshua Bloch// implementation dependent
254c0a4d9b35cbdd33dcc8e6a78a829573f0ed9bf6dJoshua Bloch//    /**
255229e34b182b98e1dba15d3dc6341954986ae2b7aBrian Carlstrom//     * java.util.Hashtable#elements()
256c0a4d9b35cbdd33dcc8e6a78a829573f0ed9bf6dJoshua Bloch//     */
257c0a4d9b35cbdd33dcc8e6a78a829573f0ed9bf6dJoshua Bloch//    public void test_elements_subtest0() {
258c0a4d9b35cbdd33dcc8e6a78a829573f0ed9bf6dJoshua Bloch//        // this is the reference implementation behavior
259c0a4d9b35cbdd33dcc8e6a78a829573f0ed9bf6dJoshua Bloch//        final Hashtable ht = new Hashtable(7);
260c0a4d9b35cbdd33dcc8e6a78a829573f0ed9bf6dJoshua Bloch//        ht.put("1", "a");
261c0a4d9b35cbdd33dcc8e6a78a829573f0ed9bf6dJoshua Bloch//        // these three elements hash to the same bucket in a 7 element Hashtable
262c0a4d9b35cbdd33dcc8e6a78a829573f0ed9bf6dJoshua Bloch//        ht.put("2", "b");
263c0a4d9b35cbdd33dcc8e6a78a829573f0ed9bf6dJoshua Bloch//        ht.put("9", "c");
264c0a4d9b35cbdd33dcc8e6a78a829573f0ed9bf6dJoshua Bloch//        ht.put("12", "d");
265c0a4d9b35cbdd33dcc8e6a78a829573f0ed9bf6dJoshua Bloch//        // Hashtable looks like:
266c0a4d9b35cbdd33dcc8e6a78a829573f0ed9bf6dJoshua Bloch//        // 0: "1"
267c0a4d9b35cbdd33dcc8e6a78a829573f0ed9bf6dJoshua Bloch//        // 1: "12" -> "9" -> "2"
268c0a4d9b35cbdd33dcc8e6a78a829573f0ed9bf6dJoshua Bloch//        Enumeration en = ht.elements();
269c0a4d9b35cbdd33dcc8e6a78a829573f0ed9bf6dJoshua Bloch//        // cache the first entry
270c0a4d9b35cbdd33dcc8e6a78a829573f0ed9bf6dJoshua Bloch//        en.hasMoreElements();
271c0a4d9b35cbdd33dcc8e6a78a829573f0ed9bf6dJoshua Bloch//        ht.remove("12");
272c0a4d9b35cbdd33dcc8e6a78a829573f0ed9bf6dJoshua Bloch//        ht.remove("9");
273c0a4d9b35cbdd33dcc8e6a78a829573f0ed9bf6dJoshua Bloch//        boolean exception = false;
274c0a4d9b35cbdd33dcc8e6a78a829573f0ed9bf6dJoshua Bloch//        try {
275c0a4d9b35cbdd33dcc8e6a78a829573f0ed9bf6dJoshua Bloch//            // cached "12"
276c0a4d9b35cbdd33dcc8e6a78a829573f0ed9bf6dJoshua Bloch//            Object result = en.nextElement();
277c0a4d9b35cbdd33dcc8e6a78a829573f0ed9bf6dJoshua Bloch//            assertNull("unexpected: " + result, result);
278c0a4d9b35cbdd33dcc8e6a78a829573f0ed9bf6dJoshua Bloch//            // next is removed "9"
279c0a4d9b35cbdd33dcc8e6a78a829573f0ed9bf6dJoshua Bloch//            result = en.nextElement();
280c0a4d9b35cbdd33dcc8e6a78a829573f0ed9bf6dJoshua Bloch//            assertNull("unexpected: " + result, result);
281c0a4d9b35cbdd33dcc8e6a78a829573f0ed9bf6dJoshua Bloch//            result = en.nextElement();
282c0a4d9b35cbdd33dcc8e6a78a829573f0ed9bf6dJoshua Bloch//            assertTrue("unexpected: " + result, "b".equals(result));
283c0a4d9b35cbdd33dcc8e6a78a829573f0ed9bf6dJoshua Bloch//        } catch (NoSuchElementException e) {
284c0a4d9b35cbdd33dcc8e6a78a829573f0ed9bf6dJoshua Bloch//            exception = true;
285c0a4d9b35cbdd33dcc8e6a78a829573f0ed9bf6dJoshua Bloch//        }
286c0a4d9b35cbdd33dcc8e6a78a829573f0ed9bf6dJoshua Bloch//        assertTrue("unexpected NoSuchElementException", !exception);
287c0a4d9b35cbdd33dcc8e6a78a829573f0ed9bf6dJoshua Bloch//    }
2885d175dd4d7b128492ef7e3da6a77d80b8fd0aa22Tobias Thierer// END Android-removed
289adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project
290adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    /**
291229e34b182b98e1dba15d3dc6341954986ae2b7aBrian Carlstrom     * java.util.Hashtable#entrySet()
292adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     */
293adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    public void test_entrySet() {
294adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        // Test for method java.util.Set java.util.Hashtable.entrySet()
295adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        Set s = ht10.entrySet();
296adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        Set s2 = new HashSet();
297adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        Iterator i = s.iterator();
298adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        while (i.hasNext())
299adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            s2.add(((Map.Entry) i.next()).getValue());
300adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        Enumeration e = elmVector.elements();
301adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        while (e.hasMoreElements())
302adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            assertTrue("Returned incorrect entry set", s2.contains(e
303adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project                    .nextElement()));
3045d175dd4d7b128492ef7e3da6a77d80b8fd0aa22Tobias Thierer// BEGIN Android-removed
305c0a4d9b35cbdd33dcc8e6a78a829573f0ed9bf6dJoshua Bloch// implementation dependent
306c0a4d9b35cbdd33dcc8e6a78a829573f0ed9bf6dJoshua Bloch//        assertEquals("Not synchronized",
307c0a4d9b35cbdd33dcc8e6a78a829573f0ed9bf6dJoshua Bloch//                "java.util.Collections$SynchronizedSet", s.getClass().getName());
3085d175dd4d7b128492ef7e3da6a77d80b8fd0aa22Tobias Thierer// END Android-removed
309adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project
310adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        boolean exception = false;
311adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        try {
312adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            ((Map.Entry) ht10.entrySet().iterator().next()).setValue(null);
313adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        } catch (NullPointerException e1) {
314adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            exception = true;
315adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        }
316adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        assertTrue(
317adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project                "Should not be able to assign null to a Hashtable entrySet() Map.Entry",
318adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project                exception);
319adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    }
320adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project
321adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    /**
322229e34b182b98e1dba15d3dc6341954986ae2b7aBrian Carlstrom     * java.util.Hashtable#equals(java.lang.Object)
323adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     */
324adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    public void test_equalsLjava_lang_Object() {
325adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        // Test for method boolean java.util.Hashtable.equals(java.lang.Object)
326adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        Hashtable h = hashtableClone(ht10);
327adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        assertTrue("Returned false for equal tables", ht10.equals(h));
328adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        assertTrue("Returned true for unequal tables", !ht10.equals(htfull));
329adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    }
330adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project
331adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    /**
332229e34b182b98e1dba15d3dc6341954986ae2b7aBrian Carlstrom     * java.util.Hashtable#get(java.lang.Object)
333adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     */
334adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    public void test_getLjava_lang_Object() {
335adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        // Test for method java.lang.Object
336adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        // java.util.Hashtable.get(java.lang.Object)
337adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        Hashtable h = hashtableClone(htfull);
338adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        assertEquals("Could not retrieve element", "FVal 2", ((String) h.get("FKey 2"))
339adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project                );
340adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project
3415d175dd4d7b128492ef7e3da6a77d80b8fd0aa22Tobias Thierer// BEGIN Android-removed
342c0a4d9b35cbdd33dcc8e6a78a829573f0ed9bf6dJoshua Bloch// implementation dependent
343c0a4d9b35cbdd33dcc8e6a78a829573f0ed9bf6dJoshua Bloch//        // Regression for HARMONY-262
344c0a4d9b35cbdd33dcc8e6a78a829573f0ed9bf6dJoshua Bloch//        ReusableKey k = new ReusableKey();
345c0a4d9b35cbdd33dcc8e6a78a829573f0ed9bf6dJoshua Bloch//        Hashtable h2 = new Hashtable();
346c0a4d9b35cbdd33dcc8e6a78a829573f0ed9bf6dJoshua Bloch//        k.setKey(1);
347c0a4d9b35cbdd33dcc8e6a78a829573f0ed9bf6dJoshua Bloch//        h2.put(k, "value1");
348c0a4d9b35cbdd33dcc8e6a78a829573f0ed9bf6dJoshua Bloch//
349c0a4d9b35cbdd33dcc8e6a78a829573f0ed9bf6dJoshua Bloch//        k.setKey(13);
350c0a4d9b35cbdd33dcc8e6a78a829573f0ed9bf6dJoshua Bloch//        assertNull(h2.get(k));
351c0a4d9b35cbdd33dcc8e6a78a829573f0ed9bf6dJoshua Bloch//
352c0a4d9b35cbdd33dcc8e6a78a829573f0ed9bf6dJoshua Bloch//        k.setKey(12);
353c0a4d9b35cbdd33dcc8e6a78a829573f0ed9bf6dJoshua Bloch//        assertNull(h2.get(k));
354f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes//
355c0a4d9b35cbdd33dcc8e6a78a829573f0ed9bf6dJoshua Bloch//        try {
356c0a4d9b35cbdd33dcc8e6a78a829573f0ed9bf6dJoshua Bloch//            h2.get(null);
357c0a4d9b35cbdd33dcc8e6a78a829573f0ed9bf6dJoshua Bloch//            fail("NullPointerException expected");
358c0a4d9b35cbdd33dcc8e6a78a829573f0ed9bf6dJoshua Bloch//        } catch (NullPointerException e) {
359c0a4d9b35cbdd33dcc8e6a78a829573f0ed9bf6dJoshua Bloch//            //expected
360c0a4d9b35cbdd33dcc8e6a78a829573f0ed9bf6dJoshua Bloch//        }
3615d175dd4d7b128492ef7e3da6a77d80b8fd0aa22Tobias Thierer// END Android-removed
362adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    }
363adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project
364adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    /**
365229e34b182b98e1dba15d3dc6341954986ae2b7aBrian Carlstrom     * java.util.Hashtable#hashCode()
366adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     */
367adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    public void test_hashCode() {
368adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        // Test for method int java.util.Hashtable.hashCode()
369adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        Set entrySet = ht10.entrySet();
370adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        Iterator iterator = entrySet.iterator();
371adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        int expectedHash;
372adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        for (expectedHash = 0; iterator.hasNext(); expectedHash += iterator
373adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project                .next().hashCode())
374adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            ;
375adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        assertTrue("Incorrect hashCode returned.  Wanted: " + expectedHash
376adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project                + " got: " + ht10.hashCode(), expectedHash == ht10.hashCode());
377adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    }
378adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project
379adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    /**
380229e34b182b98e1dba15d3dc6341954986ae2b7aBrian Carlstrom     * java.util.Hashtable#isEmpty()
381adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     */
382adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    public void test_isEmpty() {
383adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        // Test for method boolean java.util.Hashtable.isEmpty()
384adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project
385adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        assertTrue("isEmpty returned incorrect value", !ht10.isEmpty());
386adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        assertTrue("isEmpty returned incorrect value",
387adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project                new java.util.Hashtable().isEmpty());
388adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project
389adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        final Hashtable ht = new Hashtable();
390adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        ht.put("0", "");
391adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        Thread t1 = new Thread() {
392adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            public void run() {
393adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project                while (!ht.isEmpty())
394adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project                    ;
395adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project                ht.put("final", "");
396adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            }
397adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        };
398adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        t1.start();
399adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        for (int i = 1; i < 10000; i++) {
400adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            synchronized (ht) {
401adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project                ht.remove(String.valueOf(i - 1));
402adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project                ht.put(String.valueOf(i), "");
403adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            }
404adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            int size;
405adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            if ((size = ht.size()) != 1) {
406adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project                String result = "Size is not 1: " + size + " " + ht;
407adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project                // terminate the thread
408adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project                ht.clear();
409adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project                fail(result);
410adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            }
411adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        }
412adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        // terminate the thread
413adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        ht.clear();
414adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    }
415adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project
416adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    /**
417229e34b182b98e1dba15d3dc6341954986ae2b7aBrian Carlstrom     * java.util.Hashtable#keys()
418adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     */
419adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    public void test_keys() {
420adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        // Test for method java.util.Enumeration java.util.Hashtable.keys()
421adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project
422adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        Enumeration keys = ht10.keys();
423adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        int i = 0;
424adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        while (keys.hasMoreElements()) {
425adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            String s = (String) keys.nextElement();
426adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            assertTrue("Missing key from enumeration", keyVector.contains(s));
427adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            ++i;
428adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        }
429adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project
430adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        assertEquals("All keys not retrieved", 10, ht10.size());
431ba45f538a14c08015021e899f5883f07ed2ff237Narayan Kamath
4324df29e1e1cf169ff6c77b8dd247de8c79b81d552Neil Fuller        assertFalse(keys.hasMoreElements());
433ba45f538a14c08015021e899f5883f07ed2ff237Narayan Kamath        try {
4344df29e1e1cf169ff6c77b8dd247de8c79b81d552Neil Fuller            keys.nextElement();
435ba45f538a14c08015021e899f5883f07ed2ff237Narayan Kamath            fail("should throw NoSuchElementException");
436ba45f538a14c08015021e899f5883f07ed2ff237Narayan Kamath        } catch (NoSuchElementException e) {
437ba45f538a14c08015021e899f5883f07ed2ff237Narayan Kamath            // Expected
438ba45f538a14c08015021e899f5883f07ed2ff237Narayan Kamath        }
439adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    }
440adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project
441adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    /**
442229e34b182b98e1dba15d3dc6341954986ae2b7aBrian Carlstrom     * java.util.Hashtable#keys()
443adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     */
444adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    public void test_keys_subtest0() {
445adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        // this is the reference implementation behavior
446adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        final Hashtable ht = new Hashtable(3);
447adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        ht.put("initial", "");
448adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        Enumeration en = ht.keys();
449adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        en.hasMoreElements();
450adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        ht.remove("initial");
451adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        boolean exception = false;
452adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        try {
453adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            Object result = en.nextElement();
454adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            assertTrue("unexpected: " + result, "initial".equals(result));
455adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        } catch (NoSuchElementException e) {
456adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            exception = true;
457adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        }
458adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        assertTrue("unexpected NoSuchElementException", !exception);
459adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    }
460adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project
461adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    /**
462229e34b182b98e1dba15d3dc6341954986ae2b7aBrian Carlstrom     * java.util.Hashtable#keySet()
463adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     */
464adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    public void test_keySet() {
465adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        // Test for method java.util.Set java.util.Hashtable.keySet()
466adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        Set s = ht10.keySet();
467adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        Enumeration e = keyVector.elements();
468adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        while (e.hasMoreElements())
469adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            assertTrue("Returned incorrect key set", s
470adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project                    .contains(e.nextElement()));
471adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project
4725d175dd4d7b128492ef7e3da6a77d80b8fd0aa22Tobias Thierer// BEGIN Android-removed
473c0a4d9b35cbdd33dcc8e6a78a829573f0ed9bf6dJoshua Bloch// implementation dependent
474c0a4d9b35cbdd33dcc8e6a78a829573f0ed9bf6dJoshua Bloch//        assertEquals("Not synchronized",
475c0a4d9b35cbdd33dcc8e6a78a829573f0ed9bf6dJoshua Bloch//                "java.util.Collections$SynchronizedSet", s.getClass().getName());
4765d175dd4d7b128492ef7e3da6a77d80b8fd0aa22Tobias Thierer// END Android-removed
477f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes
478adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        Map map = new Hashtable(101);
479adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        map.put(new Integer(1), "1");
480adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        map.put(new Integer(102), "102");
481adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        map.put(new Integer(203), "203");
482adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        Iterator it = map.keySet().iterator();
483adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        Integer remove1 = (Integer) it.next();
484adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        it.remove();
485adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        Integer remove2 = (Integer) it.next();
486adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        it.remove();
487adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        ArrayList list = new ArrayList(Arrays.asList(new Integer[] {
488adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project                new Integer(1), new Integer(102), new Integer(203) }));
489adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        list.remove(remove1);
490adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        list.remove(remove2);
491adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        assertTrue("Wrong result", it.next().equals(list.get(0)));
492adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        assertEquals("Wrong size", 1, map.size());
493adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        assertTrue("Wrong contents", map.keySet().iterator().next().equals(
494adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project                list.get(0)));
495adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project
496adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        Map map2 = new Hashtable(101);
497adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        map2.put(new Integer(1), "1");
498adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        map2.put(new Integer(4), "4");
499adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        Iterator it2 = map2.keySet().iterator();
500adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        Integer remove3 = (Integer) it2.next();
501adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        Integer next;
502adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        if (remove3.intValue() == 1)
503adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            next = new Integer(4);
504adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        else
505adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            next = new Integer(1);
506adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        it2.hasNext();
507adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        it2.remove();
508adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        assertTrue("Wrong result 2", it2.next().equals(next));
509adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        assertEquals("Wrong size 2", 1, map2.size());
510adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        assertTrue("Wrong contents 2", map2.keySet().iterator().next().equals(
511adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project                next));
512adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    }
513adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project
514adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    /**
515229e34b182b98e1dba15d3dc6341954986ae2b7aBrian Carlstrom     * java.util.Hashtable#keySet()
516adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     */
517adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    public void test_keySet_subtest0() {
518adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        Set s1 = ht10.keySet();
519adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        assertTrue("should contain key", s1.remove("Key 0"));
520adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        assertTrue("should not contain key", !s1.remove("Key 0"));
521adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project
522adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        final int iterations = 10000;
523adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        final Hashtable ht = new Hashtable();
524adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        Thread t1 = new Thread() {
525adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            public void run() {
526adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project                for (int i = 0; i < iterations; i++) {
527adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project                    ht.put(String.valueOf(i), "");
528adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project                    ht.remove(String.valueOf(i));
529adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project                }
530adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            }
531adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        };
532adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        t1.start();
533adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        Set set = ht.keySet();
534adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        for (int i = 0; i < iterations; i++) {
535adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            Iterator it = set.iterator();
536adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            try {
537adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project                it.next();
538adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project                it.remove();
539adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project                int size;
540adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project                // ensure removing with the iterator doesn't corrupt the
541adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project                // Hashtable
542adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project                if ((size = ht.size()) < 0) {
543adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project                    fail("invalid size: " + size);
544adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project                }
545adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            } catch (NoSuchElementException e) {
546adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            } catch (ConcurrentModificationException e) {
547adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            }
548adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        }
549adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    }
550adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project
5515d175dd4d7b128492ef7e3da6a77d80b8fd0aa22Tobias Thierer// BEGIN Android-removed
552c0a4d9b35cbdd33dcc8e6a78a829573f0ed9bf6dJoshua Bloch// implementation dependent
553c0a4d9b35cbdd33dcc8e6a78a829573f0ed9bf6dJoshua Bloch//    /**
554229e34b182b98e1dba15d3dc6341954986ae2b7aBrian Carlstrom//     * java.util.Hashtable#keySet()
555c0a4d9b35cbdd33dcc8e6a78a829573f0ed9bf6dJoshua Bloch//     */
556c0a4d9b35cbdd33dcc8e6a78a829573f0ed9bf6dJoshua Bloch//    public void test_keySet_subtest1() {
557c0a4d9b35cbdd33dcc8e6a78a829573f0ed9bf6dJoshua Bloch//        // this is the reference implementation behavior
558c0a4d9b35cbdd33dcc8e6a78a829573f0ed9bf6dJoshua Bloch//        final Hashtable ht = new Hashtable(7);
559c0a4d9b35cbdd33dcc8e6a78a829573f0ed9bf6dJoshua Bloch//        ht.put("1", "a");
560c0a4d9b35cbdd33dcc8e6a78a829573f0ed9bf6dJoshua Bloch//        // these three elements hash to the same bucket in a 7 element Hashtable
561c0a4d9b35cbdd33dcc8e6a78a829573f0ed9bf6dJoshua Bloch//        ht.put("2", "b");
562c0a4d9b35cbdd33dcc8e6a78a829573f0ed9bf6dJoshua Bloch//        ht.put("9", "c");
563c0a4d9b35cbdd33dcc8e6a78a829573f0ed9bf6dJoshua Bloch//        ht.put("12", "d");
564c0a4d9b35cbdd33dcc8e6a78a829573f0ed9bf6dJoshua Bloch//        // Hashtable looks like:
565c0a4d9b35cbdd33dcc8e6a78a829573f0ed9bf6dJoshua Bloch//        // 0: "1"
566c0a4d9b35cbdd33dcc8e6a78a829573f0ed9bf6dJoshua Bloch//        // 1: "12" -> "9" -> "2"
567c0a4d9b35cbdd33dcc8e6a78a829573f0ed9bf6dJoshua Bloch//        Enumeration en = ht.elements();
568c0a4d9b35cbdd33dcc8e6a78a829573f0ed9bf6dJoshua Bloch//        // cache the first entry
569c0a4d9b35cbdd33dcc8e6a78a829573f0ed9bf6dJoshua Bloch//        en.hasMoreElements();
570c0a4d9b35cbdd33dcc8e6a78a829573f0ed9bf6dJoshua Bloch//        Iterator it = ht.keySet().iterator();
571c0a4d9b35cbdd33dcc8e6a78a829573f0ed9bf6dJoshua Bloch//        // this is mostly a copy of the test in test_elements_subtest0()
572c0a4d9b35cbdd33dcc8e6a78a829573f0ed9bf6dJoshua Bloch//        // test removing with the iterator does not null the values
573c0a4d9b35cbdd33dcc8e6a78a829573f0ed9bf6dJoshua Bloch//        while (it.hasNext()) {
574c0a4d9b35cbdd33dcc8e6a78a829573f0ed9bf6dJoshua Bloch//            String key = (String) it.next();
575c0a4d9b35cbdd33dcc8e6a78a829573f0ed9bf6dJoshua Bloch//            if ("12".equals(key) || "9".equals(key)) {
576c0a4d9b35cbdd33dcc8e6a78a829573f0ed9bf6dJoshua Bloch//                it.remove();
577c0a4d9b35cbdd33dcc8e6a78a829573f0ed9bf6dJoshua Bloch//            }
578c0a4d9b35cbdd33dcc8e6a78a829573f0ed9bf6dJoshua Bloch//        }
579c0a4d9b35cbdd33dcc8e6a78a829573f0ed9bf6dJoshua Bloch//        it.remove();
580c0a4d9b35cbdd33dcc8e6a78a829573f0ed9bf6dJoshua Bloch//        boolean exception = false;
581c0a4d9b35cbdd33dcc8e6a78a829573f0ed9bf6dJoshua Bloch//        try {
582c0a4d9b35cbdd33dcc8e6a78a829573f0ed9bf6dJoshua Bloch//            // cached "12"
583c0a4d9b35cbdd33dcc8e6a78a829573f0ed9bf6dJoshua Bloch//            Object result = en.nextElement();
584c0a4d9b35cbdd33dcc8e6a78a829573f0ed9bf6dJoshua Bloch//            assertTrue("unexpected: " + result, "d".equals(result));
585c0a4d9b35cbdd33dcc8e6a78a829573f0ed9bf6dJoshua Bloch//            // next is removed "9"
586c0a4d9b35cbdd33dcc8e6a78a829573f0ed9bf6dJoshua Bloch//            result = en.nextElement();
587c0a4d9b35cbdd33dcc8e6a78a829573f0ed9bf6dJoshua Bloch//            assertTrue("unexpected: " + result, "c".equals(result));
588c0a4d9b35cbdd33dcc8e6a78a829573f0ed9bf6dJoshua Bloch//            result = en.nextElement();
589c0a4d9b35cbdd33dcc8e6a78a829573f0ed9bf6dJoshua Bloch//            assertTrue("unexpected: " + result, "b".equals(result));
590c0a4d9b35cbdd33dcc8e6a78a829573f0ed9bf6dJoshua Bloch//        } catch (NoSuchElementException e) {
591c0a4d9b35cbdd33dcc8e6a78a829573f0ed9bf6dJoshua Bloch//            exception = true;
592c0a4d9b35cbdd33dcc8e6a78a829573f0ed9bf6dJoshua Bloch//        }
593c0a4d9b35cbdd33dcc8e6a78a829573f0ed9bf6dJoshua Bloch//        assertTrue("unexpected NoSuchElementException", !exception);
594c0a4d9b35cbdd33dcc8e6a78a829573f0ed9bf6dJoshua Bloch//    }
5955d175dd4d7b128492ef7e3da6a77d80b8fd0aa22Tobias Thierer// END Android-removed
596adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project
597adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    /**
598229e34b182b98e1dba15d3dc6341954986ae2b7aBrian Carlstrom     * java.util.Hashtable#put(java.lang.Object, java.lang.Object)
599adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     */
600adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    public void test_putLjava_lang_ObjectLjava_lang_Object() {
601adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        // Test for method java.lang.Object
602adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        // java.util.Hashtable.put(java.lang.Object, java.lang.Object)
603adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        Hashtable h = hashtableClone(ht100);
604adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        Integer key = new Integer(100);
605adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        h.put("Value 100", key);
606adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        assertTrue("Key/Value not inserted", h.size() == 1 && (h.contains(key)));
607adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project
608adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        // Put into "full" table
609adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        h = hashtableClone(htfull);
610adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        h.put("Value 100", key);
611adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        assertTrue("Key/Value not inserted into full table", h.size() == 8
612adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project                && (h.contains(key)));
613adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project
614adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        try {
615adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            h.put(null, key);
616adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            fail("NullPointerException expected");
617adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        } catch (NullPointerException e) {
618adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            //expected
619adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        }
620adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project
621adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        try {
622adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            h.put("Value 100", null);
623adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            fail("NullPointerException expected");
624adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        } catch (NullPointerException e) {
625adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            //expected
626adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        }
627adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    }
628adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project
629adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    /**
630229e34b182b98e1dba15d3dc6341954986ae2b7aBrian Carlstrom     * java.util.Hashtable#putAll(java.util.Map)
631adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     */
632adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    public void test_putAllLjava_util_Map() {
633adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        // Test for method void java.util.Hashtable.putAll(java.util.Map)
634adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        Hashtable h = new Hashtable();
635adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        h.putAll(ht10);
636adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        Enumeration e = keyVector.elements();
637adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        while (e.hasMoreElements()) {
638adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            Object x = e.nextElement();
639adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            assertTrue("Failed to put all elements", h.get(x).equals(
640adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project                    ht10.get(x)));
641adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        }
642adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project
643adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        try {
644adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            h.putAll(null);
645adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            fail("NullPointerException expected");
646adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        } catch (NullPointerException ee) {
647adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            //expected
648adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        }
649adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    }
650adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project
651adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    /**
652229e34b182b98e1dba15d3dc6341954986ae2b7aBrian Carlstrom     * java.util.Hashtable#remove(java.lang.Object)
653adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     */
654adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    public void test_removeLjava_lang_Object() {
655adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        // Test for method java.lang.Object
656adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        // java.util.Hashtable.remove(java.lang.Object)
657adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        Hashtable h = hashtableClone(htfull);
658adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        Object k = h.remove("FKey 0");
659adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        assertTrue("Remove failed", !h.containsKey("FKey 0") || k == null);
660adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        assertNull(h.remove("FKey 0"));
661f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes
662adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        try {
663adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            h.remove(null);
664adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            fail("NullPointerException expected");
665adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        } catch (NullPointerException e) {
666adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            //expected
667adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        }
668adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    }
669adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project
670ba45f538a14c08015021e899f5883f07ed2ff237Narayan Kamath    public void test_HashTable_remove_scenario1() {
671ba45f538a14c08015021e899f5883f07ed2ff237Narayan Kamath        Hashtable hashTable = new Hashtable();
672ba45f538a14c08015021e899f5883f07ed2ff237Narayan Kamath        Set keySet = hashTable.keySet();
673ba45f538a14c08015021e899f5883f07ed2ff237Narayan Kamath        hashTable.put(hashTable, keySet);
674ba45f538a14c08015021e899f5883f07ed2ff237Narayan Kamath        hashTable.remove(hashTable);
675ba45f538a14c08015021e899f5883f07ed2ff237Narayan Kamath    }
676ba45f538a14c08015021e899f5883f07ed2ff237Narayan Kamath
677ba45f538a14c08015021e899f5883f07ed2ff237Narayan Kamath    public void test_HashTable_remove_scenario2() {
678ba45f538a14c08015021e899f5883f07ed2ff237Narayan Kamath        Hashtable hashTable = new Hashtable();
679ba45f538a14c08015021e899f5883f07ed2ff237Narayan Kamath        Set keySet = hashTable.keySet();
680ba45f538a14c08015021e899f5883f07ed2ff237Narayan Kamath        hashTable.put(hashTable, hashTable);
681ba45f538a14c08015021e899f5883f07ed2ff237Narayan Kamath        hashTable.remove(hashTable);
682ba45f538a14c08015021e899f5883f07ed2ff237Narayan Kamath    }
683ba45f538a14c08015021e899f5883f07ed2ff237Narayan Kamath
684ba45f538a14c08015021e899f5883f07ed2ff237Narayan Kamath    public void test_HashTable_remove_scenario3() {
685ba45f538a14c08015021e899f5883f07ed2ff237Narayan Kamath        Hashtable hashTable = new Hashtable();
686ba45f538a14c08015021e899f5883f07ed2ff237Narayan Kamath        Hashtable keyHashTable = new Hashtable();
687ba45f538a14c08015021e899f5883f07ed2ff237Narayan Kamath        keyHashTable.put(hashTable, keyHashTable);
688ba45f538a14c08015021e899f5883f07ed2ff237Narayan Kamath        hashTable.put(keyHashTable, hashTable);
689ba45f538a14c08015021e899f5883f07ed2ff237Narayan Kamath        hashTable.remove(keyHashTable);
690ba45f538a14c08015021e899f5883f07ed2ff237Narayan Kamath    }
691ba45f538a14c08015021e899f5883f07ed2ff237Narayan Kamath
692adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    /**
693229e34b182b98e1dba15d3dc6341954986ae2b7aBrian Carlstrom     * java.util.Hashtable#size()
694adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     */
695adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    public void test_size() {
696adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        // Test for method int java.util.Hashtable.size()
697adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        assertTrue("Returned invalid size", ht10.size() == 10
698adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project                && (ht100.size() == 0));
699adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project
700adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        final Hashtable ht = new Hashtable();
701adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        ht.put("0", "");
702adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        Thread t1 = new Thread() {
703adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            public void run() {
704adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project                while (ht.size() > 0)
705adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project                    ;
706adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project                ht.put("final", "");
707adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            }
708adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        };
709adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        t1.start();
710adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        for (int i = 1; i < 10000; i++) {
711adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            synchronized (ht) {
712adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project                ht.remove(String.valueOf(i - 1));
713adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project                ht.put(String.valueOf(i), "");
714adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            }
715adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            int size;
716adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            if ((size = ht.size()) != 1) {
717adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project                String result = "Size is not 1: " + size + " " + ht;
718adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project                // terminate the thread
719adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project                ht.clear();
720adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project                fail(result);
721adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            }
722adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        }
723adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        // terminate the thread
724adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        ht.clear();
725adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    }
726adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project
727adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    /**
728229e34b182b98e1dba15d3dc6341954986ae2b7aBrian Carlstrom     * java.util.Hashtable#toString()
729adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     */
730adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    public void test_toString() {
731adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        // Test for method java.lang.String java.util.Hashtable.toString()
732adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        Hashtable h = new Hashtable();
733f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes        assertEquals("Incorrect toString for Empty table",
734adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project                "{}", h.toString());
735adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project
736adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        h.put("one", "1");
737adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        h.put("two", h);
738adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        h.put(h, "3");
739adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        h.put(h, h);
740adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        String result = h.toString();
741adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        assertTrue("should contain self ref", result.indexOf("(this") > -1);
742adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    }
743adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project
744adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    /**
745229e34b182b98e1dba15d3dc6341954986ae2b7aBrian Carlstrom     * java.util.Hashtable#values()
746adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     */
747adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    public void test_values() {
748adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        // Test for method java.util.Collection java.util.Hashtable.values()
749adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        Collection c = ht10.values();
750adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        Enumeration e = elmVector.elements();
751adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        while (e.hasMoreElements())
752adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            assertTrue("Returned incorrect values", c.contains(e.nextElement()));
753adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project
7545d175dd4d7b128492ef7e3da6a77d80b8fd0aa22Tobias Thierer// BEGIN Android-removed
755c0a4d9b35cbdd33dcc8e6a78a829573f0ed9bf6dJoshua Bloch// implementation dependent
756c0a4d9b35cbdd33dcc8e6a78a829573f0ed9bf6dJoshua Bloch//        assertEquals("Not synchronized",
757c0a4d9b35cbdd33dcc8e6a78a829573f0ed9bf6dJoshua Bloch//                "java.util.Collections$SynchronizedCollection", c.getClass().getName());
7585d175dd4d7b128492ef7e3da6a77d80b8fd0aa22Tobias Thierer// END Android-removed
759f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes
760adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        Hashtable myHashtable = new Hashtable();
761adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        for (int i = 0; i < 100; i++)
762adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            myHashtable.put(new Integer(i), new Integer(i));
763adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        Collection values = myHashtable.values();
764adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        new Support_UnmodifiableCollectionTest(
765adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project                "Test Returned Collection From Hashtable.values()", values)
766adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project                .runTest();
767adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        values.remove(new Integer(0));
768adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        assertTrue(
769adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project                "Removing from the values collection should remove from the original map",
770adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project                !myHashtable.containsValue(new Integer(0)));
771adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    }
772f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes
773adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    /**
774adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     * Regression Test for JIRA 2181
775adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     */
776ba45f538a14c08015021e899f5883f07ed2ff237Narayan Kamath    public void test_entrySet_remove() {
777ba45f538a14c08015021e899f5883f07ed2ff237Narayan Kamath        Hashtable<String, String> hashtable = new Hashtable<String, String>();
778adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        hashtable.put("my.nonexistent.prop", "AAA");
779ba45f538a14c08015021e899f5883f07ed2ff237Narayan Kamath        hashtable.put("parse.error", "BBB");
780ba45f538a14c08015021e899f5883f07ed2ff237Narayan Kamath        Iterator<Map.Entry<String, String>> iterator =
781ba45f538a14c08015021e899f5883f07ed2ff237Narayan Kamath                hashtable.entrySet().iterator();
782ba45f538a14c08015021e899f5883f07ed2ff237Narayan Kamath        while (iterator.hasNext()) {
783adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            Map.Entry entry = iterator.next();
784f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes            final Object value = entry.getValue();
785ba45f538a14c08015021e899f5883f07ed2ff237Narayan Kamath            if (value.equals("AAA")) {
786ba45f538a14c08015021e899f5883f07ed2ff237Narayan Kamath                iterator.remove();
787adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            }
788adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        }
789adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        assertFalse(hashtable.containsKey("my.nonexistent.prop"));
790adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    }
791adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project
792adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    class Mock_Hashtable extends Hashtable {
793adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        boolean flag = false;
794adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project
795adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        public Mock_Hashtable(int i) {
796adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            super(i);
797adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        }
798adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project
799adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        @Override
800adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        protected void rehash() {
801adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            flag = true;
802adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            super.rehash();
803adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        }
804f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes
805adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        public boolean isRehashed() {
806adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            return flag;
807adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        }
808adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    }
809adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project
810adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    public void test_rehash() {
811adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        Mock_Hashtable mht = new Mock_Hashtable(5);
812f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes
813adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        assertFalse(mht.isRehashed());
814adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        for(int i = 0; i < 10; i++) {
815adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            mht.put(i, "New value");
816adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        }
817adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        assertTrue(mht.isRehashed());
818adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    }
819adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project
820ba45f538a14c08015021e899f5883f07ed2ff237Narayan Kamath    /**
821ba45f538a14c08015021e899f5883f07ed2ff237Narayan Kamath     * java.util.Hashtable#elements()
822ba45f538a14c08015021e899f5883f07ed2ff237Narayan Kamath     * java.util.Hashtable#keys()
823ba45f538a14c08015021e899f5883f07ed2ff237Narayan Kamath     * java.util.Hashtable#keySet()
824ba45f538a14c08015021e899f5883f07ed2ff237Narayan Kamath     */
825ba45f538a14c08015021e899f5883f07ed2ff237Narayan Kamath    public void test_keys_elements_keySet_Exceptions() {
826ba45f538a14c08015021e899f5883f07ed2ff237Narayan Kamath        Hashtable hashTable = new Hashtable();
827ba45f538a14c08015021e899f5883f07ed2ff237Narayan Kamath        String key = "key";
828ba45f538a14c08015021e899f5883f07ed2ff237Narayan Kamath        String value = "value";
829ba45f538a14c08015021e899f5883f07ed2ff237Narayan Kamath        hashTable.put(key, value);
830ba45f538a14c08015021e899f5883f07ed2ff237Narayan Kamath
8314df29e1e1cf169ff6c77b8dd247de8c79b81d552Neil Fuller        Enumeration enumeration = hashTable.keys();
8324df29e1e1cf169ff6c77b8dd247de8c79b81d552Neil Fuller        assertTrue(enumeration.hasMoreElements());
8334df29e1e1cf169ff6c77b8dd247de8c79b81d552Neil Fuller        enumeration.nextElement();
8344df29e1e1cf169ff6c77b8dd247de8c79b81d552Neil Fuller        assertFalse(enumeration.hasMoreElements());
835ba45f538a14c08015021e899f5883f07ed2ff237Narayan Kamath
8364df29e1e1cf169ff6c77b8dd247de8c79b81d552Neil Fuller        enumeration = hashTable.elements();
8374df29e1e1cf169ff6c77b8dd247de8c79b81d552Neil Fuller        assertTrue(enumeration.hasMoreElements());
8384df29e1e1cf169ff6c77b8dd247de8c79b81d552Neil Fuller        enumeration.nextElement();
8394df29e1e1cf169ff6c77b8dd247de8c79b81d552Neil Fuller        assertFalse(enumeration.hasMoreElements());
840ba45f538a14c08015021e899f5883f07ed2ff237Narayan Kamath
8414df29e1e1cf169ff6c77b8dd247de8c79b81d552Neil Fuller        Iterator iterator = hashTable.keySet().iterator();
842ba45f538a14c08015021e899f5883f07ed2ff237Narayan Kamath        assertTrue(iterator.hasNext());
843ba45f538a14c08015021e899f5883f07ed2ff237Narayan Kamath        try {
844ba45f538a14c08015021e899f5883f07ed2ff237Narayan Kamath            iterator.remove();
845ba45f538a14c08015021e899f5883f07ed2ff237Narayan Kamath            fail("should throw IllegalStateException");
846ba45f538a14c08015021e899f5883f07ed2ff237Narayan Kamath        } catch (IllegalStateException e) {
847ba45f538a14c08015021e899f5883f07ed2ff237Narayan Kamath            // Expected
848ba45f538a14c08015021e899f5883f07ed2ff237Narayan Kamath        }
849ba45f538a14c08015021e899f5883f07ed2ff237Narayan Kamath        iterator.next();
850ba45f538a14c08015021e899f5883f07ed2ff237Narayan Kamath        iterator.remove();
851ba45f538a14c08015021e899f5883f07ed2ff237Narayan Kamath        assertFalse(iterator.hasNext());
852ba45f538a14c08015021e899f5883f07ed2ff237Narayan Kamath
853ba45f538a14c08015021e899f5883f07ed2ff237Narayan Kamath        hashTable.clear();
854ba45f538a14c08015021e899f5883f07ed2ff237Narayan Kamath        for (int i = 0; i < 10; i++) {
855ba45f538a14c08015021e899f5883f07ed2ff237Narayan Kamath            hashTable.put(key + i, value + i);
856ba45f538a14c08015021e899f5883f07ed2ff237Narayan Kamath        }
857ba45f538a14c08015021e899f5883f07ed2ff237Narayan Kamath
8584df29e1e1cf169ff6c77b8dd247de8c79b81d552Neil Fuller        enumeration = hashTable.keys();
859ba45f538a14c08015021e899f5883f07ed2ff237Narayan Kamath        assertTrue(enumeration.hasMoreElements());
860ba45f538a14c08015021e899f5883f07ed2ff237Narayan Kamath        for (int i = 0; i < 10; i++) {
8614df29e1e1cf169ff6c77b8dd247de8c79b81d552Neil Fuller            enumeration.nextElement();
862ba45f538a14c08015021e899f5883f07ed2ff237Narayan Kamath        }
863ba45f538a14c08015021e899f5883f07ed2ff237Narayan Kamath        assertFalse(enumeration.hasMoreElements());
864ba45f538a14c08015021e899f5883f07ed2ff237Narayan Kamath        try {
865ba45f538a14c08015021e899f5883f07ed2ff237Narayan Kamath            enumeration.nextElement();
866ba45f538a14c08015021e899f5883f07ed2ff237Narayan Kamath            fail("should throw NoSuchElementException");
867ba45f538a14c08015021e899f5883f07ed2ff237Narayan Kamath        } catch (NoSuchElementException e) {
868ba45f538a14c08015021e899f5883f07ed2ff237Narayan Kamath            // Expected
869ba45f538a14c08015021e899f5883f07ed2ff237Narayan Kamath        }
870ba45f538a14c08015021e899f5883f07ed2ff237Narayan Kamath
871ba45f538a14c08015021e899f5883f07ed2ff237Narayan Kamath        enumeration = hashTable.elements();
872ba45f538a14c08015021e899f5883f07ed2ff237Narayan Kamath        assertTrue(enumeration.hasMoreElements());
873ba45f538a14c08015021e899f5883f07ed2ff237Narayan Kamath        for (int i = 0; i < 10; i++) {
8744df29e1e1cf169ff6c77b8dd247de8c79b81d552Neil Fuller            enumeration.nextElement();
875ba45f538a14c08015021e899f5883f07ed2ff237Narayan Kamath        }
876ba45f538a14c08015021e899f5883f07ed2ff237Narayan Kamath        assertFalse(enumeration.hasMoreElements());
877ba45f538a14c08015021e899f5883f07ed2ff237Narayan Kamath        try {
878ba45f538a14c08015021e899f5883f07ed2ff237Narayan Kamath            enumeration.nextElement();
879ba45f538a14c08015021e899f5883f07ed2ff237Narayan Kamath            fail("should throw NoSuchElementException");
880ba45f538a14c08015021e899f5883f07ed2ff237Narayan Kamath        } catch (NoSuchElementException e) {
881ba45f538a14c08015021e899f5883f07ed2ff237Narayan Kamath            // Expected
882ba45f538a14c08015021e899f5883f07ed2ff237Narayan Kamath        }
883ba45f538a14c08015021e899f5883f07ed2ff237Narayan Kamath
8844df29e1e1cf169ff6c77b8dd247de8c79b81d552Neil Fuller        iterator = hashTable.keySet().iterator();
885ba45f538a14c08015021e899f5883f07ed2ff237Narayan Kamath        assertTrue(iterator.hasNext());
886ba45f538a14c08015021e899f5883f07ed2ff237Narayan Kamath        for (int i = 0; i < 10; i++) {
8874df29e1e1cf169ff6c77b8dd247de8c79b81d552Neil Fuller            iterator.next();
888ba45f538a14c08015021e899f5883f07ed2ff237Narayan Kamath        }
889ba45f538a14c08015021e899f5883f07ed2ff237Narayan Kamath        assertFalse(iterator.hasNext());
890ba45f538a14c08015021e899f5883f07ed2ff237Narayan Kamath        try {
891ba45f538a14c08015021e899f5883f07ed2ff237Narayan Kamath            iterator.next();
892ba45f538a14c08015021e899f5883f07ed2ff237Narayan Kamath            fail("should throw NoSuchElementException");
893ba45f538a14c08015021e899f5883f07ed2ff237Narayan Kamath        } catch (NoSuchElementException e) {
894ba45f538a14c08015021e899f5883f07ed2ff237Narayan Kamath            // Expected
895ba45f538a14c08015021e899f5883f07ed2ff237Narayan Kamath        }
896ba45f538a14c08015021e899f5883f07ed2ff237Narayan Kamath    }
897ba45f538a14c08015021e899f5883f07ed2ff237Narayan Kamath
89860796efea3a74e02aea384b8eb56103ea21b880bPrzemyslaw Szczepaniak    public void test_forEach() throws Exception {
89960796efea3a74e02aea384b8eb56103ea21b880bPrzemyslaw Szczepaniak        Hashtable<String, String> ht = new Hashtable<>();
90060796efea3a74e02aea384b8eb56103ea21b880bPrzemyslaw Szczepaniak        ht.put("1", "one");
90160796efea3a74e02aea384b8eb56103ea21b880bPrzemyslaw Szczepaniak        ht.put("2", "two");
90260796efea3a74e02aea384b8eb56103ea21b880bPrzemyslaw Szczepaniak        ht.put("3", "three");
90360796efea3a74e02aea384b8eb56103ea21b880bPrzemyslaw Szczepaniak        Hashtable<String, String> output = new Hashtable<>();
90460796efea3a74e02aea384b8eb56103ea21b880bPrzemyslaw Szczepaniak
90560796efea3a74e02aea384b8eb56103ea21b880bPrzemyslaw Szczepaniak        ht.forEach((k,v) -> output.put(k,v));
90660796efea3a74e02aea384b8eb56103ea21b880bPrzemyslaw Szczepaniak        assertEquals(ht, output);
90760796efea3a74e02aea384b8eb56103ea21b880bPrzemyslaw Szczepaniak    }
90860796efea3a74e02aea384b8eb56103ea21b880bPrzemyslaw Szczepaniak
90960796efea3a74e02aea384b8eb56103ea21b880bPrzemyslaw Szczepaniak    public void test_forEach_NPE() throws Exception {
91060796efea3a74e02aea384b8eb56103ea21b880bPrzemyslaw Szczepaniak        Hashtable<String, String> ht = new Hashtable<>();
91160796efea3a74e02aea384b8eb56103ea21b880bPrzemyslaw Szczepaniak        try {
91260796efea3a74e02aea384b8eb56103ea21b880bPrzemyslaw Szczepaniak            ht.forEach(null);
91360796efea3a74e02aea384b8eb56103ea21b880bPrzemyslaw Szczepaniak            fail();
91460796efea3a74e02aea384b8eb56103ea21b880bPrzemyslaw Szczepaniak        } catch(NullPointerException expected) {}
91560796efea3a74e02aea384b8eb56103ea21b880bPrzemyslaw Szczepaniak    }
91660796efea3a74e02aea384b8eb56103ea21b880bPrzemyslaw Szczepaniak
91760796efea3a74e02aea384b8eb56103ea21b880bPrzemyslaw Szczepaniak    public void test_forEach_CME() throws Exception {
91860796efea3a74e02aea384b8eb56103ea21b880bPrzemyslaw Szczepaniak        Hashtable<String, String> ht = new Hashtable<>();
91960796efea3a74e02aea384b8eb56103ea21b880bPrzemyslaw Szczepaniak        ht.put("one", "1");
92060796efea3a74e02aea384b8eb56103ea21b880bPrzemyslaw Szczepaniak        ht.put("two", "2");
92160796efea3a74e02aea384b8eb56103ea21b880bPrzemyslaw Szczepaniak        ht.put("three", "3");
92260796efea3a74e02aea384b8eb56103ea21b880bPrzemyslaw Szczepaniak
92360796efea3a74e02aea384b8eb56103ea21b880bPrzemyslaw Szczepaniak        Hashtable<String, String> outputHt = new Hashtable<>();
92460796efea3a74e02aea384b8eb56103ea21b880bPrzemyslaw Szczepaniak        try {
92560796efea3a74e02aea384b8eb56103ea21b880bPrzemyslaw Szczepaniak            ht.forEach(new java.util.function.BiConsumer<String, String>() {
92660796efea3a74e02aea384b8eb56103ea21b880bPrzemyslaw Szczepaniak                    @Override
92760796efea3a74e02aea384b8eb56103ea21b880bPrzemyslaw Szczepaniak                    public void accept(String k, String v) {
92860796efea3a74e02aea384b8eb56103ea21b880bPrzemyslaw Szczepaniak                        outputHt.put(k, v);
92960796efea3a74e02aea384b8eb56103ea21b880bPrzemyslaw Szczepaniak                        ht.put("foo", v);
93060796efea3a74e02aea384b8eb56103ea21b880bPrzemyslaw Szczepaniak                    }
93160796efea3a74e02aea384b8eb56103ea21b880bPrzemyslaw Szczepaniak                });
93260796efea3a74e02aea384b8eb56103ea21b880bPrzemyslaw Szczepaniak            fail();
93360796efea3a74e02aea384b8eb56103ea21b880bPrzemyslaw Szczepaniak        } catch(ConcurrentModificationException expected) {}
93460796efea3a74e02aea384b8eb56103ea21b880bPrzemyslaw Szczepaniak        // We should get a CME and DO NOT continue forEach evaluation
93560796efea3a74e02aea384b8eb56103ea21b880bPrzemyslaw Szczepaniak        assertEquals(1, outputHt.size());
93660796efea3a74e02aea384b8eb56103ea21b880bPrzemyslaw Szczepaniak    }
93760796efea3a74e02aea384b8eb56103ea21b880bPrzemyslaw Szczepaniak
938adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    protected Hashtable hashtableClone(Hashtable s) {
939adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        return (Hashtable) s.clone();
940adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    }
941f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes
942adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    /**
943adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     * Sets up the fixture, for example, open a network connection. This method
944adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     * is called before a test is executed.
945adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     */
946adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    protected void setUp() {
947adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project
948adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        ht10 = new Hashtable(10);
949adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        ht100 = new Hashtable(100);
950adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        htfull = new Hashtable(10);
951adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        keyVector = new Vector(10);
952adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        elmVector = new Vector(10);
953adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project
954adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        for (int i = 0; i < 10; i++) {
955adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            ht10.put("Key " + i, "Val " + i);
956adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            keyVector.addElement("Key " + i);
957adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            elmVector.addElement("Val " + i);
958adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        }
959adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project
960adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        for (int i = 0; i < 7; i++)
961adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            htfull.put("FKey " + i, "FVal " + i);
962adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    }
963adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project
964adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    /**
965adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     * Tears down the fixture, for example, close a network connection. This
966adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     * method is called after a test is executed.
967adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     */
968adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    protected void tearDown() {
969740cbf1565815f08d9fb3a0a8d4a581cdc0d2a9dJorg Pleumann        ht10 = null;
970740cbf1565815f08d9fb3a0a8d4a581cdc0d2a9dJorg Pleumann        ht100 = null;
971740cbf1565815f08d9fb3a0a8d4a581cdc0d2a9dJorg Pleumann        htfull = null;
972740cbf1565815f08d9fb3a0a8d4a581cdc0d2a9dJorg Pleumann        keyVector = null;
973740cbf1565815f08d9fb3a0a8d4a581cdc0d2a9dJorg Pleumann        elmVector = null;
974adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    }
975adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project}
976