1 /*
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/publicdomain/zero/1.0/
5  * Other contributors include Andrew Wright, Jeffrey Hayes,
6  * Pat Fisher, Mike Judd.
7  */
8 
9 package jsr166;
10 
11 import java.util.AbstractQueue;
12 import java.util.Arrays;
13 import java.util.Iterator;
14 import java.util.NoSuchElementException;
15 
16 import junit.framework.Test;
17 import junit.framework.TestSuite;
18 
19 public class AbstractQueueTest extends JSR166TestCase {
20     // android-note: Removed because the CTS runner does a bad job of
21     // retrying tests that have suite() declarations.
22     //
23     // public static void main(String[] args) {
24     //     main(suite(), args);
25     // }
26     // public static Test suite() {
27     //     return new TestSuite(AbstractQueueTest.class);
28     // }
29 
30     static class Succeed extends AbstractQueue<Integer> {
offer(Integer x)31         public boolean offer(Integer x) {
32             if (x == null) throw new NullPointerException();
33             return true;
34         }
peek()35         public Integer peek() { return one; }
poll()36         public Integer poll() { return one; }
size()37         public int size() { return 0; }
iterator()38         public Iterator iterator() { return null; } // not needed
39     }
40 
41     static class Fail extends AbstractQueue<Integer> {
offer(Integer x)42         public boolean offer(Integer x) {
43             if (x == null) throw new NullPointerException();
44             return false;
45         }
peek()46         public Integer peek() { return null; }
poll()47         public Integer poll() { return null; }
size()48         public int size() { return 0; }
iterator()49         public Iterator iterator() { return null; } // not needed
50     }
51 
52     /**
53      * add returns true if offer succeeds
54      */
testAddS()55     public void testAddS() {
56         Succeed q = new Succeed();
57         assertTrue(q.add(two));
58     }
59 
60     /**
61      * add throws ISE true if offer fails
62      */
testAddF()63     public void testAddF() {
64         Fail q = new Fail();
65         try {
66             q.add(one);
67             shouldThrow();
68         } catch (IllegalStateException success) {}
69     }
70 
71     /**
72      * add throws NPE if offer does
73      */
testAddNPE()74     public void testAddNPE() {
75         Succeed q = new Succeed();
76         try {
77             q.add(null);
78             shouldThrow();
79         } catch (NullPointerException success) {}
80     }
81 
82     /**
83      * remove returns normally if poll succeeds
84      */
testRemoveS()85     public void testRemoveS() {
86         Succeed q = new Succeed();
87         q.remove();
88     }
89 
90     /**
91      * remove throws NSEE if poll returns null
92      */
testRemoveF()93     public void testRemoveF() {
94         Fail q = new Fail();
95         try {
96             q.remove();
97             shouldThrow();
98         } catch (NoSuchElementException success) {}
99     }
100 
101     /**
102      * element returns normally if peek succeeds
103      */
testElementS()104     public void testElementS() {
105         Succeed q = new Succeed();
106         q.element();
107     }
108 
109     /**
110      * element throws NSEE if peek returns null
111      */
testElementF()112     public void testElementF() {
113         Fail q = new Fail();
114         try {
115             q.element();
116             shouldThrow();
117         } catch (NoSuchElementException success) {}
118     }
119 
120     /**
121      * addAll(null) throws NPE
122      */
testAddAll1()123     public void testAddAll1() {
124         Succeed q = new Succeed();
125         try {
126             q.addAll(null);
127             shouldThrow();
128         } catch (NullPointerException success) {}
129     }
130 
131     /**
132      * addAll(this) throws IAE
133      */
testAddAllSelf()134     public void testAddAllSelf() {
135         Succeed q = new Succeed();
136         try {
137             q.addAll(q);
138             shouldThrow();
139         } catch (IllegalArgumentException success) {}
140     }
141 
142     /**
143      * addAll of a collection with null elements throws NPE
144      */
testAddAll2()145     public void testAddAll2() {
146         Succeed q = new Succeed();
147         Integer[] ints = new Integer[SIZE];
148         try {
149             q.addAll(Arrays.asList(ints));
150             shouldThrow();
151         } catch (NullPointerException success) {}
152     }
153 
154     /**
155      * addAll of a collection with any null elements throws NPE after
156      * possibly adding some elements
157      */
testAddAll3()158     public void testAddAll3() {
159         Succeed q = new Succeed();
160         Integer[] ints = new Integer[SIZE];
161         for (int i = 0; i < SIZE - 1; ++i)
162             ints[i] = new Integer(i);
163         try {
164             q.addAll(Arrays.asList(ints));
165             shouldThrow();
166         } catch (NullPointerException success) {}
167     }
168 
169     /**
170      * addAll throws ISE if an add fails
171      */
testAddAll4()172     public void testAddAll4() {
173         Fail q = new Fail();
174         Integer[] ints = new Integer[SIZE];
175         for (int i = 0; i < SIZE; ++i)
176             ints[i] = new Integer(i);
177         try {
178             q.addAll(Arrays.asList(ints));
179             shouldThrow();
180         } catch (IllegalStateException success) {}
181     }
182 
183 }
184