--- jsr166/src/test/tck/JSR166TestCase.java 2003/10/05 23:00:40 1.6 +++ jsr166/src/test/tck/JSR166TestCase.java 2004/01/09 15:39:10 1.18 @@ -1,15 +1,16 @@ /* - * 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.*; import java.util.*; import java.util.concurrent.*; import java.io.*; - +import java.security.*; /** * Base class for JSR166 Junit TCK tests. Defines some constants, @@ -22,14 +23,14 @@ import java.io.*; *
    * *
  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,12 @@ 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); } /** @@ -98,6 +104,8 @@ 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(AbstractQueuedSynchronizerTest.class)); suite.addTest(new TestSuite(ArrayBlockingQueueTest.class)); suite.addTest(new TestSuite(AtomicBooleanTest.class)); suite.addTest(new TestSuite(AtomicIntegerArrayTest.class)); @@ -111,7 +119,6 @@ public class JSR166TestCase extends Test suite.addTest(new TestSuite(AtomicReferenceFieldUpdaterTest.class)); suite.addTest(new TestSuite(AtomicReferenceTest.class)); suite.addTest(new TestSuite(AtomicStampedReferenceTest.class)); - suite.addTest(new TestSuite(CancellableTaskTest.class)); suite.addTest(new TestSuite(ConcurrentHashMapTest.class)); suite.addTest(new TestSuite(ConcurrentLinkedQueueTest.class)); suite.addTest(new TestSuite(CopyOnWriteArrayListTest.class)); @@ -121,7 +128,7 @@ 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(FairSemaphoreTest.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)); @@ -151,10 +158,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 10; } @@ -321,6 +328,28 @@ public class JSR166TestCase extends Test static final Integer m10 = new Integer(-10); + /** + * A security policy where new permissions can be dynamically added + * or all cleared. + */ + static class AdjustablePolicy extends java.security.Policy { + Permissions perms = new Permissions(); + AdjustablePolicy() { } + void addPermission(Permission perm) { perms.add(perm); } + void clearPermissions() { perms = new Permissions(); } + public PermissionCollection getPermissions(CodeSource cs) { + return perms; + } + public PermissionCollection getPermissions(ProtectionDomain pd) { + return perms; + } + public boolean implies(ProtectionDomain pd, Permission p) { + return perms.implies(p); + } + public void refresh() {} + } + + // Some convenient Runnable classes static class NoOpRunnable implements Runnable { @@ -331,6 +360,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 { @@ -430,6 +473,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 */ @@ -491,6 +544,7 @@ public class JSR166TestCase extends Test } } + /** * For use as RejectedExecutionHandler in constructors */