Coverage Summary for Class: TestsForListsInJavaUtil (com.google.common.collect.testing)
| Class | Method, % | Line, % |
|---|---|---|
| TestsForListsInJavaUtil | 96% (24/25) | 98.8% (85/86) |
| TestsForListsInJavaUtil$1 | 100% (2/2) | 100% (2/2) |
| TestsForListsInJavaUtil$10 | 100% (2/2) | 100% (4/4) |
| TestsForListsInJavaUtil$10$1 | 100% (3/3) | 100% (3/3) |
| TestsForListsInJavaUtil$11 | 100% (2/2) | 100% (2/2) |
| TestsForListsInJavaUtil$2 | 100% (2/2) | 100% (2/2) |
| TestsForListsInJavaUtil$3 | 100% (2/2) | 100% (2/2) |
| TestsForListsInJavaUtil$4 | 100% (2/2) | 100% (2/2) |
| TestsForListsInJavaUtil$5 | 100% (2/2) | 100% (2/2) |
| TestsForListsInJavaUtil$6 | 100% (2/2) | 100% (2/2) |
| TestsForListsInJavaUtil$7 | 100% (2/2) | 100% (4/4) |
| TestsForListsInJavaUtil$8 | 100% (2/2) | 100% (4/4) |
| TestsForListsInJavaUtil$9 | 100% (2/2) | 100% (2/2) |
| TestsForListsInJavaUtil$9$1 | 100% (3/3) | 100% (3/3) |
| Total | 98.1% (52/53) | 99.2% (119/120) |
1 /* 2 * Copyright (C) 2009 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; 18 19 import static com.google.common.collect.testing.testers.CollectionSpliteratorTester.getSpliteratorNotImmutableCollectionAllowsAddMethod; 20 import static com.google.common.collect.testing.testers.CollectionSpliteratorTester.getSpliteratorNotImmutableCollectionAllowsRemoveMethod; 21 import static com.google.common.collect.testing.testers.ListListIteratorTester.getListIteratorFullyModifiableMethod; 22 import static com.google.common.collect.testing.testers.ListSubListTester.getSubListOriginalListSetAffectsSubListLargeListMethod; 23 import static com.google.common.collect.testing.testers.ListSubListTester.getSubListOriginalListSetAffectsSubListMethod; 24 import static com.google.common.collect.testing.testers.ListSubListTester.getSubListSubListRemoveAffectsOriginalLargeListMethod; 25 import static java.util.Arrays.asList; 26 27 import com.google.common.annotations.GwtIncompatible; 28 import com.google.common.collect.testing.features.CollectionFeature; 29 import com.google.common.collect.testing.features.CollectionSize; 30 import com.google.common.collect.testing.features.ListFeature; 31 import java.lang.reflect.Method; 32 import java.util.AbstractList; 33 import java.util.AbstractSequentialList; 34 import java.util.ArrayList; 35 import java.util.Arrays; 36 import java.util.Collection; 37 import java.util.Collections; 38 import java.util.LinkedList; 39 import java.util.List; 40 import java.util.ListIterator; 41 import java.util.Vector; 42 import java.util.concurrent.CopyOnWriteArrayList; 43 import junit.framework.Test; 44 import junit.framework.TestSuite; 45 46 /** 47 * Generates a test suite covering the {@link List} implementations in the {@link java.util} 48 * package. Can be subclassed to specify tests that should be suppressed. 49 * 50 * @author Kevin Bourrillion 51 */ 52 @GwtIncompatible 53 public class TestsForListsInJavaUtil { 54 public static Test suite() { 55 return new TestsForListsInJavaUtil().allTests(); 56 } 57 58 public Test allTests() { 59 TestSuite suite = new TestSuite("java.util Lists"); 60 suite.addTest(testsForEmptyList()); 61 suite.addTest(testsForSingletonList()); 62 suite.addTest(testsForArraysAsList()); 63 suite.addTest(testsForArrayList()); 64 suite.addTest(testsForLinkedList()); 65 suite.addTest(testsForCopyOnWriteArrayList()); 66 suite.addTest(testsForUnmodifiableList()); 67 suite.addTest(testsForCheckedList()); 68 suite.addTest(testsForAbstractList()); 69 suite.addTest(testsForAbstractSequentialList()); 70 suite.addTest(testsForVector()); 71 return suite; 72 } 73 74 protected Collection<Method> suppressForEmptyList() { 75 return Collections.emptySet(); 76 } 77 78 protected Collection<Method> suppressForSingletonList() { 79 return Collections.emptySet(); 80 } 81 82 protected Collection<Method> suppressForArraysAsList() { 83 return Collections.emptySet(); 84 } 85 86 protected Collection<Method> suppressForArrayList() { 87 return Collections.emptySet(); 88 } 89 90 protected Collection<Method> suppressForLinkedList() { 91 return Collections.emptySet(); 92 } 93 94 protected Collection<Method> suppressForCopyOnWriteArrayList() { 95 return asList( 96 getSubListOriginalListSetAffectsSubListMethod(), 97 getSubListOriginalListSetAffectsSubListLargeListMethod(), 98 getSubListSubListRemoveAffectsOriginalLargeListMethod(), 99 getListIteratorFullyModifiableMethod(), 100 getSpliteratorNotImmutableCollectionAllowsAddMethod(), 101 getSpliteratorNotImmutableCollectionAllowsRemoveMethod()); 102 } 103 104 protected Collection<Method> suppressForUnmodifiableList() { 105 return Collections.emptySet(); 106 } 107 108 protected Collection<Method> suppressForCheckedList() { 109 return Collections.emptySet(); 110 } 111 112 protected Collection<Method> suppressForAbstractList() { 113 return Collections.emptySet(); 114 } 115 116 protected Collection<Method> suppressForAbstractSequentialList() { 117 return Collections.emptySet(); 118 } 119 120 protected Collection<Method> suppressForVector() { 121 return Collections.emptySet(); 122 } 123 124 public Test testsForEmptyList() { 125 return ListTestSuiteBuilder.using( 126 new TestStringListGenerator() { 127 @Override 128 public List<String> create(String[] elements) { 129 return Collections.emptyList(); 130 } 131 }) 132 .named("emptyList") 133 .withFeatures(CollectionFeature.SERIALIZABLE, CollectionSize.ZERO) 134 .suppressing(suppressForEmptyList()) 135 .createTestSuite(); 136 } 137 138 public Test testsForSingletonList() { 139 return ListTestSuiteBuilder.using( 140 new TestStringListGenerator() { 141 @Override 142 public List<String> create(String[] elements) { 143 return Collections.singletonList(elements[0]); 144 } 145 }) 146 .named("singletonList") 147 .withFeatures( 148 CollectionFeature.SERIALIZABLE, 149 CollectionFeature.ALLOWS_NULL_VALUES, 150 CollectionSize.ONE) 151 .suppressing(suppressForSingletonList()) 152 .createTestSuite(); 153 } 154 155 public Test testsForArraysAsList() { 156 return ListTestSuiteBuilder.using( 157 new TestStringListGenerator() { 158 @Override 159 public List<String> create(String[] elements) { 160 return Arrays.asList(elements.clone()); 161 } 162 }) 163 .named("Arrays.asList") 164 .withFeatures( 165 ListFeature.SUPPORTS_SET, 166 CollectionFeature.SERIALIZABLE, 167 CollectionFeature.ALLOWS_NULL_VALUES, 168 CollectionSize.ANY) 169 .suppressing(suppressForArraysAsList()) 170 .createTestSuite(); 171 } 172 173 public Test testsForArrayList() { 174 return ListTestSuiteBuilder.using( 175 new TestStringListGenerator() { 176 @Override 177 public List<String> create(String[] elements) { 178 return new ArrayList<>(MinimalCollection.of(elements)); 179 } 180 }) 181 .named("ArrayList") 182 .withFeatures( 183 ListFeature.GENERAL_PURPOSE, 184 CollectionFeature.SERIALIZABLE, 185 CollectionFeature.ALLOWS_NULL_VALUES, 186 CollectionFeature.FAILS_FAST_ON_CONCURRENT_MODIFICATION, 187 CollectionSize.ANY) 188 .suppressing(suppressForArrayList()) 189 .createTestSuite(); 190 } 191 192 public Test testsForLinkedList() { 193 return ListTestSuiteBuilder.using( 194 new TestStringListGenerator() { 195 @Override 196 public List<String> create(String[] elements) { 197 return new LinkedList<>(MinimalCollection.of(elements)); 198 } 199 }) 200 .named("LinkedList") 201 .withFeatures( 202 ListFeature.GENERAL_PURPOSE, 203 CollectionFeature.SERIALIZABLE, 204 CollectionFeature.ALLOWS_NULL_VALUES, 205 CollectionFeature.FAILS_FAST_ON_CONCURRENT_MODIFICATION, 206 CollectionSize.ANY) 207 .suppressing(suppressForLinkedList()) 208 .createTestSuite(); 209 } 210 211 public Test testsForCopyOnWriteArrayList() { 212 return ListTestSuiteBuilder.using( 213 new TestStringListGenerator() { 214 @Override 215 public List<String> create(String[] elements) { 216 return new CopyOnWriteArrayList<>(MinimalCollection.of(elements)); 217 } 218 }) 219 .named("CopyOnWriteArrayList") 220 .withFeatures( 221 ListFeature.SUPPORTS_ADD_WITH_INDEX, 222 ListFeature.SUPPORTS_REMOVE_WITH_INDEX, 223 ListFeature.SUPPORTS_SET, 224 CollectionFeature.SUPPORTS_ADD, 225 CollectionFeature.SUPPORTS_REMOVE, 226 CollectionFeature.SERIALIZABLE, 227 CollectionFeature.ALLOWS_NULL_VALUES, 228 CollectionSize.ANY) 229 .suppressing(suppressForCopyOnWriteArrayList()) 230 .createTestSuite(); 231 } 232 233 public Test testsForUnmodifiableList() { 234 return ListTestSuiteBuilder.using( 235 new TestStringListGenerator() { 236 @Override 237 public List<String> create(String[] elements) { 238 List<String> innerList = new ArrayList<>(); 239 Collections.addAll(innerList, elements); 240 return Collections.unmodifiableList(innerList); 241 } 242 }) 243 .named("unmodifiableList/ArrayList") 244 .withFeatures( 245 CollectionFeature.SERIALIZABLE, 246 CollectionFeature.ALLOWS_NULL_VALUES, 247 CollectionSize.ANY) 248 .suppressing(suppressForUnmodifiableList()) 249 .createTestSuite(); 250 } 251 252 public Test testsForCheckedList() { 253 return ListTestSuiteBuilder.using( 254 new TestStringListGenerator() { 255 @Override 256 public List<String> create(String[] elements) { 257 List<String> innerList = new ArrayList<>(); 258 Collections.addAll(innerList, elements); 259 return Collections.checkedList(innerList, String.class); 260 } 261 }) 262 .named("checkedList/ArrayList") 263 .withFeatures( 264 ListFeature.GENERAL_PURPOSE, 265 CollectionFeature.SERIALIZABLE, 266 CollectionFeature.RESTRICTS_ELEMENTS, 267 CollectionFeature.ALLOWS_NULL_VALUES, 268 CollectionSize.ANY) 269 .suppressing(suppressForCheckedList()) 270 .createTestSuite(); 271 } 272 273 public Test testsForAbstractList() { 274 return ListTestSuiteBuilder.using( 275 new TestStringListGenerator() { 276 @Override 277 protected List<String> create(final String[] elements) { 278 return new AbstractList<String>() { 279 @Override 280 public int size() { 281 return elements.length; 282 } 283 284 @Override 285 public String get(int index) { 286 return elements[index]; 287 } 288 }; 289 } 290 }) 291 .named("AbstractList") 292 .withFeatures( 293 CollectionFeature.NONE, CollectionFeature.ALLOWS_NULL_VALUES, CollectionSize.ANY) 294 .suppressing(suppressForAbstractList()) 295 .createTestSuite(); 296 } 297 298 public Test testsForAbstractSequentialList() { 299 return ListTestSuiteBuilder.using( 300 new TestStringListGenerator() { 301 @Override 302 protected List<String> create(final String[] elements) { 303 // For this test we trust ArrayList works 304 final List<String> list = new ArrayList<>(); 305 Collections.addAll(list, elements); 306 return new AbstractSequentialList<String>() { 307 @Override 308 public int size() { 309 return list.size(); 310 } 311 312 @Override 313 public ListIterator<String> listIterator(int index) { 314 return list.listIterator(index); 315 } 316 }; 317 } 318 }) 319 .named("AbstractSequentialList") 320 .withFeatures( 321 ListFeature.GENERAL_PURPOSE, CollectionFeature.ALLOWS_NULL_VALUES, CollectionSize.ANY) 322 .suppressing(suppressForAbstractSequentialList()) 323 .createTestSuite(); 324 } 325 326 private Test testsForVector() { 327 return ListTestSuiteBuilder.using( 328 new TestStringListGenerator() { 329 @Override 330 protected List<String> create(String[] elements) { 331 return new Vector<>(MinimalCollection.of(elements)); 332 } 333 }) 334 .named("Vector") 335 .withFeatures( 336 ListFeature.GENERAL_PURPOSE, 337 CollectionFeature.ALLOWS_NULL_VALUES, 338 CollectionFeature.FAILS_FAST_ON_CONCURRENT_MODIFICATION, 339 CollectionFeature.SERIALIZABLE, 340 CollectionSize.ANY) 341 .createTestSuite(); 342 } 343 }