Parent Directory
|
Revision Log
Revision 1.33 - (view) (download)
| 1 : | dl | 1.1 | /* |
| 2 : | dl | 1.13 | * Written by Doug Lea with assistance from members of JCP JSR-166 |
| 3 : | * Expert Group and released to the public domain, as explained at | ||
| 4 : | * http://creativecommons.org/licenses/publicdomain | ||
| 5 : | jsr166 | 1.27 | * Other contributors include Andrew Wright, Jeffrey Hayes, |
| 6 : | * Pat Fisher, Mike Judd. | ||
| 7 : | dl | 1.1 | */ |
| 8 : | |||
| 9 : | import junit.framework.*; | ||
| 10 : | import java.util.*; | ||
| 11 : | import java.util.concurrent.*; | ||
| 12 : | import java.io.*; | ||
| 13 : | dl | 1.7 | import java.security.*; |
| 14 : | dl | 1.1 | |
| 15 : | /** | ||
| 16 : | dl | 1.5 | * Base class for JSR166 Junit TCK tests. Defines some constants, |
| 17 : | * utility methods and classes, as well as a simple framework for | ||
| 18 : | * helping to make sure that assertions failing in generated threads | ||
| 19 : | * cause the associated test that generated them to itself fail (which | ||
| 20 : | jsr166 | 1.27 | * JUnit does not otherwise arrange). The rules for creating such |
| 21 : | dl | 1.5 | * tests are: |
| 22 : | dl | 1.1 | * |
| 23 : | * <ol> | ||
| 24 : | * | ||
| 25 : | * <li> All assertions in code running in generated threads must use | ||
| 26 : | jsr166 | 1.27 | * the forms {@link #threadFail}, {@link #threadAssertTrue}, {@link |
| 27 : | dl | 1.18 | * #threadAssertEquals}, or {@link #threadAssertNull}, (not |
| 28 : | dl | 1.1 | * <tt>fail</tt>, <tt>assertTrue</tt>, etc.) It is OK (but not |
| 29 : | * particularly recommended) for other code to use these forms too. | ||
| 30 : | * Only the most typically used JUnit assertion methods are defined | ||
| 31 : | * this way, but enough to live with.</li> | ||
| 32 : | * | ||
| 33 : | dl | 1.18 | * <li> If you override {@link #setUp} or {@link #tearDown}, make sure |
| 34 : | dl | 1.1 | * to invoke <tt>super.setUp</tt> and <tt>super.tearDown</tt> within |
| 35 : | * them. These methods are used to clear and check for thread | ||
| 36 : | * assertion failures.</li> | ||
| 37 : | * | ||
| 38 : | dl | 1.6 | * <li>All delays and timeouts must use one of the constants <tt> |
| 39 : | * SHORT_DELAY_MS</tt>, <tt> SMALL_DELAY_MS</tt>, <tt> MEDIUM_DELAY_MS</tt>, | ||
| 40 : | * <tt> LONG_DELAY_MS</tt>. The idea here is that a SHORT is always | ||
| 41 : | dl | 1.5 | * discriminable from zero time, and always allows enough time for the |
| 42 : | * small amounts of computation (creating a thread, calling a few | ||
| 43 : | dl | 1.1 | * methods, etc) needed to reach a timeout point. Similarly, a SMALL |
| 44 : | * is always discriminable as larger than SHORT and smaller than | ||
| 45 : | * MEDIUM. And so on. These constants are set to conservative values, | ||
| 46 : | dl | 1.2 | * but even so, if there is ever any doubt, they can all be increased |
| 47 : | jsr166 | 1.27 | * in one spot to rerun tests on slower platforms.</li> |
| 48 : | dl | 1.1 | * |
| 49 : | * <li> All threads generated must be joined inside each test case | ||
| 50 : | * method (or <tt>fail</tt> to do so) before returning from the | ||
| 51 : | dl | 1.6 | * method. The <tt> joinPool</tt> method can be used to do this when |
| 52 : | dl | 1.1 | * using Executors.</li> |
| 53 : | * | ||
| 54 : | * </ol> | ||
| 55 : | dl | 1.6 | * |
| 56 : | * <p> <b>Other notes</b> | ||
| 57 : | * <ul> | ||
| 58 : | * | ||
| 59 : | * <li> Usually, there is one testcase method per JSR166 method | ||
| 60 : | * covering "normal" operation, and then as many exception-testing | ||
| 61 : | * methods as there are exceptions the method can throw. Sometimes | ||
| 62 : | * there are multiple tests per JSR166 method when the different | ||
| 63 : | * "normal" behaviors differ significantly. And sometimes testcases | ||
| 64 : | * cover multiple methods when they cannot be tested in | ||
| 65 : | * isolation.</li> | ||
| 66 : | jsr166 | 1.27 | * |
| 67 : | dl | 1.6 | * <li> The documentation style for testcases is to provide as javadoc |
| 68 : | * a simple sentence or two describing the property that the testcase | ||
| 69 : | * method purports to test. The javadocs do not say anything about how | ||
| 70 : | * the property is tested. To find out, read the code.</li> | ||
| 71 : | * | ||
| 72 : | * <li> These tests are "conformance tests", and do not attempt to | ||
| 73 : | * test throughput, latency, scalability or other performance factors | ||
| 74 : | * (see the separate "jtreg" tests for a set intended to check these | ||
| 75 : | * for the most central aspects of functionality.) So, most tests use | ||
| 76 : | * the smallest sensible numbers of threads, collection sizes, etc | ||
| 77 : | * needed to check basic conformance.</li> | ||
| 78 : | * | ||
| 79 : | * <li>The test classes currently do not declare inclusion in | ||
| 80 : | * any particular package to simplify things for people integrating | ||
| 81 : | * them in TCK test suites.</li> | ||
| 82 : | * | ||
| 83 : | * <li> As a convenience, the <tt>main</tt> of this class (JSR166TestCase) | ||
| 84 : | * runs all JSR166 unit tests.</li> | ||
| 85 : | * | ||
| 86 : | * </ul> | ||
| 87 : | dl | 1.1 | */ |
| 88 : | public class JSR166TestCase extends TestCase { | ||
| 89 : | dl | 1.6 | /** |
| 90 : | * Runs all JSR166 unit tests using junit.textui.TestRunner | ||
| 91 : | jsr166 | 1.27 | */ |
| 92 : | dl | 1.6 | public static void main (String[] args) { |
| 93 : | dl | 1.16 | int iters = 1; |
| 94 : | jsr166 | 1.27 | if (args.length > 0) |
| 95 : | dl | 1.16 | iters = Integer.parseInt(args[0]); |
| 96 : | Test s = suite(); | ||
| 97 : | dl | 1.22 | for (int i = 0; i < iters; ++i) { |
| 98 : | dl | 1.16 | junit.textui.TestRunner.run (s); |
| 99 : | dl | 1.22 | System.gc(); |
| 100 : | System.runFinalization(); | ||
| 101 : | } | ||
| 102 : | System.exit(0); | ||
| 103 : | dl | 1.6 | } |
| 104 : | |||
| 105 : | /** | ||
| 106 : | * Collects all JSR166 unit tests as one suite | ||
| 107 : | jsr166 | 1.27 | */ |
| 108 : | dl | 1.6 | public static Test suite ( ) { |
| 109 : | TestSuite suite = new TestSuite("JSR166 Unit Tests"); | ||
| 110 : | jsr166 | 1.27 | |
| 111 : | dl | 1.32 | suite.addTest(new TestSuite(ForkJoinPoolTest.class)); |
| 112 : | suite.addTest(new TestSuite(ForkJoinTaskTest.class)); | ||
| 113 : | suite.addTest(new TestSuite(RecursiveActionTest.class)); | ||
| 114 : | suite.addTest(new TestSuite(RecursiveTaskTest.class)); | ||
| 115 : | suite.addTest(new TestSuite(LinkedTransferQueueTest.class)); | ||
| 116 : | suite.addTest(new TestSuite(PhaserTest.class)); | ||
| 117 : | suite.addTest(new TestSuite(ThreadLocalRandomTest.class)); | ||
| 118 : | dl | 1.10 | suite.addTest(new TestSuite(AbstractExecutorServiceTest.class)); |
| 119 : | dl | 1.19 | suite.addTest(new TestSuite(AbstractQueueTest.class)); |
| 120 : | dl | 1.14 | suite.addTest(new TestSuite(AbstractQueuedSynchronizerTest.class)); |
| 121 : | dl | 1.25 | suite.addTest(new TestSuite(AbstractQueuedLongSynchronizerTest.class)); |
| 122 : | dl | 1.6 | suite.addTest(new TestSuite(ArrayBlockingQueueTest.class)); |
| 123 : | dl | 1.23 | suite.addTest(new TestSuite(ArrayDequeTest.class)); |
| 124 : | jsr166 | 1.27 | suite.addTest(new TestSuite(AtomicBooleanTest.class)); |
| 125 : | suite.addTest(new TestSuite(AtomicIntegerArrayTest.class)); | ||
| 126 : | suite.addTest(new TestSuite(AtomicIntegerFieldUpdaterTest.class)); | ||
| 127 : | suite.addTest(new TestSuite(AtomicIntegerTest.class)); | ||
| 128 : | suite.addTest(new TestSuite(AtomicLongArrayTest.class)); | ||
| 129 : | suite.addTest(new TestSuite(AtomicLongFieldUpdaterTest.class)); | ||
| 130 : | suite.addTest(new TestSuite(AtomicLongTest.class)); | ||
| 131 : | suite.addTest(new TestSuite(AtomicMarkableReferenceTest.class)); | ||
| 132 : | suite.addTest(new TestSuite(AtomicReferenceArrayTest.class)); | ||
| 133 : | suite.addTest(new TestSuite(AtomicReferenceFieldUpdaterTest.class)); | ||
| 134 : | suite.addTest(new TestSuite(AtomicReferenceTest.class)); | ||
| 135 : | suite.addTest(new TestSuite(AtomicStampedReferenceTest.class)); | ||
| 136 : | dl | 1.6 | suite.addTest(new TestSuite(ConcurrentHashMapTest.class)); |
| 137 : | suite.addTest(new TestSuite(ConcurrentLinkedQueueTest.class)); | ||
| 138 : | dl | 1.23 | suite.addTest(new TestSuite(ConcurrentSkipListMapTest.class)); |
| 139 : | suite.addTest(new TestSuite(ConcurrentSkipListSubMapTest.class)); | ||
| 140 : | suite.addTest(new TestSuite(ConcurrentSkipListSetTest.class)); | ||
| 141 : | suite.addTest(new TestSuite(ConcurrentSkipListSubSetTest.class)); | ||
| 142 : | dl | 1.6 | suite.addTest(new TestSuite(CopyOnWriteArrayListTest.class)); |
| 143 : | suite.addTest(new TestSuite(CopyOnWriteArraySetTest.class)); | ||
| 144 : | suite.addTest(new TestSuite(CountDownLatchTest.class)); | ||
| 145 : | suite.addTest(new TestSuite(CyclicBarrierTest.class)); | ||
| 146 : | suite.addTest(new TestSuite(DelayQueueTest.class)); | ||
| 147 : | dl | 1.29 | suite.addTest(new TestSuite(EntryTest.class)); |
| 148 : | dl | 1.6 | suite.addTest(new TestSuite(ExchangerTest.class)); |
| 149 : | suite.addTest(new TestSuite(ExecutorsTest.class)); | ||
| 150 : | dl | 1.11 | suite.addTest(new TestSuite(ExecutorCompletionServiceTest.class)); |
| 151 : | dl | 1.6 | suite.addTest(new TestSuite(FutureTaskTest.class)); |
| 152 : | dl | 1.23 | suite.addTest(new TestSuite(LinkedBlockingDequeTest.class)); |
| 153 : | dl | 1.6 | suite.addTest(new TestSuite(LinkedBlockingQueueTest.class)); |
| 154 : | suite.addTest(new TestSuite(LinkedListTest.class)); | ||
| 155 : | suite.addTest(new TestSuite(LockSupportTest.class)); | ||
| 156 : | suite.addTest(new TestSuite(PriorityBlockingQueueTest.class)); | ||
| 157 : | suite.addTest(new TestSuite(PriorityQueueTest.class)); | ||
| 158 : | suite.addTest(new TestSuite(ReentrantLockTest.class)); | ||
| 159 : | suite.addTest(new TestSuite(ReentrantReadWriteLockTest.class)); | ||
| 160 : | suite.addTest(new TestSuite(ScheduledExecutorTest.class)); | ||
| 161 : | dl | 1.28 | suite.addTest(new TestSuite(ScheduledExecutorSubclassTest.class)); |
| 162 : | dl | 1.6 | suite.addTest(new TestSuite(SemaphoreTest.class)); |
| 163 : | suite.addTest(new TestSuite(SynchronousQueueTest.class)); | ||
| 164 : | suite.addTest(new TestSuite(SystemTest.class)); | ||
| 165 : | suite.addTest(new TestSuite(ThreadLocalTest.class)); | ||
| 166 : | suite.addTest(new TestSuite(ThreadPoolExecutorTest.class)); | ||
| 167 : | dl | 1.28 | suite.addTest(new TestSuite(ThreadPoolExecutorSubclassTest.class)); |
| 168 : | dl | 1.6 | suite.addTest(new TestSuite(ThreadTest.class)); |
| 169 : | dl | 1.24 | suite.addTest(new TestSuite(TimeUnitTest.class)); |
| 170 : | dl | 1.23 | suite.addTest(new TestSuite(TreeMapTest.class)); |
| 171 : | suite.addTest(new TestSuite(TreeSetTest.class)); | ||
| 172 : | dl | 1.26 | suite.addTest(new TestSuite(TreeSubMapTest.class)); |
| 173 : | suite.addTest(new TestSuite(TreeSubSetTest.class)); | ||
| 174 : | jsr166 | 1.27 | |
| 175 : | dl | 1.6 | return suite; |
| 176 : | } | ||
| 177 : | |||
| 178 : | dl | 1.1 | |
| 179 : | dl | 1.2 | public static long SHORT_DELAY_MS; |
| 180 : | public static long SMALL_DELAY_MS; | ||
| 181 : | public static long MEDIUM_DELAY_MS; | ||
| 182 : | public static long LONG_DELAY_MS; | ||
| 183 : | |||
| 184 : | |||
| 185 : | /** | ||
| 186 : | jsr166 | 1.27 | * Returns the shortest timed delay. This could |
| 187 : | dl | 1.15 | * be reimplemented to use for example a Property. |
| 188 : | jsr166 | 1.27 | */ |
| 189 : | dl | 1.2 | protected long getShortDelay() { |
| 190 : | dl | 1.21 | return 50; |
| 191 : | dl | 1.2 | } |
| 192 : | |||
| 193 : | |||
| 194 : | /** | ||
| 195 : | jsr166 | 1.27 | * Sets delays as multiples of SHORT_DELAY. |
| 196 : | dl | 1.2 | */ |
| 197 : | protected void setDelays() { | ||
| 198 : | SHORT_DELAY_MS = getShortDelay(); | ||
| 199 : | SMALL_DELAY_MS = SHORT_DELAY_MS * 5; | ||
| 200 : | MEDIUM_DELAY_MS = SHORT_DELAY_MS * 10; | ||
| 201 : | LONG_DELAY_MS = SHORT_DELAY_MS * 50; | ||
| 202 : | } | ||
| 203 : | |||
| 204 : | dl | 1.1 | /** |
| 205 : | * Flag set true if any threadAssert methods fail | ||
| 206 : | */ | ||
| 207 : | dl | 1.5 | volatile boolean threadFailed; |
| 208 : | dl | 1.1 | |
| 209 : | /** | ||
| 210 : | jsr166 | 1.27 | * Initializes test to indicate that no thread assertions have failed |
| 211 : | dl | 1.1 | */ |
| 212 : | jsr166 | 1.27 | public void setUp() { |
| 213 : | dl | 1.2 | setDelays(); |
| 214 : | jsr166 | 1.27 | threadFailed = false; |
| 215 : | dl | 1.1 | } |
| 216 : | |||
| 217 : | /** | ||
| 218 : | jsr166 | 1.27 | * Triggers test case failure if any thread assertions have failed |
| 219 : | dl | 1.1 | */ |
| 220 : | jsr166 | 1.27 | public void tearDown() { |
| 221 : | assertFalse(threadFailed); | ||
| 222 : | dl | 1.1 | } |
| 223 : | |||
| 224 : | dl | 1.5 | /** |
| 225 : | * Fail, also setting status to indicate current testcase should fail | ||
| 226 : | jsr166 | 1.27 | */ |
| 227 : | dl | 1.1 | public void threadFail(String reason) { |
| 228 : | threadFailed = true; | ||
| 229 : | fail(reason); | ||
| 230 : | } | ||
| 231 : | |||
| 232 : | dl | 1.5 | /** |
| 233 : | * If expression not true, set status to indicate current testcase | ||
| 234 : | * should fail | ||
| 235 : | jsr166 | 1.27 | */ |
| 236 : | dl | 1.1 | public void threadAssertTrue(boolean b) { |
| 237 : | if (!b) { | ||
| 238 : | threadFailed = true; | ||
| 239 : | assertTrue(b); | ||
| 240 : | } | ||
| 241 : | } | ||
| 242 : | dl | 1.5 | |
| 243 : | /** | ||
| 244 : | * If expression not false, set status to indicate current testcase | ||
| 245 : | * should fail | ||
| 246 : | jsr166 | 1.27 | */ |
| 247 : | dl | 1.1 | public void threadAssertFalse(boolean b) { |
| 248 : | if (b) { | ||
| 249 : | threadFailed = true; | ||
| 250 : | assertFalse(b); | ||
| 251 : | } | ||
| 252 : | } | ||
| 253 : | dl | 1.5 | |
| 254 : | /** | ||
| 255 : | * If argument not null, set status to indicate current testcase | ||
| 256 : | * should fail | ||
| 257 : | jsr166 | 1.27 | */ |
| 258 : | dl | 1.1 | public void threadAssertNull(Object x) { |
| 259 : | if (x != null) { | ||
| 260 : | threadFailed = true; | ||
| 261 : | assertNull(x); | ||
| 262 : | } | ||
| 263 : | } | ||
| 264 : | dl | 1.5 | |
| 265 : | /** | ||
| 266 : | * If arguments not equal, set status to indicate current testcase | ||
| 267 : | * should fail | ||
| 268 : | jsr166 | 1.27 | */ |
| 269 : | dl | 1.1 | public void threadAssertEquals(long x, long y) { |
| 270 : | if (x != y) { | ||
| 271 : | threadFailed = true; | ||
| 272 : | assertEquals(x, y); | ||
| 273 : | } | ||
| 274 : | } | ||
| 275 : | dl | 1.5 | |
| 276 : | /** | ||
| 277 : | * If arguments not equal, set status to indicate current testcase | ||
| 278 : | * should fail | ||
| 279 : | jsr166 | 1.27 | */ |
| 280 : | dl | 1.1 | public void threadAssertEquals(Object x, Object y) { |
| 281 : | if (x != y && (x == null || !x.equals(y))) { | ||
| 282 : | threadFailed = true; | ||
| 283 : | assertEquals(x, y); | ||
| 284 : | } | ||
| 285 : | } | ||
| 286 : | |||
| 287 : | dl | 1.5 | /** |
| 288 : | * threadFail with message "should throw exception" | ||
| 289 : | jsr166 | 1.33 | */ |
| 290 : | dl | 1.3 | public void threadShouldThrow() { |
| 291 : | dl | 1.31 | try { |
| 292 : | threadFailed = true; | ||
| 293 : | fail("should throw exception"); | ||
| 294 : | } catch (AssertionFailedError e) { | ||
| 295 : | e.printStackTrace(); | ||
| 296 : | throw e; | ||
| 297 : | } | ||
| 298 : | dl | 1.3 | } |
| 299 : | |||
| 300 : | dl | 1.5 | /** |
| 301 : | * threadFail with message "Unexpected exception" | ||
| 302 : | */ | ||
| 303 : | dl | 1.3 | public void threadUnexpectedException() { |
| 304 : | threadFailed = true; | ||
| 305 : | fail("Unexpected exception"); | ||
| 306 : | } | ||
| 307 : | |||
| 308 : | dl | 1.31 | /** |
| 309 : | * threadFail with message "Unexpected exception", with argument | ||
| 310 : | */ | ||
| 311 : | public void threadUnexpectedException(Throwable ex) { | ||
| 312 : | threadFailed = true; | ||
| 313 : | ex.printStackTrace(); | ||
| 314 : | fail("Unexpected exception: " + ex); | ||
| 315 : | } | ||
| 316 : | dl | 1.3 | |
| 317 : | dl | 1.1 | /** |
| 318 : | * Wait out termination of a thread pool or fail doing so | ||
| 319 : | */ | ||
| 320 : | public void joinPool(ExecutorService exec) { | ||
| 321 : | try { | ||
| 322 : | exec.shutdown(); | ||
| 323 : | assertTrue(exec.awaitTermination(LONG_DELAY_MS, TimeUnit.MILLISECONDS)); | ||
| 324 : | jsr166 | 1.33 | } catch (SecurityException ok) { |
| 325 : | dl | 1.22 | // Allowed in case test doesn't have privs |
| 326 : | jsr166 | 1.33 | } catch (InterruptedException ie) { |
| 327 : | dl | 1.3 | fail("Unexpected exception"); |
| 328 : | dl | 1.1 | } |
| 329 : | } | ||
| 330 : | |||
| 331 : | dl | 1.5 | |
| 332 : | /** | ||
| 333 : | * fail with message "should throw exception" | ||
| 334 : | jsr166 | 1.27 | */ |
| 335 : | dl | 1.3 | public void shouldThrow() { |
| 336 : | fail("Should throw exception"); | ||
| 337 : | } | ||
| 338 : | |||
| 339 : | dl | 1.5 | /** |
| 340 : | * fail with message "Unexpected exception" | ||
| 341 : | */ | ||
| 342 : | dl | 1.3 | public void unexpectedException() { |
| 343 : | fail("Unexpected exception"); | ||
| 344 : | } | ||
| 345 : | dl | 1.1 | |
| 346 : | |||
| 347 : | /** | ||
| 348 : | * The number of elements to place in collections, arrays, etc. | ||
| 349 : | */ | ||
| 350 : | dl | 1.5 | static final int SIZE = 20; |
| 351 : | dl | 1.1 | |
| 352 : | // Some convenient Integer constants | ||
| 353 : | |||
| 354 : | dl | 1.5 | static final Integer zero = new Integer(0); |
| 355 : | static final Integer one = new Integer(1); | ||
| 356 : | static final Integer two = new Integer(2); | ||
| 357 : | static final Integer three = new Integer(3); | ||
| 358 : | static final Integer four = new Integer(4); | ||
| 359 : | static final Integer five = new Integer(5); | ||
| 360 : | static final Integer six = new Integer(6); | ||
| 361 : | static final Integer seven = new Integer(7); | ||
| 362 : | static final Integer eight = new Integer(8); | ||
| 363 : | static final Integer nine = new Integer(9); | ||
| 364 : | static final Integer m1 = new Integer(-1); | ||
| 365 : | static final Integer m2 = new Integer(-2); | ||
| 366 : | static final Integer m3 = new Integer(-3); | ||
| 367 : | static final Integer m4 = new Integer(-4); | ||
| 368 : | static final Integer m5 = new Integer(-5); | ||
| 369 : | dl | 1.30 | static final Integer m6 = new Integer(-6); |
| 370 : | dl | 1.5 | static final Integer m10 = new Integer(-10); |
| 371 : | dl | 1.7 | |
| 372 : | |||
| 373 : | /** | ||
| 374 : | * A security policy where new permissions can be dynamically added | ||
| 375 : | * or all cleared. | ||
| 376 : | */ | ||
| 377 : | static class AdjustablePolicy extends java.security.Policy { | ||
| 378 : | Permissions perms = new Permissions(); | ||
| 379 : | AdjustablePolicy() { } | ||
| 380 : | void addPermission(Permission perm) { perms.add(perm); } | ||
| 381 : | void clearPermissions() { perms = new Permissions(); } | ||
| 382 : | public PermissionCollection getPermissions(CodeSource cs) { | ||
| 383 : | return perms; | ||
| 384 : | } | ||
| 385 : | public PermissionCollection getPermissions(ProtectionDomain pd) { | ||
| 386 : | return perms; | ||
| 387 : | } | ||
| 388 : | public boolean implies(ProtectionDomain pd, Permission p) { | ||
| 389 : | return perms.implies(p); | ||
| 390 : | } | ||
| 391 : | public void refresh() {} | ||
| 392 : | } | ||
| 393 : | dl | 1.1 | |
| 394 : | |||
| 395 : | // Some convenient Runnable classes | ||
| 396 : | |||
| 397 : | dl | 1.5 | static class NoOpRunnable implements Runnable { |
| 398 : | dl | 1.1 | public void run() {} |
| 399 : | } | ||
| 400 : | |||
| 401 : | dl | 1.5 | static class NoOpCallable implements Callable { |
| 402 : | dl | 1.1 | public Object call() { return Boolean.TRUE; } |
| 403 : | dl | 1.10 | } |
| 404 : | |||
| 405 : | static final String TEST_STRING = "a test string"; | ||
| 406 : | |||
| 407 : | static class StringTask implements Callable<String> { | ||
| 408 : | public String call() { return TEST_STRING; } | ||
| 409 : | } | ||
| 410 : | |||
| 411 : | static class NPETask implements Callable<String> { | ||
| 412 : | public String call() { throw new NullPointerException(); } | ||
| 413 : | } | ||
| 414 : | |||
| 415 : | static class CallableOne implements Callable<Integer> { | ||
| 416 : | public Integer call() { return one; } | ||
| 417 : | dl | 1.1 | } |
| 418 : | |||
| 419 : | dl | 1.5 | class ShortRunnable implements Runnable { |
| 420 : | dl | 1.1 | public void run() { |
| 421 : | try { | ||
| 422 : | Thread.sleep(SHORT_DELAY_MS); | ||
| 423 : | } | ||
| 424 : | jsr166 | 1.33 | catch (Exception e) { |
| 425 : | dl | 1.31 | threadUnexpectedException(e); |
| 426 : | dl | 1.1 | } |
| 427 : | } | ||
| 428 : | } | ||
| 429 : | |||
| 430 : | dl | 1.5 | class ShortInterruptedRunnable implements Runnable { |
| 431 : | dl | 1.1 | public void run() { |
| 432 : | try { | ||
| 433 : | Thread.sleep(SHORT_DELAY_MS); | ||
| 434 : | dl | 1.3 | threadShouldThrow(); |
| 435 : | dl | 1.1 | } |
| 436 : | jsr166 | 1.33 | catch (InterruptedException success) { |
| 437 : | dl | 1.1 | } |
| 438 : | } | ||
| 439 : | } | ||
| 440 : | |||
| 441 : | dl | 1.5 | class SmallRunnable implements Runnable { |
| 442 : | dl | 1.1 | public void run() { |
| 443 : | try { | ||
| 444 : | Thread.sleep(SMALL_DELAY_MS); | ||
| 445 : | } | ||
| 446 : | jsr166 | 1.33 | catch (Exception e) { |
| 447 : | dl | 1.31 | threadUnexpectedException(e); |
| 448 : | dl | 1.1 | } |
| 449 : | } | ||
| 450 : | } | ||
| 451 : | |||
| 452 : | dl | 1.6 | class SmallPossiblyInterruptedRunnable implements Runnable { |
| 453 : | public void run() { | ||
| 454 : | try { | ||
| 455 : | Thread.sleep(SMALL_DELAY_MS); | ||
| 456 : | } | ||
| 457 : | jsr166 | 1.33 | catch (Exception e) { |
| 458 : | dl | 1.6 | } |
| 459 : | } | ||
| 460 : | } | ||
| 461 : | |||
| 462 : | dl | 1.5 | class SmallCallable implements Callable { |
| 463 : | dl | 1.1 | public Object call() { |
| 464 : | try { | ||
| 465 : | Thread.sleep(SMALL_DELAY_MS); | ||
| 466 : | } | ||
| 467 : | jsr166 | 1.33 | catch (Exception e) { |
| 468 : | dl | 1.31 | threadUnexpectedException(e); |
| 469 : | dl | 1.1 | } |
| 470 : | return Boolean.TRUE; | ||
| 471 : | } | ||
| 472 : | } | ||
| 473 : | |||
| 474 : | dl | 1.5 | class SmallInterruptedRunnable implements Runnable { |
| 475 : | dl | 1.1 | public void run() { |
| 476 : | try { | ||
| 477 : | Thread.sleep(SMALL_DELAY_MS); | ||
| 478 : | dl | 1.3 | threadShouldThrow(); |
| 479 : | dl | 1.1 | } |
| 480 : | jsr166 | 1.33 | catch (InterruptedException success) { |
| 481 : | dl | 1.1 | } |
| 482 : | } | ||
| 483 : | } | ||
| 484 : | |||
| 485 : | |||
| 486 : | dl | 1.5 | class MediumRunnable implements Runnable { |
| 487 : | dl | 1.1 | public void run() { |
| 488 : | try { | ||
| 489 : | Thread.sleep(MEDIUM_DELAY_MS); | ||
| 490 : | } | ||
| 491 : | jsr166 | 1.33 | catch (Exception e) { |
| 492 : | dl | 1.31 | threadUnexpectedException(e); |
| 493 : | dl | 1.1 | } |
| 494 : | } | ||
| 495 : | } | ||
| 496 : | |||
| 497 : | dl | 1.5 | class MediumInterruptedRunnable implements Runnable { |
| 498 : | dl | 1.1 | public void run() { |
| 499 : | try { | ||
| 500 : | Thread.sleep(MEDIUM_DELAY_MS); | ||
| 501 : | dl | 1.3 | threadShouldThrow(); |
| 502 : | dl | 1.1 | } |
| 503 : | jsr166 | 1.33 | catch (InterruptedException success) { |
| 504 : | dl | 1.1 | } |
| 505 : | } | ||
| 506 : | } | ||
| 507 : | |||
| 508 : | dl | 1.5 | class MediumPossiblyInterruptedRunnable implements Runnable { |
| 509 : | dl | 1.1 | public void run() { |
| 510 : | try { | ||
| 511 : | Thread.sleep(MEDIUM_DELAY_MS); | ||
| 512 : | } | ||
| 513 : | jsr166 | 1.33 | catch (InterruptedException success) { |
| 514 : | dl | 1.1 | } |
| 515 : | } | ||
| 516 : | } | ||
| 517 : | dl | 1.5 | |
| 518 : | dl | 1.12 | class LongPossiblyInterruptedRunnable implements Runnable { |
| 519 : | public void run() { | ||
| 520 : | try { | ||
| 521 : | Thread.sleep(LONG_DELAY_MS); | ||
| 522 : | } | ||
| 523 : | jsr166 | 1.33 | catch (InterruptedException success) { |
| 524 : | dl | 1.12 | } |
| 525 : | } | ||
| 526 : | } | ||
| 527 : | |||
| 528 : | dl | 1.5 | /** |
| 529 : | * For use as ThreadFactory in constructors | ||
| 530 : | */ | ||
| 531 : | jsr166 | 1.33 | static class SimpleThreadFactory implements ThreadFactory { |
| 532 : | public Thread newThread(Runnable r) { | ||
| 533 : | dl | 1.5 | return new Thread(r); |
| 534 : | jsr166 | 1.27 | } |
| 535 : | dl | 1.5 | } |
| 536 : | |||
| 537 : | dl | 1.6 | static class TrackedShortRunnable implements Runnable { |
| 538 : | dl | 1.5 | volatile boolean done = false; |
| 539 : | public void run() { | ||
| 540 : | try { | ||
| 541 : | Thread.sleep(SMALL_DELAY_MS); | ||
| 542 : | done = true; | ||
| 543 : | jsr166 | 1.33 | } catch (Exception e) { |
| 544 : | dl | 1.5 | } |
| 545 : | dl | 1.6 | } |
| 546 : | } | ||
| 547 : | |||
| 548 : | static class TrackedMediumRunnable implements Runnable { | ||
| 549 : | volatile boolean done = false; | ||
| 550 : | public void run() { | ||
| 551 : | try { | ||
| 552 : | Thread.sleep(MEDIUM_DELAY_MS); | ||
| 553 : | done = true; | ||
| 554 : | jsr166 | 1.33 | } catch (Exception e) { |
| 555 : | dl | 1.6 | } |
| 556 : | } | ||
| 557 : | } | ||
| 558 : | |||
| 559 : | static class TrackedLongRunnable implements Runnable { | ||
| 560 : | volatile boolean done = false; | ||
| 561 : | public void run() { | ||
| 562 : | try { | ||
| 563 : | Thread.sleep(LONG_DELAY_MS); | ||
| 564 : | done = true; | ||
| 565 : | jsr166 | 1.33 | } catch (Exception e) { |
| 566 : | dl | 1.6 | } |
| 567 : | } | ||
| 568 : | } | ||
| 569 : | |||
| 570 : | static class TrackedNoOpRunnable implements Runnable { | ||
| 571 : | volatile boolean done = false; | ||
| 572 : | public void run() { | ||
| 573 : | done = true; | ||
| 574 : | dl | 1.5 | } |
| 575 : | } | ||
| 576 : | |||
| 577 : | static class TrackedCallable implements Callable { | ||
| 578 : | volatile boolean done = false; | ||
| 579 : | public Object call() { | ||
| 580 : | try { | ||
| 581 : | Thread.sleep(SMALL_DELAY_MS); | ||
| 582 : | done = true; | ||
| 583 : | jsr166 | 1.33 | } catch (Exception e) { |
| 584 : | dl | 1.5 | } |
| 585 : | return Boolean.TRUE; | ||
| 586 : | } | ||
| 587 : | } | ||
| 588 : | dl | 1.14 | |
| 589 : | dl | 1.5 | |
| 590 : | /** | ||
| 591 : | * For use as RejectedExecutionHandler in constructors | ||
| 592 : | */ | ||
| 593 : | jsr166 | 1.33 | static class NoOpREHandler implements RejectedExecutionHandler { |
| 594 : | jsr166 | 1.27 | public void rejectedExecution(Runnable r, ThreadPoolExecutor executor){} |
| 595 : | dl | 1.5 | } |
| 596 : | jsr166 | 1.27 | |
| 597 : | |||
| 598 : | dl | 1.1 | } |
| Doug Lea | ViewVC Help |
| Powered by ViewVC 1.0.8 |