--- /dev/null 2012-12-10 07:41:39.297440197 -0800 +++ new/test/java/util/CollectionExtensionMethods/CollectionExtensionMethodsTest.java 2012-12-10 13:27:30.774690039 -0800 @@ -0,0 +1,108 @@ +/* + * Copyright (c) 2012 Oracle and/or its affiliates. All rights reserved. + * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. + * + * This code is free software; you can redistribute it and/or modify it + * under the terms of the GNU General Public License version 2 only, as + * published by the Free Software Foundation. Oracle designates this + * particular file as subject to the "Classpath" exception as provided + * by Oracle in the LICENSE file that accompanied this code. + * + * This code is distributed in the hope that it will be useful, but WITHOUT + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License + * version 2 for more details (a copy is included in the LICENSE file that + * accompanied this code). + * + * You should have received a copy of the GNU General Public License version + * 2 along with this work; if not, write to the Free Software Foundation, + * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. + * + * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA + * or visit www.oracle.com if you need additional information or have any + * questions. + */ + +import java.util.LinkedList; +import java.util.List; +import java.util.Set; + +import org.testng.annotations.Test; + +import static org.testng.Assert.assertTrue; +import static org.testng.Assert.fail; + +import java.util.function.Predicate; + +/** + * @test + * @library testlibrary + * @build CollectionAsserts CollectionSupplier + * @run testng CollectionExtensionMethodsTest + * @summary Unit tests for extension methods on Collection + */ +public class CollectionExtensionMethodsTest { + + private static final Predicate pEven = x -> 0 == x % 2; + private static final Predicate pOdd = x -> 0 != x % 2; + + private static final String[] SET_CLASSES = { + "java.util.HashSet", + "java.util.LinkedHashSet", + "java.util.TreeSet" + }; + + @Test + public void testForNullPointerException() throws Exception { + final CollectionSupplier supplier = new CollectionSupplier(SET_CLASSES, 10); + for (final CollectionSupplier.TestCase test : supplier.get()) { + final Set set = ((Set) test.collection); + try { + set.forEach(null); + fail("forEach with null Block did not throw NPE"); + } catch (NullPointerException nx) {} + try { + set.removeAll((Predicate) null); + fail("removeAll with null Predicate did not throw NPE"); + } catch (NullPointerException nx) {} + } + } + + @Test + public void testForEach() throws Exception { + final CollectionSupplier supplier = new CollectionSupplier(SET_CLASSES, 100); + for (final CollectionSupplier.TestCase test : supplier.get()) { + final Set original = ((Set) test.original); + final Set set = ((Set) test.collection); + final List actual = new LinkedList<>(); + set.forEach(actual::add); + if (test.className.equals("java.util.HashSet")) { + CollectionAsserts.assertContentsUnordered(actual, set); + CollectionAsserts.assertContentsUnordered(actual, original); + } else { + CollectionAsserts.assertContents(actual, set); + CollectionAsserts.assertContents(actual, original); + } + } + } + + @Test + public void testRemoveAll() throws Exception { + final CollectionSupplier supplier = new CollectionSupplier(SET_CLASSES, 100); + for (final CollectionSupplier.TestCase test : supplier.get()) { + final Set original = ((Set) test.original); + final Set set = ((Set) test.collection); + set.removeAll(pEven); + for (final int i : set) { + assertTrue((i % 2) == 1); + } + for (final int i : original) { + if (i % 2 != 0) { + assertTrue(set.contains(i)); + } + } + set.removeAll(pOdd); + assertTrue(set.isEmpty()); + } + } +}