/* * Copyright (C) 2012 The Guava Authors * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package com.google.common.collect.testing.google; import com.google.common.collect.ListMultimap; import com.google.common.collect.testing.AbstractTester; import com.google.common.collect.testing.FeatureSpecificTestSuiteBuilder; import com.google.common.collect.testing.Helpers; import com.google.common.collect.testing.ListTestSuiteBuilder; import com.google.common.collect.testing.OneSizeTestContainerGenerator; import com.google.common.collect.testing.TestListGenerator; import com.google.common.collect.testing.features.CollectionFeature; import com.google.common.collect.testing.features.Feature; import com.google.common.collect.testing.features.ListFeature; import junit.framework.TestSuite; import java.util.List; import java.util.Map.Entry; import java.util.Set; /** * Creates, based on your criteria, a JUnit test suite that exhaustively tests * a {@code ListMultimap} implementation. * * @author Louis Wasserman */ public class ListMultimapTestSuiteBuilder extends MultimapTestSuiteBuilder> { public static ListMultimapTestSuiteBuilder using( TestListMultimapGenerator generator) { ListMultimapTestSuiteBuilder result = new ListMultimapTestSuiteBuilder(); result.usingGenerator(generator); return result; } @Override protected List> getTesters() { List> testers = Helpers.copyToList(super.getTesters()); testers.add(ListMultimapPutTester.class); testers.add(ListMultimapPutAllTester.class); testers.add(ListMultimapRemoveTester.class); testers.add(ListMultimapReplaceValuesTester.class); return testers; } @Override TestSuite computeMultimapGetTestSuite( FeatureSpecificTestSuiteBuilder, Entry>> parentBuilder) { return ListTestSuiteBuilder.using( new MultimapGetGenerator(parentBuilder.getSubjectGenerator())) .withFeatures(computeMultimapGetFeatures(parentBuilder.getFeatures())) .named(parentBuilder.getName() + ".get[key]") .suppressing(parentBuilder.getSuppressedTests()) .createTestSuite(); } @Override Set> computeMultimapGetFeatures( Set> multimapFeatures) { Set> derivedFeatures = super.computeMultimapGetFeatures(multimapFeatures); if (derivedFeatures.contains(CollectionFeature.SUPPORTS_ADD)) { derivedFeatures.add(ListFeature.SUPPORTS_ADD_WITH_INDEX); } if (derivedFeatures.contains(CollectionFeature.GENERAL_PURPOSE)) { derivedFeatures.add(ListFeature.GENERAL_PURPOSE); } return derivedFeatures; } private static class MultimapGetGenerator extends MultimapTestSuiteBuilder.MultimapGetGenerator> implements TestListGenerator { public MultimapGetGenerator( OneSizeTestContainerGenerator, Entry> multimapGenerator) { super(multimapGenerator); } @Override public List create(Object... elements) { return (List) super.create(elements); } } }