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

Comparing jsr166/src/test/tck/DelayQueueTest.java (file contents):
Revision 1.12 by dl, Fri Jun 10 18:13:27 2005 UTC vs.
Revision 1.27 by jsr166, Tue Dec 1 06:03:49 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 static java.util.concurrent.TimeUnit.MILLISECONDS;
12   import java.util.concurrent.*;
13  
14   public class DelayQueueTest extends JSR166TestCase {
15      public static void main(String[] args) {
16 <        junit.textui.TestRunner.run (suite());  
16 >        junit.textui.TestRunner.run (suite());
17      }
18  
19      public static Test suite() {
20 <        return new TestSuite(DelayQueueTest.class);
20 >        return new TestSuite(DelayQueueTest.class);
21      }
22  
23      private static final int NOCAP = Integer.MAX_VALUE;
# Line 25 | Line 26 | public class DelayQueueTest extends JSR1
26       * A delayed implementation for testing.
27       * Most  tests use Pseudodelays, where delays are all elapsed
28       * (so, no blocking solely for delays) but are still ordered
29 <     */
30 <    static class PDelay implements Delayed {
29 >     */
30 >    static class PDelay implements Delayed {
31          int pseudodelay;
32          PDelay(int i) { pseudodelay = Integer.MIN_VALUE + i; }
33          public int compareTo(PDelay y) {
# Line 69 | Line 70 | public class DelayQueueTest extends JSR1
70      /**
71       * Delayed implementation that actually delays
72       */
73 <    static class NanoDelay implements Delayed {
73 >    static class NanoDelay implements Delayed {
74          long trigger;
75 <        NanoDelay(long i) {
75 >        NanoDelay(long i) {
76              trigger = System.nanoTime() + i;
77          }
78          public int compareTo(NanoDelay y) {
# Line 119 | Line 120 | public class DelayQueueTest extends JSR1
120      private DelayQueue populatedQueue(int n) {
121          DelayQueue q = new DelayQueue();
122          assertTrue(q.isEmpty());
123 <        for(int i = n-1; i >= 0; i-=2)
124 <            assertTrue(q.offer(new PDelay(i)));
125 <        for(int i = (n & 1); i < n; i+=2)
126 <            assertTrue(q.offer(new PDelay(i)));
123 >        for (int i = n-1; i >= 0; i-=2)
124 >            assertTrue(q.offer(new PDelay(i)));
125 >        for (int i = (n & 1); i < n; i+=2)
126 >            assertTrue(q.offer(new PDelay(i)));
127          assertFalse(q.isEmpty());
128          assertEquals(NOCAP, q.remainingCapacity());
129 <        assertEquals(n, q.size());
129 >        assertEquals(n, q.size());
130          return q;
131      }
132 <
132 >
133      /**
134       * A new queue has unbounded capacity
135       */
# Line 143 | Line 144 | public class DelayQueueTest extends JSR1
144          try {
145              DelayQueue q = new DelayQueue(null);
146              shouldThrow();
147 <        }
147 <        catch (NullPointerException success) {}
147 >        } catch (NullPointerException success) {}
148      }
149  
150      /**
# Line 155 | Line 155 | public class DelayQueueTest extends JSR1
155              PDelay[] ints = new PDelay[SIZE];
156              DelayQueue q = new DelayQueue(Arrays.asList(ints));
157              shouldThrow();
158 <        }
159 <        catch (NullPointerException success) {}
158 >        } catch (NullPointerException success) {}
159      }
160  
161      /**
# Line 169 | Line 168 | public class DelayQueueTest extends JSR1
168                  ints[i] = new PDelay(i);
169              DelayQueue q = new DelayQueue(Arrays.asList(ints));
170              shouldThrow();
171 <        }
173 <        catch (NullPointerException success) {}
171 >        } catch (NullPointerException success) {}
172      }
173  
174      /**
175       * Queue contains all elements of collection used to initialize
176       */
177      public void testConstructor6() {
178 <        try {
179 <            PDelay[] ints = new PDelay[SIZE];
180 <            for (int i = 0; i < SIZE; ++i)
181 <                ints[i] = new PDelay(i);
182 <            DelayQueue q = new DelayQueue(Arrays.asList(ints));
183 <            for (int i = 0; i < SIZE; ++i)
186 <                assertEquals(ints[i], q.poll());
187 <        }
188 <        finally {}
178 >        PDelay[] ints = new PDelay[SIZE];
179 >        for (int i = 0; i < SIZE; ++i)
180 >            ints[i] = new PDelay(i);
181 >        DelayQueue q = new DelayQueue(Arrays.asList(ints));
182 >        for (int i = 0; i < SIZE; ++i)
183 >            assertEquals(ints[i], q.poll());
184      }
185  
186      /**
# Line 225 | Line 220 | public class DelayQueueTest extends JSR1
220       * offer(null) throws NPE
221       */
222      public void testOfferNull() {
223 <        try {
223 >        try {
224              DelayQueue q = new DelayQueue();
225              q.offer(null);
226              shouldThrow();
227 <        } catch (NullPointerException success) { }  
227 >        } catch (NullPointerException success) {}
228      }
229  
230      /**
231       * add(null) throws NPE
232       */
233      public void testAddNull() {
234 <        try {
234 >        try {
235              DelayQueue q = new DelayQueue();
236              q.add(null);
237              shouldThrow();
238 <        } catch (NullPointerException success) { }  
238 >        } catch (NullPointerException success) {}
239      }
240  
241      /**
# Line 271 | Line 266 | public class DelayQueueTest extends JSR1
266              DelayQueue q = new DelayQueue();
267              q.addAll(null);
268              shouldThrow();
269 <        }
275 <        catch (NullPointerException success) {}
269 >        } catch (NullPointerException success) {}
270      }
271  
272  
# Line 284 | Line 278 | public class DelayQueueTest extends JSR1
278              DelayQueue q = populatedQueue(SIZE);
279              q.addAll(q);
280              shouldThrow();
281 <        }
288 <        catch (IllegalArgumentException success) {}
281 >        } catch (IllegalArgumentException success) {}
282      }
283  
284      /**
# Line 297 | Line 290 | public class DelayQueueTest extends JSR1
290              PDelay[] ints = new PDelay[SIZE];
291              q.addAll(Arrays.asList(ints));
292              shouldThrow();
293 <        }
301 <        catch (NullPointerException success) {}
293 >        } catch (NullPointerException success) {}
294      }
295      /**
296       * addAll of a collection with any null elements throws NPE after
# Line 312 | Line 304 | public class DelayQueueTest extends JSR1
304                  ints[i] = new PDelay(i);
305              q.addAll(Arrays.asList(ints));
306              shouldThrow();
307 <        }
316 <        catch (NullPointerException success) {}
307 >        } catch (NullPointerException success) {}
308      }
309  
310      /**
311       * Queue contains all elements of successful addAll
312       */
313      public void testAddAll5() {
314 <        try {
315 <            PDelay[] empty = new PDelay[0];
316 <            PDelay[] ints = new PDelay[SIZE];
317 <            for (int i = SIZE-1; i >= 0; --i)
318 <                ints[i] = new PDelay(i);
319 <            DelayQueue q = new DelayQueue();
320 <            assertFalse(q.addAll(Arrays.asList(empty)));
321 <            assertTrue(q.addAll(Arrays.asList(ints)));
322 <            for (int i = 0; i < SIZE; ++i)
332 <                assertEquals(ints[i], q.poll());
333 <        }
334 <        finally {}
314 >        PDelay[] empty = new PDelay[0];
315 >        PDelay[] ints = new PDelay[SIZE];
316 >        for (int i = SIZE-1; i >= 0; --i)
317 >            ints[i] = new PDelay(i);
318 >        DelayQueue q = new DelayQueue();
319 >        assertFalse(q.addAll(Arrays.asList(empty)));
320 >        assertTrue(q.addAll(Arrays.asList(ints)));
321 >        for (int i = 0; i < SIZE; ++i)
322 >            assertEquals(ints[i], q.poll());
323      }
324  
325      /**
326       * put(null) throws NPE
327       */
328       public void testPutNull() {
329 <        try {
329 >        try {
330              DelayQueue q = new DelayQueue();
331              q.put(null);
332              shouldThrow();
333 <        }
346 <        catch (NullPointerException success){
347 <        }  
333 >        } catch (NullPointerException success) {}
334       }
335  
336      /**
337       * all elements successfully put are contained
338       */
339       public void testPut() {
340 <         try {
341 <             DelayQueue q = new DelayQueue();
342 <             for (int i = 0; i < SIZE; ++i) {
343 <                 PDelay I = new PDelay(i);
344 <                 q.put(I);
359 <                 assertTrue(q.contains(I));
360 <             }
361 <             assertEquals(SIZE, q.size());
340 >         DelayQueue q = new DelayQueue();
341 >         for (int i = 0; i < SIZE; ++i) {
342 >             PDelay I = new PDelay(i);
343 >             q.put(I);
344 >             assertTrue(q.contains(I));
345           }
346 <         finally {
364 <        }
346 >         assertEquals(SIZE, q.size());
347      }
348  
349      /**
350       * put doesn't block waiting for take
351       */
352 <    public void testPutWithTake() {
352 >    public void testPutWithTake() throws InterruptedException {
353          final DelayQueue q = new DelayQueue();
354 <        Thread t = new Thread(new Runnable() {
355 <                public void run() {
356 <                    int added = 0;
357 <                    try {
358 <                        q.put(new PDelay(0));
359 <                        ++added;
360 <                        q.put(new PDelay(0));
361 <                        ++added;
362 <                        q.put(new PDelay(0));
363 <                        ++added;
364 <                        q.put(new PDelay(0));
365 <                        ++added;
366 <                        threadAssertTrue(added == 4);
385 <                    } finally {
386 <                    }
387 <                }
388 <            });
389 <        try {
390 <            t.start();
391 <            Thread.sleep(SHORT_DELAY_MS);
392 <            q.take();
393 <            t.interrupt();
394 <            t.join();
395 <        } catch (Exception e){
396 <            unexpectedException();
397 <        }
354 >        Thread t = new Thread(new CheckedRunnable() {
355 >            public void realRun() {
356 >                q.put(new PDelay(0));
357 >                q.put(new PDelay(0));
358 >                q.put(new PDelay(0));
359 >                q.put(new PDelay(0));
360 >            }});
361 >
362 >        t.start();
363 >        Thread.sleep(SHORT_DELAY_MS);
364 >        q.take();
365 >        t.interrupt();
366 >        t.join();
367      }
368  
369      /**
370       * timed offer does not time out
371       */
372 <    public void testTimedOffer() {
372 >    public void testTimedOffer() throws InterruptedException {
373          final DelayQueue q = new DelayQueue();
374 <        Thread t = new Thread(new Runnable() {
375 <                public void run() {
376 <                    try {
377 <                        q.put(new PDelay(0));
378 <                        q.put(new PDelay(0));
379 <                        threadAssertTrue(q.offer(new PDelay(0), SHORT_DELAY_MS, TimeUnit.MILLISECONDS));
380 <                        threadAssertTrue(q.offer(new PDelay(0), LONG_DELAY_MS, TimeUnit.MILLISECONDS));
381 <                    } finally { }
382 <                }
383 <            });
384 <        
385 <        try {
417 <            t.start();
418 <            Thread.sleep(SMALL_DELAY_MS);
419 <            t.interrupt();
420 <            t.join();
421 <        } catch (Exception e){
422 <            unexpectedException();
423 <        }
374 >        Thread t = new Thread(new CheckedRunnable() {
375 >            public void realRun() throws InterruptedException {
376 >                q.put(new PDelay(0));
377 >                q.put(new PDelay(0));
378 >                assertTrue(q.offer(new PDelay(0), SHORT_DELAY_MS, MILLISECONDS));
379 >                assertTrue(q.offer(new PDelay(0), LONG_DELAY_MS, MILLISECONDS));
380 >            }});
381 >
382 >        t.start();
383 >        Thread.sleep(SMALL_DELAY_MS);
384 >        t.interrupt();
385 >        t.join();
386      }
387  
388      /**
389       * take retrieves elements in priority order
390       */
391 <    public void testTake() {
392 <        try {
393 <            DelayQueue q = populatedQueue(SIZE);
394 <            for (int i = 0; i < SIZE; ++i) {
395 <                assertEquals(new PDelay(i), ((PDelay)q.take()));
434 <            }
435 <        } catch (InterruptedException e){
436 <            unexpectedException();
437 <        }  
391 >    public void testTake() throws InterruptedException {
392 >        DelayQueue q = populatedQueue(SIZE);
393 >        for (int i = 0; i < SIZE; ++i) {
394 >            assertEquals(new PDelay(i), ((PDelay)q.take()));
395 >        }
396      }
397  
398      /**
399       * take blocks interruptibly when empty
400       */
401 <    public void testTakeFromEmpty() {
401 >    public void testTakeFromEmpty() throws InterruptedException {
402          final DelayQueue q = new DelayQueue();
403 <        Thread t = new Thread(new Runnable() {
404 <                public void run() {
405 <                    try {
406 <                        q.take();
407 <                        threadShouldThrow();
408 <                    } catch (InterruptedException success){ }                
409 <                }
410 <            });
411 <        try {
454 <            t.start();
455 <            Thread.sleep(SHORT_DELAY_MS);
456 <            t.interrupt();
457 <            t.join();
458 <        } catch (Exception e){
459 <            unexpectedException();
460 <        }
403 >        Thread t = new ThreadShouldThrow(InterruptedException.class) {
404 >            public void realRun() throws InterruptedException {
405 >                q.take();
406 >            }};
407 >
408 >        t.start();
409 >        Thread.sleep(SHORT_DELAY_MS);
410 >        t.interrupt();
411 >        t.join();
412      }
413  
414      /**
415       * Take removes existing elements until empty, then blocks interruptibly
416       */
417 <    public void testBlockingTake() {
418 <        Thread t = new Thread(new Runnable() {
419 <                public void run() {
420 <                    try {
421 <                        DelayQueue q = populatedQueue(SIZE);
422 <                        for (int i = 0; i < SIZE; ++i) {
423 <                            threadAssertEquals(new PDelay(i), ((PDelay)q.take()));
424 <                        }
425 <                        q.take();
426 <                        threadShouldThrow();
427 <                    } catch (InterruptedException success){
428 <                    }  
429 <                }});
417 >    public void testBlockingTake() throws InterruptedException {
418 >        final DelayQueue q = populatedQueue(SIZE);
419 >        Thread t = new Thread(new CheckedRunnable() {
420 >            public void realRun() throws InterruptedException {
421 >                for (int i = 0; i < SIZE; ++i) {
422 >                    assertEquals(new PDelay(i), ((PDelay)q.take()));
423 >                }
424 >                try {
425 >                    q.take();
426 >                    shouldThrow();
427 >                } catch (InterruptedException success) {}
428 >            }});
429 >
430          t.start();
431 <        try {
432 <           Thread.sleep(SHORT_DELAY_MS);
433 <           t.interrupt();
483 <           t.join();
484 <        }
485 <        catch (InterruptedException ie) {
486 <            unexpectedException();
487 <        }
431 >        Thread.sleep(SHORT_DELAY_MS);
432 >        t.interrupt();
433 >        t.join();
434      }
435  
436  
# Line 496 | Line 442 | public class DelayQueueTest extends JSR1
442          for (int i = 0; i < SIZE; ++i) {
443              assertEquals(new PDelay(i), ((PDelay)q.poll()));
444          }
445 <        assertNull(q.poll());
445 >        assertNull(q.poll());
446      }
447  
448      /**
449       * timed pool with zero timeout succeeds when non-empty, else times out
450       */
451 <    public void testTimedPoll0() {
452 <        try {
453 <            DelayQueue q = populatedQueue(SIZE);
454 <            for (int i = 0; i < SIZE; ++i) {
455 <                assertEquals(new PDelay(i), ((PDelay)q.poll(0, TimeUnit.MILLISECONDS)));
456 <            }
511 <            assertNull(q.poll(0, TimeUnit.MILLISECONDS));
512 <        } catch (InterruptedException e){
513 <            unexpectedException();
514 <        }  
451 >    public void testTimedPoll0() throws InterruptedException {
452 >        DelayQueue q = populatedQueue(SIZE);
453 >        for (int i = 0; i < SIZE; ++i) {
454 >            assertEquals(new PDelay(i), ((PDelay)q.poll(0, MILLISECONDS)));
455 >        }
456 >        assertNull(q.poll(0, MILLISECONDS));
457      }
458  
459      /**
460       * timed pool with nonzero timeout succeeds when non-empty, else times out
461       */
462 <    public void testTimedPoll() {
463 <        try {
464 <            DelayQueue q = populatedQueue(SIZE);
465 <            for (int i = 0; i < SIZE; ++i) {
466 <                assertEquals(new PDelay(i), ((PDelay)q.poll(SHORT_DELAY_MS, TimeUnit.MILLISECONDS)));
467 <            }
526 <            assertNull(q.poll(SHORT_DELAY_MS, TimeUnit.MILLISECONDS));
527 <        } catch (InterruptedException e){
528 <            unexpectedException();
529 <        }  
462 >    public void testTimedPoll() throws InterruptedException {
463 >        DelayQueue q = populatedQueue(SIZE);
464 >        for (int i = 0; i < SIZE; ++i) {
465 >            assertEquals(new PDelay(i), ((PDelay)q.poll(SHORT_DELAY_MS, MILLISECONDS)));
466 >        }
467 >        assertNull(q.poll(SHORT_DELAY_MS, MILLISECONDS));
468      }
469  
470      /**
471       * Interrupted timed poll throws InterruptedException instead of
472       * returning timeout status
473       */
474 <    public void testInterruptedTimedPoll() {
475 <        Thread t = new Thread(new Runnable() {
476 <                public void run() {
477 <                    try {
478 <                        DelayQueue q = populatedQueue(SIZE);
479 <                        for (int i = 0; i < SIZE; ++i) {
480 <                            threadAssertEquals(new PDelay(i), ((PDelay)q.poll(SHORT_DELAY_MS, TimeUnit.MILLISECONDS)));
481 <                        }
482 <                        threadAssertNull(q.poll(SHORT_DELAY_MS, TimeUnit.MILLISECONDS));
483 <                    } catch (InterruptedException success){
484 <                    }  
485 <                }});
474 >    public void testInterruptedTimedPoll() throws InterruptedException {
475 >        Thread t = new Thread(new CheckedRunnable() {
476 >            public void realRun() throws InterruptedException {
477 >                DelayQueue q = populatedQueue(SIZE);
478 >                for (int i = 0; i < SIZE; ++i) {
479 >                    assertEquals(new PDelay(i), ((PDelay)q.poll(SHORT_DELAY_MS, MILLISECONDS)));
480 >                }
481 >                try {
482 >                    q.poll(SMALL_DELAY_MS, MILLISECONDS);
483 >                    shouldThrow();
484 >                } catch (InterruptedException success) {}
485 >            }});
486 >
487          t.start();
488 <        try {
489 <           Thread.sleep(SHORT_DELAY_MS);
490 <           t.interrupt();
552 <           t.join();
553 <        }
554 <        catch (InterruptedException ie) {
555 <            unexpectedException();
556 <        }
488 >        Thread.sleep(SHORT_DELAY_MS);
489 >        t.interrupt();
490 >        t.join();
491      }
492  
493      /**
494       *  timed poll before a delayed offer fails; after offer succeeds;
495       *  on interruption throws
496       */
497 <    public void testTimedPollWithOffer() {
497 >    public void testTimedPollWithOffer() throws InterruptedException {
498          final DelayQueue q = new DelayQueue();
499 <        Thread t = new Thread(new Runnable() {
500 <                public void run() {
501 <                    try {
502 <                        threadAssertNull(q.poll(SHORT_DELAY_MS, TimeUnit.MILLISECONDS));
503 <                        q.poll(LONG_DELAY_MS, TimeUnit.MILLISECONDS);
504 <                        q.poll(LONG_DELAY_MS, TimeUnit.MILLISECONDS);
505 <                        threadFail("Should block");
506 <                    } catch (InterruptedException success) { }                
507 <                }
508 <            });
509 <        try {
510 <            t.start();
511 <            Thread.sleep(SMALL_DELAY_MS);
512 <            assertTrue(q.offer(new PDelay(0), SHORT_DELAY_MS, TimeUnit.MILLISECONDS));
513 <            t.interrupt();
514 <            t.join();
515 <        } catch (Exception e){
582 <            unexpectedException();
583 <        }
584 <    }  
499 >        final PDelay pdelay = new PDelay(0);
500 >        Thread t = new Thread(new CheckedRunnable() {
501 >            public void realRun() throws InterruptedException {
502 >                assertNull(q.poll(SHORT_DELAY_MS, MILLISECONDS));
503 >                assertSame(pdelay, q.poll(LONG_DELAY_MS, MILLISECONDS));
504 >                try {
505 >                    q.poll(LONG_DELAY_MS, MILLISECONDS);
506 >                    shouldThrow();
507 >                } catch (InterruptedException success) {}
508 >            }});
509 >
510 >        t.start();
511 >        Thread.sleep(SMALL_DELAY_MS);
512 >        assertTrue(q.offer(pdelay, SHORT_DELAY_MS, MILLISECONDS));
513 >        t.interrupt();
514 >        t.join();
515 >    }
516  
517  
518      /**
# Line 591 | Line 522 | public class DelayQueueTest extends JSR1
522          DelayQueue q = populatedQueue(SIZE);
523          for (int i = 0; i < SIZE; ++i) {
524              assertEquals(new PDelay(i), ((PDelay)q.peek()));
525 <            q.poll();
525 >            assertEquals(new PDelay(i), ((PDelay)q.poll()));
526              if (q.isEmpty())
527                  assertNull(q.peek());
528              else
529 <                assertTrue(i != ((PDelay)q.peek()).intValue());
529 >                assertFalse(new PDelay(i).equals(q.peek()));
530          }
531 <        assertNull(q.peek());
531 >        assertNull(q.peek());
532      }
533  
534      /**
# Line 612 | Line 543 | public class DelayQueueTest extends JSR1
543          try {
544              q.element();
545              shouldThrow();
546 <        }
616 <        catch (NoSuchElementException success) {}
546 >        } catch (NoSuchElementException success) {}
547      }
548  
549      /**
# Line 627 | Line 557 | public class DelayQueueTest extends JSR1
557          try {
558              q.remove();
559              shouldThrow();
560 <        } catch (NoSuchElementException success){
631 <        }  
560 >        } catch (NoSuchElementException success) {}
561      }
562  
563      /**
# Line 645 | Line 574 | public class DelayQueueTest extends JSR1
574          }
575          assertTrue(q.isEmpty());
576      }
577 <        
577 >
578      /**
579       * contains(x) reports true when elements added but not yet removed
580       */
# Line 727 | Line 656 | public class DelayQueueTest extends JSR1
656      /**
657       * toArray contains all elements
658       */
659 <    public void testToArray() {
659 >    public void testToArray() throws InterruptedException {
660          DelayQueue q = populatedQueue(SIZE);
661 <        Object[] o = q.toArray();
661 >        Object[] o = q.toArray();
662          Arrays.sort(o);
663 <        try {
664 <        for(int i = 0; i < o.length; i++)
736 <            assertEquals(o[i], q.take());
737 <        } catch (InterruptedException e){
738 <            unexpectedException();
739 <        }    
663 >        for (int i = 0; i < o.length; i++)
664 >            assertEquals(o[i], q.take());
665      }
666  
667      /**
668       * toArray(a) contains all elements
669       */
670 <    public void testToArray2() {
670 >    public void testToArray2() throws InterruptedException {
671          DelayQueue q = populatedQueue(SIZE);
672 <        PDelay[] ints = new PDelay[SIZE];
673 <        ints = (PDelay[])q.toArray(ints);
672 >        PDelay[] ints = new PDelay[SIZE];
673 >        ints = (PDelay[])q.toArray(ints);
674          Arrays.sort(ints);
675 <        try {
676 <            for(int i = 0; i < ints.length; i++)
752 <                assertEquals(ints[i], q.take());
753 <        } catch (InterruptedException e){
754 <            unexpectedException();
755 <        }    
675 >        for (int i = 0; i < ints.length; i++)
676 >            assertEquals(ints[i], q.take());
677      }
678  
679  
# Line 760 | Line 681 | public class DelayQueueTest extends JSR1
681       * toArray(null) throws NPE
682       */
683      public void testToArray_BadArg() {
684 <        try {
685 <            DelayQueue q = populatedQueue(SIZE);
686 <            Object o[] = q.toArray(null);
687 <            shouldThrow();
688 <        } catch(NullPointerException success){}
684 >        DelayQueue q = populatedQueue(SIZE);
685 >        try {
686 >            Object o[] = q.toArray(null);
687 >            shouldThrow();
688 >        } catch (NullPointerException success) {}
689      }
690  
691      /**
692       * toArray with incompatible array type throws CCE
693       */
694      public void testToArray1_BadArg() {
695 <        try {
696 <            DelayQueue q = populatedQueue(SIZE);
697 <            Object o[] = q.toArray(new String[10] );
698 <            shouldThrow();
699 <        } catch(ArrayStoreException  success){}
695 >        DelayQueue q = populatedQueue(SIZE);
696 >        try {
697 >            Object o[] = q.toArray(new String[10]);
698 >            shouldThrow();
699 >        } catch (ArrayStoreException success) {}
700      }
701 <    
701 >
702      /**
703       * iterator iterates through all elements
704       */
705      public void testIterator() {
706          DelayQueue q = populatedQueue(SIZE);
707          int i = 0;
708 <        Iterator it = q.iterator();
709 <        while(it.hasNext()) {
708 >        Iterator it = q.iterator();
709 >        while (it.hasNext()) {
710              assertTrue(q.contains(it.next()));
711              ++i;
712          }
# Line 819 | Line 740 | public class DelayQueueTest extends JSR1
740          for (int i = 0; i < SIZE; ++i) {
741              assertTrue(s.indexOf(String.valueOf(Integer.MIN_VALUE+i)) >= 0);
742          }
743 <    }        
743 >    }
744  
745      /**
746       * offer transfers elements across Executor tasks
# Line 827 | Line 748 | public class DelayQueueTest extends JSR1
748      public void testPollInExecutor() {
749          final DelayQueue q = new DelayQueue();
750          ExecutorService executor = Executors.newFixedThreadPool(2);
751 <        executor.execute(new Runnable() {
752 <            public void run() {
753 <                threadAssertNull(q.poll());
754 <                try {
755 <                    threadAssertTrue(null != q.poll(MEDIUM_DELAY_MS, TimeUnit.MILLISECONDS));
756 <                    threadAssertTrue(q.isEmpty());
757 <                }
758 <                catch (InterruptedException e) {
759 <                    threadUnexpectedException();
760 <                }
761 <            }
762 <        });
751 >        executor.execute(new CheckedRunnable() {
752 >            public void realRun() throws InterruptedException {
753 >                assertNull(q.poll());
754 >                assertTrue(null != q.poll(MEDIUM_DELAY_MS, MILLISECONDS));
755 >                assertTrue(q.isEmpty());
756 >            }});
757 >
758 >        executor.execute(new CheckedRunnable() {
759 >            public void realRun() throws InterruptedException {
760 >                Thread.sleep(SHORT_DELAY_MS);
761 >                q.put(new PDelay(1));
762 >            }});
763  
843        executor.execute(new Runnable() {
844            public void run() {
845                try {
846                    Thread.sleep(SHORT_DELAY_MS);
847                    q.put(new PDelay(1));
848                }
849                catch (InterruptedException e) {
850                    threadUnexpectedException();
851                }
852            }
853        });
764          joinPool(executor);
765  
766      }
# Line 859 | Line 769 | public class DelayQueueTest extends JSR1
769      /**
770       * Delayed actions do not occur until their delay elapses
771       */
772 <    public void testDelay() {
772 >    public void testDelay() throws InterruptedException {
773          DelayQueue q = new DelayQueue();
774          NanoDelay[] elements = new NanoDelay[SIZE];
775          for (int i = 0; i < SIZE; ++i) {
# Line 869 | Line 779 | public class DelayQueueTest extends JSR1
779              q.add(elements[i]);
780          }
781  
782 <        try {
783 <            long last = 0;
784 <            for (int i = 0; i < SIZE; ++i) {
785 <                NanoDelay e = (NanoDelay)(q.take());
786 <                long tt = e.getTriggerTime();
787 <                assertTrue(tt <= System.nanoTime());
788 <                if (i != 0)
789 <                    assertTrue(tt >= last);
880 <                last = tt;
881 <            }
882 <        }
883 <        catch(InterruptedException ie) {
884 <            unexpectedException();
782 >        long last = 0;
783 >        for (int i = 0; i < SIZE; ++i) {
784 >            NanoDelay e = (NanoDelay)(q.take());
785 >            long tt = e.getTriggerTime();
786 >            assertTrue(tt <= System.nanoTime());
787 >            if (i != 0)
788 >                assertTrue(tt >= last);
789 >            last = tt;
790          }
791      }
792  
# Line 894 | Line 799 | public class DelayQueueTest extends JSR1
799          assert(q.peek() != null);
800      }
801  
802 +
803      /**
804       * poll of a non-empty queue returns null if no expired elements.
805       */
# Line 904 | Line 810 | public class DelayQueueTest extends JSR1
810      }
811  
812      /**
813 +     * timed poll of a non-empty queue returns null if no expired elements.
814 +     */
815 +    public void testTimedPollDelayed() throws InterruptedException {
816 +        DelayQueue q = new DelayQueue();
817 +        q.add(new NanoDelay(LONG_DELAY_MS * 1000000L));
818 +        assertNull(q.poll(SHORT_DELAY_MS, MILLISECONDS));
819 +    }
820 +
821 +    /**
822       * drainTo(null) throws NPE
823 <     */
823 >     */
824      public void testDrainToNull() {
825          DelayQueue q = populatedQueue(SIZE);
826          try {
827              q.drainTo(null);
828              shouldThrow();
829 <        } catch(NullPointerException success) {
915 <        }
829 >        } catch (NullPointerException success) {}
830      }
831  
832      /**
833       * drainTo(this) throws IAE
834 <     */
834 >     */
835      public void testDrainToSelf() {
836          DelayQueue q = populatedQueue(SIZE);
837          try {
838              q.drainTo(q);
839              shouldThrow();
840 <        } catch(IllegalArgumentException success) {
927 <        }
840 >        } catch (IllegalArgumentException success) {}
841      }
842  
843      /**
844       * drainTo(c) empties queue into another collection c
845 <     */
845 >     */
846      public void testDrainTo() {
847          DelayQueue q = new DelayQueue();
848          PDelay[] elems = new PDelay[SIZE];
# Line 940 | Line 853 | public class DelayQueueTest extends JSR1
853          ArrayList l = new ArrayList();
854          q.drainTo(l);
855          assertEquals(q.size(), 0);
856 <        for (int i = 0; i < SIZE; ++i)
856 >        for (int i = 0; i < SIZE; ++i)
857              assertEquals(l.get(i), elems[i]);
858          q.add(elems[0]);
859          q.add(elems[1]);
# Line 951 | Line 864 | public class DelayQueueTest extends JSR1
864          q.drainTo(l);
865          assertEquals(q.size(), 0);
866          assertEquals(l.size(), 2);
867 <        for (int i = 0; i < 2; ++i)
867 >        for (int i = 0; i < 2; ++i)
868              assertEquals(l.get(i), elems[i]);
869      }
870  
871      /**
872       * drainTo empties queue
873 <     */
874 <    public void testDrainToWithActivePut() {
873 >     */
874 >    public void testDrainToWithActivePut() throws InterruptedException {
875          final DelayQueue q = populatedQueue(SIZE);
876 <        Thread t = new Thread(new Runnable() {
877 <                public void run() {
878 <                    q.put(new PDelay(SIZE+1));
879 <                }
880 <            });
881 <        try {
882 <            t.start();
883 <            ArrayList l = new ArrayList();
884 <            q.drainTo(l);
885 <            assertTrue(l.size() >= SIZE);
886 <            t.join();
974 <            assertTrue(q.size() + l.size() >= SIZE);
975 <        } catch(Exception e){
976 <            unexpectedException();
977 <        }
876 >        Thread t = new Thread(new CheckedRunnable() {
877 >            public void realRun() {
878 >                q.put(new PDelay(SIZE+1));
879 >            }});
880 >
881 >        t.start();
882 >        ArrayList l = new ArrayList();
883 >        q.drainTo(l);
884 >        assertTrue(l.size() >= SIZE);
885 >        t.join();
886 >        assertTrue(q.size() + l.size() >= SIZE);
887      }
888  
889      /**
890       * drainTo(null, n) throws NPE
891 <     */
891 >     */
892      public void testDrainToNullN() {
893          DelayQueue q = populatedQueue(SIZE);
894          try {
895              q.drainTo(null, 0);
896              shouldThrow();
897 <        } catch(NullPointerException success) {
989 <        }
897 >        } catch (NullPointerException success) {}
898      }
899  
900      /**
901       * drainTo(this, n) throws IAE
902 <     */
902 >     */
903      public void testDrainToSelfN() {
904          DelayQueue q = populatedQueue(SIZE);
905          try {
906              q.drainTo(q, 0);
907              shouldThrow();
908 <        } catch(IllegalArgumentException success) {
1001 <        }
908 >        } catch (IllegalArgumentException success) {}
909      }
910  
911      /**
912       * drainTo(c, n) empties first max {n, size} elements of queue into c
913 <     */
913 >     */
914      public void testDrainToN() {
915          for (int i = 0; i < SIZE + 2; ++i) {
916              DelayQueue q = populatedQueue(SIZE);

Diff Legend

Removed lines
+ Added lines
< Changed lines
> Changed lines