SetMultimapTestSuiteBuilder.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.SetMultimap; 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.OneSizeTestContainerGenerator; 24import com.google.common.collect.testing.SetTestSuiteBuilder; 25import com.google.common.collect.testing.TestSetGenerator; 26 27import junit.framework.TestSuite; 28 29import java.util.List; 30import java.util.Map; 31import java.util.Map.Entry; 32import java.util.Set; 33 34/** 35 * Creates, based on your criteria, a JUnit test suite that exhaustively tests 36 * a {@code SetMultimap} implementation. 37 * 38 * @author Louis Wasserman 39 */ 40public class SetMultimapTestSuiteBuilder<K, V> 41 extends MultimapTestSuiteBuilder<K, V, SetMultimap<K, V>> { 42 43 public static <K, V> SetMultimapTestSuiteBuilder<K, V> using( 44 TestSetMultimapGenerator<K, V> generator) { 45 SetMultimapTestSuiteBuilder<K, V> result = new SetMultimapTestSuiteBuilder<K, V>(); 46 result.usingGenerator(generator); 47 return result; 48 } 49 50 @Override protected List<Class<? extends AbstractTester>> getTesters() { 51 List<Class<? extends AbstractTester>> testers = Helpers.copyToList(super.getTesters()); 52 testers.add(SetMultimapPutTester.class); 53 testers.add(SetMultimapPutAllTester.class); 54 testers.add(SetMultimapReplaceValuesTester.class); 55 return testers; 56 } 57 58 @Override 59 TestSuite computeMultimapGetTestSuite( 60 FeatureSpecificTestSuiteBuilder<?, ? extends 61 OneSizeTestContainerGenerator<SetMultimap<K, V>, Entry<K, V>>> parentBuilder) { 62 return SetTestSuiteBuilder.using( 63 new MultimapGetGenerator<K, V>(parentBuilder.getSubjectGenerator())) 64 .withFeatures(computeMultimapGetFeatures(parentBuilder.getFeatures())) 65 .named(parentBuilder.getName() + ".get[key]") 66 .suppressing(parentBuilder.getSuppressedTests()) 67 .createTestSuite(); 68 } 69 70 @Override 71 TestSuite computeEntriesTestSuite( 72 FeatureSpecificTestSuiteBuilder<?, ? extends 73 OneSizeTestContainerGenerator<SetMultimap<K, V>, Map.Entry<K, V>>> parentBuilder) { 74 return SetTestSuiteBuilder.using( 75 new EntriesGenerator<K, V>(parentBuilder.getSubjectGenerator())) 76 .withFeatures(computeEntriesFeatures(parentBuilder.getFeatures())) 77 .named(parentBuilder.getName() + ".entries") 78 .suppressing(parentBuilder.getSuppressedTests()) 79 .createTestSuite(); 80 } 81 82 private static class EntriesGenerator<K, V> 83 extends MultimapTestSuiteBuilder.EntriesGenerator<K, V, SetMultimap<K, V>> 84 implements TestSetGenerator<Entry<K, V>> { 85 86 public EntriesGenerator( 87 OneSizeTestContainerGenerator<SetMultimap<K, V>, Entry<K, V>> multimapGenerator) { 88 super(multimapGenerator); 89 } 90 91 @Override 92 public Set<Entry<K, V>> create(Object... elements) { 93 return (Set<Entry<K, V>>) super.create(elements); 94 } 95 } 96 97 private static class MultimapGetGenerator<K, V> 98 extends MultimapTestSuiteBuilder.MultimapGetGenerator<K, V, SetMultimap<K, V>> 99 implements TestSetGenerator<V> { 100 public MultimapGetGenerator( 101 OneSizeTestContainerGenerator<SetMultimap<K, V>, Entry<K, V>> multimapGenerator) { 102 super(multimapGenerator); 103 } 104 105 @Override 106 public Set<V> create(Object... elements) { 107 return (Set<V>) super.create(elements); 108 } 109 110 } 111} 112