ViewVC Help
View File | Revision Log | Show Annotations | Download File | Root Listing
root/jsr166/jsr166/src/test/tck/SynchronousQueueTest.java
(Generate patch)

Comparing jsr166/src/test/tck/SynchronousQueueTest.java (file contents):
Revision 1.7 by dl, Sat Dec 27 19:26:44 2003 UTC vs.
Revision 1.18 by jsr166, Sun Nov 22 18:57:17 2009 UTC

# Line 2 | Line 2
2   * 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 < * Other contributors include Andrew Wright, Jeffrey Hayes,
6 < * Pat Fisher, Mike Judd.
5 > * Other contributors include Andrew Wright, Jeffrey Hayes,
6 > * Pat Fisher, Mike Judd.
7   */
8  
9   import junit.framework.*;
10   import java.util.*;
11   import java.util.concurrent.*;
12 + import static java.util.concurrent.TimeUnit.MILLISECONDS;
13   import java.io.*;
14  
15   public class SynchronousQueueTest extends JSR166TestCase {
16  
17      public static void main(String[] args) {
18 <        junit.textui.TestRunner.run (suite());  
18 >        junit.textui.TestRunner.run (suite());
19      }
20  
21      public static Test suite() {
22 <        return new TestSuite(SynchronousQueueTest.class);
22 >        return new TestSuite(SynchronousQueueTest.class);
23      }
24  
25      /**
# Line 27 | Line 28 | public class SynchronousQueueTest extend
28      public void testEmptyFull() {
29          SynchronousQueue q = new SynchronousQueue();
30          assertTrue(q.isEmpty());
31 <        assertEquals(0, q.size());
31 >        assertEquals(0, q.size());
32 >        assertEquals(0, q.remainingCapacity());
33 >        assertFalse(q.offer(zero));
34 >    }
35 >
36 >    /**
37 >     * A fair SynchronousQueue is both empty and full
38 >     */
39 >    public void testFairEmptyFull() {
40 >        SynchronousQueue q = new SynchronousQueue(true);
41 >        assertTrue(q.isEmpty());
42 >        assertEquals(0, q.size());
43          assertEquals(0, q.remainingCapacity());
44          assertFalse(q.offer(zero));
45      }
# Line 36 | Line 48 | public class SynchronousQueueTest extend
48       * offer(null) throws NPE
49       */
50      public void testOfferNull() {
51 <        try {
51 >        try {
52              SynchronousQueue q = new SynchronousQueue();
53              q.offer(null);
54              shouldThrow();
55 <        } catch (NullPointerException success) { }  
55 >        } catch (NullPointerException success) {}
56      }
57  
58      /**
59       * add(null) throws NPE
60       */
61      public void testAddNull() {
62 <        try {
62 >        try {
63              SynchronousQueue q = new SynchronousQueue();
64              q.add(null);
65              shouldThrow();
66 <        } catch (NullPointerException success) { }  
66 >        } catch (NullPointerException success) {}
67      }
68  
69      /**
# Line 66 | Line 78 | public class SynchronousQueueTest extend
78       * add throws ISE if no active taker
79       */
80      public void testAdd() {
81 <        try {
81 >        try {
82              SynchronousQueue q = new SynchronousQueue();
83              assertEquals(0, q.remainingCapacity());
84              q.add(one);
85              shouldThrow();
86 <        } catch (IllegalStateException success){
75 <        }  
86 >        } catch (IllegalStateException success) {}
87      }
88  
89      /**
# Line 83 | Line 94 | public class SynchronousQueueTest extend
94              SynchronousQueue q = new SynchronousQueue();
95              q.addAll(null);
96              shouldThrow();
97 <        }
87 <        catch (NullPointerException success) {}
97 >        } catch (NullPointerException success) {}
98      }
99  
100      /**
# Line 95 | Line 105 | public class SynchronousQueueTest extend
105              SynchronousQueue q = new SynchronousQueue();
106              q.addAll(q);
107              shouldThrow();
108 <        }
99 <        catch (IllegalArgumentException success) {}
108 >        } catch (IllegalArgumentException success) {}
109      }
110  
111      /**
# Line 108 | Line 117 | public class SynchronousQueueTest extend
117              Integer[] ints = new Integer[1];
118              q.addAll(Arrays.asList(ints));
119              shouldThrow();
120 <        }
112 <        catch (NullPointerException success) {}
120 >        } catch (NullPointerException success) {}
121      }
122      /**
123       * addAll throws ISE if no active taker
# Line 122 | Line 130 | public class SynchronousQueueTest extend
130                  ints[i] = new Integer(i);
131              q.addAll(Arrays.asList(ints));
132              shouldThrow();
133 <        }
126 <        catch (IllegalStateException success) {}
133 >        } catch (IllegalStateException success) {}
134      }
135  
136      /**
137       * put(null) throws NPE
138       */
139 <    public void testPutNull() {
140 <        try {
139 >    public void testPutNull() throws InterruptedException {
140 >        try {
141              SynchronousQueue q = new SynchronousQueue();
142              q.put(null);
143              shouldThrow();
144 <        }
138 <        catch (NullPointerException success){
139 <        }  
140 <        catch (InterruptedException ie) {
141 <            unexpectedException();
142 <        }
144 >        } catch (NullPointerException success) {}
145       }
146  
147      /**
148       * put blocks interruptibly if no active taker
149       */
150 <    public void testBlockingPut() {
151 <        Thread t = new Thread(new Runnable() {
152 <                public void run() {
153 <                    try {
154 <                        SynchronousQueue q = new SynchronousQueue();
155 <                        q.put(zero);
156 <                        threadShouldThrow();
157 <                    } catch (InterruptedException ie){
158 <                    }  
159 <                }});
160 <        t.start();
159 <        try {
160 <           Thread.sleep(SHORT_DELAY_MS);
161 <           t.interrupt();
162 <           t.join();
163 <        }
164 <        catch (InterruptedException ie) {
165 <            unexpectedException();
166 <        }
150 >    public void testBlockingPut() throws InterruptedException {
151 >        Thread t = new Thread(new CheckedInterruptedRunnable() {
152 >            public void realRun() throws InterruptedException {
153 >                SynchronousQueue q = new SynchronousQueue();
154 >                q.put(zero);
155 >            }});
156 >
157 >        t.start();
158 >        Thread.sleep(SHORT_DELAY_MS);
159 >        t.interrupt();
160 >        t.join();
161      }
162  
163      /**
164 <     * put blocks waiting for take
164 >     * put blocks waiting for take
165       */
166 <    public void testPutWithTake() {
166 >    public void testPutWithTake() throws InterruptedException {
167          final SynchronousQueue q = new SynchronousQueue();
168 <        Thread t = new Thread(new Runnable() {
169 <                public void run() {
170 <                    int added = 0;
171 <                    try {
172 <                        q.put(new Object());
173 <                        ++added;
174 <                        q.put(new Object());
175 <                        ++added;
176 <                        q.put(new Object());
177 <                        ++added;
178 <                        q.put(new Object());
179 <                        ++added;
180 <                        threadShouldThrow();
181 <                    } catch (InterruptedException e){
182 <                        assertTrue(added >= 1);
189 <                    }
168 >        Thread t = new Thread(new CheckedRunnable() {
169 >            public void realRun() throws InterruptedException {
170 >                int added = 0;
171 >                try {
172 >                    q.put(new Object());
173 >                    ++added;
174 >                    q.put(new Object());
175 >                    ++added;
176 >                    q.put(new Object());
177 >                    ++added;
178 >                    q.put(new Object());
179 >                    ++added;
180 >                    threadShouldThrow();
181 >                } catch (InterruptedException success) {
182 >                    assertTrue(added >= 1);
183                  }
184 <            });
185 <        try {
186 <            t.start();
187 <            Thread.sleep(SHORT_DELAY_MS);
188 <            q.take();
189 <            Thread.sleep(SHORT_DELAY_MS);
190 <            t.interrupt();
191 <            t.join();
199 <        } catch (Exception e){
200 <            unexpectedException();
201 <        }
184 >            }});
185 >
186 >        t.start();
187 >        Thread.sleep(SHORT_DELAY_MS);
188 >        q.take();
189 >        Thread.sleep(SHORT_DELAY_MS);
190 >        t.interrupt();
191 >        t.join();
192      }
193  
194      /**
195       * timed offer times out if elements not taken
196       */
197 <    public void testTimedOffer() {
197 >    public void testTimedOffer() throws InterruptedException {
198          final SynchronousQueue q = new SynchronousQueue();
199 <        Thread t = new Thread(new Runnable() {
200 <                public void run() {
201 <                    try {
202 <
203 <                        threadAssertFalse(q.offer(new Object(), SHORT_DELAY_MS, TimeUnit.MILLISECONDS));
204 <                        q.offer(new Object(), LONG_DELAY_MS, TimeUnit.MILLISECONDS);
205 <                        threadShouldThrow();
206 <                    } catch (InterruptedException success){}
207 <                }
208 <            });
219 <        
220 <        try {
221 <            t.start();
222 <            Thread.sleep(SMALL_DELAY_MS);
223 <            t.interrupt();
224 <            t.join();
225 <        } catch (Exception e){
226 <            unexpectedException();
227 <        }
199 >        Thread t = new Thread(new CheckedInterruptedRunnable() {
200 >            public void realRun() throws InterruptedException {
201 >                assertFalse(q.offer(new Object(), SHORT_DELAY_MS, MILLISECONDS));
202 >                q.offer(new Object(), LONG_DELAY_MS, MILLISECONDS);
203 >            }});
204 >
205 >        t.start();
206 >        Thread.sleep(SMALL_DELAY_MS);
207 >        t.interrupt();
208 >        t.join();
209      }
210  
211  
212      /**
213       * take blocks interruptibly when empty
214       */
215 <    public void testTakeFromEmpty() {
215 >    public void testTakeFromEmpty() throws InterruptedException {
216          final SynchronousQueue q = new SynchronousQueue();
217 <        Thread t = new Thread(new Runnable() {
218 <                public void run() {
219 <                    try {
220 <                        q.take();
221 <                        threadShouldThrow();
222 <                    } catch (InterruptedException success){ }                
217 >        Thread t = new Thread(new CheckedInterruptedRunnable() {
218 >            public void realRun() throws InterruptedException {
219 >                q.take();
220 >            }});
221 >
222 >        t.start();
223 >        Thread.sleep(SHORT_DELAY_MS);
224 >        t.interrupt();
225 >        t.join();
226 >    }
227 >
228 >
229 >    /**
230 >     * put blocks interruptibly if no active taker
231 >     */
232 >    public void testFairBlockingPut() throws InterruptedException {
233 >        Thread t = new Thread(new CheckedInterruptedRunnable() {
234 >            public void realRun() throws InterruptedException {
235 >                SynchronousQueue q = new SynchronousQueue(true);
236 >                q.put(zero);
237 >            }});
238 >
239 >        t.start();
240 >        Thread.sleep(SHORT_DELAY_MS);
241 >        t.interrupt();
242 >        t.join();
243 >    }
244 >
245 >    /**
246 >     * put blocks waiting for take
247 >     */
248 >    public void testFairPutWithTake() throws InterruptedException {
249 >        final SynchronousQueue q = new SynchronousQueue(true);
250 >        Thread t = new Thread(new CheckedRunnable() {
251 >            public void realRun() throws InterruptedException {
252 >                int added = 0;
253 >                try {
254 >                    q.put(new Object());
255 >                    ++added;
256 >                    q.put(new Object());
257 >                    ++added;
258 >                    q.put(new Object());
259 >                    ++added;
260 >                    q.put(new Object());
261 >                    ++added;
262 >                    threadShouldThrow();
263 >                } catch (InterruptedException success) {
264 >                    assertTrue(added >= 1);
265                  }
266 <            });
267 <        try {
268 <            t.start();
269 <            Thread.sleep(SHORT_DELAY_MS);
270 <            t.interrupt();
271 <            t.join();
272 <        } catch (Exception e){
273 <            unexpectedException();
274 <        }
266 >            }});
267 >
268 >        t.start();
269 >        Thread.sleep(SHORT_DELAY_MS);
270 >        q.take();
271 >        Thread.sleep(SHORT_DELAY_MS);
272 >        t.interrupt();
273 >        t.join();
274 >    }
275 >
276 >    /**
277 >     * timed offer times out if elements not taken
278 >     */
279 >    public void testFairTimedOffer() throws InterruptedException {
280 >        final SynchronousQueue q = new SynchronousQueue(true);
281 >        Thread t = new Thread(new CheckedInterruptedRunnable() {
282 >            public void realRun() throws InterruptedException {
283 >                threadAssertFalse(q.offer(new Object(), SHORT_DELAY_MS, MILLISECONDS));
284 >                q.offer(new Object(), LONG_DELAY_MS, MILLISECONDS);
285 >            }});
286 >
287 >        t.start();
288 >        Thread.sleep(SMALL_DELAY_MS);
289 >        t.interrupt();
290 >        t.join();
291 >    }
292 >
293 >
294 >    /**
295 >     * take blocks interruptibly when empty
296 >     */
297 >    public void testFairTakeFromEmpty() throws InterruptedException {
298 >        final SynchronousQueue q = new SynchronousQueue(true);
299 >        Thread t = new Thread(new CheckedInterruptedRunnable() {
300 >            public void realRun() throws InterruptedException {
301 >                q.take();
302 >            }});
303 >
304 >        t.start();
305 >        Thread.sleep(SHORT_DELAY_MS);
306 >        t.interrupt();
307 >        t.join();
308      }
309  
310      /**
# Line 256 | Line 312 | public class SynchronousQueueTest extend
312       */
313      public void testPoll() {
314          SynchronousQueue q = new SynchronousQueue();
315 <        assertNull(q.poll());
315 >        assertNull(q.poll());
316      }
317  
318      /**
319       * timed pool with zero timeout times out if no active taker
320       */
321 <    public void testTimedPoll0() {
322 <        try {
323 <            SynchronousQueue q = new SynchronousQueue();
268 <            assertNull(q.poll(0, TimeUnit.MILLISECONDS));
269 <        } catch (InterruptedException e){
270 <            unexpectedException();
271 <        }  
321 >    public void testTimedPoll0() throws InterruptedException {
322 >        SynchronousQueue q = new SynchronousQueue();
323 >        assertNull(q.poll(0, MILLISECONDS));
324      }
325  
326      /**
327       * timed pool with nonzero timeout times out if no active taker
328       */
329 <    public void testTimedPoll() {
330 <        try {
331 <            SynchronousQueue q = new SynchronousQueue();
280 <            assertNull(q.poll(SHORT_DELAY_MS, TimeUnit.MILLISECONDS));
281 <        } catch (InterruptedException e){
282 <            unexpectedException();
283 <        }  
329 >    public void testTimedPoll() throws InterruptedException {
330 >        SynchronousQueue q = new SynchronousQueue();
331 >        assertNull(q.poll(SHORT_DELAY_MS, MILLISECONDS));
332      }
333  
334      /**
335       * Interrupted timed poll throws InterruptedException instead of
336       * returning timeout status
337       */
338 <    public void testInterruptedTimedPoll() {
339 <        Thread t = new Thread(new Runnable() {
340 <                public void run() {
341 <                    try {
342 <                        SynchronousQueue q = new SynchronousQueue();
343 <                        assertNull(q.poll(SHORT_DELAY_MS, TimeUnit.MILLISECONDS));
344 <                    } catch (InterruptedException success){
345 <                    }  
346 <                }});
347 <        t.start();
348 <        try {
301 <           Thread.sleep(SHORT_DELAY_MS);
302 <           t.interrupt();
303 <           t.join();
304 <        }
305 <        catch (InterruptedException ie) {
306 <            unexpectedException();
307 <        }
338 >    public void testInterruptedTimedPoll() throws InterruptedException {
339 >        final SynchronousQueue q = new SynchronousQueue();
340 >        Thread t = new Thread(new CheckedInterruptedRunnable() {
341 >            public void realRun() throws InterruptedException {
342 >                q.poll(SMALL_DELAY_MS, MILLISECONDS);
343 >            }});
344 >
345 >        t.start();
346 >        Thread.sleep(SHORT_DELAY_MS);
347 >        t.interrupt();
348 >        t.join();
349      }
350  
351      /**
352       *  timed poll before a delayed offer fails; after offer succeeds;
353       *  on interruption throws
354       */
355 <    public void testTimedPollWithOffer() {
355 >    public void testTimedPollWithOffer() throws InterruptedException {
356          final SynchronousQueue q = new SynchronousQueue();
357 <        Thread t = new Thread(new Runnable() {
358 <                public void run() {
359 <                    try {
360 <                        threadAssertNull(q.poll(SHORT_DELAY_MS, TimeUnit.MILLISECONDS));
361 <                        q.poll(LONG_DELAY_MS, TimeUnit.MILLISECONDS);
362 <                        q.poll(LONG_DELAY_MS, TimeUnit.MILLISECONDS);
363 <                        threadShouldThrow();
364 <                    } catch (InterruptedException success) { }                
365 <                }
366 <            });
367 <        try {
368 <            t.start();
369 <            Thread.sleep(SMALL_DELAY_MS);
370 <            assertTrue(q.offer(zero, SHORT_DELAY_MS, TimeUnit.MILLISECONDS));
371 <            t.interrupt();
372 <            t.join();
373 <        } catch (Exception e){
374 <            unexpectedException();
375 <        }
376 <    }  
357 >        Thread t = new Thread(new CheckedRunnable() {
358 >            public void realRun() throws InterruptedException {
359 >                assertNull(q.poll(SHORT_DELAY_MS, MILLISECONDS));
360 >                assertSame(zero, q.poll(LONG_DELAY_MS, MILLISECONDS));
361 >                try {
362 >                    q.poll(LONG_DELAY_MS, MILLISECONDS);
363 >                    shouldThrow();
364 >                } catch (InterruptedException success) {}
365 >            }});
366 >
367 >        t.start();
368 >        Thread.sleep(SMALL_DELAY_MS);
369 >        assertTrue(q.offer(zero, SHORT_DELAY_MS, MILLISECONDS));
370 >        t.interrupt();
371 >        t.join();
372 >    }
373 >
374 >    /**
375 >     * Interrupted timed poll throws InterruptedException instead of
376 >     * returning timeout status
377 >     */
378 >    public void testFairInterruptedTimedPoll() throws InterruptedException {
379 >        Thread t = new Thread(new CheckedInterruptedRunnable() {
380 >            public void realRun() throws InterruptedException {
381 >                SynchronousQueue q = new SynchronousQueue(true);
382 >                q.poll(SMALL_DELAY_MS, MILLISECONDS);
383 >            }});
384 >
385 >        t.start();
386 >        Thread.sleep(SHORT_DELAY_MS);
387 >        t.interrupt();
388 >        t.join();
389 >    }
390 >
391 >    /**
392 >     *  timed poll before a delayed offer fails; after offer succeeds;
393 >     *  on interruption throws
394 >     */
395 >    public void testFairTimedPollWithOffer() throws InterruptedException {
396 >        final SynchronousQueue q = new SynchronousQueue(true);
397 >        Thread t = new Thread(new CheckedRunnable() {
398 >            public void realRun() throws InterruptedException {
399 >                assertNull(q.poll(SHORT_DELAY_MS, MILLISECONDS));
400 >                assertSame(zero, q.poll(LONG_DELAY_MS, MILLISECONDS));
401 >                try {
402 >                    q.poll(LONG_DELAY_MS, MILLISECONDS);
403 >                    threadShouldThrow();
404 >                } catch (InterruptedException success) {}
405 >            }});
406 >
407 >        t.start();
408 >        Thread.sleep(SMALL_DELAY_MS);
409 >        assertTrue(q.offer(zero, SHORT_DELAY_MS, MILLISECONDS));
410 >        t.interrupt();
411 >        t.join();
412 >    }
413  
414  
415      /**
# Line 340 | Line 417 | public class SynchronousQueueTest extend
417       */
418      public void testPeek() {
419          SynchronousQueue q = new SynchronousQueue();
420 <        assertNull(q.peek());
420 >        assertNull(q.peek());
421      }
422  
423      /**
# Line 351 | Line 428 | public class SynchronousQueueTest extend
428          try {
429              q.element();
430              shouldThrow();
431 <        }
355 <        catch (NoSuchElementException success) {}
431 >        } catch (NoSuchElementException success) {}
432      }
433  
434      /**
# Line 363 | Line 439 | public class SynchronousQueueTest extend
439          try {
440              q.remove();
441              shouldThrow();
442 <        } catch (NoSuchElementException success){
367 <        }  
442 >        } catch (NoSuchElementException success) {}
443      }
444  
445      /**
# Line 375 | Line 450 | public class SynchronousQueueTest extend
450          assertFalse(q.remove(zero));
451          assertTrue(q.isEmpty());
452      }
453 <        
453 >
454      /**
455       * contains returns false
456       */
# Line 432 | Line 507 | public class SynchronousQueueTest extend
507       */
508      public void testToArray() {
509          SynchronousQueue q = new SynchronousQueue();
510 <        Object[] o = q.toArray();
510 >        Object[] o = q.toArray();
511          assertEquals(o.length, 0);
512      }
513  
# Line 441 | Line 516 | public class SynchronousQueueTest extend
516       */
517      public void testToArray2() {
518          SynchronousQueue q = new SynchronousQueue();
519 <        Integer[] ints = new Integer[1];
519 >        Integer[] ints = new Integer[1];
520          assertNull(ints[0]);
521      }
522 <    
522 >
523      /**
524       * toArray(null) throws NPE
525       */
526      public void testToArray_BadArg() {
527 <        try {
528 <            SynchronousQueue q = new SynchronousQueue();
529 <            Object o[] = q.toArray(null);
530 <            shouldThrow();
531 <        } catch(NullPointerException success){}
527 >        SynchronousQueue q = new SynchronousQueue();
528 >        try {
529 >            Object o[] = q.toArray(null);
530 >            shouldThrow();
531 >        } catch (NullPointerException success) {}
532      }
533  
534  
# Line 462 | Line 537 | public class SynchronousQueueTest extend
537       */
538      public void testIterator() {
539          SynchronousQueue q = new SynchronousQueue();
540 <        Iterator it = q.iterator();
540 >        Iterator it = q.iterator();
541          assertFalse(it.hasNext());
542          try {
543              Object x = it.next();
544              shouldThrow();
545 <        }
471 <        catch (NoSuchElementException success) {}
545 >        } catch (NoSuchElementException success) {}
546      }
547  
548      /**
# Line 476 | Line 550 | public class SynchronousQueueTest extend
550       */
551      public void testIteratorRemove() {
552          SynchronousQueue q = new SynchronousQueue();
553 <        Iterator it = q.iterator();
553 >        Iterator it = q.iterator();
554          try {
555              it.remove();
556              shouldThrow();
557 <        }
484 <        catch (IllegalStateException success) {}
557 >        } catch (IllegalStateException success) {}
558      }
559  
560      /**
# Line 491 | Line 564 | public class SynchronousQueueTest extend
564          SynchronousQueue q = new SynchronousQueue();
565          String s = q.toString();
566          assertNotNull(s);
567 <    }        
567 >    }
568  
569  
570      /**
# Line 502 | Line 575 | public class SynchronousQueueTest extend
575          ExecutorService executor = Executors.newFixedThreadPool(2);
576          final Integer one = new Integer(1);
577  
578 <        executor.execute(new Runnable() {
579 <            public void run() {
578 >        executor.execute(new CheckedRunnable() {
579 >            public void realRun() throws InterruptedException {
580                  threadAssertFalse(q.offer(one));
581 <                try {
582 <                    threadAssertTrue(q.offer(one, MEDIUM_DELAY_MS, TimeUnit.MILLISECONDS));
583 <                    threadAssertEquals(0, q.remainingCapacity());
584 <                }
585 <                catch (InterruptedException e) {
586 <                    threadUnexpectedException();
587 <                }
588 <            }
589 <        });
581 >                threadAssertTrue(q.offer(one, MEDIUM_DELAY_MS, MILLISECONDS));
582 >                threadAssertEquals(0, q.remainingCapacity());
583 >            }});
584 >
585 >        executor.execute(new CheckedRunnable() {
586 >            public void realRun() throws InterruptedException {
587 >                Thread.sleep(SMALL_DELAY_MS);
588 >                threadAssertEquals(one, q.take());
589 >            }});
590  
518        executor.execute(new Runnable() {
519            public void run() {
520                try {
521                    Thread.sleep(SMALL_DELAY_MS);
522                    threadAssertEquals(one, q.take());
523                }
524                catch (InterruptedException e) {
525                    threadUnexpectedException();
526                }
527            }
528        });
529        
591          joinPool(executor);
592  
593      }
# Line 537 | Line 598 | public class SynchronousQueueTest extend
598      public void testPollInExecutor() {
599          final SynchronousQueue q = new SynchronousQueue();
600          ExecutorService executor = Executors.newFixedThreadPool(2);
601 <        executor.execute(new Runnable() {
602 <            public void run() {
601 >        executor.execute(new CheckedRunnable() {
602 >            public void realRun() throws InterruptedException {
603                  threadAssertNull(q.poll());
604 <                try {
605 <                    threadAssertTrue(null != q.poll(MEDIUM_DELAY_MS, TimeUnit.MILLISECONDS));
606 <                    threadAssertTrue(q.isEmpty());
607 <                }
608 <                catch (InterruptedException e) {
609 <                    threadUnexpectedException();
610 <                }
611 <            }
612 <        });
604 >                threadAssertTrue(null != q.poll(MEDIUM_DELAY_MS, MILLISECONDS));
605 >                threadAssertTrue(q.isEmpty());
606 >            }});
607 >
608 >        executor.execute(new CheckedRunnable() {
609 >            public void realRun() throws InterruptedException {
610 >                Thread.sleep(SMALL_DELAY_MS);
611 >                q.put(new Integer(1));
612 >            }});
613  
553        executor.execute(new Runnable() {
554            public void run() {
555                try {
556                    Thread.sleep(SMALL_DELAY_MS);
557                    q.put(new Integer(1));
558                }
559                catch (InterruptedException e) {
560                    threadUnexpectedException();
561                }
562            }
563        });
564        
614          joinPool(executor);
615      }
616  
617      /**
618       * a deserialized serialized queue is usable
619       */
620 <    public void testSerialization() {
620 >    public void testSerialization() throws Exception {
621          SynchronousQueue q = new SynchronousQueue();
622 <        try {
623 <            ByteArrayOutputStream bout = new ByteArrayOutputStream(10000);
624 <            ObjectOutputStream out = new ObjectOutputStream(new BufferedOutputStream(bout));
625 <            out.writeObject(q);
626 <            out.close();
627 <
628 <            ByteArrayInputStream bin = new ByteArrayInputStream(bout.toByteArray());
629 <            ObjectInputStream in = new ObjectInputStream(new BufferedInputStream(bin));
630 <            SynchronousQueue r = (SynchronousQueue)in.readObject();
631 <            assertEquals(q.size(), r.size());
632 <            while (!q.isEmpty())
584 <                assertEquals(q.remove(), r.remove());
585 <        } catch(Exception e){
586 <            unexpectedException();
587 <        }
622 >        ByteArrayOutputStream bout = new ByteArrayOutputStream(10000);
623 >        ObjectOutputStream out = new ObjectOutputStream(new BufferedOutputStream(bout));
624 >        out.writeObject(q);
625 >        out.close();
626 >
627 >        ByteArrayInputStream bin = new ByteArrayInputStream(bout.toByteArray());
628 >        ObjectInputStream in = new ObjectInputStream(new BufferedInputStream(bin));
629 >        SynchronousQueue r = (SynchronousQueue)in.readObject();
630 >        assertEquals(q.size(), r.size());
631 >        while (!q.isEmpty())
632 >            assertEquals(q.remove(), r.remove());
633      }
634  
635      /**
636       * drainTo(null) throws NPE
637 <     */
637 >     */
638      public void testDrainToNull() {
639          SynchronousQueue q = new SynchronousQueue();
640          try {
641              q.drainTo(null);
642              shouldThrow();
643 <        } catch(NullPointerException success) {
599 <        }
643 >        } catch (NullPointerException success) {}
644      }
645  
646      /**
647       * drainTo(this) throws IAE
648 <     */
648 >     */
649      public void testDrainToSelf() {
650          SynchronousQueue q = new SynchronousQueue();
651          try {
652              q.drainTo(q);
653              shouldThrow();
654 <        } catch(IllegalArgumentException success) {
611 <        }
654 >        } catch (IllegalArgumentException success) {}
655      }
656  
657      /**
658       * drainTo(c) of empty queue doesn't transfer elements
659 <     */
659 >     */
660      public void testDrainTo() {
661          SynchronousQueue q = new SynchronousQueue();
662          ArrayList l = new ArrayList();
# Line 624 | Line 667 | public class SynchronousQueueTest extend
667  
668      /**
669       * drainTo empties queue, unblocking a waiting put.
670 <     */
671 <    public void testDrainToWithActivePut() {
670 >     */
671 >    public void testDrainToWithActivePut() throws InterruptedException {
672          final SynchronousQueue q = new SynchronousQueue();
673 <        Thread t = new Thread(new Runnable() {
674 <                public void run() {
675 <                    try {
676 <                        q.put(new Integer(1));
677 <                    } catch (InterruptedException ie){
678 <                        threadUnexpectedException();
679 <                    }
680 <                }
681 <            });
682 <        try {
683 <            t.start();
684 <            ArrayList l = new ArrayList();
685 <            Thread.sleep(SHORT_DELAY_MS);
686 <            q.drainTo(l);
644 <            assertTrue(l.size() <= 1);
645 <            if (l.size() > 0)
646 <                assertEquals(l.get(0), new Integer(1));
647 <            t.join();
648 <            assertTrue(l.size() <= 1);
649 <        } catch(Exception e){
650 <            unexpectedException();
651 <        }
673 >        Thread t = new Thread(new CheckedRunnable() {
674 >            public void realRun() throws InterruptedException {
675 >                q.put(new Integer(1));
676 >            }});
677 >
678 >        t.start();
679 >        ArrayList l = new ArrayList();
680 >        Thread.sleep(SHORT_DELAY_MS);
681 >        q.drainTo(l);
682 >        assertTrue(l.size() <= 1);
683 >        if (l.size() > 0)
684 >            assertEquals(l.get(0), new Integer(1));
685 >        t.join();
686 >        assertTrue(l.size() <= 1);
687      }
688  
689      /**
690       * drainTo(null, n) throws NPE
691 <     */
691 >     */
692      public void testDrainToNullN() {
693          SynchronousQueue q = new SynchronousQueue();
694          try {
695              q.drainTo(null, 0);
696              shouldThrow();
697 <        } catch(NullPointerException success) {
663 <        }
697 >        } catch (NullPointerException success) {}
698      }
699  
700      /**
701       * drainTo(this, n) throws IAE
702 <     */
702 >     */
703      public void testDrainToSelfN() {
704          SynchronousQueue q = new SynchronousQueue();
705          try {
706              q.drainTo(q, 0);
707              shouldThrow();
708 <        } catch(IllegalArgumentException success) {
675 <        }
708 >        } catch (IllegalArgumentException success) {}
709      }
710  
711      /**
712       * drainTo(c, n) empties up to n elements of queue into c
713 <     */
714 <    public void testDrainToN() {
713 >     */
714 >    public void testDrainToN() throws InterruptedException {
715          final SynchronousQueue q = new SynchronousQueue();
716 <        Thread t1 = new Thread(new Runnable() {
717 <                public void run() {
718 <                    try {
719 <                        q.put(one);
720 <                    } catch (InterruptedException ie){
721 <                        threadUnexpectedException();
722 <                    }
723 <                }
724 <            });
692 <        Thread t2 = new Thread(new Runnable() {
693 <                public void run() {
694 <                    try {
695 <                        q.put(two);
696 <                    } catch (InterruptedException ie){
697 <                        threadUnexpectedException();
698 <                    }
699 <                }
700 <            });
716 >        Thread t1 = new Thread(new CheckedRunnable() {
717 >            public void realRun() throws InterruptedException {
718 >                q.put(one);
719 >            }});
720 >
721 >        Thread t2 = new Thread(new CheckedRunnable() {
722 >            public void realRun() throws InterruptedException {
723 >                q.put(two);
724 >            }});
725  
726 <        try {
727 <            t1.start();
728 <            t2.start();
729 <            ArrayList l = new ArrayList();
730 <            Thread.sleep(SHORT_DELAY_MS);
731 <            q.drainTo(l, 1);
732 <            assertTrue(l.size() == 1);
733 <            q.drainTo(l, 1);
734 <            assertTrue(l.size() == 2);
735 <            assertTrue(l.contains(one));
736 <            assertTrue(l.contains(two));
737 <            t1.join();
714 <            t2.join();
715 <        } catch(Exception e){
716 <            unexpectedException();
717 <        }
726 >        t1.start();
727 >        t2.start();
728 >        ArrayList l = new ArrayList();
729 >        Thread.sleep(SHORT_DELAY_MS);
730 >        q.drainTo(l, 1);
731 >        assertTrue(l.size() == 1);
732 >        q.drainTo(l, 1);
733 >        assertTrue(l.size() == 2);
734 >        assertTrue(l.contains(one));
735 >        assertTrue(l.contains(two));
736 >        t1.join();
737 >        t2.join();
738      }
739  
720
740   }

Diff Legend

Removed lines
+ Added lines
< Changed lines
> Changed lines