--- jsr166/src/test/tck/CollectionTest.java 2015/06/14 20:58:14 1.1 +++ jsr166/src/test/tck/CollectionTest.java 2016/10/17 00:57:45 1.2 @@ -6,6 +6,9 @@ */ import java.util.Collection; +import java.util.Deque; +import java.util.NoSuchElementException; +import java.util.Queue; import junit.framework.Test; @@ -31,10 +34,87 @@ public class CollectionTest extends JSR1 impl)); } - /** A test of the CollectionImplementation implementation ! */ + /** Checks properties of empty collections. */ public void testEmptyMeansEmpty() { - assertTrue(impl.emptyCollection().isEmpty()); - assertEquals(0, impl.emptyCollection().size()); + Collection c = impl.emptyCollection(); + assertTrue(c.isEmpty()); + assertEquals(0, c.size()); + assertEquals("[]", c.toString()); + assertEquals(0, c.toArray().length); + { + Object[] a = new Object[0]; + assertSame(a, c.toArray(a)); + } + c.forEach((e) -> { throw new AssertionError(); }); + if (Queue.class.isAssignableFrom(impl.klazz())) { + Queue q = (Queue) c; + assertNull(q.peek()); + assertNull(q.poll()); + } + if (Deque.class.isAssignableFrom(impl.klazz())) { + Deque d = (Deque) c; + assertNull(d.peekFirst()); + assertNull(d.peekLast()); + assertNull(d.pollFirst()); + assertNull(d.pollLast()); + } + } + + public void testNullPointerExceptions() { + Collection c = impl.emptyCollection(); + assertThrows( + NullPointerException.class, + () -> c.addAll(null), + () -> c.containsAll(null), + () -> c.retainAll(null), + () -> c.removeAll(null), + () -> c.removeIf(null)); + + if (!impl.permitsNulls()) { + assertThrows( + NullPointerException.class, + () -> c.add(null)); + } + if (!impl.permitsNulls() + && Queue.class.isAssignableFrom(impl.klazz())) { + Queue q = (Queue) c; + assertThrows( + NullPointerException.class, + () -> q.offer(null)); + } + if (!impl.permitsNulls() + && Deque.class.isAssignableFrom(impl.klazz())) { + Deque d = (Deque) c; + assertThrows( + NullPointerException.class, + () -> d.addFirst(null), + () -> d.addLast(null), + () -> d.offerFirst(null), + () -> d.offerLast(null), + () -> d.push(null)); + } + } + + public void testNoSuchElementExceptions() { + Collection c = impl.emptyCollection(); + + if (Queue.class.isAssignableFrom(impl.klazz())) { + Queue q = (Queue) c; + assertThrows( + NoSuchElementException.class, + () -> q.element(), + () -> q.remove()); + } + if (Deque.class.isAssignableFrom(impl.klazz())) { + Deque d = (Deque) c; + assertThrows( + NoSuchElementException.class, + () -> d.getFirst(), + () -> d.getLast(), + () -> d.removeFirst(), + () -> d.removeLast(), + () -> d.pop()); + } } // public void testCollectionDebugFail() { fail(); }