|
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.lang.ref.*;
import junit.framework.*;
import org.netbeans.junit.*;
public class UtilitiesActiveQueueTest extends NbTestCase {
public UtilitiesActiveQueueTest(java.lang.String testName) {
super(testName);
}
public static void main(java.lang.String[] args) {
junit.textui.TestRunner.run(new NbTestSuite(UtilitiesActiveQueueTest.class));
}
public void testRunnableReferenceIsExecuted () throws Exception {
Object obj = new Object ();
RunnableRef ref = new RunnableRef (obj);
synchronized (ref) {
obj = null;
assertGC ("Should be GCed quickly", ref);
ref.wait ();
assertTrue ("Run method has been executed", ref.executed);
}
}
public void testRunnablesAreProcessedOneByOne () throws Exception {
Object obj = new Object ();
RunnableRef ref = new RunnableRef (obj);
ref.wait = true;
synchronized (ref) {
obj = null;
assertGC ("Is garbage collected", ref);
ref.wait ();
assertTrue ("Still not executed, it is blocked", !ref.executed);
}
RunnableRef after = new RunnableRef (new Object ());
synchronized (after) {
assertGC ("Is garbage collected", after);
after.wait (100); // will fail
assertTrue ("Even if GCed, still not processed", !after.executed);
}
synchronized (after) {
synchronized (ref) {
ref.notify ();
ref.wait ();
assertTrue ("Processed", ref.executed);
}
after.wait ();
assertTrue ("Processed too", after.executed);
}
}
public void testCallingPublicMethodsThrowsExceptions () {
try {
Utilities.activeReferenceQueue().poll();
fail ("One should not call public method from outside");
} catch (RuntimeException ex) {
}
try {
Utilities.activeReferenceQueue ().remove ();
fail ("One should not call public method from outside");
} catch (InterruptedException ex) {
}
try {
Utilities.activeReferenceQueue ().remove (10);
fail ("One should not call public method from outside");
} catch (InterruptedException ex) {
}
}
private static class RunnableRef extends WeakReference
implements Runnable {
public boolean wait;
public boolean entered;
public boolean executed;
public RunnableRef (Object o) {
super (o, Utilities.activeReferenceQueue ());
}
public synchronized void run () {
entered = true;
if (wait) {
// notify we are here
notify ();
try {
wait ();
} catch (InterruptedException ex) {
}
}
executed = true;
notifyAll ();
}
}
}
|
| ... this post is sponsored by my books ... | |
#1 New Release! |
FP Best Seller |
Copyright 1998-2024 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.