guava
123 строки · 4.6 Кб
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;
18
19import static com.google.common.collect.testing.features.CollectionFeature.SERIALIZABLE;
20import static com.google.common.collect.testing.features.CollectionFeature.SERIALIZABLE_INCLUDING_VIEWS;
21
22import com.google.common.annotations.GwtIncompatible;
23import com.google.common.collect.testing.features.Feature;
24import com.google.common.collect.testing.testers.CollectionSerializationEqualTester;
25import com.google.common.collect.testing.testers.SetAddAllTester;
26import com.google.common.collect.testing.testers.SetAddTester;
27import com.google.common.collect.testing.testers.SetCreationTester;
28import com.google.common.collect.testing.testers.SetEqualsTester;
29import com.google.common.collect.testing.testers.SetHashCodeTester;
30import com.google.common.collect.testing.testers.SetRemoveTester;
31import com.google.common.testing.SerializableTester;
32import java.util.ArrayList;
33import java.util.Collection;
34import java.util.HashSet;
35import java.util.List;
36import java.util.Set;
37import junit.framework.TestSuite;
38
39/**
40* Creates, based on your criteria, a JUnit test suite that exhaustively tests a Set implementation.
41*
42* @author George van den Driessche
43*/
44@GwtIncompatible
45public class SetTestSuiteBuilder<E>
46extends AbstractCollectionTestSuiteBuilder<SetTestSuiteBuilder<E>, E> {
47public static <E> SetTestSuiteBuilder<E> using(TestSetGenerator<E> generator) {
48return new SetTestSuiteBuilder<E>().usingGenerator(generator);
49}
50
51@SuppressWarnings("rawtypes") // class literals
52@Override
53protected List<Class<? extends AbstractTester>> getTesters() {
54List<Class<? extends AbstractTester>> testers = Helpers.copyToList(super.getTesters());
55
56testers.add(CollectionSerializationEqualTester.class);
57testers.add(SetAddAllTester.class);
58testers.add(SetAddTester.class);
59testers.add(SetCreationTester.class);
60testers.add(SetHashCodeTester.class);
61testers.add(SetEqualsTester.class);
62testers.add(SetRemoveTester.class);
63// SetRemoveAllTester doesn't exist because, Sets not permitting
64// duplicate elements, there are no tests for Set.removeAll() that aren't
65// covered by CollectionRemoveAllTester.
66return testers;
67}
68
69@Override
70protected List<TestSuite> createDerivedSuites(
71FeatureSpecificTestSuiteBuilder<?, ? extends OneSizeTestContainerGenerator<Collection<E>, E>>
72parentBuilder) {
73List<TestSuite> derivedSuites = new ArrayList<>(super.createDerivedSuites(parentBuilder));
74
75if (parentBuilder.getFeatures().contains(SERIALIZABLE)) {
76derivedSuites.add(
77SetTestSuiteBuilder.using(
78new ReserializedSetGenerator<E>(parentBuilder.getSubjectGenerator()))
79.named(getName() + " reserialized")
80.withFeatures(computeReserializedCollectionFeatures(parentBuilder.getFeatures()))
81.suppressing(parentBuilder.getSuppressedTests())
82.withSetUp(parentBuilder.getSetUp())
83.withTearDown(parentBuilder.getTearDown())
84.createTestSuite());
85}
86return derivedSuites;
87}
88
89static class ReserializedSetGenerator<E> implements TestSetGenerator<E> {
90final OneSizeTestContainerGenerator<Collection<E>, E> gen;
91
92private ReserializedSetGenerator(OneSizeTestContainerGenerator<Collection<E>, E> gen) {
93this.gen = gen;
94}
95
96@Override
97public SampleElements<E> samples() {
98return gen.samples();
99}
100
101@Override
102public Set<E> create(Object... elements) {
103return (Set<E>) SerializableTester.reserialize(gen.create(elements));
104}
105
106@Override
107public E[] createArray(int length) {
108return gen.createArray(length);
109}
110
111@Override
112public Iterable<E> order(List<E> insertionOrder) {
113return gen.order(insertionOrder);
114}
115}
116
117private static Set<Feature<?>> computeReserializedCollectionFeatures(Set<Feature<?>> features) {
118Set<Feature<?>> derivedFeatures = new HashSet<>(features);
119derivedFeatures.remove(SERIALIZABLE);
120derivedFeatures.remove(SERIALIZABLE_INCLUDING_VIEWS);
121return derivedFeatures;
122}
123}
124