1 // Copyright (C) 2004 - 2009 Philip Aston
2 // All rights reserved.
3 //
4 // This file is part of The Grinder software distribution. Refer to
5 // the file LICENSE which is part of The Grinder distribution for
6 // licensing details. The Grinder distribution is available on the
7 // Internet at http://grinder.sourceforge.net/
8 //
9 // THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
10 // "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
11 // LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS
12 // FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
13 // COPYRIGHT HOLDERS OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT,
14 // INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
15 // (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
16 // SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
17 // HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT,
18 // STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
19 // ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED
20 // OF THE POSSIBILITY OF SUCH DAMAGE.
21
22 package net.grinder.util;
23
24 import junit.framework.TestCase;
25
26
27 /**
28 * Unit test case for {@link WeakValueHashMap}.
29 *
30 * @author Philip Aston
31 */
32 public class TestWeakValueHashMap extends TestCase {
33
34 public void testWeakValueHashMap() throws Exception {
35
36 final WeakValueHashMap<Object, Object> map =
37 new WeakValueHashMap<Object, Object>();
38
39 Object k1 = new Object();
40 Object v1 = new Object();
41 Object k2 = new Object();
42 Object v2 = new Object();
43 Object k3 = new Object();
44 Object v3 = new Object();
45
46 assertNull(map.get(k1));
47
48 map.put(k1, v1);
49 assertEquals(v1, map.get(k1));
50 assertNull(map.get(v2));
51
52 map.put(k2, v2);
53 assertEquals(v1, map.get(k1));
54 assertEquals(v2, map.get(k2));
55
56 map.put(k1, v2);
57 assertEquals(v2, map.get(k1));
58 assertEquals(v2, map.get(k2));
59
60 map.put(k1, v1);
61
62 v2 = null;
63 Runtime.getRuntime().gc();
64
65 assertEquals(v1, map.get(k1));
66 assertNull(map.get(k2));
67
68 final Object removedV1 = map.remove(k1);
69 assertEquals(v1, removedV1);
70 assertNull(map.get(k1));
71
72 final Object removedV2 = map.remove(k2);
73 assertNull(removedV2);
74
75 final Object removedV3 = map.remove(k3);
76 assertNull(removedV3);
77
78 map.put(k3, v3);
79 assertEquals(v3, map.get(k3));
80
81 map.put(k1, v1);
82 assertEquals(v1, map.get(k1));
83
84 map.clear();
85
86 assertNull(map.get(k1));
87 assertNull(map.get(k2));
88 assertNull(map.get(k3));
89 }
90 }