1561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes/*
2561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes *  Licensed to the Apache Software Foundation (ASF) under one or more
3561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes *  contributor license agreements.  See the NOTICE file distributed with
4561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes *  this work for additional information regarding copyright ownership.
5561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes *  The ASF licenses this file to You under the Apache License, Version 2.0
6561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes *  (the "License"); you may not use this file except in compliance with
7561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes *  the License.  You may obtain a copy of the License at
8561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes *
9561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes *     http://www.apache.org/licenses/LICENSE-2.0
10561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes *
11561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes *  Unless required by applicable law or agreed to in writing, software
12561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes *  distributed under the License is distributed on an "AS IS" BASIS,
13561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes *  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
14561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes *  See the License for the specific language governing permissions and
15561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes *  limitations under the License.
16561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes */
17561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
18561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughespackage org.apache.harmony.luni.tests.java.util;
19561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
20561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughesimport java.util.ArrayList;
21561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughesimport java.util.Arrays;
22561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughesimport java.util.Collection;
23561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughesimport java.util.ConcurrentModificationException;
24561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughesimport java.util.Enumeration;
25561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughesimport java.util.HashSet;
26561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughesimport java.util.Hashtable;
27561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughesimport java.util.Iterator;
28561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughesimport java.util.Map;
29561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughesimport java.util.NoSuchElementException;
30561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughesimport java.util.Set;
31561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughesimport java.util.TreeMap;
32561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughesimport java.util.Vector;
33561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
34561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughesimport tests.support.Support_MapTest2;
35561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughesimport tests.support.Support_UnmodifiableCollectionTest;
36561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
37561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughespublic class HashtableTest extends junit.framework.TestCase {
38561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
39561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes	private Hashtable ht10;
40561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
41561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes	private Hashtable ht100;
42561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
43561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes	private Hashtable htfull;
44561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
45561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes	private Vector keyVector;
46561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
47561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes	private Vector elmVector;
48561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
49561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes	private String h10sVal;
50561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
51561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes	/**
52561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes	 * @tests java.util.Hashtable#Hashtable()
53561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes	 */
54561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes	public void test_Constructor() {
55561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes		// Test for method java.util.Hashtable()
56561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes		new Support_MapTest2(new Hashtable()).runTest();
57561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
58561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes		Hashtable h = new Hashtable();
59561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
60561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes		assertEquals("Created incorrect hashtable", 0, h.size());
61561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes	}
62561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
63561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes	/**
64561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes	 * @tests java.util.Hashtable#Hashtable(int)
65561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes	 */
66561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes	public void test_ConstructorI() {
67561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes		// Test for method java.util.Hashtable(int)
68561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes		Hashtable h = new Hashtable(9);
69561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
70561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes		assertEquals("Created incorrect hashtable", 0, h.size());
71561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
72561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes		Hashtable empty = new Hashtable(0);
73561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes		assertNull("Empty hashtable access", empty.get("nothing"));
74561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes		empty.put("something", "here");
75561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes		assertTrue("cannot get element", empty.get("something") == "here");
76561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes	}
77561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
78561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes	/**
79561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes	 * @tests java.util.Hashtable#Hashtable(int, float)
80561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes	 */
81561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes	public void test_ConstructorIF() {
82561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes		// Test for method java.util.Hashtable(int, float)
83561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes		Hashtable h = new java.util.Hashtable(10, 0.5f);
84561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes		assertEquals("Created incorrect hashtable", 0, h.size());
85561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
86561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes		Hashtable empty = new Hashtable(0, 0.75f);
87561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes		assertNull("Empty hashtable access", empty.get("nothing"));
88561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes		empty.put("something", "here");
89561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes		assertTrue("cannot get element", empty.get("something") == "here");
90561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes	}
91561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
92561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes	/**
93561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes	 * @tests java.util.Hashtable#Hashtable(java.util.Map)
94561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes	 */
95561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes	public void test_ConstructorLjava_util_Map() {
96561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes		// Test for method java.util.Hashtable(java.util.Map)
97561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes		Map map = new TreeMap();
98561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes		Object firstVal = "Gabba";
99561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes		Object secondVal = new Integer(5);
100561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes		map.put("Gah", firstVal);
101561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes		map.put("Ooga", secondVal);
102561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes		Hashtable ht = new Hashtable(map);
103561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes		assertTrue("a) Incorrect Hashtable constructed",
104561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes				ht.get("Gah") == firstVal);
105561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes		assertTrue("b) Incorrect Hashtable constructed",
106561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes				ht.get("Ooga") == secondVal);
107561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes	}
108561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
109561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes    public void test_HashTable_Constructor() {
110561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        Hashtable hashTable = new Hashtable();
111561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        hashTable.put(hashTable, hashTable.keySet());
112561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        new Hashtable(hashTable);
113561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes    }
114561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
115561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes	/**
116561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes	 * @tests java.util.Hashtable#clear()
117561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes	 */
118561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes	public void test_clear() {
119561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes		// Test for method void java.util.Hashtable.clear()
120561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes		Hashtable h = hashtableClone(htfull);
121561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes		h.clear();
122561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes		assertEquals("Hashtable was not cleared", 0, h.size());
123561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes		Enumeration el = h.elements();
124561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes		Enumeration keys = h.keys();
125561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes		assertTrue("Hashtable improperly cleared", !el.hasMoreElements()
126561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes				&& !(keys.hasMoreElements()));
127561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes	}
128561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
129561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes	/**
130561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes	 * @tests java.util.Hashtable#clone()
131561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes	 */
132561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes	public void test_clone() {
133561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes		// Test for method java.lang.Object java.util.Hashtable.clone()
134561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
135561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes		Hashtable h = (Hashtable) htfull.clone();
136561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes		assertTrue("Clone different size than original", h.size() == htfull
137561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes				.size());
138561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
139561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes		Enumeration org = htfull.keys();
140561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes		Enumeration cpy = h.keys();
141561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
142561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes		String okey, ckey;
143561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes		while (org.hasMoreElements()) {
144561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes			assertTrue("Key comparison failed", (okey = (String) org
145561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes					.nextElement()).equals(ckey = (String) cpy.nextElement()));
146561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes			assertTrue("Value comparison failed", ((String) htfull.get(okey))
147561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes					.equals((String) h.get(ckey)));
148561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes		}
149561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes		assertTrue("Copy has more keys than original", !cpy.hasMoreElements());
150561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes	}
151561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
152561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes	/**
153561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes	 * @tests java.util.Hashtable#contains(java.lang.Object)
154561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes	 */
155561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes	public void test_containsLjava_lang_Object() {
156561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes		// Test for method boolean
157561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes		// java.util.Hashtable.contains(java.lang.Object)
158561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes		assertTrue("Element not found", ht10.contains("Val 7"));
159561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes		assertTrue("Invalid element found", !ht10.contains("ZZZZZZZZZZZZZZZZ"));
160561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes	}
161561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
162561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes	/**
163561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes	 * @tests java.util.Hashtable#containsKey(java.lang.Object)
164561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes	 */
165561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes	public void test_containsKeyLjava_lang_Object() {
166561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes		// Test for method boolean
167561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes		// java.util.Hashtable.containsKey(java.lang.Object)
168561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
169561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes		assertTrue("Failed to find key", htfull.containsKey("FKey 4"));
170561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes		assertTrue("Failed to find key", !htfull.containsKey("FKey 99"));
171561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes	}
172561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
173561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes	/**
174561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes	 * @tests java.util.Hashtable#containsValue(java.lang.Object)
175561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes	 */
176561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes	public void test_containsValueLjava_lang_Object() {
177561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes		// Test for method boolean
178561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes		// java.util.Hashtable.containsValue(java.lang.Object)
179561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes		Enumeration e = elmVector.elements();
180561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes		while (e.hasMoreElements())
181561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes			assertTrue("Returned false for valid value", ht10.containsValue(e
182561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes					.nextElement()));
183561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes		assertTrue("Returned true for invalid value", !ht10
184561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes				.containsValue(new Object()));
185561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes	}
186561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
187561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes	/**
188561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes	 * @tests java.util.Hashtable#elements()
189561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes	 */
190561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes	public void test_elements() {
191561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes		// Test for method java.util.Enumeration java.util.Hashtable.elements()
192561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes		Enumeration elms = ht10.elements();
193561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes		int i = 0;
194561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes		while (elms.hasMoreElements()) {
195561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes			String s = (String) elms.nextElement();
196561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes			assertTrue("Missing key from enumeration", elmVector.contains(s));
197561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes			++i;
198561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes		}
199561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
200561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes		assertEquals("All keys not retrieved", 10, ht10.size());
201561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
202561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        // cast Enumeration to Iterator
203561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        Iterator iterator = (Iterator) elms;
204561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        assertFalse(iterator.hasNext());
205561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        try {
206561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            iterator.next();
207561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            fail("should throw NoSuchElementException");
208561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        } catch (NoSuchElementException e) {
209561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            // Expected
210561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        }
211561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes	}
212561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
213561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes	/**
214561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes	 * @tests java.util.Hashtable#elements()
215561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes	 */
216561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes	public void test_elements_subtest0() {
217561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes		// this is the reference implementation behavior
218561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes		final Hashtable ht = new Hashtable(7);
219561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes		ht.put("1", "a");
220561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes		// these three elements hash to the same bucket in a 7 element Hashtable
221561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes		ht.put("2", "b");
222561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes		ht.put("9", "c");
223561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes		ht.put("12", "d");
224561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes		// Hashtable looks like:
225561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes		// 0: "1"
226561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes		// 1: "12" -> "9" -> "2"
227561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes		Enumeration en = ht.elements();
228561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes		// cache the first entry
229561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes		en.hasMoreElements();
230561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes		ht.remove("12");
231561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes		ht.remove("9");
232561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes		boolean exception = false;
233561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes		try {
234561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes			// cached "12"
235561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes			Object result = en.nextElement();
236561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes			assertNull("unexpected: " + result, result);
237561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes			// next is removed "9"
238561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes			result = en.nextElement();
239561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes			assertNull("unexpected: " + result, result);
240561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes			result = en.nextElement();
241561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes			assertTrue("unexpected: " + result, "b".equals(result));
242561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes		} catch (NoSuchElementException e) {
243561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes			exception = true;
244561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes		}
245561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes		assertTrue("unexpected NoSuchElementException", !exception);
246561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes	}
247561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
248561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes	/**
249561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes	 * @tests java.util.Hashtable#entrySet()
250561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes	 */
251561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes	public void test_entrySet() {
252561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes		// Test for method java.util.Set java.util.Hashtable.entrySet()
253561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes		Set s = ht10.entrySet();
254561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes		Set s2 = new HashSet();
255561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes		Iterator i = s.iterator();
256561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes		while (i.hasNext())
257561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes			s2.add(((Map.Entry) i.next()).getValue());
258561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes		Enumeration e = elmVector.elements();
259561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes		while (e.hasMoreElements())
260561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes			assertTrue("Returned incorrect entry set", s2.contains(e
261561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes					.nextElement()));
262561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
263561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes		assertEquals("Not synchronized",
264561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes				"java.util.Collections$SynchronizedSet", s.getClass().getName());
265561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
266561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes		boolean exception = false;
267561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes		try {
268561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes			((Map.Entry) ht10.entrySet().iterator().next()).setValue(null);
269561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes		} catch (NullPointerException e1) {
270561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes			exception = true;
271561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes		}
272561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes		assertTrue(
273561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes				"Should not be able to assign null to a Hashtable entrySet() Map.Entry",
274561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes				exception);
275561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes	}
276561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
277561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes	/**
278561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes	 * @tests java.util.Hashtable#equals(java.lang.Object)
279561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes	 */
280561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes	public void test_equalsLjava_lang_Object() {
281561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes		// Test for method boolean java.util.Hashtable.equals(java.lang.Object)
282561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes		Hashtable h = hashtableClone(ht10);
283561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes		assertTrue("Returned false for equal tables", ht10.equals(h));
284561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes		assertTrue("Returned true for unequal tables", !ht10.equals(htfull));
285561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes	}
286561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
287561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes	/**
288561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes	 * @tests java.util.Hashtable#get(java.lang.Object)
289561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes	 */
290561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes	public void test_getLjava_lang_Object() {
291561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes		// Test for method java.lang.Object
292561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes		// java.util.Hashtable.get(java.lang.Object)
293561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes		Hashtable h = hashtableClone(htfull);
294561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes		assertEquals("Could not retrieve element", "FVal 2", ((String) h.get("FKey 2"))
295561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes				);
296561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
297561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
298561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes		// Regression for HARMONY-262
299561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes		ReusableKey k = new ReusableKey();
300561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes		Hashtable h2 = new Hashtable();
301561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes		k.setKey(1);
302561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes		h2.put(k, "value1");
303561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
304561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes		k.setKey(13);
305561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes		assertNull(h2.get(k));
306561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
307561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes		k.setKey(12);
308561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes		assertNull(h2.get(k));
309561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes	}
310561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
311561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes	/**
312561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes	 * @tests java.util.Hashtable#hashCode()
313561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes	 */
314561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes	public void test_hashCode() {
315561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes		// Test for method int java.util.Hashtable.hashCode()
316561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes		Set entrySet = ht10.entrySet();
317561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes		Iterator iterator = entrySet.iterator();
318561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes		int expectedHash;
319561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes		for (expectedHash = 0; iterator.hasNext(); expectedHash += iterator
320561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes				.next().hashCode())
321561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes			;
322561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes		assertTrue("Incorrect hashCode returned.  Wanted: " + expectedHash
323561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes				+ " got: " + ht10.hashCode(), expectedHash == ht10.hashCode());
324561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes	}
325561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
326561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes	/**
327561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes	 * @tests java.util.Hashtable#isEmpty()
328561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes	 */
329561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes	public void test_isEmpty() {
330561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes		// Test for method boolean java.util.Hashtable.isEmpty()
331561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
332561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes		assertTrue("isEmpty returned incorrect value", !ht10.isEmpty());
333561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes		assertTrue("isEmpty returned incorrect value",
334561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes				new java.util.Hashtable().isEmpty());
335561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
336561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes		final Hashtable ht = new Hashtable();
337561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes		ht.put("0", "");
338561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes		Thread t1 = new Thread() {
339561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes			public void run() {
340561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes				while (!ht.isEmpty())
341561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes					;
342561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes				ht.put("final", "");
343561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes			}
344561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes		};
345561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes		t1.start();
346561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes		for (int i = 1; i < 10000; i++) {
347561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes			synchronized (ht) {
348561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes				ht.remove(String.valueOf(i - 1));
349561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes				ht.put(String.valueOf(i), "");
350561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes			}
351561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes			int size;
352561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes			if ((size = ht.size()) != 1) {
353561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes				String result = "Size is not 1: " + size + " " + ht;
354561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes				// terminate the thread
355561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes				ht.clear();
356561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes				fail(result);
357561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes			}
358561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes		}
359561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes		// terminate the thread
360561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes		ht.clear();
361561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes	}
362561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
363561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes	/**
364561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes	 * @tests java.util.Hashtable#keys()
365561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes	 */
366561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes	public void test_keys() {
367561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes		// Test for method java.util.Enumeration java.util.Hashtable.keys()
368561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
369561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes		Enumeration keys = ht10.keys();
370561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes		int i = 0;
371561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes		while (keys.hasMoreElements()) {
372561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes			String s = (String) keys.nextElement();
373561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes			assertTrue("Missing key from enumeration", keyVector.contains(s));
374561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes			++i;
375561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes		}
376561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
377561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes		assertEquals("All keys not retrieved", 10, ht10.size());
378561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
379561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        // cast Enumeration to Iterator
380561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        Iterator iterator = (Iterator) keys;
381561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        assertFalse(iterator.hasNext());
382561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        try {
383561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            iterator.next();
384561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            fail("should throw NoSuchElementException");
385561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        } catch (NoSuchElementException e) {
386561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            // Expected
387561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        }
388561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes	}
389561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
390561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes	/**
391561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes	 * @tests java.util.Hashtable#keys()
392561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes	 */
393561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes	public void test_keys_subtest0() {
394561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes		// this is the reference implementation behavior
395561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes		final Hashtable ht = new Hashtable(3);
396561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes		ht.put("initial", "");
397561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes		Enumeration en = ht.keys();
398561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes		en.hasMoreElements();
399561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes		ht.remove("initial");
400561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes		boolean exception = false;
401561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes		try {
402561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes			Object result = en.nextElement();
403561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes			assertTrue("unexpected: " + result, "initial".equals(result));
404561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes		} catch (NoSuchElementException e) {
405561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes			exception = true;
406561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes		}
407561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes		assertTrue("unexpected NoSuchElementException", !exception);
408561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes	}
409561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
410561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes	/**
411561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes	 * @tests java.util.Hashtable#keySet()
412561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes	 */
413561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes	public void test_keySet() {
414561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes		// Test for method java.util.Set java.util.Hashtable.keySet()
415561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes		Set s = ht10.keySet();
416561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes		Enumeration e = keyVector.elements();
417561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes		while (e.hasMoreElements())
418561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes			assertTrue("Returned incorrect key set", s
419561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes					.contains(e.nextElement()));
420561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
421561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes		assertEquals("Not synchronized",
422561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes				"java.util.Collections$SynchronizedSet", s.getClass().getName());
423561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
424561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes		Map map = new Hashtable(101);
425561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes		map.put(new Integer(1), "1");
426561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes		map.put(new Integer(102), "102");
427561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes		map.put(new Integer(203), "203");
428561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes		Iterator it = map.keySet().iterator();
429561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes		Integer remove1 = (Integer) it.next();
430561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes		it.remove();
431561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes		Integer remove2 = (Integer) it.next();
432561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes		it.remove();
433561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes		ArrayList list = new ArrayList(Arrays.asList(new Integer[] {
434561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes				new Integer(1), new Integer(102), new Integer(203) }));
435561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes		list.remove(remove1);
436561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes		list.remove(remove2);
437561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes		assertTrue("Wrong result", it.next().equals(list.get(0)));
438561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes		assertEquals("Wrong size", 1, map.size());
439561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes		assertTrue("Wrong contents", map.keySet().iterator().next().equals(
440561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes				list.get(0)));
441561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
442561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes		Map map2 = new Hashtable(101);
443561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes		map2.put(new Integer(1), "1");
444561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes		map2.put(new Integer(4), "4");
445561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes		Iterator it2 = map2.keySet().iterator();
446561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes		Integer remove3 = (Integer) it2.next();
447561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes		Integer next;
448561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes		if (remove3.intValue() == 1)
449561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes			next = new Integer(4);
450561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes		else
451561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes			next = new Integer(1);
452561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes		it2.hasNext();
453561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes		it2.remove();
454561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes		assertTrue("Wrong result 2", it2.next().equals(next));
455561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes		assertEquals("Wrong size 2", 1, map2.size());
456561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes		assertTrue("Wrong contents 2", map2.keySet().iterator().next().equals(
457561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes				next));
458561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
459561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        // cast Iterator to Enumeration
460561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        Enumeration enumeration = (Enumeration) s.iterator();
461561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        assertTrue(enumeration.hasMoreElements());
462561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes	}
463561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
464561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes	/**
465561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes	 * @tests java.util.Hashtable#keySet()
466561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes	 */
467561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes	public void test_keySet_subtest0() {
468561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes		Set s1 = ht10.keySet();
469561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes		assertTrue("should contain key", s1.remove("Key 0"));
470561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes		assertTrue("should not contain key", !s1.remove("Key 0"));
471561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
472561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes		final int iterations = 10000;
473561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes		final Hashtable ht = new Hashtable();
474561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes		Thread t1 = new Thread() {
475561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes			public void run() {
476561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes				for (int i = 0; i < iterations; i++) {
477561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes					ht.put(String.valueOf(i), "");
478561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes					ht.remove(String.valueOf(i));
479561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes				}
480561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes			}
481561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes		};
482561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes		t1.start();
483561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes		Set set = ht.keySet();
484561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes		for (int i = 0; i < iterations; i++) {
485561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes			Iterator it = set.iterator();
486561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes			try {
487561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes				it.next();
488561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes				it.remove();
489561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes				int size;
490561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes				// ensure removing with the iterator doesn't corrupt the
491561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes				// Hashtable
492561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes				if ((size = ht.size()) < 0) {
493561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes					fail("invalid size: " + size);
494561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes				}
495561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes			} catch (NoSuchElementException e) {
496561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes			} catch (ConcurrentModificationException e) {
497561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes			}
498561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes		}
499561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes	}
500561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
501561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes	/**
502561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes	 * @tests java.util.Hashtable#keySet()
503561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes	 */
504561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes	public void test_keySet_subtest1() {
505561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes		// this is the reference implementation behavior
506561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes		final Hashtable ht = new Hashtable(7);
507561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes		ht.put("1", "a");
508561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes		// these three elements hash to the same bucket in a 7 element Hashtable
509561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes		ht.put("2", "b");
510561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes		ht.put("9", "c");
511561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes		ht.put("12", "d");
512561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes		// Hashtable looks like:
513561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes		// 0: "1"
514561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes		// 1: "12" -> "9" -> "2"
515561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes		Enumeration en = ht.elements();
516561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes		// cache the first entry
517561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes		en.hasMoreElements();
518561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes		Iterator it = ht.keySet().iterator();
519561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes		// this is mostly a copy of the test in test_elements_subtest0()
520561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes		// test removing with the iterator does not null the values
521561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes		while (it.hasNext()) {
522561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes			String key = (String) it.next();
523561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes			if ("12".equals(key) || "9".equals(key)) {
524561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes				it.remove();
525561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes			}
526561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes		}
527561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes		it.remove();
528561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes		boolean exception = false;
529561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes		try {
530561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes			// cached "12"
531561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes			Object result = en.nextElement();
532561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes			assertTrue("unexpected: " + result, "d".equals(result));
533561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes			// next is removed "9"
534561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes			result = en.nextElement();
535561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes			assertTrue("unexpected: " + result, "c".equals(result));
536561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes			result = en.nextElement();
537561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes			assertTrue("unexpected: " + result, "b".equals(result));
538561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes		} catch (NoSuchElementException e) {
539561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes			exception = true;
540561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes		}
541561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes		assertTrue("unexpected NoSuchElementException", !exception);
542561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes	}
543561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
544561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes	/**
545561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes	 * @tests java.util.Hashtable#put(java.lang.Object, java.lang.Object)
546561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes	 */
547561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes	public void test_putLjava_lang_ObjectLjava_lang_Object() {
548561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes		// Test for method java.lang.Object
549561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes		// java.util.Hashtable.put(java.lang.Object, java.lang.Object)
550561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes		Hashtable h = hashtableClone(ht100);
551561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes		Integer key = new Integer(100);
552561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes		h.put("Value 100", key);
553561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes		assertTrue("Key/Value not inserted", h.size() == 1 && (h.contains(key)));
554561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
555561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes		// Put into "full" table
556561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes		h = hashtableClone(htfull);
557561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes		h.put("Value 100", key);
558561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes		assertTrue("Key/Value not inserted into full table", h.size() == 8
559561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes				&& (h.contains(key)));
560561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes	}
561561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
562561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes	/**
563561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes	 * @tests java.util.Hashtable#putAll(java.util.Map)
564561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes	 */
565561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes	public void test_putAllLjava_util_Map() {
566561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes		// Test for method void java.util.Hashtable.putAll(java.util.Map)
567561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes		Hashtable h = new Hashtable();
568561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes		h.putAll(ht10);
569561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes		Enumeration e = keyVector.elements();
570561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes		while (e.hasMoreElements()) {
571561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes			Object x = e.nextElement();
572561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes			assertTrue("Failed to put all elements", h.get(x).equals(
573561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes					ht10.get(x)));
574561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes		}
575561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes	}
576561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
577561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes	/**
578561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes	 * @tests java.util.Hashtable#remove(java.lang.Object)
579561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes	 */
580561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes	public void test_removeLjava_lang_Object() {
581561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes		// Test for method java.lang.Object
582561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes		// java.util.Hashtable.remove(java.lang.Object)
583561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes		Hashtable h = hashtableClone(htfull);
584561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes		Object k = h.remove("FKey 0");
585561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes		assertTrue("Remove failed", !h.containsKey("FKey 0") || k == null);
586561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes	}
587561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
588561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes    public void test_HashTable_remove_scenario1() {
589561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        Hashtable hashTable = new Hashtable();
590561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        Set keySet = hashTable.keySet();
591561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        hashTable.put(hashTable, keySet);
592561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        hashTable.remove(hashTable);
593561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes    }
594561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
595561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes    public void test_HashTable_remove_scenario2() {
596561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        Hashtable hashTable = new Hashtable();
597561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        Set keySet = hashTable.keySet();
598561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        hashTable.put(hashTable, hashTable);
599561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        hashTable.remove(hashTable);
600561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes    }
601561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
602561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes    public void test_HashTable_remove_scenario3() {
603561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        Hashtable hashTable = new Hashtable();
604561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        Hashtable keyHashTable = new Hashtable();
605561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        keyHashTable.put(hashTable, keyHashTable);
606561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        hashTable.put(keyHashTable, hashTable);
607561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        hashTable.remove(keyHashTable);
608561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes    }
609561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
610561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes	/**
611561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes	 * @tests java.util.Hashtable#size()
612561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes	 */
613561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes	public void test_size() {
614561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes		// Test for method int java.util.Hashtable.size()
615561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes		assertTrue("Returned invalid size", ht10.size() == 10
616561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes				&& (ht100.size() == 0));
617561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
618561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes		final Hashtable ht = new Hashtable();
619561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes		ht.put("0", "");
620561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes		Thread t1 = new Thread() {
621561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes			public void run() {
622561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes				while (ht.size() > 0)
623561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes					;
624561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes				ht.put("final", "");
625561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes			}
626561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes		};
627561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes		t1.start();
628561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes		for (int i = 1; i < 10000; i++) {
629561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes			synchronized (ht) {
630561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes				ht.remove(String.valueOf(i - 1));
631561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes				ht.put(String.valueOf(i), "");
632561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes			}
633561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes			int size;
634561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes			if ((size = ht.size()) != 1) {
635561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes				String result = "Size is not 1: " + size + " " + ht;
636561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes				// terminate the thread
637561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes				ht.clear();
638561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes				fail(result);
639561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes			}
640561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes		}
641561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes		// terminate the thread
642561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes		ht.clear();
643561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes	}
644561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
645561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes	/**
646561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes	 * @tests java.util.Hashtable#toString()
647561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes	 */
648561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes	public void test_toString() {
649561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes		// Test for method java.lang.String java.util.Hashtable.toString()
650561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes		Hashtable h = new Hashtable();
651561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes		assertEquals("Incorrect toString for Empty table",
652561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes				"{}", h.toString());
653561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
654561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes		h.put("one", "1");
655561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes		h.put("two", h);
656561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes		h.put(h, "3");
657561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes		h.put(h, h);
658561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes		String result = h.toString();
659561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes		assertTrue("should contain self ref", result.indexOf("(this") > -1);
660561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes	}
661561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
662561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes	/**
663561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes	 * @tests java.util.Hashtable#values()
664561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes	 */
665561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes	public void test_values() {
666561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes		// Test for method java.util.Collection java.util.Hashtable.values()
667561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes		Collection c = ht10.values();
668561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes		Enumeration e = elmVector.elements();
669561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes		while (e.hasMoreElements())
670561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes			assertTrue("Returned incorrect values", c.contains(e.nextElement()));
671561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
672561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes		assertEquals("Not synchronized",
673561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes				"java.util.Collections$SynchronizedCollection", c.getClass().getName());
674561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
675561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes		Hashtable myHashtable = new Hashtable();
676561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes		for (int i = 0; i < 100; i++)
677561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes			myHashtable.put(new Integer(i), new Integer(i));
678561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes		Collection values = myHashtable.values();
679561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes		new Support_UnmodifiableCollectionTest(
680561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes				"Test Returned Collection From Hashtable.values()", values)
681561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes				.runTest();
682561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes		values.remove(new Integer(0));
683561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes		assertTrue(
684561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes				"Removing from the values collection should remove from the original map",
685561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes				!myHashtable.containsValue(new Integer(0)));
686561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes	}
687561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
688561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes    /**
689561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes     * Regression Test for JIRA 2181
690561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes     */
691561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes    public void test_entrySet_remove()
692561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes    {
693561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        Hashtable<String,String> hashtable = new Hashtable<String,String>();
694561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        hashtable.put("my.nonexistent.prop", "AAA");
695561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        hashtable.put( "parse.error", "BBB" );
696561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        Iterator<Map.Entry<String,String>> iterator =
697561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            hashtable.entrySet().iterator();
698561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        while(iterator.hasNext())
699561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        {
700561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            Map.Entry entry = iterator.next();
701561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            final Object value = entry.getValue();
702561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            if(value.equals("AAA"))
703561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            {
704561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes               iterator.remove();
705561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            }
706561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        }
707561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        assertFalse(hashtable.containsKey("my.nonexistent.prop"));
708561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes    }
709561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
710561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes    /**
711561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes     * @tests java.util.Hashtable#elements()
712561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes     * @tests java.util.Hashtable#keys()
713561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes     * @tests java.util.Hashtable#keySet()
714561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes     */
715561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes    public void test_keys_elements_keySet_Exceptions() {
716561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        Hashtable hashTable = new Hashtable();
717561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        String key = "key";
718561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        String value = "value";
719561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        hashTable.put(key, value);
720561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
721561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        Iterator iterator = (Iterator) hashTable.keys();
722561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        assertTrue(iterator.hasNext());
723561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        try {
724561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            iterator.remove();
725561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            fail("should throw UnsupportedOperationException");
726561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        } catch (UnsupportedOperationException e) {
727561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            // Expected
728561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        }
729561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        iterator.next();
730561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        try {
731561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            iterator.remove();
732561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            fail("should throw UnsupportedOperationException");
733561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        } catch (UnsupportedOperationException e) {
734561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            // Expected
735561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        }
736561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        assertFalse(iterator.hasNext());
737561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
738561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        iterator = (Iterator) hashTable.elements();
739561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        assertTrue(iterator.hasNext());
740561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        try {
741561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            iterator.remove();
742561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            fail("should throw UnsupportedOperationException");
743561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        } catch (UnsupportedOperationException e) {
744561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            // Expected
745561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        }
746561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        iterator.next();
747561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        try {
748561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            iterator.remove();
749561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            fail("should throw UnsupportedOperationException");
750561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        } catch (UnsupportedOperationException e) {
751561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            // Expected
752561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        }
753561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        assertFalse(iterator.hasNext());
754561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
755561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        iterator = hashTable.keySet().iterator();
756561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        assertTrue(iterator.hasNext());
757561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        try {
758561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            iterator.remove();
759561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            fail("should throw IllegalStateException");
760561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        } catch (IllegalStateException e) {
761561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            // Expected
762561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        }
763561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        iterator.next();
764561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        iterator.remove();
765561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        assertFalse(iterator.hasNext());
766561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
767561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        hashTable.clear();
768561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        for (int i = 0; i < 10; i++) {
769561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            hashTable.put(key + i, value + i);
770561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        }
771561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
772561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        // cast Enumeration to Iterator
773561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        Enumeration enumeration = hashTable.keys();
774561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        iterator = (Iterator) enumeration;
775561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        assertTrue(enumeration.hasMoreElements());
776561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        assertTrue(iterator.hasNext());
777561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        for (int i = 0; i < 10; i++) {
778561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            if (i % 2 == 0) {
779561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                enumeration.nextElement();
780561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            } else {
781561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                iterator.next();
782561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            }
783561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        }
784561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        assertFalse(enumeration.hasMoreElements());
785561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        assertFalse(iterator.hasNext());
786561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        try {
787561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            enumeration.nextElement();
788561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            fail("should throw NoSuchElementException");
789561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        } catch (NoSuchElementException e) {
790561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            // Expected
791561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        }
792561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        try {
793561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            iterator.next();
794561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            fail("should throw NoSuchElementException");
795561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        } catch (NoSuchElementException e) {
796561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            // Expected
797561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        }
798561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
799561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        // cast Enumeration to Iterator
800561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        enumeration = hashTable.elements();
801561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        iterator = (Iterator) enumeration;
802561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        assertTrue(enumeration.hasMoreElements());
803561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        assertTrue(iterator.hasNext());
804561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        for (int i = 0; i < 10; i++) {
805561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            if (i % 2 == 0) {
806561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                enumeration.nextElement();
807561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            } else {
808561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                iterator.next();
809561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            }
810561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        }
811561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        assertFalse(enumeration.hasMoreElements());
812561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        assertFalse(iterator.hasNext());
813561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        try {
814561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            enumeration.nextElement();
815561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            fail("should throw NoSuchElementException");
816561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        } catch (NoSuchElementException e) {
817561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            // Expected
818561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        }
819561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        try {
820561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            iterator.next();
821561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            fail("should throw NoSuchElementException");
822561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        } catch (NoSuchElementException e) {
823561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            // Expected
824561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        }
825561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
826561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        // cast Iterator to Enumeration
827561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        enumeration = (Enumeration) hashTable.keySet().iterator();
828561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        iterator = (Iterator) enumeration;
829561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        assertTrue(enumeration.hasMoreElements());
830561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        assertTrue(iterator.hasNext());
831561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        for (int i = 0; i < 10; i++) {
832561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            if (i % 2 == 0) {
833561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                enumeration.nextElement();
834561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            } else {
835561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                iterator.next();
836561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            }
837561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        }
838561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        assertFalse(enumeration.hasMoreElements());
839561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        assertFalse(iterator.hasNext());
840561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        try {
841561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            enumeration.nextElement();
842561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            fail("should throw NoSuchElementException");
843561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        } catch (NoSuchElementException e) {
844561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            // Expected
845561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        }
846561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        try {
847561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            iterator.next();
848561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            fail("should throw NoSuchElementException");
849561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        } catch (NoSuchElementException e) {
850561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            // Expected
851561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        }
852561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes    }
853561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
854561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes	protected Hashtable hashtableClone(Hashtable s) {
855561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes		return (Hashtable) s.clone();
856561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes	}
857561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
858561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes	/**
859561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes	 * Sets up the fixture, for example, open a network connection. This method
860561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes	 * is called before a test is executed.
861561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes	 */
862561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes	protected void setUp() {
863561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
864561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes		ht10 = new Hashtable(10);
865561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes		ht100 = new Hashtable(100);
866561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes		htfull = new Hashtable(10);
867561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes		keyVector = new Vector(10);
868561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes		elmVector = new Vector(10);
869561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
870561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes		for (int i = 0; i < 10; i++) {
871561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes			ht10.put("Key " + i, "Val " + i);
872561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes			keyVector.addElement("Key " + i);
873561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes			elmVector.addElement("Val " + i);
874561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes		}
875561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
876561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes		for (int i = 0; i < 7; i++)
877561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes			htfull.put("FKey " + i, "FVal " + i);
878561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes	}
879561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
880561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes    static class ReusableKey {
881561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        private int key = 0;
882561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
883561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        public void setKey(int key) {
884561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            this.key = key;
885561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        }
886561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
887561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        public int hashCode() {
888561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            return key;
889561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        }
890561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
891561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        public boolean equals(Object o) {
892561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            if (o == this) {
893561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                return true;
894561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            }
895561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            if (!(o instanceof ReusableKey)) {
896561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                return false;
897561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            }
898561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            return key == ((ReusableKey) o).key;
899561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        }
900561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes    }
901561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes}
902