xref: /trunk/main/ridljar/test/com/sun/star/lib/util/WeakMap_Test.java (revision 3309286857f19787ae62bd793a98b5af4edd2ad3)
1a046d00fSAndrew Rist /**************************************************************
2cdf0e10cSrcweir  *
3a046d00fSAndrew Rist  * Licensed to the Apache Software Foundation (ASF) under one
4a046d00fSAndrew Rist  * or more contributor license agreements.  See the NOTICE file
5a046d00fSAndrew Rist  * distributed with this work for additional information
6a046d00fSAndrew Rist  * regarding copyright ownership.  The ASF licenses this file
7a046d00fSAndrew Rist  * to you under the Apache License, Version 2.0 (the
8a046d00fSAndrew Rist  * "License"); you may not use this file except in compliance
9a046d00fSAndrew Rist  * with the License.  You may obtain a copy of the License at
10cdf0e10cSrcweir  *
11a046d00fSAndrew Rist  *   http://www.apache.org/licenses/LICENSE-2.0
12cdf0e10cSrcweir  *
13a046d00fSAndrew Rist  * Unless required by applicable law or agreed to in writing,
14a046d00fSAndrew Rist  * software distributed under the License is distributed on an
15a046d00fSAndrew Rist  * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
16a046d00fSAndrew Rist  * KIND, either express or implied.  See the License for the
17a046d00fSAndrew Rist  * specific language governing permissions and limitations
18a046d00fSAndrew Rist  * under the License.
19cdf0e10cSrcweir  *
20a046d00fSAndrew Rist  *************************************************************/
21a046d00fSAndrew Rist 
22a046d00fSAndrew Rist 
23cdf0e10cSrcweir 
24cdf0e10cSrcweir package com.sun.star.lib.util;
25cdf0e10cSrcweir 
26cdf0e10cSrcweir import util.WaitUnreachable;
27cdf0e10cSrcweir 
28*967b1ad8SDamjan Jovanovic import org.junit.Test;
29*967b1ad8SDamjan Jovanovic import static org.junit.Assert.*;
30cdf0e10cSrcweir 
31*967b1ad8SDamjan Jovanovic public final class WeakMap_Test {
32*967b1ad8SDamjan Jovanovic     @Test
test()33cdf0e10cSrcweir     public void test() {
34cdf0e10cSrcweir         WeakMap m = new WeakMap();
35*967b1ad8SDamjan Jovanovic         assertTrue("", m.size() == 0);
36*967b1ad8SDamjan Jovanovic         assertTrue("", m.isEmpty());
37*967b1ad8SDamjan Jovanovic         assertTrue("", !m.containsKey("key1"));
38*967b1ad8SDamjan Jovanovic         assertTrue("", !m.containsValue(null));
39cdf0e10cSrcweir         WaitUnreachable u1 = new WaitUnreachable(new Object());
40cdf0e10cSrcweir         m.put("key1", u1.get());
41cdf0e10cSrcweir         WaitUnreachable u2 = new WaitUnreachable(new Disposable());
42cdf0e10cSrcweir         m.put("key2", u2.get());
43*967b1ad8SDamjan Jovanovic         assertTrue("", m.size() == 2);
44*967b1ad8SDamjan Jovanovic         assertTrue("", !m.isEmpty());
45*967b1ad8SDamjan Jovanovic         assertTrue("", m.containsKey("key1"));
46*967b1ad8SDamjan Jovanovic         assertTrue("", m.containsKey("key2"));
47*967b1ad8SDamjan Jovanovic         assertTrue("", !m.containsKey("key3"));
48*967b1ad8SDamjan Jovanovic         assertTrue("", m.containsValue(m.get("key1")));
49*967b1ad8SDamjan Jovanovic         assertTrue("", m.containsValue(m.get("key2")));
50*967b1ad8SDamjan Jovanovic         assertTrue("", WeakMap.getValue(m.get("key1")).equals(u1.get()));
51*967b1ad8SDamjan Jovanovic         assertTrue("", WeakMap.getValue(m.get("key2")).equals(u2.get()));
52*967b1ad8SDamjan Jovanovic         assertTrue("", m.values().size() == 2);
53*967b1ad8SDamjan Jovanovic         assertTrue("", m.values().contains(m.get("key1")));
54*967b1ad8SDamjan Jovanovic         assertTrue("", m.values().contains(m.get("key2")));
55cdf0e10cSrcweir         u1.waitUnreachable();
56*967b1ad8SDamjan Jovanovic         assertTrue("", WeakMap.getValue(m.get("key1")) == null);
57cdf0e10cSrcweir         ((Disposable) u2.get()).dispose();
58*967b1ad8SDamjan Jovanovic         assertTrue("", WeakMap.getValue(m.get("key2")) == null);
59cdf0e10cSrcweir         m.clear();
60cdf0e10cSrcweir         u2.waitUnreachable();
61*967b1ad8SDamjan Jovanovic         assertTrue("", m.size() == 0);
62cdf0e10cSrcweir         m.put("key2", new Object());
63*967b1ad8SDamjan Jovanovic         assertTrue("", m.size() == 1);
64cdf0e10cSrcweir     }
65cdf0e10cSrcweir 
66cdf0e10cSrcweir     // This simple class (single listener, no synchronization) exploits
67cdf0e10cSrcweir     // knowledge about the implementation of WeakMap:
68cdf0e10cSrcweir     private static final class Disposable implements DisposeNotifier {
addDisposeListener(DisposeListener listener)69cdf0e10cSrcweir         public void addDisposeListener(DisposeListener listener) {
70cdf0e10cSrcweir             this.listener = listener;
71cdf0e10cSrcweir         }
72cdf0e10cSrcweir 
dispose()73cdf0e10cSrcweir         public void dispose() {
74cdf0e10cSrcweir             if (listener != null) {
75cdf0e10cSrcweir                 listener.notifyDispose(this);
76cdf0e10cSrcweir             }
77cdf0e10cSrcweir         }
78cdf0e10cSrcweir 
79cdf0e10cSrcweir         private DisposeListener listener = null;
80cdf0e10cSrcweir     }
81cdf0e10cSrcweir }
82