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 197dd252788645e940eada959bdde927426e2531c9Paul Duffinimport static com.google.common.collect.testing.features.CollectionFeature.SUPPORTS_REMOVE; 201d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringertimport static com.google.common.collect.testing.features.CollectionSize.ONE; 211d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringertimport static com.google.common.collect.testing.features.CollectionSize.SEVERAL; 221d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringertimport static com.google.common.collect.testing.features.CollectionSize.ZERO; 230888a09821a98ac0680fad765217302858e70fa4Paul Duffinimport static org.truth0.Truth.ASSERT; 241d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 257dd252788645e940eada959bdde927426e2531c9Paul Duffinimport com.google.common.annotations.GwtCompatible; 261d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringertimport com.google.common.collect.testing.MinimalCollection; 271d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringertimport com.google.common.collect.testing.features.CollectionFeature; 281d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringertimport com.google.common.collect.testing.features.CollectionSize; 291d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 300888a09821a98ac0680fad765217302858e70fa4Paul Duffinimport java.util.Arrays; 310888a09821a98ac0680fad765217302858e70fa4Paul Duffin 321d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert/** 331d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert * A generic JUnit test which tests {@code retainAll} operations on a list. 341d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert * Can't be invoked directly; please see 351d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert * {@link com.google.common.collect.testing.ListTestSuiteBuilder}. 361d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert * 371d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert * @author Chris Povirk 381d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert */ 397dd252788645e940eada959bdde927426e2531c9Paul Duffin@GwtCompatible 401d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringertpublic class ListRetainAllTester<E> extends AbstractListTester<E> { 417dd252788645e940eada959bdde927426e2531c9Paul Duffin @CollectionFeature.Require(SUPPORTS_REMOVE) 421d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert @CollectionSize.Require(absent = {ZERO, ONE}) 431d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert public void testRetainAll_duplicatesKept() { 441d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert E[] array = createSamplesArray(); 451d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert array[1] = samples.e0; 461d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert collection = getSubjectGenerator().create(array); 471d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertFalse("containsDuplicates.retainAll(superset) should return false", 481d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert collection.retainAll(MinimalCollection.of(createSamplesArray()))); 491d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert expectContents(array); 501d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 511d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 521d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert @SuppressWarnings("unchecked") 537dd252788645e940eada959bdde927426e2531c9Paul Duffin @CollectionFeature.Require(SUPPORTS_REMOVE) 541d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert @CollectionSize.Require(SEVERAL) 551d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert public void testRetainAll_duplicatesRemoved() { 561d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert E[] array = createSamplesArray(); 571d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert array[1] = samples.e0; 581d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert collection = getSubjectGenerator().create(array); 591d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertTrue("containsDuplicates.retainAll(subset) should return true", 601d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert collection.retainAll(MinimalCollection.of(samples.e2))); 611d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert expectContents(samples.e2); 621d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 630888a09821a98ac0680fad765217302858e70fa4Paul Duffin 640888a09821a98ac0680fad765217302858e70fa4Paul Duffin @SuppressWarnings("unchecked") 650888a09821a98ac0680fad765217302858e70fa4Paul Duffin @CollectionFeature.Require(SUPPORTS_REMOVE) 660888a09821a98ac0680fad765217302858e70fa4Paul Duffin @CollectionSize.Require(SEVERAL) 670888a09821a98ac0680fad765217302858e70fa4Paul Duffin public void testRetainAll_countIgnored() { 680888a09821a98ac0680fad765217302858e70fa4Paul Duffin resetContainer(getSubjectGenerator().create(samples.e0, samples.e2, samples.e1, samples.e0)); 690888a09821a98ac0680fad765217302858e70fa4Paul Duffin assertTrue(getList().retainAll(Arrays.asList(samples.e0, samples.e1))); 700888a09821a98ac0680fad765217302858e70fa4Paul Duffin ASSERT.that(getList()).has().exactly(samples.e0, samples.e1, samples.e0).inOrder(); 710888a09821a98ac0680fad765217302858e70fa4Paul Duffin } 721d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert} 73