11d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert/* 21d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert * Copyright (C) 2008 The Guava Authors 31d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert * 41d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert * Licensed under the Apache License, Version 2.0 (the "License"); 51d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert * you may not use this file except in compliance with the License. 61d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert * You may obtain a copy of the License at 71d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert * 81d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert * http://www.apache.org/licenses/LICENSE-2.0 91d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert * 101d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert * Unless required by applicable law or agreed to in writing, software 111d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert * distributed under the License is distributed on an "AS IS" BASIS, 121d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 131d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert * See the License for the specific language governing permissions and 141d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert * limitations under the License. 151d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert */ 161d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 171d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringertpackage com.google.common.collect.testing.testers; 181d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 191d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringertimport static com.google.common.collect.testing.features.CollectionFeature.ALLOWS_NULL_VALUES; 201d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringertimport static com.google.common.collect.testing.features.CollectionFeature.SUPPORTS_RETAIN_ALL; 211d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringertimport static com.google.common.collect.testing.features.CollectionSize.ONE; 221d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringertimport static com.google.common.collect.testing.features.CollectionSize.ZERO; 231d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 241d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringertimport com.google.common.collect.testing.AbstractCollectionTester; 251d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringertimport com.google.common.collect.testing.MinimalCollection; 261d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringertimport com.google.common.collect.testing.features.CollectionFeature; 271d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringertimport com.google.common.collect.testing.features.CollectionSize; 281d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 291d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringertimport java.util.Arrays; 301d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringertimport java.util.Collection; 311d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringertimport java.util.Collections; 321d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringertimport java.util.List; 331d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 341d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert/** 351d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert * A generic JUnit test which tests {@code retainAll} operations on a 361d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert * collection. Can't be invoked directly; please see 371d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert * {@link com.google.common.collect.testing.CollectionTestSuiteBuilder}. 381d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert * 391d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert * <p>This class is GWT compatible. 401d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert * 411d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert * @author Chris Povirk 421d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert */ 431d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert@SuppressWarnings("unchecked") // too many "unchecked generic array creations" 441d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringertpublic class CollectionRetainAllTester<E> extends AbstractCollectionTester<E> { 451d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 461d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert /** 471d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert * A collection of elements to retain, along with a description for use in 481d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert * failure messages. 491d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert */ 501d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert private class Target { 511d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert private final Collection<E> toRetain; 521d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert private final String description; 531d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 541d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert private Target(Collection<E> toRetain, String description) { 551d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert this.toRetain = toRetain; 561d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert this.description = description; 571d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 581d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 591d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert @Override public String toString() { 601d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert return description; 611d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 621d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 631d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 641d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert private Target empty; 651d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert private Target disjoint; 661d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert private Target superset; 671d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert private Target nonEmptyProperSubset; 681d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert private Target sameElements; 691d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert private Target partialOverlap; 701d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert private Target containsDuplicates; 711d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert private Target nullSingleton; 721d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 731d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert @Override public void setUp() throws Exception { 741d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert super.setUp(); 751d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 761d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert empty = new Target(emptyCollection(), "empty"); 771d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert /* 781d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert * We test that nullSingleton.retainAll(disjointList) does NOT throw a 791d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert * NullPointerException when disjointList does not, so we can't use 801d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert * MinimalCollection, which throws NullPointerException on calls to 811d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert * contains(null). 821d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert */ 831d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert List<E> disjointList = Arrays.asList(samples.e3, samples.e4); 841d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert disjoint 851d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert = new Target(disjointList, "disjoint"); 861d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert superset 871d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert = new Target(MinimalCollection.of( 881d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert samples.e0, samples.e1, samples.e2, samples.e3, samples.e4), 891d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert "superset"); 901d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert nonEmptyProperSubset 911d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert = new Target(MinimalCollection.of(samples.e1), "subset"); 921d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert sameElements 931d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert = new Target(Arrays.asList(createSamplesArray()), "sameElements"); 941d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert containsDuplicates = new Target( 951d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert MinimalCollection.of(samples.e0, samples.e0, samples.e3, samples.e3), 961d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert "containsDuplicates"); 971d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert partialOverlap 981d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert = new Target(MinimalCollection.of(samples.e2, samples.e3), 991d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert "partialOverlap"); 1001d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert nullSingleton 1011d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert = new Target(Collections.<E>singleton(null), "nullSingleton"); 1021d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 1031d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 1041d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert // retainAll(empty) 1051d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 1061d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert @CollectionFeature.Require(SUPPORTS_RETAIN_ALL) 1071d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert @CollectionSize.Require(ZERO) 1081d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert public void testRetainAll_emptyPreviouslyEmpty() { 1091d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert expectReturnsFalse(empty); 1101d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert expectUnchanged(); 1111d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 1121d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 1131d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert @CollectionFeature.Require(absent = SUPPORTS_RETAIN_ALL) 1141d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert @CollectionSize.Require(ZERO) 1151d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert public void testRetainAll_emptyPreviouslyEmptyUnsupported() { 1161d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert expectReturnsFalseOrThrows(empty); 1171d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert expectUnchanged(); 1181d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 1191d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 1201d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert @CollectionFeature.Require(SUPPORTS_RETAIN_ALL) 1211d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert @CollectionSize.Require(absent = ZERO) 1221d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert public void testRetainAll_emptyPreviouslyNonEmpty() { 1231d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert expectReturnsTrue(empty); 1241d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert expectContents(); 1251d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert expectMissing(samples.e0, samples.e1, samples.e2); 1261d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 1271d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 1281d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert @CollectionFeature.Require(absent = SUPPORTS_RETAIN_ALL) 1291d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert @CollectionSize.Require(absent = ZERO) 1301d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert public void testRetainAll_emptyPreviouslyNonEmptyUnsupported() { 1311d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert expectThrows(empty); 1321d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert expectUnchanged(); 1331d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 1341d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 1351d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert // retainAll(disjoint) 1361d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 1371d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert @CollectionFeature.Require(SUPPORTS_RETAIN_ALL) 1381d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert @CollectionSize.Require(ZERO) 1391d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert public void testRetainAll_disjointPreviouslyEmpty() { 1401d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert expectReturnsFalse(disjoint); 1411d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert expectUnchanged(); 1421d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 1431d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 1441d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert @CollectionFeature.Require(absent = SUPPORTS_RETAIN_ALL) 1451d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert @CollectionSize.Require(ZERO) 1461d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert public void testRetainAll_disjointPreviouslyEmptyUnsupported() { 1471d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert expectReturnsFalseOrThrows(disjoint); 1481d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert expectUnchanged(); 1491d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 1501d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 1511d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert @CollectionFeature.Require(SUPPORTS_RETAIN_ALL) 1521d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert @CollectionSize.Require(absent = ZERO) 1531d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert public void testRetainAll_disjointPreviouslyNonEmpty() { 1541d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert expectReturnsTrue(disjoint); 1551d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert expectContents(); 1561d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert expectMissing(samples.e0, samples.e1, samples.e2); 1571d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 1581d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 1591d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert @CollectionFeature.Require(absent = SUPPORTS_RETAIN_ALL) 1601d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert @CollectionSize.Require(absent = ZERO) 1611d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert public void testRetainAll_disjointPreviouslyNonEmptyUnsupported() { 1621d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert expectThrows(disjoint); 1631d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert expectUnchanged(); 1641d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 1651d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 1661d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert // retainAll(superset) 1671d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 1681d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert @CollectionFeature.Require(SUPPORTS_RETAIN_ALL) 1691d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert public void testRetainAll_superset() { 1701d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert expectReturnsFalse(superset); 1711d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert expectUnchanged(); 1721d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 1731d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 1741d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert @CollectionFeature.Require(absent = SUPPORTS_RETAIN_ALL) 1751d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert public void testRetainAll_supersetUnsupported() { 1761d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert expectReturnsFalseOrThrows(superset); 1771d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert expectUnchanged(); 1781d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 1791d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 1801d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert // retainAll(subset) 1811d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 1821d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert @CollectionFeature.Require(SUPPORTS_RETAIN_ALL) 1831d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert @CollectionSize.Require(absent = {ZERO, ONE}) 1841d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert public void testRetainAll_subset() { 1851d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert expectReturnsTrue(nonEmptyProperSubset); 1861d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert expectContents(nonEmptyProperSubset.toRetain); 1871d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 1881d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 1891d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert @CollectionFeature.Require(absent = SUPPORTS_RETAIN_ALL) 1901d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert @CollectionSize.Require(absent = {ZERO, ONE}) 1911d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert public void testRetainAll_subsetUnsupported() { 1921d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert expectThrows(nonEmptyProperSubset); 1931d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert expectUnchanged(); 1941d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 1951d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 1961d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert // retainAll(sameElements) 1971d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 1981d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert @CollectionFeature.Require(SUPPORTS_RETAIN_ALL) 1991d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert public void testRetainAll_sameElements() { 2001d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert expectReturnsFalse(sameElements); 2011d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert expectUnchanged(); 2021d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 2031d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 2041d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert @CollectionFeature.Require(absent = SUPPORTS_RETAIN_ALL) 2051d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert public void testRetainAll_sameElementsUnsupported() { 2061d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert expectReturnsFalseOrThrows(sameElements); 2071d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert expectUnchanged(); 2081d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 2091d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 2101d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert // retainAll(partialOverlap) 2111d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 2121d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert @CollectionFeature.Require(SUPPORTS_RETAIN_ALL) 2131d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert @CollectionSize.Require(absent = {ZERO, ONE}) 2141d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert public void testRetainAll_partialOverlap() { 2151d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert expectReturnsTrue(partialOverlap); 2161d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert expectContents(samples.e2); 2171d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 2181d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 2191d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert @CollectionFeature.Require(absent = SUPPORTS_RETAIN_ALL) 2201d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert @CollectionSize.Require(absent = {ZERO, ONE}) 2211d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert public void testRetainAll_partialOverlapUnsupported() { 2221d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert expectThrows(partialOverlap); 2231d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert expectUnchanged(); 2241d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 2251d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 2261d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert // retainAll(containsDuplicates) 2271d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 2281d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert @CollectionFeature.Require(SUPPORTS_RETAIN_ALL) 2291d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert @CollectionSize.Require(ONE) 2301d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert public void testRetainAll_containsDuplicatesSizeOne() { 2311d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert expectReturnsFalse(containsDuplicates); 2321d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert expectContents(samples.e0); 2331d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 2341d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 2351d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert @CollectionFeature.Require(SUPPORTS_RETAIN_ALL) 2361d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert @CollectionSize.Require(absent = {ZERO, ONE}) 2371d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert public void testRetainAll_containsDuplicatesSizeSeveral() { 2381d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert expectReturnsTrue(containsDuplicates); 2391d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert expectContents(samples.e0); 2401d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 2411d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 2421d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert // retainAll(nullSingleton) 2431d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 2441d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert @CollectionFeature.Require(SUPPORTS_RETAIN_ALL) 2451d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert @CollectionSize.Require(ZERO) 2461d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert public void testRetainAll_nullSingletonPreviouslyEmpty() { 2471d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert expectReturnsFalse(nullSingleton); 2481d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert expectUnchanged(); 2491d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 2501d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 2511d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert @CollectionFeature.Require(SUPPORTS_RETAIN_ALL) 2521d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert @CollectionSize.Require(absent = ZERO) 2531d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert public void testRetainAll_nullSingletonPreviouslyNonEmpty() { 2541d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert expectReturnsTrue(nullSingleton); 2551d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert expectContents(); 2561d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 2571d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 2581d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert @CollectionFeature.Require({SUPPORTS_RETAIN_ALL, ALLOWS_NULL_VALUES}) 2591d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert @CollectionSize.Require(ONE) 2601d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert public void testRetainAll_nullSingletonPreviouslySingletonWithNull() { 2611d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert initCollectionWithNullElement(); 2621d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert expectReturnsFalse(nullSingleton); 2631d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert expectContents(createArrayWithNullElement()); 2641d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 2651d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 2661d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert @CollectionFeature.Require({SUPPORTS_RETAIN_ALL, ALLOWS_NULL_VALUES}) 2671d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert @CollectionSize.Require(absent = {ZERO, ONE}) 2681d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert public void testRetainAll_nullSingletonPreviouslySeveralWithNull() { 2691d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert initCollectionWithNullElement(); 2701d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert expectReturnsTrue(nullSingleton); 2711d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert expectContents(nullSingleton.toRetain); 2721d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 2731d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 2741d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert // nullSingleton.retainAll() 2751d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 2761d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert @CollectionFeature.Require({SUPPORTS_RETAIN_ALL, ALLOWS_NULL_VALUES}) 2771d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert @CollectionSize.Require(absent = ZERO) 2781d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert public void testRetainAll_containsNonNullWithNull() { 2791d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert initCollectionWithNullElement(); 2801d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert expectReturnsTrue(disjoint); 2811d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert expectContents(); 2821d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 2831d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 2841d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert // retainAll(null) 2851d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 2861d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert /* 2871d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert * AbstractCollection fails the retainAll(null) test when the subject 2881d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert * collection is empty, but we'd still like to test retainAll(null) when we 2891d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert * can. We split the test into empty and non-empty cases. This allows us to 2901d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert * suppress only the former. 2911d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert */ 2921d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 2931d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert @CollectionFeature.Require(SUPPORTS_RETAIN_ALL) 2941d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert @CollectionSize.Require(ZERO) 2951d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert public void testRetainAll_nullCollectionReferenceEmptySubject() { 2961d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert try { 2971d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert collection.retainAll(null); 2981d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert // Returning successfully is not ideal, but tolerated. 2991d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } catch (NullPointerException expected) { 3001d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 3011d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 3021d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 3031d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert @CollectionFeature.Require(SUPPORTS_RETAIN_ALL) 3041d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert @CollectionSize.Require(absent = ZERO) 3051d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert public void testRetainAll_nullCollectionReferenceNonEmptySubject() { 3061d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert try { 3071d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert collection.retainAll(null); 3081d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert fail("retainAll(null) should throw NullPointerException"); 3091d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } catch (NullPointerException expected) { 3101d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 3111d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 3121d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 3131d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert private void expectReturnsTrue(Target target) { 3141d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert String message 3151d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert = Platform.format("retainAll(%s) should return true", target); 3161d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertTrue(message, collection.retainAll(target.toRetain)); 3171d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 3181d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 3191d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert private void expectReturnsFalse(Target target) { 3201d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert String message 3211d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert = Platform.format("retainAll(%s) should return false", target); 3221d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertFalse(message, collection.retainAll(target.toRetain)); 3231d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 3241d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 3251d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert private void expectThrows(Target target) { 3261d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert try { 3271d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert collection.retainAll(target.toRetain); 3281d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert String message = Platform.format("retainAll(%s) should throw", target); 3291d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert fail(message); 3301d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } catch (UnsupportedOperationException expected) { 3311d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 3321d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 3331d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 3341d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert private void expectReturnsFalseOrThrows(Target target) { 3351d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert String message 3361d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert = Platform.format("retainAll(%s) should return false or throw", target); 3371d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert try { 3381d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertFalse(message, collection.retainAll(target.toRetain)); 3391d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } catch (UnsupportedOperationException tolerated) { 3401d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 3411d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 3421d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert} 343