Java

Форк
0
/
ListTestSuiteBuilder.java 
159 строк · 6.3 Кб
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

17
package com.google.common.collect.testing;
18

19
import static com.google.common.collect.testing.features.CollectionFeature.KNOWN_ORDER;
20
import static com.google.common.collect.testing.features.CollectionFeature.SERIALIZABLE;
21
import static com.google.common.collect.testing.features.CollectionFeature.SERIALIZABLE_INCLUDING_VIEWS;
22

23
import com.google.common.annotations.GwtIncompatible;
24
import com.google.common.collect.testing.features.CollectionFeature;
25
import com.google.common.collect.testing.features.Feature;
26
import com.google.common.collect.testing.testers.CollectionSerializationEqualTester;
27
import com.google.common.collect.testing.testers.ListAddAllAtIndexTester;
28
import com.google.common.collect.testing.testers.ListAddAllTester;
29
import com.google.common.collect.testing.testers.ListAddAtIndexTester;
30
import com.google.common.collect.testing.testers.ListAddTester;
31
import com.google.common.collect.testing.testers.ListCreationTester;
32
import com.google.common.collect.testing.testers.ListEqualsTester;
33
import com.google.common.collect.testing.testers.ListGetTester;
34
import com.google.common.collect.testing.testers.ListHashCodeTester;
35
import com.google.common.collect.testing.testers.ListIndexOfTester;
36
import com.google.common.collect.testing.testers.ListLastIndexOfTester;
37
import com.google.common.collect.testing.testers.ListListIteratorTester;
38
import com.google.common.collect.testing.testers.ListRemoveAllTester;
39
import com.google.common.collect.testing.testers.ListRemoveAtIndexTester;
40
import com.google.common.collect.testing.testers.ListRemoveTester;
41
import com.google.common.collect.testing.testers.ListReplaceAllTester;
42
import com.google.common.collect.testing.testers.ListRetainAllTester;
43
import com.google.common.collect.testing.testers.ListSetTester;
44
import com.google.common.collect.testing.testers.ListSubListTester;
45
import com.google.common.collect.testing.testers.ListToArrayTester;
46
import com.google.common.testing.SerializableTester;
47
import java.util.ArrayList;
48
import java.util.Collection;
49
import java.util.HashSet;
50
import java.util.List;
51
import java.util.Set;
52
import junit.framework.TestSuite;
53

54
/**
55
 * Creates, based on your criteria, a JUnit test suite that exhaustively tests a List
56
 * implementation.
57
 *
58
 * @author George van den Driessche
59
 */
60
@GwtIncompatible
61
public final class ListTestSuiteBuilder<E>
62
    extends AbstractCollectionTestSuiteBuilder<ListTestSuiteBuilder<E>, E> {
63
  public static <E> ListTestSuiteBuilder<E> using(TestListGenerator<E> generator) {
64
    return new ListTestSuiteBuilder<E>().usingGenerator(generator);
65
  }
66

67
  @SuppressWarnings("rawtypes") // class literals
68
  @Override
69
  protected List<Class<? extends AbstractTester>> getTesters() {
70
    List<Class<? extends AbstractTester>> testers = Helpers.copyToList(super.getTesters());
71

72
    testers.add(CollectionSerializationEqualTester.class);
73
    testers.add(ListAddAllAtIndexTester.class);
74
    testers.add(ListAddAllTester.class);
75
    testers.add(ListAddAtIndexTester.class);
76
    testers.add(ListAddTester.class);
77
    testers.add(ListCreationTester.class);
78
    testers.add(ListEqualsTester.class);
79
    testers.add(ListGetTester.class);
80
    testers.add(ListHashCodeTester.class);
81
    testers.add(ListIndexOfTester.class);
82
    testers.add(ListLastIndexOfTester.class);
83
    testers.add(ListListIteratorTester.class);
84
    testers.add(ListRemoveAllTester.class);
85
    testers.add(ListRemoveAtIndexTester.class);
86
    testers.add(ListRemoveTester.class);
87
    testers.add(ListReplaceAllTester.class);
88
    testers.add(ListRetainAllTester.class);
89
    testers.add(ListSetTester.class);
90
    testers.add(ListSubListTester.class);
91
    testers.add(ListToArrayTester.class);
92
    return testers;
93
  }
94

95
  /**
96
   * Specifies {@link CollectionFeature#KNOWN_ORDER} for all list tests, since lists have an
97
   * iteration ordering corresponding to the insertion order.
98
   */
99
  @Override
100
  public TestSuite createTestSuite() {
101
    withFeatures(KNOWN_ORDER);
102
    return super.createTestSuite();
103
  }
104

105
  @Override
106
  protected List<TestSuite> createDerivedSuites(
107
      FeatureSpecificTestSuiteBuilder<?, ? extends OneSizeTestContainerGenerator<Collection<E>, E>>
108
          parentBuilder) {
109
    List<TestSuite> derivedSuites = new ArrayList<>(super.createDerivedSuites(parentBuilder));
110

111
    if (parentBuilder.getFeatures().contains(SERIALIZABLE)) {
112
      derivedSuites.add(
113
          ListTestSuiteBuilder.using(
114
                  new ReserializedListGenerator<E>(parentBuilder.getSubjectGenerator()))
115
              .named(getName() + " reserialized")
116
              .withFeatures(computeReserializedCollectionFeatures(parentBuilder.getFeatures()))
117
              .suppressing(parentBuilder.getSuppressedTests())
118
              .withSetUp(parentBuilder.getSetUp())
119
              .withTearDown(parentBuilder.getTearDown())
120
              .createTestSuite());
121
    }
122
    return derivedSuites;
123
  }
124

125
  static class ReserializedListGenerator<E> implements TestListGenerator<E> {
126
    final OneSizeTestContainerGenerator<Collection<E>, E> gen;
127

128
    private ReserializedListGenerator(OneSizeTestContainerGenerator<Collection<E>, E> gen) {
129
      this.gen = gen;
130
    }
131

132
    @Override
133
    public SampleElements<E> samples() {
134
      return gen.samples();
135
    }
136

137
    @Override
138
    public List<E> create(Object... elements) {
139
      return (List<E>) SerializableTester.reserialize(gen.create(elements));
140
    }
141

142
    @Override
143
    public E[] createArray(int length) {
144
      return gen.createArray(length);
145
    }
146

147
    @Override
148
    public Iterable<E> order(List<E> insertionOrder) {
149
      return gen.order(insertionOrder);
150
    }
151
  }
152

153
  private static Set<Feature<?>> computeReserializedCollectionFeatures(Set<Feature<?>> features) {
154
    Set<Feature<?>> derivedFeatures = new HashSet<>(features);
155
    derivedFeatures.remove(SERIALIZABLE);
156
    derivedFeatures.remove(SERIALIZABLE_INCLUDING_VIEWS);
157
    return derivedFeatures;
158
  }
159
}
160

Использование cookies

Мы используем файлы cookie в соответствии с Политикой конфиденциальности и Политикой использования cookies.

Нажимая кнопку «Принимаю», Вы даете АО «СберТех» согласие на обработку Ваших персональных данных в целях совершенствования нашего веб-сайта и Сервиса GitVerse, а также повышения удобства их использования.

Запретить использование cookies Вы можете самостоятельно в настройках Вашего браузера.