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

Class Class, % Method, % Line, %
CollectionAddTester 100% (1/1) 100% (10/10) 86.1% (31/36)


1 /* 2  * Copyright (C) 2007 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_VALUES; 20 import static com.google.common.collect.testing.features.CollectionFeature.FAILS_FAST_ON_CONCURRENT_MODIFICATION; 21 import static com.google.common.collect.testing.features.CollectionFeature.RESTRICTS_ELEMENTS; 22 import static com.google.common.collect.testing.features.CollectionFeature.SUPPORTS_ADD; 23 import static com.google.common.collect.testing.features.CollectionSize.ZERO; 24  25 import com.google.common.annotations.GwtCompatible; 26 import com.google.common.annotations.GwtIncompatible; 27 import com.google.common.collect.testing.AbstractCollectionTester; 28 import com.google.common.collect.testing.Helpers; 29 import com.google.common.collect.testing.features.CollectionFeature; 30 import com.google.common.collect.testing.features.CollectionSize; 31 import java.lang.reflect.Method; 32 import java.util.ConcurrentModificationException; 33 import java.util.Iterator; 34 import org.junit.Ignore; 35  36 /** 37  * A generic JUnit test which tests {@code add} operations on a collection. Can't be invoked 38  * directly; please see {@link com.google.common.collect.testing.CollectionTestSuiteBuilder}. 39  * 40  * @author Chris Povirk 41  * @author Kevin Bourrillion 42  */ 43 @SuppressWarnings("unchecked") // too many "unchecked generic array creations" 44 @GwtCompatible(emulated = true) 45 @Ignore // Affects only Android test runner, which respects JUnit 4 annotations on JUnit 3 tests. 46 public class CollectionAddTester<E> extends AbstractCollectionTester<E> { 47  @CollectionFeature.Require(SUPPORTS_ADD) 48  public void testAdd_supportedNotPresent() { 49  assertTrue("add(notPresent) should return true", collection.add(e3())); 50  expectAdded(e3()); 51  } 52  53  @CollectionFeature.Require(absent = SUPPORTS_ADD) 54  public void testAdd_unsupportedNotPresent() { 55  try { 56  collection.add(e3()); 57  fail("add(notPresent) should throw"); 58  } catch (UnsupportedOperationException expected) { 59  } 60  expectUnchanged(); 61  expectMissing(e3()); 62  } 63  64  @CollectionFeature.Require(absent = SUPPORTS_ADD) 65  @CollectionSize.Require(absent = ZERO) 66  public void testAdd_unsupportedPresent() { 67  try { 68  assertFalse("add(present) should return false or throw", collection.add(e0())); 69  } catch (UnsupportedOperationException tolerated) { 70  } 71  expectUnchanged(); 72  } 73  74  @CollectionFeature.Require( 75  value = {SUPPORTS_ADD, ALLOWS_NULL_VALUES}, 76  absent = RESTRICTS_ELEMENTS) 77  public void testAdd_nullSupported() { 78  assertTrue("add(null) should return true", collection.add(null)); 79  expectAdded((E) null); 80  } 81  82  @CollectionFeature.Require(value = SUPPORTS_ADD, absent = ALLOWS_NULL_VALUES) 83  public void testAdd_nullUnsupported() { 84  try { 85  collection.add(null); 86  fail("add(null) should throw"); 87  } catch (NullPointerException expected) { 88  } 89  expectUnchanged(); 90  expectNullMissingWhenNullUnsupported("Should not contain null after unsupported add(null)"); 91  } 92  93  @CollectionFeature.Require({SUPPORTS_ADD, FAILS_FAST_ON_CONCURRENT_MODIFICATION}) 94  @CollectionSize.Require(absent = ZERO) 95  public void testAddConcurrentWithIteration() { 96  try { 97  Iterator<E> iterator = collection.iterator(); 98  assertTrue(collection.add(e3())); 99  iterator.next(); 100  fail("Expected ConcurrentModificationException"); 101  } catch (ConcurrentModificationException expected) { 102  // success 103  } 104  } 105  106  /** 107  * Returns the {@link Method} instance for {@link #testAdd_nullSupported()} so that tests of 108  * {@link java.util.Collections#checkedCollection(java.util.Collection, Class)} can suppress it 109  * with {@code FeatureSpecificTestSuiteBuilder.suppressing()} until <a 110  * href="http://bugs.sun.com/bugdatabase/view_bug.do?bug_id=6409434">Sun bug 6409434</a> is fixed. 111  * It's unclear whether nulls were to be permitted or forbidden, but presumably the eventual fix 112  * will be to permit them, as it seems more likely that code would depend on that behavior than on 113  * the other. Thus, we say the bug is in add(), which fails to support null. 114  */ 115  @GwtIncompatible // reflection 116  public static Method getAddNullSupportedMethod() { 117  return Helpers.getMethod(CollectionAddTester.class, "testAdd_nullSupported"); 118  } 119  120  /** 121  * Returns the {@link Method} instance for {@link #testAdd_nullSupported()} so that tests of 122  * {@link java.util.TreeSet} can suppress it with {@code 123  * FeatureSpecificTestSuiteBuilder.suppressing()} until <a 124  * href="http://bugs.sun.com/bugdatabase/view_bug.do?bug_id=5045147">Sun bug 5045147</a> is fixed. 125  */ 126  @GwtIncompatible // reflection 127  public static Method getAddNullUnsupportedMethod() { 128  return Helpers.getMethod(CollectionAddTester.class, "testAdd_nullUnsupported"); 129  } 130  131  /** 132  * Returns the {@link Method} instance for {@link #testAdd_unsupportedNotPresent()} so that tests 133  * can suppress it with {@code FeatureSpecificTestSuiteBuilder.suppressing()} while we figure out 134  * what to do with <a href="http://goo.gl/qJBruX">{@code ConcurrentHashMap} support for {@code 135  * entrySet().add()}</a>. 136  */ 137  @GwtIncompatible // reflection 138  public static Method getAddUnsupportedNotPresentMethod() { 139  return Helpers.getMethod(CollectionAddTester.class, "testAdd_unsupportedNotPresent"); 140  } 141 }