--- jsr166/src/test/tck/JSR166TestCase.java 2003/12/04 20:54:46 1.9 +++ jsr166/src/test/tck/JSR166TestCase.java 2004/01/20 20:20:56 1.22 @@ -1,8 +1,9 @@ /* - * Written by members of JCP JSR-166 Expert Group and released to the - * public domain. Use, modify, and redistribute this code in any way - * without acknowledgement. Other contributors include Andrew Wright, - * Jeffrey Hayes, Pat Fischer, Mike Judd. + * 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 + * Other contributors include Andrew Wright, Jeffrey Hayes, + * Pat Fisher, Mike Judd. */ import junit.framework.*; @@ -22,14 +23,14 @@ import java.security.*; *
    * *
  1. All assertions in code running in generated threads must use - * the forms {@link threadFail} , {@link threadAssertTrue} {@link - * threadAssertEquals}, or {@link threadAssertNull}, (not + * the forms {@link #threadFail} , {@link #threadAssertTrue} {@link + * #threadAssertEquals}, or {@link #threadAssertNull}, (not * fail, assertTrue, etc.) It is OK (but not * particularly recommended) for other code to use these forms too. * Only the most typically used JUnit assertion methods are defined * this way, but enough to live with.
  2. * - *
  3. If you override {@link setUp} or {@link tearDown}, make sure + *
  4. If you override {@link #setUp} or {@link #tearDown}, make sure * to invoke super.setUp and super.tearDown within * them. These methods are used to clear and check for thread * assertion failures.
  5. @@ -89,7 +90,16 @@ public class JSR166TestCase extends Test * Runs all JSR166 unit tests using junit.textui.TestRunner */ public static void main (String[] args) { - junit.textui.TestRunner.run (suite()); + int iters = 1; + if (args.length > 0) + iters = Integer.parseInt(args[0]); + Test s = suite(); + for (int i = 0; i < iters; ++i) { + junit.textui.TestRunner.run (s); + System.gc(); + System.runFinalization(); + } + System.exit(0); } /** @@ -98,6 +108,9 @@ public class JSR166TestCase extends Test public static Test suite ( ) { TestSuite suite = new TestSuite("JSR166 Unit Tests"); + suite.addTest(new TestSuite(AbstractExecutorServiceTest.class)); + suite.addTest(new TestSuite(AbstractQueueTest.class)); + suite.addTest(new TestSuite(AbstractQueuedSynchronizerTest.class)); suite.addTest(new TestSuite(ArrayBlockingQueueTest.class)); suite.addTest(new TestSuite(AtomicBooleanTest.class)); suite.addTest(new TestSuite(AtomicIntegerArrayTest.class)); @@ -120,13 +133,13 @@ public class JSR166TestCase extends Test suite.addTest(new TestSuite(DelayQueueTest.class)); suite.addTest(new TestSuite(ExchangerTest.class)); suite.addTest(new TestSuite(ExecutorsTest.class)); + suite.addTest(new TestSuite(ExecutorCompletionServiceTest.class)); suite.addTest(new TestSuite(FutureTaskTest.class)); suite.addTest(new TestSuite(LinkedBlockingQueueTest.class)); suite.addTest(new TestSuite(LinkedListTest.class)); suite.addTest(new TestSuite(LockSupportTest.class)); suite.addTest(new TestSuite(PriorityBlockingQueueTest.class)); suite.addTest(new TestSuite(PriorityQueueTest.class)); - suite.addTest(new TestSuite(PrivilegedFutureTaskTest.class)); suite.addTest(new TestSuite(ReentrantLockTest.class)); suite.addTest(new TestSuite(ReentrantReadWriteLockTest.class)); suite.addTest(new TestSuite(ScheduledExecutorTest.class)); @@ -150,10 +163,10 @@ public class JSR166TestCase extends Test /** * Return the shortest timed delay. This could - * be reimplmented to use for example a Property. + * be reimplemented to use for example a Property. */ protected long getShortDelay() { - return 100; + return 50; } @@ -274,6 +287,8 @@ public class JSR166TestCase extends Test try { exec.shutdown(); assertTrue(exec.awaitTermination(LONG_DELAY_MS, TimeUnit.MILLISECONDS)); + } catch(SecurityException ok) { + // Allowed in case test doesn't have privs } catch(InterruptedException ie) { fail("Unexpected exception"); } @@ -352,6 +367,20 @@ public class JSR166TestCase extends Test public Object call() { return Boolean.TRUE; } } + static final String TEST_STRING = "a test string"; + + static class StringTask implements Callable { + public String call() { return TEST_STRING; } + } + + static class NPETask implements Callable { + public String call() { throw new NullPointerException(); } + } + + static class CallableOne implements Callable { + public Integer call() { return one; } + } + class ShortRunnable implements Runnable { public void run() { try { @@ -451,6 +480,16 @@ public class JSR166TestCase extends Test } } + class LongPossiblyInterruptedRunnable implements Runnable { + public void run() { + try { + Thread.sleep(LONG_DELAY_MS); + } + catch(InterruptedException success) { + } + } + } + /** * For use as ThreadFactory in constructors */ @@ -512,6 +551,7 @@ public class JSR166TestCase extends Test } } + /** * For use as RejectedExecutionHandler in constructors */