Coverage Summary for Class: CollectionRemoveTester (com.google.common.collect.testing.testers)

Class Class, % Method, % Line, %
CollectionRemoveTester 100% (1/1) 100% (11/11) 90.2% (55/61)


1 /* 2  * Copyright (C) 2008 The Guava Authors 3  * 4  * Licensed under the Apache License, Version 2.0 (the "License"); 5  * you may not use this file except in compliance with the License. 6  * You may obtain a copy of the License at 7  * 8  * http://www.apache.org/licenses/LICENSE-2.0 9  * 10  * Unless required by applicable law or agreed to in writing, software 11  * distributed under the License is distributed on an "AS IS" BASIS, 12  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13  * See the License for the specific language governing permissions and 14  * limitations under the License. 15  */ 16  17 package com.google.common.collect.testing.testers; 18  19 import static com.google.common.collect.testing.features.CollectionFeature.ALLOWS_NULL_QUERIES; 20 import static com.google.common.collect.testing.features.CollectionFeature.ALLOWS_NULL_VALUES; 21 import static com.google.common.collect.testing.features.CollectionFeature.FAILS_FAST_ON_CONCURRENT_MODIFICATION; 22 import static com.google.common.collect.testing.features.CollectionFeature.SUPPORTS_REMOVE; 23 import static com.google.common.collect.testing.features.CollectionSize.SEVERAL; 24 import static com.google.common.collect.testing.features.CollectionSize.ZERO; 25  26 import com.google.common.annotations.GwtCompatible; 27 import com.google.common.collect.testing.AbstractCollectionTester; 28 import com.google.common.collect.testing.WrongType; 29 import com.google.common.collect.testing.features.CollectionFeature; 30 import com.google.common.collect.testing.features.CollectionSize; 31 import java.util.ConcurrentModificationException; 32 import java.util.Iterator; 33 import org.junit.Ignore; 34  35 /** 36  * A generic JUnit test which tests {@code remove} operations on a collection. Can't be invoked 37  * directly; please see {@link com.google.common.collect.testing.CollectionTestSuiteBuilder}. 38  * 39  * @author George van den Driessche 40  */ 41 @SuppressWarnings("unchecked") // too many "unchecked generic array creations" 42 @GwtCompatible 43 @Ignore // Affects only Android test runner, which respects JUnit 4 annotations on JUnit 3 tests. 44 public class CollectionRemoveTester<E> extends AbstractCollectionTester<E> { 45  @CollectionFeature.Require(SUPPORTS_REMOVE) 46  @CollectionSize.Require(absent = ZERO) 47  public void testRemove_present() { 48  int initialSize = collection.size(); 49  assertTrue("remove(present) should return true", collection.remove(e0())); 50  assertEquals( 51  "remove(present) should decrease a collection's size by one.", 52  initialSize - 1, 53  collection.size()); 54  expectMissing(e0()); 55  } 56  57  @CollectionFeature.Require({SUPPORTS_REMOVE, FAILS_FAST_ON_CONCURRENT_MODIFICATION}) 58  @CollectionSize.Require(SEVERAL) 59  public void testRemovePresentConcurrentWithIteration() { 60  try { 61  Iterator<E> iterator = collection.iterator(); 62  assertTrue(collection.remove(e0())); 63  iterator.next(); 64  fail("Expected ConcurrentModificationException"); 65  } catch (ConcurrentModificationException expected) { 66  // success 67  } 68  } 69  70  @CollectionFeature.Require(SUPPORTS_REMOVE) 71  public void testRemove_notPresent() { 72  assertFalse("remove(notPresent) should return false", collection.remove(e3())); 73  expectUnchanged(); 74  } 75  76  @CollectionFeature.Require({SUPPORTS_REMOVE, ALLOWS_NULL_VALUES}) 77  @CollectionSize.Require(absent = ZERO) 78  public void testRemove_nullPresent() { 79  collection = getSubjectGenerator().create(createArrayWithNullElement()); 80  81  int initialSize = collection.size(); 82  assertTrue("remove(null) should return true", collection.remove(null)); 83  assertEquals( 84  "remove(present) should decrease a collection's size by one.", 85  initialSize - 1, 86  collection.size()); 87  expectMissing((E) null); 88  } 89  90  @CollectionFeature.Require(absent = SUPPORTS_REMOVE) 91  @CollectionSize.Require(absent = ZERO) 92  public void testRemove_unsupported() { 93  try { 94  collection.remove(e0()); 95  fail("remove(present) should throw UnsupportedOperationException"); 96  } catch (UnsupportedOperationException expected) { 97  } 98  expectUnchanged(); 99  assertTrue("remove(present) should not remove the element", collection.contains(e0())); 100  } 101  102  @CollectionFeature.Require(absent = SUPPORTS_REMOVE) 103  public void testRemove_unsupportedNotPresent() { 104  try { 105  assertFalse( 106  "remove(notPresent) should return false or throw UnsupportedOperationException", 107  collection.remove(e3())); 108  } catch (UnsupportedOperationException tolerated) { 109  } 110  expectUnchanged(); 111  expectMissing(e3()); 112  } 113  114  @CollectionFeature.Require(value = SUPPORTS_REMOVE, absent = ALLOWS_NULL_QUERIES) 115  public void testRemove_nullNotSupported() { 116  try { 117  assertFalse( 118  "remove(null) should return false or throw NullPointerException", 119  collection.remove(null)); 120  } catch (NullPointerException tolerated) { 121  } 122  expectUnchanged(); 123  } 124  125  @CollectionFeature.Require({SUPPORTS_REMOVE, ALLOWS_NULL_QUERIES}) 126  public void testRemove_nullAllowed() { 127  assertFalse("remove(null) should return false", collection.remove(null)); 128  expectUnchanged(); 129  } 130  131  @CollectionFeature.Require(absent = SUPPORTS_REMOVE) 132  @CollectionSize.Require(absent = ZERO) 133  public void testIteratorRemove_unsupported() { 134  Iterator<E> iterator = collection.iterator(); 135  iterator.next(); 136  try { 137  iterator.remove(); 138  fail("iterator.remove() should throw UnsupportedOperationException"); 139  } catch (UnsupportedOperationException expected) { 140  } 141  expectUnchanged(); 142  assertTrue(collection.contains(e0())); 143  } 144  145  @CollectionFeature.Require(SUPPORTS_REMOVE) 146  public void testRemove_wrongType() { 147  try { 148  assertFalse(collection.remove(WrongType.VALUE)); 149  } catch (ClassCastException tolerated) { 150  } 151  expectUnchanged(); 152  } 153 }