SetCreationTester.java revision 3c77433663281544363151bf284b0240dfd22a42
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 17package com.google.common.collect.testing.testers; 18 19import static com.google.common.collect.testing.features.CollectionFeature.ALLOWS_NULL_VALUES; 20import static com.google.common.collect.testing.features.CollectionFeature.REJECTS_DUPLICATES_AT_CREATION; 21import static com.google.common.collect.testing.features.CollectionSize.ONE; 22import static com.google.common.collect.testing.features.CollectionSize.ZERO; 23 24import com.google.common.annotations.GwtCompatible; 25import com.google.common.collect.testing.features.CollectionFeature; 26import com.google.common.collect.testing.features.CollectionSize; 27 28import java.util.Arrays; 29import java.util.List; 30 31/** 32 * A generic JUnit test which tests creation (typically through a constructor or 33 * static factory method) of a set. Can't be invoked directly; please see 34 * {@link com.google.common.collect.testing.SetTestSuiteBuilder}. 35 * 36 * <p>This class is GWT compatible. 37 * 38 * @author Chris Povirk 39 */ 40@GwtCompatible 41public class SetCreationTester<E> extends AbstractSetTester<E> { 42 @CollectionFeature.Require(value = ALLOWS_NULL_VALUES, 43 absent = REJECTS_DUPLICATES_AT_CREATION) 44 @CollectionSize.Require(absent = {ZERO, ONE}) 45 public void testCreateWithDuplicates_nullDuplicatesNotRejected() { 46 E[] array = createArrayWithNullElement(); 47 array[0] = null; 48 collection = getSubjectGenerator().create(array); 49 50 List<E> expectedWithDuplicateRemoved = 51 Arrays.asList(array).subList(1, getNumElements()); 52 expectContents(expectedWithDuplicateRemoved); 53 } 54 55 @CollectionFeature.Require(absent = REJECTS_DUPLICATES_AT_CREATION) 56 @CollectionSize.Require(absent = {ZERO, ONE}) 57 public void testCreateWithDuplicates_nonNullDuplicatesNotRejected() { 58 E[] array = createSamplesArray(); 59 array[1] = samples.e0; 60 collection = getSubjectGenerator().create(array); 61 62 List<E> expectedWithDuplicateRemoved = 63 Arrays.asList(array).subList(1, getNumElements()); 64 expectContents(expectedWithDuplicateRemoved); 65 } 66 67 @CollectionFeature.Require( 68 {ALLOWS_NULL_VALUES, REJECTS_DUPLICATES_AT_CREATION}) 69 @CollectionSize.Require(absent = {ZERO, ONE}) 70 public void testCreateWithDuplicates_nullDuplicatesRejected() { 71 E[] array = createArrayWithNullElement(); 72 array[0] = null; 73 try { 74 collection = getSubjectGenerator().create(array); 75 fail("Should reject duplicate null elements at creation"); 76 } catch (IllegalArgumentException expected) { 77 } 78 } 79 80 @CollectionFeature.Require(REJECTS_DUPLICATES_AT_CREATION) 81 @CollectionSize.Require(absent = {ZERO, ONE}) 82 public void testCreateWithDuplicates_nonNullDuplicatesRejected() { 83 E[] array = createSamplesArray(); 84 array[1] = samples.e0; 85 try { 86 collection = getSubjectGenerator().create(array); 87 fail("Should reject duplicate non-null elements at creation"); 88 } catch (IllegalArgumentException expected) { 89 } 90 } 91} 92