ListMultimapTestSuiteBuilder.java revision 3c77433663281544363151bf284b0240dfd22a42
1/* 2 * Copyright (C) 2012 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.google; 18 19import com.google.common.collect.ListMultimap; 20import com.google.common.collect.testing.AbstractTester; 21import com.google.common.collect.testing.FeatureSpecificTestSuiteBuilder; 22import com.google.common.collect.testing.Helpers; 23import com.google.common.collect.testing.ListTestSuiteBuilder; 24import com.google.common.collect.testing.OneSizeTestContainerGenerator; 25import com.google.common.collect.testing.TestListGenerator; 26import com.google.common.collect.testing.features.CollectionFeature; 27import com.google.common.collect.testing.features.Feature; 28import com.google.common.collect.testing.features.ListFeature; 29 30import junit.framework.TestSuite; 31 32import java.util.List; 33import java.util.Map.Entry; 34import java.util.Set; 35 36/** 37 * Creates, based on your criteria, a JUnit test suite that exhaustively tests 38 * a {@code ListMultimap} implementation. 39 * 40 * @author Louis Wasserman 41 */ 42public class ListMultimapTestSuiteBuilder<K, V> extends 43 MultimapTestSuiteBuilder<K, V, ListMultimap<K, V>> { 44 45 public static <K, V> ListMultimapTestSuiteBuilder<K, V> using( 46 TestListMultimapGenerator<K, V> generator) { 47 ListMultimapTestSuiteBuilder<K, V> result = new ListMultimapTestSuiteBuilder<K, V>(); 48 result.usingGenerator(generator); 49 return result; 50 } 51 52 @Override protected List<Class<? extends AbstractTester>> getTesters() { 53 List<Class<? extends AbstractTester>> testers = Helpers.copyToList(super.getTesters()); 54 testers.add(ListMultimapPutTester.class); 55 testers.add(ListMultimapPutAllTester.class); 56 testers.add(ListMultimapRemoveTester.class); 57 testers.add(ListMultimapReplaceValuesTester.class); 58 return testers; 59 } 60 61 @Override 62 TestSuite computeMultimapGetTestSuite( 63 FeatureSpecificTestSuiteBuilder<?, ? extends 64 OneSizeTestContainerGenerator<ListMultimap<K, V>, Entry<K, V>>> parentBuilder) { 65 return ListTestSuiteBuilder.using( 66 new MultimapGetGenerator<K, V>(parentBuilder.getSubjectGenerator())) 67 .withFeatures(computeMultimapGetFeatures(parentBuilder.getFeatures())) 68 .named(parentBuilder.getName() + ".get[key]") 69 .suppressing(parentBuilder.getSuppressedTests()) 70 .createTestSuite(); 71 } 72 73 @Override 74 Set<Feature<?>> computeMultimapGetFeatures( 75 Set<Feature<?>> multimapFeatures) { 76 Set<Feature<?>> derivedFeatures = super.computeMultimapGetFeatures(multimapFeatures); 77 if (derivedFeatures.contains(CollectionFeature.SUPPORTS_ADD)) { 78 derivedFeatures.add(ListFeature.SUPPORTS_ADD_WITH_INDEX); 79 } 80 if (derivedFeatures.contains(CollectionFeature.GENERAL_PURPOSE)) { 81 derivedFeatures.add(ListFeature.GENERAL_PURPOSE); 82 } 83 return derivedFeatures; 84 } 85 86 private static class MultimapGetGenerator<K, V> 87 extends MultimapTestSuiteBuilder.MultimapGetGenerator<K, V, ListMultimap<K, V>> 88 implements TestListGenerator<V> { 89 public MultimapGetGenerator( 90 OneSizeTestContainerGenerator<ListMultimap<K, V>, Entry<K, V>> multimapGenerator) { 91 super(multimapGenerator); 92 } 93 94 @Override 95 public List<V> create(Object... elements) { 96 return (List<V>) super.create(elements); 97 } 98 99 } 100} 101