|
What this is
Other links
The source code/* * Sun Public License Notice * * The contents of this file are subject to the Sun Public License * Version 1.0 (the "License"). You may not use this file except in * compliance with the License. A copy of the License is available at * http://www.sun.com/ * * The Original Code is NetBeans. The Initial Developer of the Original * Code is Sun Microsystems, Inc. Portions Copyright 1997-2003 Sun * Microsystems, Inc. All Rights Reserved. */ package org.openide.util; import java.beans.PropertyChangeListener; import java.lang.ref.WeakReference; import java.lang.reflect.Method; import java.util.Arrays; import java.util.Vector; import junit.framework.*; import org.netbeans.junit.*; public class WeakListenerTest extends NbTestCase { public WeakListenerTest(java.lang.String testName) { super(testName); } public static void main(java.lang.String[] args) { junit.textui.TestRunner.run(new NbTestSuite(WeakListenerTest.class)); } public void testPrivateRemoveMethod() throws Exception { PropChBean bean = new PropChBean(); Listener listener = new Listener(); PropertyChangeListener weakL = new PrivatePropL(listener, bean); WeakReference ref = new WeakReference(listener); bean.addPCL(weakL); listener = null; assertGC("Listener wasn't GCed", ref); ref = new WeakReference(weakL); weakL = null; assertGC("WeakListener wasn't GCed", ref); } private static final class Listener implements java.beans.PropertyChangeListener, javax.naming.event.ObjectChangeListener { public int cnt; public void propertyChange (java.beans.PropertyChangeEvent ev) { cnt++; } public void namingExceptionThrown(javax.naming.event.NamingExceptionEvent evt) { cnt++; } public void objectChanged(javax.naming.event.NamingEvent evt) { cnt++; } } // end of Listener private static class PropChBean { private Vector listeners = new Vector(); private void addPCL(PropertyChangeListener l) { listeners.add(l); } private void removePCL(PropertyChangeListener l) { listeners.remove(l); } } // End of PropChBean class private static class PrivatePropL extends WeakListener implements PropertyChangeListener { public PrivatePropL(PropertyChangeListener orig, Object source) { super(PropertyChangeListener.class, orig); setSource(source); } protected String removeMethodName () { return "removePCL"; // NOI18N } // ---- PropertyChangeListener implementation public void propertyChange (java.beans.PropertyChangeEvent evt) { PropertyChangeListener l = (PropertyChangeListener) super.get(evt); if (l != null) l.propertyChange(evt); } } // End of PrivatePropL class } |
... this post is sponsored by my books ... | |
#1 New Release! |
FP Best Seller |
Copyright 1998-2021 Alvin Alexander, alvinalexander.com
All Rights Reserved.
A percentage of advertising revenue from
pages under the /java/jwarehouse
URI on this website is
paid back to open source projects.