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