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.lang.ref.ReferenceQueue;
21561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughesimport java.lang.ref.WeakReference;
22561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughesimport java.util.AbstractMap;
23561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughesimport java.util.Arrays;
24561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughesimport java.util.Collection;
25561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughesimport java.util.Iterator;
26561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughesimport java.util.List;
27561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughesimport java.util.Map;
28561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughesimport java.util.Set;
29561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughesimport java.util.WeakHashMap;
30561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughesimport tests.support.Support_MapTest2;
31561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
32561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughespublic class WeakHashMapTest extends junit.framework.TestCase {
33561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes	class MockMap extends AbstractMap {
34561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes		public Set entrySet() {
35561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes			return null;
36561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes		}
37561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes		public int size(){
38561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes			return 0;
39561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes		}
40561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes	}
41561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
42561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes	Object[] keyArray = new Object[100];
43561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
44561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes	Object[] valueArray = new Object[100];
45561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
46561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes	WeakHashMap whm;
47561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
48561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes    Object[] KEY_ARRAY;
49561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
50561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes    Object[] VALUE_ARRAY;
51561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
52561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes	/**
53561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes	 * @tests java.util.WeakHashMap#WeakHashMap()
54561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes	 */
55561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes	public void test_Constructor() {
56561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes		// Test for method java.util.WeakHashMap()
57561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes		new Support_MapTest2(new WeakHashMap()).runTest();
58561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
59561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes		whm = new WeakHashMap();
60561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes		for (int i = 0; i < 100; i++)
61561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes			whm.put(keyArray[i], valueArray[i]);
62561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes		for (int i = 0; i < 100; i++)
63561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes			assertTrue("Incorrect value retrieved",
64561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes					whm.get(keyArray[i]) == valueArray[i]);
65561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
66561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes	}
67561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
68561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes	/**
69561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes	 * @tests java.util.WeakHashMap#WeakHashMap(int)
70561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes	 */
71561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes	public void test_ConstructorI() {
72561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes		// Test for method java.util.WeakHashMap(int)
73561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes		whm = new WeakHashMap(50);
74561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes		for (int i = 0; i < 100; i++)
75561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes			whm.put(keyArray[i], valueArray[i]);
76561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes		for (int i = 0; i < 100; i++)
77561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes			assertTrue("Incorrect value retrieved",
78561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes					whm.get(keyArray[i]) == valueArray[i]);
79561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
80561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes		WeakHashMap empty = new WeakHashMap(0);
81561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes		assertNull("Empty weakhashmap access", empty.get("nothing"));
82561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes		empty.put("something", "here");
83561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes		assertTrue("cannot get element", empty.get("something") == "here");
84561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes	}
85561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
86561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes	/**
87561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes	 * @tests java.util.WeakHashMap#WeakHashMap(int, float)
88561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes	 */
89561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes	public void test_ConstructorIF() {
90561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes		// Test for method java.util.WeakHashMap(int, float)
91561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes		whm = new WeakHashMap(50, 0.5f);
92561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes		for (int i = 0; i < 100; i++)
93561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes			whm.put(keyArray[i], valueArray[i]);
94561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes		for (int i = 0; i < 100; i++)
95561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes			assertTrue("Incorrect value retrieved",
96561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes					whm.get(keyArray[i]) == valueArray[i]);
97561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
98561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes		WeakHashMap empty = new WeakHashMap(0, 0.75f);
99561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes		assertNull("Empty hashtable access", empty.get("nothing"));
100561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes		empty.put("something", "here");
101561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes		assertTrue("cannot get element", empty.get("something") == "here");
102561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes	}
103561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
104561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes	/**
105561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes	 * @tests java.util.WeakHashMap#WeakHashMap(java.util.Map)
106561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes	 */
107561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes	public void test_ConstructorLjava_util_Map() {
108561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        Map mockMap = new MockMap();
109561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        WeakHashMap map = new WeakHashMap(mockMap);
110561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        assertEquals("Size should be 0", 0, map.size());
111561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes	}
112561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
113561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes	/**
114561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes	 * @tests java.util.WeakHashMap#clear()
115561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes	 */
116561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes	public void test_clear() {
117561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes		// Test for method boolean java.util.WeakHashMap.clear()
118561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes		whm = new WeakHashMap();
119561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes		for (int i = 0; i < 100; i++)
120561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes			whm.put(keyArray[i], valueArray[i]);
121561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes		whm.clear();
122561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes		assertTrue("Cleared map should be empty", whm.isEmpty());
123561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes		for (int i = 0; i < 100; i++)
124561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes			assertNull("Cleared map should only return null", whm
125561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes					.get(keyArray[i]));
126561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
127561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes	}
128561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
129561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes	/**
130561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes	 * @tests java.util.WeakHashMap#containsKey(java.lang.Object)
131561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes	 */
132561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes	public void test_containsKeyLjava_lang_Object() {
133561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes		// Test for method boolean java.util.WeakHashMap.containsKey()
134561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes		whm = new WeakHashMap();
135561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes		for (int i = 0; i < 100; i++)
136561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes			whm.put(keyArray[i], valueArray[i]);
137561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes		for (int i = 0; i < 100; i++)
138561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes			assertTrue("Should contain referenced key", whm
139561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes					.containsKey(keyArray[i]));
140561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes		keyArray[25] = null;
141561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes		keyArray[50] = null;
142561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes	}
143561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
144561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes	/**
145561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes	 * @tests java.util.WeakHashMap#containsValue(java.lang.Object)
146561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes	 */
147561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes	public void test_containsValueLjava_lang_Object() {
148561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes		// Test for method boolean java.util.WeakHashMap.containsValue()
149561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes		whm = new WeakHashMap();
150561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes		for (int i = 0; i < 100; i++)
151561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes			whm.put(keyArray[i], valueArray[i]);
152561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes		for (int i = 0; i < 100; i++)
153561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes			assertTrue("Should contain referenced value", whm
154561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes					.containsValue(valueArray[i]));
155561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes		keyArray[25] = null;
156561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes		keyArray[50] = null;
157561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes	}
158561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
159561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes    /**
160561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes     * @tests java.util.WeakHashMap#entrySet()
161561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes     */
162561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes    public void test_entrySet() {
163561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        WeakHashMap<Object, Object> weakMap = new WeakHashMap<Object, Object>();
164561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        KEY_ARRAY = new Object[100];
165561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        VALUE_ARRAY = new Object[100];
166561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        for (int i = 0; i < 100; i++) {
167561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            KEY_ARRAY[i] = new Integer(i);
168561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            VALUE_ARRAY[i] = new Long(i);
169561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            weakMap.put(KEY_ARRAY[i], VALUE_ARRAY[i]);
170561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        }
171561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
172561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        List<Object> keys = Arrays.asList(KEY_ARRAY);
173561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        List<Object> values = Arrays.asList(VALUE_ARRAY);
174561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
175561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        // Check the entry set has correct size & content
176561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        Set<Map.Entry<Object, Object>> entrySet = weakMap.entrySet();
177561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        assertEquals("Assert 0: Incorrect number of entries returned", 100,
178561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                entrySet.size());
179561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        Iterator<Map.Entry<Object, Object>> it = entrySet.iterator();
180561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        while (it.hasNext()) {
181561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            Map.Entry<Object, Object> entry = it.next();
182561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            assertTrue("Assert 1: Invalid map entry key returned", keys
183561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                    .contains(entry.getKey()));
184561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            assertTrue("Assert 2: Invalid map entry value returned", values
185561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                    .contains(entry.getValue()));
186561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            assertTrue("Assert 3: Entry not in entry set", entrySet
187561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                    .contains(entry));
188561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        }
189561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
190561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        // Dereference list of key/value objects
191561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        keys = values = null;
192561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
193561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        // Dereference a single key, then try to
194561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        // force a collection of the weak ref'd obj
195561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        KEY_ARRAY[50] = null;
196561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        enqueueWeakReferences();
197561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
198561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        assertEquals("Assert 4: Incorrect number of entries after gc", 99,
199561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                entrySet.size());
200561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        assertSame("Assert 5: Entries not identical", entrySet.iterator()
201561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                .next(), entrySet.iterator().next());
202561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
203561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        // remove alternate entries using the iterator, and ensure the
204561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        // iteration count is consistent
205561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        int size = entrySet.size();
206561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        it = entrySet.iterator();
207561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        while (it.hasNext()) {
208561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            it.next();
209561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            it.remove();
210561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            size--;
211561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            if (it.hasNext()) {
212561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                it.next();
213561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            }
214561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
215561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        }
216561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        assertEquals("Assert 6: entry set count mismatch", size, entrySet
217561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                .size());
218561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
219561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        int entries = 0;
220561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        it = entrySet.iterator();
221561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        while (it.hasNext()) {
222561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            it.next();
223561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            entries++;
224561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        }
225561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        assertEquals("Assert 6: count mismatch", size, entries);
226561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
227561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        it = entrySet.iterator();
228561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        while (it.hasNext()) {
229561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            it.next();
230561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            it.remove();
231561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        }
232561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        assertEquals("Assert 7: entry set not empty", 0, entrySet.size());
233561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        assertTrue("Assert 8:  iterator not empty", !entrySet.iterator()
234561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                .hasNext());
235561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes    }
236561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
237561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes	/**
238561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes	 * @tests java.util.WeakHashMap#entrySet()
239561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes	 */
240561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes	public void test_entrySet_2() {
241561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes		// Test for method java.util.Set java.util.WeakHashMap.entrySet()
242561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes		whm = new WeakHashMap();
243561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes		for (int i = 0; i < 100; i++)
244561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes			whm.put(keyArray[i], valueArray[i]);
245561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes		List keys = Arrays.asList(keyArray);
246561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes		List values = Arrays.asList(valueArray);
247561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes		Set entrySet = whm.entrySet();
248561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes		assertTrue("Incorrect number of entries returned--wanted 100, got: "
249561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes				+ entrySet.size(), entrySet.size() == 100);
250561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes		Iterator it = entrySet.iterator();
251561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes		while (it.hasNext()) {
252561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes			Map.Entry entry = (Map.Entry) it.next();
253561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes			assertTrue("Invalid map entry returned--bad key", keys
254561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes					.contains(entry.getKey()));
255561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes			assertTrue("Invalid map entry returned--bad key", values
256561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes					.contains(entry.getValue()));
257561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes		}
258561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes		keys = null;
259561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes		values = null;
260561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes		keyArray[50] = null;
261561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
262561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        enqueueWeakReferences();
263561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
264561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes		assertTrue(
265561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes				"Incorrect number of entries returned after gc--wanted 99, got: "
266561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes						+ entrySet.size(), entrySet.size() == 99);
267561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes	}
268561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
269561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes	/**
270561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes	 * @tests java.util.WeakHashMap#get(java.lang.Object)
271561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes	 */
272561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes	public void test_getLjava_lang_Object() {
273561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes		// Test for method java.lang.Object
274561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes		// java.util.WeakHashMap.get(java.lang.Object)
275561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes		assertTrue("Used to test", true);
276561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes	}
277561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
278561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes	/**
279561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes	 * @tests java.util.WeakHashMap#isEmpty()
280561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes	 */
281561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes	public void test_isEmpty() {
282561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes		// Test for method boolean java.util.WeakHashMap.isEmpty()
283561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes		whm = new WeakHashMap();
284561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes		assertTrue("New map should be empty", whm.isEmpty());
285561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes		Object myObject = new Object();
286561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes		whm.put(myObject, myObject);
287561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes		assertTrue("Map should not be empty", !whm.isEmpty());
288561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes		whm.remove(myObject);
289561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes		assertTrue("Map with elements removed should be empty", whm.isEmpty());
290561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes	}
291561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
292561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes	/**
293561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes	 * @tests java.util.WeakHashMap#put(java.lang.Object, java.lang.Object)
294561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes	 */
295561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes	public void test_putLjava_lang_ObjectLjava_lang_Object() {
296561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes		// Test for method java.lang.Object
297561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes		// java.util.WeakHashMap.put(java.lang.Object, java.lang.Object)
298561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes		WeakHashMap map = new WeakHashMap();
299561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes		map.put(null, "value"); // add null key
300561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        enqueueWeakReferences();
301561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes		map.remove("nothing"); // Cause objects in queue to be removed
302561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes		assertEquals("null key was removed", 1, map.size());
303561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes	}
304561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
305561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes    /**
306561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes     * @tests java.util.WeakHashMap#putAll(java.util.Map)
307561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes     */
308561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes    public void test_putAllLjava_util_Map() {
309561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        Map mockMap=new MockMap();
310561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        WeakHashMap map = new WeakHashMap();
311561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        map.putAll(mockMap);
312561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        assertEquals("Size should be 0", 0, map.size());
313561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes    }
314561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
315561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes	/**
316561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes	 * @tests java.util.WeakHashMap#remove(java.lang.Object)
317561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes	 */
318561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes	public void test_removeLjava_lang_Object() {
319561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes		// Test for method java.lang.Object
320561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes		// java.util.WeakHashMap.remove(java.lang.Object)
321561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes		whm = new WeakHashMap();
322561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes		for (int i = 0; i < 100; i++)
323561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes			whm.put(keyArray[i], valueArray[i]);
324561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
325561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes		assertTrue("Remove returned incorrect value",
326561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes				whm.remove(keyArray[25]) == valueArray[25]);
327561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes		assertNull("Remove returned incorrect value",
328561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes				whm.remove(keyArray[25]));
329561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes		assertEquals("Size should be 99 after remove", 99, whm.size());
330561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes	}
331561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
332561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes	/**
333561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes	 * @tests java.util.WeakHashMap#size()
334561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes	 */
335561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes	public void test_size() {
336561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes		// Test for method int java.util.WeakHashMap.size()
337561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes		assertTrue("Used to test", true);
338561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes	}
339561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
340561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes	/**
341561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes	 * @tests java.util.WeakHashMap#keySet()
342561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes	 */
343561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes	public void test_keySet() {
344561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes		// Test for method java.util.Set java.util.WeakHashMap.keySet()
345561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes		whm = new WeakHashMap();
346561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes		for (int i = 0; i < 100; i++)
347561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes			whm.put(keyArray[i], valueArray[i]);
348561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
349561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes		List keys = Arrays.asList(keyArray);
350561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes		List values = Arrays.asList(valueArray);
351561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
352561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes		Set keySet = whm.keySet();
353561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes		assertEquals("Incorrect number of keys returned,", 100, keySet.size());
354561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes		Iterator it = keySet.iterator();
355561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes		while (it.hasNext()) {
356561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes			Object key = it.next();
357561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes			assertTrue("Invalid map entry returned--bad key", keys
358561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes					.contains(key));
359561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes		}
360561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes		keys = null;
361561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes		values = null;
362561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes		keyArray[50] = null;
363561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
364561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        enqueueWeakReferences();
365561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
366561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes		assertEquals("Incorrect number of keys returned after gc,", 99, keySet
367561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes				.size());
368561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes	}
369561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
370561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes    /**
371561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes     * Regression test for HARMONY-3883
372561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes     * @tests java.util.WeakHashMap#keySet()
373561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes     */
374561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes    public void test_keySet_hasNext() {
375561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        WeakHashMap map = new WeakHashMap();
376561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        ConstantHashClass cl = new ConstantHashClass(2);
377561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        map.put(new ConstantHashClass(1), null);
378561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        map.put(cl, null);
379561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        map.put(new ConstantHashClass(3), null);
380561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        Iterator iter = map.keySet().iterator();
381561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        iter.next();
382561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        iter.next();
383561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        enqueueWeakReferences();
384561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        assertFalse("Wrong hasNext() value", iter.hasNext());
385561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes    }
386561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
387561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes    static class ConstantHashClass {
388561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        private int id = 0;
389561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
390561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        public ConstantHashClass(int id) {
391561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            this.id = id;
392561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        }
393561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
394561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        public int hashCode() {
395561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            return 0;
396561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        }
397561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
398561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        public String toString() {
399561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            return "ConstantHashClass[id=" + id + "]";
400561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        }
401561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes    }
402561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
403561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
404561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes	/**
405561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes	 * @tests java.util.WeakHashMap#values()
406561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes	 */
407561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes	public void test_values() {
408561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes		// Test for method java.util.Set java.util.WeakHashMap.values()
409561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes		whm = new WeakHashMap();
410561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes		for (int i = 0; i < 100; i++)
411561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes			whm.put(keyArray[i], valueArray[i]);
412561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
413561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes		List keys = Arrays.asList(keyArray);
414561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes		List values = Arrays.asList(valueArray);
415561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
416561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes		Collection valuesCollection = whm.values();
417561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes		assertEquals("Incorrect number of keys returned,", 100,
418561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes				valuesCollection.size());
419561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes		Iterator it = valuesCollection.iterator();
420561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes		while (it.hasNext()) {
421561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes			Object value = it.next();
422561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes			assertTrue("Invalid map entry returned--bad value", values
423561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes					.contains(value));
424561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes		}
425561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes		keys = null;
426561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes		values = null;
427561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes		keyArray[50] = null;
428561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
429561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        enqueueWeakReferences();
430561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
431561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes		assertEquals("Incorrect number of keys returned after gc,", 99,
432561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes				valuesCollection.size());
433561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes	}
434561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
435561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes    /**
436561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes     * Induce the VM to enqueue weak references into the corresponding reference
437561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes     * queues. This guarantees that all weak hash maps can observe their own
438561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes     * references as both cleared and enqueued.
439561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes     *
440561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes     * <p>This method assumes that one value enqueued implies all others will be
441561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes     * enqueued. This behavior isn't specified, and this method may return too
442561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes     * early on some VMs.
443561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes     */
444561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes    private void enqueueWeakReferences() {
445561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        ReferenceQueue<Object> queue = new ReferenceQueue<Object>();
446561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        new WeakReference<Object>(new Object(), queue);
447561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        System.gc();
448561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        try {
449561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            queue.remove(200); // '200' shouldn't be necessary, but works on more VMs
450561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        } catch (InterruptedException e) {
451561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        }
452561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes    }
453561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
454561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes    /**
455561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes	 * Sets up the fixture, for example, open a network connection. This method
456561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes	 * is called before a test is executed.
457561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes	 */
458561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes	protected void setUp() {
459561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes		for (int i = 0; i < 100; i++) {
460561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes			keyArray[i] = new Object();
461561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes			valueArray[i] = new Object();
462561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes		}
463561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
464561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes	}
465561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
466561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes	/**
467561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes	 * Tears down the fixture, for example, close a network connection. This
468561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes	 * method is called after a test is executed.
469561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes	 */
470561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes	protected void tearDown() {
471561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes	}
472561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes}
473