--- jsr166/src/test/tck/ExecutorsTest.java 2010/09/16 00:52:49 1.31 +++ jsr166/src/test/tck/ExecutorsTest.java 2011/04/14 22:55:08 1.38 @@ -1,7 +1,7 @@ /* * Written by Doug Lea with assistance from members of JCP JSR-166 * Expert Group and released to the public domain, as explained at - * http://creativecommons.org/licenses/publicdomain + * http://creativecommons.org/publicdomain/zero/1.0/ * Other contributors include Andrew Wright, Jeffrey Hayes, * Pat Fisher, Mike Judd. */ @@ -181,53 +181,81 @@ public class ExecutorsTest extends JSR16 * a newSingleThreadScheduledExecutor successfully runs delayed task */ public void testNewSingleThreadScheduledExecutor() throws Exception { - TrackedCallable callable = new TrackedCallable(); - ScheduledExecutorService p1 = Executors.newSingleThreadScheduledExecutor(); - Future f = p1.schedule(callable, SHORT_DELAY_MS, MILLISECONDS); - assertFalse(callable.done); - Thread.sleep(MEDIUM_DELAY_MS); - assertTrue(callable.done); - assertEquals(Boolean.TRUE, f.get()); - joinPool(p1); + ScheduledExecutorService p = Executors.newSingleThreadScheduledExecutor(); + try { + final CountDownLatch done = new CountDownLatch(1); + final Runnable task = new CheckedRunnable() { + public void realRun() { + done.countDown(); + }}; + Future f = p.schedule(Executors.callable(task, Boolean.TRUE), + SHORT_DELAY_MS, MILLISECONDS); + assertFalse(f.isDone()); + assertTrue(done.await(MEDIUM_DELAY_MS, MILLISECONDS)); + assertSame(Boolean.TRUE, f.get(SMALL_DELAY_MS, MILLISECONDS)); + assertSame(Boolean.TRUE, f.get()); + assertTrue(f.isDone()); + } finally { + joinPool(p); + } } /** * a newScheduledThreadPool successfully runs delayed task */ public void testnewScheduledThreadPool() throws Exception { - TrackedCallable callable = new TrackedCallable(); - ScheduledExecutorService p1 = Executors.newScheduledThreadPool(2); - Future f = p1.schedule(callable, SHORT_DELAY_MS, MILLISECONDS); - assertFalse(callable.done); - Thread.sleep(MEDIUM_DELAY_MS); - assertTrue(callable.done); - assertEquals(Boolean.TRUE, f.get()); - joinPool(p1); + ScheduledExecutorService p = Executors.newScheduledThreadPool(2); + try { + final CountDownLatch done = new CountDownLatch(1); + final Runnable task = new CheckedRunnable() { + public void realRun() { + done.countDown(); + }}; + Future f = p.schedule(Executors.callable(task, Boolean.TRUE), + SHORT_DELAY_MS, MILLISECONDS); + assertFalse(f.isDone()); + assertTrue(done.await(MEDIUM_DELAY_MS, MILLISECONDS)); + assertSame(Boolean.TRUE, f.get(SMALL_DELAY_MS, MILLISECONDS)); + assertSame(Boolean.TRUE, f.get()); + assertTrue(f.isDone()); + } finally { + joinPool(p); + } } /** * an unconfigurable newScheduledThreadPool successfully runs delayed task */ public void testunconfigurableScheduledExecutorService() throws Exception { - TrackedCallable callable = new TrackedCallable(); - ScheduledExecutorService p1 = Executors.unconfigurableScheduledExecutorService(Executors.newScheduledThreadPool(2)); - Future f = p1.schedule(callable, SHORT_DELAY_MS, MILLISECONDS); - assertFalse(callable.done); - Thread.sleep(MEDIUM_DELAY_MS); - assertTrue(callable.done); - assertEquals(Boolean.TRUE, f.get()); - joinPool(p1); + ScheduledExecutorService p = + Executors.unconfigurableScheduledExecutorService + (Executors.newScheduledThreadPool(2)); + try { + final CountDownLatch done = new CountDownLatch(1); + final Runnable task = new CheckedRunnable() { + public void realRun() { + done.countDown(); + }}; + Future f = p.schedule(Executors.callable(task, Boolean.TRUE), + SHORT_DELAY_MS, MILLISECONDS); + assertFalse(f.isDone()); + assertTrue(done.await(MEDIUM_DELAY_MS, MILLISECONDS)); + assertSame(Boolean.TRUE, f.get(SMALL_DELAY_MS, MILLISECONDS)); + assertSame(Boolean.TRUE, f.get()); + assertTrue(f.isDone()); + } finally { + joinPool(p); + } } /** - * Future.get on submitted tasks will time out if they compute too long. + * Future.get on submitted tasks will time out if they compute too long. */ public void testTimedCallable() throws Exception { - final Runnable sleeper = - new RunnableShouldThrow(InterruptedException.class) { - public void realRun() throws InterruptedException { - Thread.sleep(LONG_DELAY_MS); - }}; + final Runnable sleeper = new CheckedInterruptedRunnable() { + public void realRun() throws InterruptedException { + Thread.sleep(LONG_DELAY_MS); + }}; for (ExecutorService executor : new ExecutorService[] { Executors.newSingleThreadExecutor(), @@ -399,6 +427,9 @@ public class ExecutorsTest extends JSR16 * Without permissions, calling privilegedCallable throws ACE */ public void testprivilegedCallableWithNoPrivs() throws Exception { + // Avoid classloader-related SecurityExceptions in swingui.TestRunner + Executors.privilegedCallable(new CheckCCL()); + Runnable r = new CheckedRunnable() { public void realRun() throws Exception { if (System.getSecurityManager() == null) @@ -473,7 +504,7 @@ public class ExecutorsTest extends JSR16 Executors.privilegedCallable(new CheckCCL()).call(); }}; - runWithPermissions(r, + runWithPermissions(r, new RuntimePermission("getClassLoader"), new RuntimePermission("setContextClassLoader")); }