HashtableTest.java revision ba45f538a14c08015021e899f5883f07ed2ff237
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
18adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Projectpackage tests.api.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
243ba45f538a14c08015021e899f5883f07ed2ff237Narayan Kamath        // cast Enumeration to Iterator
244ba45f538a14c08015021e899f5883f07ed2ff237Narayan Kamath        Iterator iterator = (Iterator) elms;
245ba45f538a14c08015021e899f5883f07ed2ff237Narayan Kamath        assertFalse(iterator.hasNext());
246ba45f538a14c08015021e899f5883f07ed2ff237Narayan Kamath        try {
247ba45f538a14c08015021e899f5883f07ed2ff237Narayan Kamath            iterator.next();
248ba45f538a14c08015021e899f5883f07ed2ff237Narayan Kamath            fail("should throw NoSuchElementException");
249ba45f538a14c08015021e899f5883f07ed2ff237Narayan Kamath        } catch (NoSuchElementException e) {
250ba45f538a14c08015021e899f5883f07ed2ff237Narayan Kamath            // Expected
251ba45f538a14c08015021e899f5883f07ed2ff237Narayan Kamath        }
252adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    }
253adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project
254c0a4d9b35cbdd33dcc8e6a78a829573f0ed9bf6dJoshua Bloch// BEGIN android-removed
255c0a4d9b35cbdd33dcc8e6a78a829573f0ed9bf6dJoshua Bloch// implementation dependent
256c0a4d9b35cbdd33dcc8e6a78a829573f0ed9bf6dJoshua Bloch//    /**
257229e34b182b98e1dba15d3dc6341954986ae2b7aBrian Carlstrom//     * java.util.Hashtable#elements()
258c0a4d9b35cbdd33dcc8e6a78a829573f0ed9bf6dJoshua Bloch//     */
259c0a4d9b35cbdd33dcc8e6a78a829573f0ed9bf6dJoshua Bloch//    public void test_elements_subtest0() {
260c0a4d9b35cbdd33dcc8e6a78a829573f0ed9bf6dJoshua Bloch//        // this is the reference implementation behavior
261c0a4d9b35cbdd33dcc8e6a78a829573f0ed9bf6dJoshua Bloch//        final Hashtable ht = new Hashtable(7);
262c0a4d9b35cbdd33dcc8e6a78a829573f0ed9bf6dJoshua Bloch//        ht.put("1", "a");
263c0a4d9b35cbdd33dcc8e6a78a829573f0ed9bf6dJoshua Bloch//        // these three elements hash to the same bucket in a 7 element Hashtable
264c0a4d9b35cbdd33dcc8e6a78a829573f0ed9bf6dJoshua Bloch//        ht.put("2", "b");
265c0a4d9b35cbdd33dcc8e6a78a829573f0ed9bf6dJoshua Bloch//        ht.put("9", "c");
266c0a4d9b35cbdd33dcc8e6a78a829573f0ed9bf6dJoshua Bloch//        ht.put("12", "d");
267c0a4d9b35cbdd33dcc8e6a78a829573f0ed9bf6dJoshua Bloch//        // Hashtable looks like:
268c0a4d9b35cbdd33dcc8e6a78a829573f0ed9bf6dJoshua Bloch//        // 0: "1"
269c0a4d9b35cbdd33dcc8e6a78a829573f0ed9bf6dJoshua Bloch//        // 1: "12" -> "9" -> "2"
270c0a4d9b35cbdd33dcc8e6a78a829573f0ed9bf6dJoshua Bloch//        Enumeration en = ht.elements();
271c0a4d9b35cbdd33dcc8e6a78a829573f0ed9bf6dJoshua Bloch//        // cache the first entry
272c0a4d9b35cbdd33dcc8e6a78a829573f0ed9bf6dJoshua Bloch//        en.hasMoreElements();
273c0a4d9b35cbdd33dcc8e6a78a829573f0ed9bf6dJoshua Bloch//        ht.remove("12");
274c0a4d9b35cbdd33dcc8e6a78a829573f0ed9bf6dJoshua Bloch//        ht.remove("9");
275c0a4d9b35cbdd33dcc8e6a78a829573f0ed9bf6dJoshua Bloch//        boolean exception = false;
276c0a4d9b35cbdd33dcc8e6a78a829573f0ed9bf6dJoshua Bloch//        try {
277c0a4d9b35cbdd33dcc8e6a78a829573f0ed9bf6dJoshua Bloch//            // cached "12"
278c0a4d9b35cbdd33dcc8e6a78a829573f0ed9bf6dJoshua Bloch//            Object result = en.nextElement();
279c0a4d9b35cbdd33dcc8e6a78a829573f0ed9bf6dJoshua Bloch//            assertNull("unexpected: " + result, result);
280c0a4d9b35cbdd33dcc8e6a78a829573f0ed9bf6dJoshua Bloch//            // next is removed "9"
281c0a4d9b35cbdd33dcc8e6a78a829573f0ed9bf6dJoshua Bloch//            result = en.nextElement();
282c0a4d9b35cbdd33dcc8e6a78a829573f0ed9bf6dJoshua Bloch//            assertNull("unexpected: " + result, result);
283c0a4d9b35cbdd33dcc8e6a78a829573f0ed9bf6dJoshua Bloch//            result = en.nextElement();
284c0a4d9b35cbdd33dcc8e6a78a829573f0ed9bf6dJoshua Bloch//            assertTrue("unexpected: " + result, "b".equals(result));
285c0a4d9b35cbdd33dcc8e6a78a829573f0ed9bf6dJoshua Bloch//        } catch (NoSuchElementException e) {
286c0a4d9b35cbdd33dcc8e6a78a829573f0ed9bf6dJoshua Bloch//            exception = true;
287c0a4d9b35cbdd33dcc8e6a78a829573f0ed9bf6dJoshua Bloch//        }
288c0a4d9b35cbdd33dcc8e6a78a829573f0ed9bf6dJoshua Bloch//        assertTrue("unexpected NoSuchElementException", !exception);
289c0a4d9b35cbdd33dcc8e6a78a829573f0ed9bf6dJoshua Bloch//    }
290c0a4d9b35cbdd33dcc8e6a78a829573f0ed9bf6dJoshua Bloch// END android-removed
291adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project
292adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    /**
293229e34b182b98e1dba15d3dc6341954986ae2b7aBrian Carlstrom     * java.util.Hashtable#entrySet()
294adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     */
295adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    public void test_entrySet() {
296adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        // Test for method java.util.Set java.util.Hashtable.entrySet()
297adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        Set s = ht10.entrySet();
298adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        Set s2 = new HashSet();
299adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        Iterator i = s.iterator();
300adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        while (i.hasNext())
301adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            s2.add(((Map.Entry) i.next()).getValue());
302adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        Enumeration e = elmVector.elements();
303adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        while (e.hasMoreElements())
304adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            assertTrue("Returned incorrect entry set", s2.contains(e
305adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project                    .nextElement()));
306c0a4d9b35cbdd33dcc8e6a78a829573f0ed9bf6dJoshua Bloch// BEGIN android-removed
307c0a4d9b35cbdd33dcc8e6a78a829573f0ed9bf6dJoshua Bloch// implementation dependent
308c0a4d9b35cbdd33dcc8e6a78a829573f0ed9bf6dJoshua Bloch//        assertEquals("Not synchronized",
309c0a4d9b35cbdd33dcc8e6a78a829573f0ed9bf6dJoshua Bloch//                "java.util.Collections$SynchronizedSet", s.getClass().getName());
310c0a4d9b35cbdd33dcc8e6a78a829573f0ed9bf6dJoshua Bloch// END android-removed
311adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project
312adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        boolean exception = false;
313adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        try {
314adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            ((Map.Entry) ht10.entrySet().iterator().next()).setValue(null);
315adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        } catch (NullPointerException e1) {
316adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            exception = true;
317adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        }
318adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        assertTrue(
319adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project                "Should not be able to assign null to a Hashtable entrySet() Map.Entry",
320adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project                exception);
321adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    }
322adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project
323adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    /**
324229e34b182b98e1dba15d3dc6341954986ae2b7aBrian Carlstrom     * java.util.Hashtable#equals(java.lang.Object)
325adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     */
326adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    public void test_equalsLjava_lang_Object() {
327adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        // Test for method boolean java.util.Hashtable.equals(java.lang.Object)
328adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        Hashtable h = hashtableClone(ht10);
329adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        assertTrue("Returned false for equal tables", ht10.equals(h));
330adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        assertTrue("Returned true for unequal tables", !ht10.equals(htfull));
331adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    }
332adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project
333adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    /**
334229e34b182b98e1dba15d3dc6341954986ae2b7aBrian Carlstrom     * java.util.Hashtable#get(java.lang.Object)
335adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     */
336adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    public void test_getLjava_lang_Object() {
337adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        // Test for method java.lang.Object
338adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        // java.util.Hashtable.get(java.lang.Object)
339adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        Hashtable h = hashtableClone(htfull);
340adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        assertEquals("Could not retrieve element", "FVal 2", ((String) h.get("FKey 2"))
341adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project                );
342adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project
343c0a4d9b35cbdd33dcc8e6a78a829573f0ed9bf6dJoshua Bloch// BEGIN android-removed
344c0a4d9b35cbdd33dcc8e6a78a829573f0ed9bf6dJoshua Bloch// implementation dependent
345c0a4d9b35cbdd33dcc8e6a78a829573f0ed9bf6dJoshua Bloch//        // Regression for HARMONY-262
346c0a4d9b35cbdd33dcc8e6a78a829573f0ed9bf6dJoshua Bloch//        ReusableKey k = new ReusableKey();
347c0a4d9b35cbdd33dcc8e6a78a829573f0ed9bf6dJoshua Bloch//        Hashtable h2 = new Hashtable();
348c0a4d9b35cbdd33dcc8e6a78a829573f0ed9bf6dJoshua Bloch//        k.setKey(1);
349c0a4d9b35cbdd33dcc8e6a78a829573f0ed9bf6dJoshua Bloch//        h2.put(k, "value1");
350c0a4d9b35cbdd33dcc8e6a78a829573f0ed9bf6dJoshua Bloch//
351c0a4d9b35cbdd33dcc8e6a78a829573f0ed9bf6dJoshua Bloch//        k.setKey(13);
352c0a4d9b35cbdd33dcc8e6a78a829573f0ed9bf6dJoshua Bloch//        assertNull(h2.get(k));
353c0a4d9b35cbdd33dcc8e6a78a829573f0ed9bf6dJoshua Bloch//
354c0a4d9b35cbdd33dcc8e6a78a829573f0ed9bf6dJoshua Bloch//        k.setKey(12);
355c0a4d9b35cbdd33dcc8e6a78a829573f0ed9bf6dJoshua Bloch//        assertNull(h2.get(k));
356f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes//
357c0a4d9b35cbdd33dcc8e6a78a829573f0ed9bf6dJoshua Bloch//        try {
358c0a4d9b35cbdd33dcc8e6a78a829573f0ed9bf6dJoshua Bloch//            h2.get(null);
359c0a4d9b35cbdd33dcc8e6a78a829573f0ed9bf6dJoshua Bloch//            fail("NullPointerException expected");
360c0a4d9b35cbdd33dcc8e6a78a829573f0ed9bf6dJoshua Bloch//        } catch (NullPointerException e) {
361c0a4d9b35cbdd33dcc8e6a78a829573f0ed9bf6dJoshua Bloch//            //expected
362c0a4d9b35cbdd33dcc8e6a78a829573f0ed9bf6dJoshua Bloch//        }
363c0a4d9b35cbdd33dcc8e6a78a829573f0ed9bf6dJoshua Bloch// END android-removed
364adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    }
365adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project
366adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    /**
367229e34b182b98e1dba15d3dc6341954986ae2b7aBrian Carlstrom     * java.util.Hashtable#hashCode()
368adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     */
369adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    public void test_hashCode() {
370adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        // Test for method int java.util.Hashtable.hashCode()
371adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        Set entrySet = ht10.entrySet();
372adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        Iterator iterator = entrySet.iterator();
373adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        int expectedHash;
374adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        for (expectedHash = 0; iterator.hasNext(); expectedHash += iterator
375adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project                .next().hashCode())
376adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            ;
377adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        assertTrue("Incorrect hashCode returned.  Wanted: " + expectedHash
378adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project                + " got: " + ht10.hashCode(), expectedHash == ht10.hashCode());
379adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    }
380adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project
381adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    /**
382229e34b182b98e1dba15d3dc6341954986ae2b7aBrian Carlstrom     * java.util.Hashtable#isEmpty()
383adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     */
384adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    public void test_isEmpty() {
385adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        // Test for method boolean java.util.Hashtable.isEmpty()
386adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project
387adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        assertTrue("isEmpty returned incorrect value", !ht10.isEmpty());
388adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        assertTrue("isEmpty returned incorrect value",
389adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project                new java.util.Hashtable().isEmpty());
390adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project
391adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        final Hashtable ht = new Hashtable();
392adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        ht.put("0", "");
393adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        Thread t1 = new Thread() {
394adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            public void run() {
395adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project                while (!ht.isEmpty())
396adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project                    ;
397adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project                ht.put("final", "");
398adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            }
399adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        };
400adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        t1.start();
401adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        for (int i = 1; i < 10000; i++) {
402adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            synchronized (ht) {
403adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project                ht.remove(String.valueOf(i - 1));
404adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project                ht.put(String.valueOf(i), "");
405adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            }
406adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            int size;
407adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            if ((size = ht.size()) != 1) {
408adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project                String result = "Size is not 1: " + size + " " + ht;
409adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project                // terminate the thread
410adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project                ht.clear();
411adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project                fail(result);
412adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            }
413adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        }
414adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        // terminate the thread
415adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        ht.clear();
416adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    }
417adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project
418adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    /**
419229e34b182b98e1dba15d3dc6341954986ae2b7aBrian Carlstrom     * java.util.Hashtable#keys()
420adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     */
421adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    public void test_keys() {
422adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        // Test for method java.util.Enumeration java.util.Hashtable.keys()
423adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project
424adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        Enumeration keys = ht10.keys();
425adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        int i = 0;
426adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        while (keys.hasMoreElements()) {
427adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            String s = (String) keys.nextElement();
428adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            assertTrue("Missing key from enumeration", keyVector.contains(s));
429adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            ++i;
430adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        }
431adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project
432adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        assertEquals("All keys not retrieved", 10, ht10.size());
433ba45f538a14c08015021e899f5883f07ed2ff237Narayan Kamath
434ba45f538a14c08015021e899f5883f07ed2ff237Narayan Kamath        // cast Enumeration to Iterator
435ba45f538a14c08015021e899f5883f07ed2ff237Narayan Kamath        Iterator iterator = (Iterator) keys;
436ba45f538a14c08015021e899f5883f07ed2ff237Narayan Kamath        assertFalse(iterator.hasNext());
437ba45f538a14c08015021e899f5883f07ed2ff237Narayan Kamath        try {
438ba45f538a14c08015021e899f5883f07ed2ff237Narayan Kamath            iterator.next();
439ba45f538a14c08015021e899f5883f07ed2ff237Narayan Kamath            fail("should throw NoSuchElementException");
440ba45f538a14c08015021e899f5883f07ed2ff237Narayan Kamath        } catch (NoSuchElementException e) {
441ba45f538a14c08015021e899f5883f07ed2ff237Narayan Kamath            // Expected
442ba45f538a14c08015021e899f5883f07ed2ff237Narayan Kamath        }
443adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    }
444adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project
445adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    /**
446229e34b182b98e1dba15d3dc6341954986ae2b7aBrian Carlstrom     * java.util.Hashtable#keys()
447adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     */
448adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    public void test_keys_subtest0() {
449adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        // this is the reference implementation behavior
450adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        final Hashtable ht = new Hashtable(3);
451adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        ht.put("initial", "");
452adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        Enumeration en = ht.keys();
453adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        en.hasMoreElements();
454adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        ht.remove("initial");
455adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        boolean exception = false;
456adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        try {
457adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            Object result = en.nextElement();
458adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            assertTrue("unexpected: " + result, "initial".equals(result));
459adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        } catch (NoSuchElementException e) {
460adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            exception = true;
461adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        }
462adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        assertTrue("unexpected NoSuchElementException", !exception);
463adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    }
464adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project
465adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    /**
466229e34b182b98e1dba15d3dc6341954986ae2b7aBrian Carlstrom     * java.util.Hashtable#keySet()
467adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     */
468adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    public void test_keySet() {
469adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        // Test for method java.util.Set java.util.Hashtable.keySet()
470adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        Set s = ht10.keySet();
471adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        Enumeration e = keyVector.elements();
472adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        while (e.hasMoreElements())
473adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            assertTrue("Returned incorrect key set", s
474adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project                    .contains(e.nextElement()));
475adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project
476c0a4d9b35cbdd33dcc8e6a78a829573f0ed9bf6dJoshua Bloch// BEGIN android-removed
477c0a4d9b35cbdd33dcc8e6a78a829573f0ed9bf6dJoshua Bloch// implementation dependent
478c0a4d9b35cbdd33dcc8e6a78a829573f0ed9bf6dJoshua Bloch//        assertEquals("Not synchronized",
479c0a4d9b35cbdd33dcc8e6a78a829573f0ed9bf6dJoshua Bloch//                "java.util.Collections$SynchronizedSet", s.getClass().getName());
480c0a4d9b35cbdd33dcc8e6a78a829573f0ed9bf6dJoshua Bloch// END android-removed
481f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes
482adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        Map map = new Hashtable(101);
483adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        map.put(new Integer(1), "1");
484adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        map.put(new Integer(102), "102");
485adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        map.put(new Integer(203), "203");
486adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        Iterator it = map.keySet().iterator();
487adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        Integer remove1 = (Integer) it.next();
488adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        it.remove();
489adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        Integer remove2 = (Integer) it.next();
490adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        it.remove();
491adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        ArrayList list = new ArrayList(Arrays.asList(new Integer[] {
492adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project                new Integer(1), new Integer(102), new Integer(203) }));
493adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        list.remove(remove1);
494adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        list.remove(remove2);
495adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        assertTrue("Wrong result", it.next().equals(list.get(0)));
496adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        assertEquals("Wrong size", 1, map.size());
497adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        assertTrue("Wrong contents", map.keySet().iterator().next().equals(
498adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project                list.get(0)));
499adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project
500adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        Map map2 = new Hashtable(101);
501adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        map2.put(new Integer(1), "1");
502adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        map2.put(new Integer(4), "4");
503adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        Iterator it2 = map2.keySet().iterator();
504adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        Integer remove3 = (Integer) it2.next();
505adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        Integer next;
506adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        if (remove3.intValue() == 1)
507adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            next = new Integer(4);
508adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        else
509adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            next = new Integer(1);
510adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        it2.hasNext();
511adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        it2.remove();
512adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        assertTrue("Wrong result 2", it2.next().equals(next));
513adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        assertEquals("Wrong size 2", 1, map2.size());
514adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        assertTrue("Wrong contents 2", map2.keySet().iterator().next().equals(
515adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project                next));
516adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    }
517adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project
518adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    /**
519229e34b182b98e1dba15d3dc6341954986ae2b7aBrian Carlstrom     * java.util.Hashtable#keySet()
520adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     */
521adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    public void test_keySet_subtest0() {
522adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        Set s1 = ht10.keySet();
523adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        assertTrue("should contain key", s1.remove("Key 0"));
524adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        assertTrue("should not contain key", !s1.remove("Key 0"));
525adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project
526adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        final int iterations = 10000;
527adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        final Hashtable ht = new Hashtable();
528adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        Thread t1 = new Thread() {
529adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            public void run() {
530adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project                for (int i = 0; i < iterations; i++) {
531adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project                    ht.put(String.valueOf(i), "");
532adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project                    ht.remove(String.valueOf(i));
533adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project                }
534adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            }
535adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        };
536adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        t1.start();
537adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        Set set = ht.keySet();
538adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        for (int i = 0; i < iterations; i++) {
539adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            Iterator it = set.iterator();
540adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            try {
541adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project                it.next();
542adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project                it.remove();
543adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project                int size;
544adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project                // ensure removing with the iterator doesn't corrupt the
545adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project                // Hashtable
546adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project                if ((size = ht.size()) < 0) {
547adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project                    fail("invalid size: " + size);
548adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project                }
549adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            } catch (NoSuchElementException e) {
550adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            } catch (ConcurrentModificationException e) {
551adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            }
552adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        }
553adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    }
554adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project
555c0a4d9b35cbdd33dcc8e6a78a829573f0ed9bf6dJoshua Bloch// BEGIN android-removed
556c0a4d9b35cbdd33dcc8e6a78a829573f0ed9bf6dJoshua Bloch// implementation dependent
557c0a4d9b35cbdd33dcc8e6a78a829573f0ed9bf6dJoshua Bloch//    /**
558229e34b182b98e1dba15d3dc6341954986ae2b7aBrian Carlstrom//     * java.util.Hashtable#keySet()
559c0a4d9b35cbdd33dcc8e6a78a829573f0ed9bf6dJoshua Bloch//     */
560c0a4d9b35cbdd33dcc8e6a78a829573f0ed9bf6dJoshua Bloch//    public void test_keySet_subtest1() {
561c0a4d9b35cbdd33dcc8e6a78a829573f0ed9bf6dJoshua Bloch//        // this is the reference implementation behavior
562c0a4d9b35cbdd33dcc8e6a78a829573f0ed9bf6dJoshua Bloch//        final Hashtable ht = new Hashtable(7);
563c0a4d9b35cbdd33dcc8e6a78a829573f0ed9bf6dJoshua Bloch//        ht.put("1", "a");
564c0a4d9b35cbdd33dcc8e6a78a829573f0ed9bf6dJoshua Bloch//        // these three elements hash to the same bucket in a 7 element Hashtable
565c0a4d9b35cbdd33dcc8e6a78a829573f0ed9bf6dJoshua Bloch//        ht.put("2", "b");
566c0a4d9b35cbdd33dcc8e6a78a829573f0ed9bf6dJoshua Bloch//        ht.put("9", "c");
567c0a4d9b35cbdd33dcc8e6a78a829573f0ed9bf6dJoshua Bloch//        ht.put("12", "d");
568c0a4d9b35cbdd33dcc8e6a78a829573f0ed9bf6dJoshua Bloch//        // Hashtable looks like:
569c0a4d9b35cbdd33dcc8e6a78a829573f0ed9bf6dJoshua Bloch//        // 0: "1"
570c0a4d9b35cbdd33dcc8e6a78a829573f0ed9bf6dJoshua Bloch//        // 1: "12" -> "9" -> "2"
571c0a4d9b35cbdd33dcc8e6a78a829573f0ed9bf6dJoshua Bloch//        Enumeration en = ht.elements();
572c0a4d9b35cbdd33dcc8e6a78a829573f0ed9bf6dJoshua Bloch//        // cache the first entry
573c0a4d9b35cbdd33dcc8e6a78a829573f0ed9bf6dJoshua Bloch//        en.hasMoreElements();
574c0a4d9b35cbdd33dcc8e6a78a829573f0ed9bf6dJoshua Bloch//        Iterator it = ht.keySet().iterator();
575c0a4d9b35cbdd33dcc8e6a78a829573f0ed9bf6dJoshua Bloch//        // this is mostly a copy of the test in test_elements_subtest0()
576c0a4d9b35cbdd33dcc8e6a78a829573f0ed9bf6dJoshua Bloch//        // test removing with the iterator does not null the values
577c0a4d9b35cbdd33dcc8e6a78a829573f0ed9bf6dJoshua Bloch//        while (it.hasNext()) {
578c0a4d9b35cbdd33dcc8e6a78a829573f0ed9bf6dJoshua Bloch//            String key = (String) it.next();
579c0a4d9b35cbdd33dcc8e6a78a829573f0ed9bf6dJoshua Bloch//            if ("12".equals(key) || "9".equals(key)) {
580c0a4d9b35cbdd33dcc8e6a78a829573f0ed9bf6dJoshua Bloch//                it.remove();
581c0a4d9b35cbdd33dcc8e6a78a829573f0ed9bf6dJoshua Bloch//            }
582c0a4d9b35cbdd33dcc8e6a78a829573f0ed9bf6dJoshua Bloch//        }
583c0a4d9b35cbdd33dcc8e6a78a829573f0ed9bf6dJoshua Bloch//        it.remove();
584c0a4d9b35cbdd33dcc8e6a78a829573f0ed9bf6dJoshua Bloch//        boolean exception = false;
585c0a4d9b35cbdd33dcc8e6a78a829573f0ed9bf6dJoshua Bloch//        try {
586c0a4d9b35cbdd33dcc8e6a78a829573f0ed9bf6dJoshua Bloch//            // cached "12"
587c0a4d9b35cbdd33dcc8e6a78a829573f0ed9bf6dJoshua Bloch//            Object result = en.nextElement();
588c0a4d9b35cbdd33dcc8e6a78a829573f0ed9bf6dJoshua Bloch//            assertTrue("unexpected: " + result, "d".equals(result));
589c0a4d9b35cbdd33dcc8e6a78a829573f0ed9bf6dJoshua Bloch//            // next is removed "9"
590c0a4d9b35cbdd33dcc8e6a78a829573f0ed9bf6dJoshua Bloch//            result = en.nextElement();
591c0a4d9b35cbdd33dcc8e6a78a829573f0ed9bf6dJoshua Bloch//            assertTrue("unexpected: " + result, "c".equals(result));
592c0a4d9b35cbdd33dcc8e6a78a829573f0ed9bf6dJoshua Bloch//            result = en.nextElement();
593c0a4d9b35cbdd33dcc8e6a78a829573f0ed9bf6dJoshua Bloch//            assertTrue("unexpected: " + result, "b".equals(result));
594c0a4d9b35cbdd33dcc8e6a78a829573f0ed9bf6dJoshua Bloch//        } catch (NoSuchElementException e) {
595c0a4d9b35cbdd33dcc8e6a78a829573f0ed9bf6dJoshua Bloch//            exception = true;
596c0a4d9b35cbdd33dcc8e6a78a829573f0ed9bf6dJoshua Bloch//        }
597c0a4d9b35cbdd33dcc8e6a78a829573f0ed9bf6dJoshua Bloch//        assertTrue("unexpected NoSuchElementException", !exception);
598c0a4d9b35cbdd33dcc8e6a78a829573f0ed9bf6dJoshua Bloch//    }
599c0a4d9b35cbdd33dcc8e6a78a829573f0ed9bf6dJoshua Bloch// END android-removed
600adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project
601adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    /**
602229e34b182b98e1dba15d3dc6341954986ae2b7aBrian Carlstrom     * java.util.Hashtable#put(java.lang.Object, java.lang.Object)
603adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     */
604adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    public void test_putLjava_lang_ObjectLjava_lang_Object() {
605adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        // Test for method java.lang.Object
606adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        // java.util.Hashtable.put(java.lang.Object, java.lang.Object)
607adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        Hashtable h = hashtableClone(ht100);
608adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        Integer key = new Integer(100);
609adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        h.put("Value 100", key);
610adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        assertTrue("Key/Value not inserted", h.size() == 1 && (h.contains(key)));
611adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project
612adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        // Put into "full" table
613adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        h = hashtableClone(htfull);
614adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        h.put("Value 100", key);
615adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        assertTrue("Key/Value not inserted into full table", h.size() == 8
616adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project                && (h.contains(key)));
617adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project
618adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        try {
619adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            h.put(null, key);
620adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            fail("NullPointerException expected");
621adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        } catch (NullPointerException e) {
622adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            //expected
623adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        }
624adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project
625adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        try {
626adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            h.put("Value 100", null);
627adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            fail("NullPointerException expected");
628adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        } catch (NullPointerException e) {
629adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            //expected
630adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        }
631adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    }
632adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project
633adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    /**
634229e34b182b98e1dba15d3dc6341954986ae2b7aBrian Carlstrom     * java.util.Hashtable#putAll(java.util.Map)
635adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     */
636adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    public void test_putAllLjava_util_Map() {
637adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        // Test for method void java.util.Hashtable.putAll(java.util.Map)
638adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        Hashtable h = new Hashtable();
639adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        h.putAll(ht10);
640adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        Enumeration e = keyVector.elements();
641adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        while (e.hasMoreElements()) {
642adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            Object x = e.nextElement();
643adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            assertTrue("Failed to put all elements", h.get(x).equals(
644adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project                    ht10.get(x)));
645adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        }
646adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project
647adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        try {
648adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            h.putAll(null);
649adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            fail("NullPointerException expected");
650adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        } catch (NullPointerException ee) {
651adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            //expected
652adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        }
653adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    }
654adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project
655adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    /**
656229e34b182b98e1dba15d3dc6341954986ae2b7aBrian Carlstrom     * java.util.Hashtable#remove(java.lang.Object)
657adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     */
658adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    public void test_removeLjava_lang_Object() {
659adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        // Test for method java.lang.Object
660adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        // java.util.Hashtable.remove(java.lang.Object)
661adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        Hashtable h = hashtableClone(htfull);
662adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        Object k = h.remove("FKey 0");
663adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        assertTrue("Remove failed", !h.containsKey("FKey 0") || k == null);
664adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        assertNull(h.remove("FKey 0"));
665f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes
666adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        try {
667adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            h.remove(null);
668adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            fail("NullPointerException expected");
669adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        } catch (NullPointerException e) {
670adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            //expected
671adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        }
672adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    }
673adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project
674ba45f538a14c08015021e899f5883f07ed2ff237Narayan Kamath    public void test_HashTable_remove_scenario1() {
675ba45f538a14c08015021e899f5883f07ed2ff237Narayan Kamath        Hashtable hashTable = new Hashtable();
676ba45f538a14c08015021e899f5883f07ed2ff237Narayan Kamath        Set keySet = hashTable.keySet();
677ba45f538a14c08015021e899f5883f07ed2ff237Narayan Kamath        hashTable.put(hashTable, keySet);
678ba45f538a14c08015021e899f5883f07ed2ff237Narayan Kamath        hashTable.remove(hashTable);
679ba45f538a14c08015021e899f5883f07ed2ff237Narayan Kamath    }
680ba45f538a14c08015021e899f5883f07ed2ff237Narayan Kamath
681ba45f538a14c08015021e899f5883f07ed2ff237Narayan Kamath    public void test_HashTable_remove_scenario2() {
682ba45f538a14c08015021e899f5883f07ed2ff237Narayan Kamath        Hashtable hashTable = new Hashtable();
683ba45f538a14c08015021e899f5883f07ed2ff237Narayan Kamath        Set keySet = hashTable.keySet();
684ba45f538a14c08015021e899f5883f07ed2ff237Narayan Kamath        hashTable.put(hashTable, hashTable);
685ba45f538a14c08015021e899f5883f07ed2ff237Narayan Kamath        hashTable.remove(hashTable);
686ba45f538a14c08015021e899f5883f07ed2ff237Narayan Kamath    }
687ba45f538a14c08015021e899f5883f07ed2ff237Narayan Kamath
688ba45f538a14c08015021e899f5883f07ed2ff237Narayan Kamath    public void test_HashTable_remove_scenario3() {
689ba45f538a14c08015021e899f5883f07ed2ff237Narayan Kamath        Hashtable hashTable = new Hashtable();
690ba45f538a14c08015021e899f5883f07ed2ff237Narayan Kamath        Hashtable keyHashTable = new Hashtable();
691ba45f538a14c08015021e899f5883f07ed2ff237Narayan Kamath        keyHashTable.put(hashTable, keyHashTable);
692ba45f538a14c08015021e899f5883f07ed2ff237Narayan Kamath        hashTable.put(keyHashTable, hashTable);
693ba45f538a14c08015021e899f5883f07ed2ff237Narayan Kamath        hashTable.remove(keyHashTable);
694ba45f538a14c08015021e899f5883f07ed2ff237Narayan Kamath    }
695ba45f538a14c08015021e899f5883f07ed2ff237Narayan Kamath
696adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    /**
697229e34b182b98e1dba15d3dc6341954986ae2b7aBrian Carlstrom     * java.util.Hashtable#size()
698adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     */
699adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    public void test_size() {
700adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        // Test for method int java.util.Hashtable.size()
701adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        assertTrue("Returned invalid size", ht10.size() == 10
702adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project                && (ht100.size() == 0));
703adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project
704adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        final Hashtable ht = new Hashtable();
705adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        ht.put("0", "");
706adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        Thread t1 = new Thread() {
707adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            public void run() {
708adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project                while (ht.size() > 0)
709adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project                    ;
710adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project                ht.put("final", "");
711adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            }
712adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        };
713adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        t1.start();
714adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        for (int i = 1; i < 10000; i++) {
715adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            synchronized (ht) {
716adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project                ht.remove(String.valueOf(i - 1));
717adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project                ht.put(String.valueOf(i), "");
718adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            }
719adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            int size;
720adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            if ((size = ht.size()) != 1) {
721adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project                String result = "Size is not 1: " + size + " " + ht;
722adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project                // terminate the thread
723adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project                ht.clear();
724adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project                fail(result);
725adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            }
726adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        }
727adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        // terminate the thread
728adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        ht.clear();
729adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    }
730adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project
731adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    /**
732229e34b182b98e1dba15d3dc6341954986ae2b7aBrian Carlstrom     * java.util.Hashtable#toString()
733adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     */
734adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    public void test_toString() {
735adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        // Test for method java.lang.String java.util.Hashtable.toString()
736adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        Hashtable h = new Hashtable();
737f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes        assertEquals("Incorrect toString for Empty table",
738adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project                "{}", h.toString());
739adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project
740adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        h.put("one", "1");
741adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        h.put("two", h);
742adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        h.put(h, "3");
743adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        h.put(h, h);
744adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        String result = h.toString();
745adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        assertTrue("should contain self ref", result.indexOf("(this") > -1);
746adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    }
747adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project
748adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    /**
749229e34b182b98e1dba15d3dc6341954986ae2b7aBrian Carlstrom     * java.util.Hashtable#values()
750adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     */
751adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    public void test_values() {
752adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        // Test for method java.util.Collection java.util.Hashtable.values()
753adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        Collection c = ht10.values();
754adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        Enumeration e = elmVector.elements();
755adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        while (e.hasMoreElements())
756adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            assertTrue("Returned incorrect values", c.contains(e.nextElement()));
757adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project
758c0a4d9b35cbdd33dcc8e6a78a829573f0ed9bf6dJoshua Bloch// BEGIN android-removed
759c0a4d9b35cbdd33dcc8e6a78a829573f0ed9bf6dJoshua Bloch// implementation dependent
760c0a4d9b35cbdd33dcc8e6a78a829573f0ed9bf6dJoshua Bloch//        assertEquals("Not synchronized",
761c0a4d9b35cbdd33dcc8e6a78a829573f0ed9bf6dJoshua Bloch//                "java.util.Collections$SynchronizedCollection", c.getClass().getName());
762c0a4d9b35cbdd33dcc8e6a78a829573f0ed9bf6dJoshua Bloch// END android-removed
763f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes
764adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        Hashtable myHashtable = new Hashtable();
765adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        for (int i = 0; i < 100; i++)
766adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            myHashtable.put(new Integer(i), new Integer(i));
767adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        Collection values = myHashtable.values();
768adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        new Support_UnmodifiableCollectionTest(
769adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project                "Test Returned Collection From Hashtable.values()", values)
770adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project                .runTest();
771adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        values.remove(new Integer(0));
772adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        assertTrue(
773adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project                "Removing from the values collection should remove from the original map",
774adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project                !myHashtable.containsValue(new Integer(0)));
775adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    }
776f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes
777adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    /**
778adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     * Regression Test for JIRA 2181
779adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     */
780ba45f538a14c08015021e899f5883f07ed2ff237Narayan Kamath    public void test_entrySet_remove() {
781ba45f538a14c08015021e899f5883f07ed2ff237Narayan Kamath        Hashtable<String, String> hashtable = new Hashtable<String, String>();
782adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        hashtable.put("my.nonexistent.prop", "AAA");
783ba45f538a14c08015021e899f5883f07ed2ff237Narayan Kamath        hashtable.put("parse.error", "BBB");
784ba45f538a14c08015021e899f5883f07ed2ff237Narayan Kamath        Iterator<Map.Entry<String, String>> iterator =
785ba45f538a14c08015021e899f5883f07ed2ff237Narayan Kamath                hashtable.entrySet().iterator();
786ba45f538a14c08015021e899f5883f07ed2ff237Narayan Kamath        while (iterator.hasNext()) {
787adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            Map.Entry entry = iterator.next();
788f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes            final Object value = entry.getValue();
789ba45f538a14c08015021e899f5883f07ed2ff237Narayan Kamath            if (value.equals("AAA")) {
790ba45f538a14c08015021e899f5883f07ed2ff237Narayan Kamath                iterator.remove();
791adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            }
792adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        }
793adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        assertFalse(hashtable.containsKey("my.nonexistent.prop"));
794adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    }
795adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project
796adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    class Mock_Hashtable extends Hashtable {
797adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        boolean flag = false;
798adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project
799adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        public Mock_Hashtable(int i) {
800adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            super(i);
801adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        }
802adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project
803adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        @Override
804adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        protected void rehash() {
805adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            flag = true;
806adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            super.rehash();
807adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        }
808f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes
809adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        public boolean isRehashed() {
810adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            return flag;
811adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        }
812adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    }
813adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project
814adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    public void test_rehash() {
815adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        Mock_Hashtable mht = new Mock_Hashtable(5);
816f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes
817adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        assertFalse(mht.isRehashed());
818adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        for(int i = 0; i < 10; i++) {
819adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            mht.put(i, "New value");
820adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        }
821adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        assertTrue(mht.isRehashed());
822adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    }
823adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project
824ba45f538a14c08015021e899f5883f07ed2ff237Narayan Kamath    /**
825ba45f538a14c08015021e899f5883f07ed2ff237Narayan Kamath     * java.util.Hashtable#elements()
826ba45f538a14c08015021e899f5883f07ed2ff237Narayan Kamath     * java.util.Hashtable#keys()
827ba45f538a14c08015021e899f5883f07ed2ff237Narayan Kamath     * java.util.Hashtable#keySet()
828ba45f538a14c08015021e899f5883f07ed2ff237Narayan Kamath     */
829ba45f538a14c08015021e899f5883f07ed2ff237Narayan Kamath    public void test_keys_elements_keySet_Exceptions() {
830ba45f538a14c08015021e899f5883f07ed2ff237Narayan Kamath        Hashtable hashTable = new Hashtable();
831ba45f538a14c08015021e899f5883f07ed2ff237Narayan Kamath        String key = "key";
832ba45f538a14c08015021e899f5883f07ed2ff237Narayan Kamath        String value = "value";
833ba45f538a14c08015021e899f5883f07ed2ff237Narayan Kamath        hashTable.put(key, value);
834ba45f538a14c08015021e899f5883f07ed2ff237Narayan Kamath
835ba45f538a14c08015021e899f5883f07ed2ff237Narayan Kamath        Iterator iterator = (Iterator) hashTable.keys();
836ba45f538a14c08015021e899f5883f07ed2ff237Narayan Kamath        assertTrue(iterator.hasNext());
837ba45f538a14c08015021e899f5883f07ed2ff237Narayan Kamath        try {
838ba45f538a14c08015021e899f5883f07ed2ff237Narayan Kamath            iterator.remove();
839ba45f538a14c08015021e899f5883f07ed2ff237Narayan Kamath            fail("should throw UnsupportedOperationException");
840ba45f538a14c08015021e899f5883f07ed2ff237Narayan Kamath        } catch (UnsupportedOperationException e) {
841ba45f538a14c08015021e899f5883f07ed2ff237Narayan Kamath            // Expected
842ba45f538a14c08015021e899f5883f07ed2ff237Narayan Kamath        }
843ba45f538a14c08015021e899f5883f07ed2ff237Narayan Kamath        iterator.next();
844ba45f538a14c08015021e899f5883f07ed2ff237Narayan Kamath        try {
845ba45f538a14c08015021e899f5883f07ed2ff237Narayan Kamath            iterator.remove();
846ba45f538a14c08015021e899f5883f07ed2ff237Narayan Kamath            fail("should throw UnsupportedOperationException");
847ba45f538a14c08015021e899f5883f07ed2ff237Narayan Kamath        } catch (UnsupportedOperationException e) {
848ba45f538a14c08015021e899f5883f07ed2ff237Narayan Kamath            // Expected
849ba45f538a14c08015021e899f5883f07ed2ff237Narayan Kamath        }
850ba45f538a14c08015021e899f5883f07ed2ff237Narayan Kamath        assertFalse(iterator.hasNext());
851ba45f538a14c08015021e899f5883f07ed2ff237Narayan Kamath
852ba45f538a14c08015021e899f5883f07ed2ff237Narayan Kamath        iterator = (Iterator) hashTable.elements();
853ba45f538a14c08015021e899f5883f07ed2ff237Narayan Kamath        assertTrue(iterator.hasNext());
854ba45f538a14c08015021e899f5883f07ed2ff237Narayan Kamath        try {
855ba45f538a14c08015021e899f5883f07ed2ff237Narayan Kamath            iterator.remove();
856ba45f538a14c08015021e899f5883f07ed2ff237Narayan Kamath            fail("should throw UnsupportedOperationException");
857ba45f538a14c08015021e899f5883f07ed2ff237Narayan Kamath        } catch (UnsupportedOperationException e) {
858ba45f538a14c08015021e899f5883f07ed2ff237Narayan Kamath            // Expected
859ba45f538a14c08015021e899f5883f07ed2ff237Narayan Kamath        }
860ba45f538a14c08015021e899f5883f07ed2ff237Narayan Kamath        iterator.next();
861ba45f538a14c08015021e899f5883f07ed2ff237Narayan Kamath        try {
862ba45f538a14c08015021e899f5883f07ed2ff237Narayan Kamath            iterator.remove();
863ba45f538a14c08015021e899f5883f07ed2ff237Narayan Kamath            fail("should throw UnsupportedOperationException");
864ba45f538a14c08015021e899f5883f07ed2ff237Narayan Kamath        } catch (UnsupportedOperationException e) {
865ba45f538a14c08015021e899f5883f07ed2ff237Narayan Kamath            // Expected
866ba45f538a14c08015021e899f5883f07ed2ff237Narayan Kamath        }
867ba45f538a14c08015021e899f5883f07ed2ff237Narayan Kamath        assertFalse(iterator.hasNext());
868ba45f538a14c08015021e899f5883f07ed2ff237Narayan Kamath
869ba45f538a14c08015021e899f5883f07ed2ff237Narayan Kamath        iterator = hashTable.keySet().iterator();
870ba45f538a14c08015021e899f5883f07ed2ff237Narayan Kamath        assertTrue(iterator.hasNext());
871ba45f538a14c08015021e899f5883f07ed2ff237Narayan Kamath        try {
872ba45f538a14c08015021e899f5883f07ed2ff237Narayan Kamath            iterator.remove();
873ba45f538a14c08015021e899f5883f07ed2ff237Narayan Kamath            fail("should throw IllegalStateException");
874ba45f538a14c08015021e899f5883f07ed2ff237Narayan Kamath        } catch (IllegalStateException e) {
875ba45f538a14c08015021e899f5883f07ed2ff237Narayan Kamath            // Expected
876ba45f538a14c08015021e899f5883f07ed2ff237Narayan Kamath        }
877ba45f538a14c08015021e899f5883f07ed2ff237Narayan Kamath        iterator.next();
878ba45f538a14c08015021e899f5883f07ed2ff237Narayan Kamath        iterator.remove();
879ba45f538a14c08015021e899f5883f07ed2ff237Narayan Kamath        assertFalse(iterator.hasNext());
880ba45f538a14c08015021e899f5883f07ed2ff237Narayan Kamath
881ba45f538a14c08015021e899f5883f07ed2ff237Narayan Kamath        hashTable.clear();
882ba45f538a14c08015021e899f5883f07ed2ff237Narayan Kamath        for (int i = 0; i < 10; i++) {
883ba45f538a14c08015021e899f5883f07ed2ff237Narayan Kamath            hashTable.put(key + i, value + i);
884ba45f538a14c08015021e899f5883f07ed2ff237Narayan Kamath        }
885ba45f538a14c08015021e899f5883f07ed2ff237Narayan Kamath
886ba45f538a14c08015021e899f5883f07ed2ff237Narayan Kamath        // cast Enumeration to Iterator
887ba45f538a14c08015021e899f5883f07ed2ff237Narayan Kamath        Enumeration enumeration = hashTable.keys();
888ba45f538a14c08015021e899f5883f07ed2ff237Narayan Kamath        iterator = (Iterator) enumeration;
889ba45f538a14c08015021e899f5883f07ed2ff237Narayan Kamath        assertTrue(enumeration.hasMoreElements());
890ba45f538a14c08015021e899f5883f07ed2ff237Narayan Kamath        assertTrue(iterator.hasNext());
891ba45f538a14c08015021e899f5883f07ed2ff237Narayan Kamath        for (int i = 0; i < 10; i++) {
892ba45f538a14c08015021e899f5883f07ed2ff237Narayan Kamath            if (i % 2 == 0) {
893ba45f538a14c08015021e899f5883f07ed2ff237Narayan Kamath                enumeration.nextElement();
894ba45f538a14c08015021e899f5883f07ed2ff237Narayan Kamath            } else {
895ba45f538a14c08015021e899f5883f07ed2ff237Narayan Kamath                iterator.next();
896ba45f538a14c08015021e899f5883f07ed2ff237Narayan Kamath            }
897ba45f538a14c08015021e899f5883f07ed2ff237Narayan Kamath        }
898ba45f538a14c08015021e899f5883f07ed2ff237Narayan Kamath        assertFalse(enumeration.hasMoreElements());
899ba45f538a14c08015021e899f5883f07ed2ff237Narayan Kamath        assertFalse(iterator.hasNext());
900ba45f538a14c08015021e899f5883f07ed2ff237Narayan Kamath        try {
901ba45f538a14c08015021e899f5883f07ed2ff237Narayan Kamath            enumeration.nextElement();
902ba45f538a14c08015021e899f5883f07ed2ff237Narayan Kamath            fail("should throw NoSuchElementException");
903ba45f538a14c08015021e899f5883f07ed2ff237Narayan Kamath        } catch (NoSuchElementException e) {
904ba45f538a14c08015021e899f5883f07ed2ff237Narayan Kamath            // Expected
905ba45f538a14c08015021e899f5883f07ed2ff237Narayan Kamath        }
906ba45f538a14c08015021e899f5883f07ed2ff237Narayan Kamath        try {
907ba45f538a14c08015021e899f5883f07ed2ff237Narayan Kamath            iterator.next();
908ba45f538a14c08015021e899f5883f07ed2ff237Narayan Kamath            fail("should throw NoSuchElementException");
909ba45f538a14c08015021e899f5883f07ed2ff237Narayan Kamath        } catch (NoSuchElementException e) {
910ba45f538a14c08015021e899f5883f07ed2ff237Narayan Kamath            // Expected
911ba45f538a14c08015021e899f5883f07ed2ff237Narayan Kamath        }
912ba45f538a14c08015021e899f5883f07ed2ff237Narayan Kamath
913ba45f538a14c08015021e899f5883f07ed2ff237Narayan Kamath        // cast Enumeration to Iterator
914ba45f538a14c08015021e899f5883f07ed2ff237Narayan Kamath        enumeration = hashTable.elements();
915ba45f538a14c08015021e899f5883f07ed2ff237Narayan Kamath        iterator = (Iterator) enumeration;
916ba45f538a14c08015021e899f5883f07ed2ff237Narayan Kamath        assertTrue(enumeration.hasMoreElements());
917ba45f538a14c08015021e899f5883f07ed2ff237Narayan Kamath        assertTrue(iterator.hasNext());
918ba45f538a14c08015021e899f5883f07ed2ff237Narayan Kamath        for (int i = 0; i < 10; i++) {
919ba45f538a14c08015021e899f5883f07ed2ff237Narayan Kamath            if (i % 2 == 0) {
920ba45f538a14c08015021e899f5883f07ed2ff237Narayan Kamath                enumeration.nextElement();
921ba45f538a14c08015021e899f5883f07ed2ff237Narayan Kamath            } else {
922ba45f538a14c08015021e899f5883f07ed2ff237Narayan Kamath                iterator.next();
923ba45f538a14c08015021e899f5883f07ed2ff237Narayan Kamath            }
924ba45f538a14c08015021e899f5883f07ed2ff237Narayan Kamath        }
925ba45f538a14c08015021e899f5883f07ed2ff237Narayan Kamath        assertFalse(enumeration.hasMoreElements());
926ba45f538a14c08015021e899f5883f07ed2ff237Narayan Kamath        assertFalse(iterator.hasNext());
927ba45f538a14c08015021e899f5883f07ed2ff237Narayan Kamath        try {
928ba45f538a14c08015021e899f5883f07ed2ff237Narayan Kamath            enumeration.nextElement();
929ba45f538a14c08015021e899f5883f07ed2ff237Narayan Kamath            fail("should throw NoSuchElementException");
930ba45f538a14c08015021e899f5883f07ed2ff237Narayan Kamath        } catch (NoSuchElementException e) {
931ba45f538a14c08015021e899f5883f07ed2ff237Narayan Kamath            // Expected
932ba45f538a14c08015021e899f5883f07ed2ff237Narayan Kamath        }
933ba45f538a14c08015021e899f5883f07ed2ff237Narayan Kamath        try {
934ba45f538a14c08015021e899f5883f07ed2ff237Narayan Kamath            iterator.next();
935ba45f538a14c08015021e899f5883f07ed2ff237Narayan Kamath            fail("should throw NoSuchElementException");
936ba45f538a14c08015021e899f5883f07ed2ff237Narayan Kamath        } catch (NoSuchElementException e) {
937ba45f538a14c08015021e899f5883f07ed2ff237Narayan Kamath            // Expected
938ba45f538a14c08015021e899f5883f07ed2ff237Narayan Kamath        }
939ba45f538a14c08015021e899f5883f07ed2ff237Narayan Kamath
940ba45f538a14c08015021e899f5883f07ed2ff237Narayan Kamath        // cast Iterator to Enumeration
941ba45f538a14c08015021e899f5883f07ed2ff237Narayan Kamath        enumeration = (Enumeration) hashTable.keySet().iterator();
942ba45f538a14c08015021e899f5883f07ed2ff237Narayan Kamath        iterator = (Iterator) enumeration;
943ba45f538a14c08015021e899f5883f07ed2ff237Narayan Kamath        assertTrue(enumeration.hasMoreElements());
944ba45f538a14c08015021e899f5883f07ed2ff237Narayan Kamath        assertTrue(iterator.hasNext());
945ba45f538a14c08015021e899f5883f07ed2ff237Narayan Kamath        for (int i = 0; i < 10; i++) {
946ba45f538a14c08015021e899f5883f07ed2ff237Narayan Kamath            if (i % 2 == 0) {
947ba45f538a14c08015021e899f5883f07ed2ff237Narayan Kamath                enumeration.nextElement();
948ba45f538a14c08015021e899f5883f07ed2ff237Narayan Kamath            } else {
949ba45f538a14c08015021e899f5883f07ed2ff237Narayan Kamath                iterator.next();
950ba45f538a14c08015021e899f5883f07ed2ff237Narayan Kamath            }
951ba45f538a14c08015021e899f5883f07ed2ff237Narayan Kamath        }
952ba45f538a14c08015021e899f5883f07ed2ff237Narayan Kamath        assertFalse(enumeration.hasMoreElements());
953ba45f538a14c08015021e899f5883f07ed2ff237Narayan Kamath        assertFalse(iterator.hasNext());
954ba45f538a14c08015021e899f5883f07ed2ff237Narayan Kamath        try {
955ba45f538a14c08015021e899f5883f07ed2ff237Narayan Kamath            enumeration.nextElement();
956ba45f538a14c08015021e899f5883f07ed2ff237Narayan Kamath            fail("should throw NoSuchElementException");
957ba45f538a14c08015021e899f5883f07ed2ff237Narayan Kamath        } catch (NoSuchElementException e) {
958ba45f538a14c08015021e899f5883f07ed2ff237Narayan Kamath            // Expected
959ba45f538a14c08015021e899f5883f07ed2ff237Narayan Kamath        }
960ba45f538a14c08015021e899f5883f07ed2ff237Narayan Kamath        try {
961ba45f538a14c08015021e899f5883f07ed2ff237Narayan Kamath            iterator.next();
962ba45f538a14c08015021e899f5883f07ed2ff237Narayan Kamath            fail("should throw NoSuchElementException");
963ba45f538a14c08015021e899f5883f07ed2ff237Narayan Kamath        } catch (NoSuchElementException e) {
964ba45f538a14c08015021e899f5883f07ed2ff237Narayan Kamath            // Expected
965ba45f538a14c08015021e899f5883f07ed2ff237Narayan Kamath        }
966ba45f538a14c08015021e899f5883f07ed2ff237Narayan Kamath    }
967ba45f538a14c08015021e899f5883f07ed2ff237Narayan Kamath
968adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    protected Hashtable hashtableClone(Hashtable s) {
969adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        return (Hashtable) s.clone();
970adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    }
971f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes
972adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    /**
973adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     * Sets up the fixture, for example, open a network connection. This method
974adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     * is called before a test is executed.
975adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     */
976adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    protected void setUp() {
977adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project
978adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        ht10 = new Hashtable(10);
979adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        ht100 = new Hashtable(100);
980adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        htfull = new Hashtable(10);
981adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        keyVector = new Vector(10);
982adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        elmVector = new Vector(10);
983adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project
984adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        for (int i = 0; i < 10; i++) {
985adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            ht10.put("Key " + i, "Val " + i);
986adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            keyVector.addElement("Key " + i);
987adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            elmVector.addElement("Val " + i);
988adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        }
989adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project
990adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        for (int i = 0; i < 7; i++)
991adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            htfull.put("FKey " + i, "FVal " + i);
992adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    }
993adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project
994adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    /**
995adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     * Tears down the fixture, for example, close a network connection. This
996adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     * method is called after a test is executed.
997adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     */
998adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    protected void tearDown() {
999740cbf1565815f08d9fb3a0a8d4a581cdc0d2a9dJorg Pleumann        ht10 = null;
1000740cbf1565815f08d9fb3a0a8d4a581cdc0d2a9dJorg Pleumann        ht100 = null;
1001740cbf1565815f08d9fb3a0a8d4a581cdc0d2a9dJorg Pleumann        htfull = null;
1002740cbf1565815f08d9fb3a0a8d4a581cdc0d2a9dJorg Pleumann        keyVector = null;
1003740cbf1565815f08d9fb3a0a8d4a581cdc0d2a9dJorg Pleumann        elmVector = null;
1004adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    }
1005adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project}
1006