ViewVC Help
View File | Revision Log | Show Annotations | Download File | Root Listing
root/jsr166/jsr166/src/test/tck/BlockingQueueTest.java
Revision: 1.1
Committed: Wed Oct 6 07:49:22 2010 UTC (13 years, 7 months ago) by jsr166
Branch: MAIN
Log Message:
start of a big refactoring, with only one test refactored: testTimedPollWithOffer

File Contents

# Content
1 /*
2 * Written by Doug Lea and Martin Buchholz with assistance from members
3 * of JCP JSR-166 Expert Group and released to the public domain, as
4 * explained at http://creativecommons.org/licenses/publicdomain
5 *
6 * Other contributors include Andrew Wright, Jeffrey Hayes,
7 * Pat Fisher, Mike Judd.
8 */
9
10 import junit.framework.*;
11 import java.util.*;
12 import java.util.concurrent.*;
13 import static java.util.concurrent.TimeUnit.MILLISECONDS;
14
15 /**
16 * Contains tests generally applicable to BlockingQueue implementations.
17 */
18 public abstract class BlockingQueueTest extends JSR166TestCase {
19 /*
20 * This is the start of an attempt to refactor the tests for the
21 * various related implementations of related interfaces without
22 * too much duplicated code. junit does not really support such
23 * testing. Here subclasses of TestCase not only contain tests,
24 * but also configuration information that describes the
25 * implementation class, most importantly how to instantiate
26 * instances.
27 */
28
29 /** Like suite(), but non-static */
30 public Test testSuite() {
31 // TODO: filter the returned tests using the configuration
32 // information provided by the subclass via protected methods.
33 return new TestSuite(this.getClass());
34 }
35
36 /** Returns an empty instance of the implementation class. */
37 protected abstract BlockingQueue emptyCollection();
38
39 /**
40 * timed poll before a delayed offer fails; after offer succeeds;
41 * on interruption throws
42 */
43 public void testTimedPollWithOffer() throws InterruptedException {
44 final BlockingQueue q = emptyCollection();
45 final CheckedBarrier barrier = new CheckedBarrier(2);
46 Thread t = newStartedThread(new CheckedRunnable() {
47 public void realRun() throws InterruptedException {
48 assertNull(q.poll(SHORT_DELAY_MS, MILLISECONDS));
49
50 barrier.await();
51 assertSame(zero, q.poll(MEDIUM_DELAY_MS, MILLISECONDS));
52
53 Thread.currentThread().interrupt();
54 try {
55 q.poll(SHORT_DELAY_MS, MILLISECONDS);
56 shouldThrow();
57 } catch (InterruptedException success) {}
58
59 barrier.await();
60 try {
61 q.poll(MEDIUM_DELAY_MS, MILLISECONDS);
62 shouldThrow();
63 } catch (InterruptedException success) {}
64 }});
65
66 barrier.await();
67 assertTrue(q.offer(zero, SHORT_DELAY_MS, MILLISECONDS));
68 barrier.await();
69 sleep(SHORT_DELAY_MS);
70 t.interrupt();
71 awaitTermination(t, MEDIUM_DELAY_MS);
72 }
73
74 /** For debugging. */
75 public void XXXXtestFails() {
76 fail(emptyCollection().getClass().toString());
77 }
78
79 }