package org.openide.util; import org.junit.Test; import static org.junit.Assert.*; import org.openide.util.RequestProcessor; public class RequestProcessorBugTest { @Test public void testBug() { RequestProcessor rp = new RequestProcessor("TestProcessor", Integer.MAX_VALUE, true); R1 r1 = new R1(); R2 r2 = new R2(r1); r1.submit(rp); RequestProcessor.Task t = rp.post(r2); t.waitFinished(); assertEquals("Should run once", 1, r1.count); } private static class R1 implements Runnable { private int count; private RequestProcessor.Task task; @Override public void run() { count ++; System.out.println( "Fac = " + fac( 60 ) ); } long fac( int i ) { if ( i == 1 ) { return 1; } else { return i * fac( i - 1 ); } } void submit(RequestProcessor rp) { task = rp.post(this); } void cancel() { task.cancel(); } void waitFinished() { if ( !task.isFinished() ) { task.waitFinished(); } } } private static class R2 implements Runnable { R1 r1; R2( R1 r1 ) { this.r1 = r1; } @Override public void run() { r1.cancel(); r1.waitFinished(); } } }