1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17 package com.google.common.collect.testing.google;
18
19 import com.google.common.collect.SetMultimap;
20 import com.google.common.collect.testing.AbstractTester;
21 import com.google.common.collect.testing.FeatureSpecificTestSuiteBuilder;
22 import com.google.common.collect.testing.Helpers;
23 import com.google.common.collect.testing.OneSizeTestContainerGenerator;
24 import com.google.common.collect.testing.SetTestSuiteBuilder;
25 import com.google.common.collect.testing.TestSetGenerator;
26 import com.google.common.collect.testing.features.CollectionSize;
27 import com.google.common.collect.testing.features.Feature;
28
29 import junit.framework.TestSuite;
30
31 import java.util.Collections;
32 import java.util.EnumSet;
33 import java.util.List;
34 import java.util.Map;
35 import java.util.Map.Entry;
36 import java.util.Set;
37
38
39
40
41
42
43
44 public class SetMultimapTestSuiteBuilder<K, V>
45 extends MultimapTestSuiteBuilder<K, V, SetMultimap<K, V>> {
46
47 public static <K, V> SetMultimapTestSuiteBuilder<K, V> using(
48 TestSetMultimapGenerator<K, V> generator) {
49 SetMultimapTestSuiteBuilder<K, V> result = new SetMultimapTestSuiteBuilder<K, V>();
50 result.usingGenerator(generator);
51 return result;
52 }
53
54 @Override protected List<Class<? extends AbstractTester>> getTesters() {
55 List<Class<? extends AbstractTester>> testers = Helpers.copyToList(super.getTesters());
56 testers.add(SetMultimapAsMapTester.class);
57 testers.add(SetMultimapEqualsTester.class);
58 testers.add(SetMultimapPutTester.class);
59 testers.add(SetMultimapPutAllTester.class);
60 testers.add(SetMultimapReplaceValuesTester.class);
61 return testers;
62 }
63
64 @Override
65 TestSuite computeMultimapGetTestSuite(
66 FeatureSpecificTestSuiteBuilder<?, ? extends
67 OneSizeTestContainerGenerator<SetMultimap<K, V>, Entry<K, V>>> parentBuilder) {
68 return SetTestSuiteBuilder.using(
69 new MultimapGetGenerator<K, V>(parentBuilder.getSubjectGenerator()))
70 .withFeatures(computeMultimapGetFeatures(parentBuilder.getFeatures()))
71 .named(parentBuilder.getName() + ".get[key]")
72 .suppressing(parentBuilder.getSuppressedTests())
73 .createTestSuite();
74 }
75
76 @Override
77 TestSuite computeMultimapAsMapGetTestSuite(
78 FeatureSpecificTestSuiteBuilder<?, ? extends
79 OneSizeTestContainerGenerator<SetMultimap<K, V>, Entry<K, V>>> parentBuilder) {
80 Set<Feature<?>> features = computeMultimapAsMapGetFeatures(parentBuilder.getFeatures());
81 if (Collections.disjoint(features, EnumSet.allOf(CollectionSize.class))) {
82 return new TestSuite();
83 } else {
84 return SetTestSuiteBuilder.using(
85 new MultimapAsMapGetGenerator<K, V>(parentBuilder.getSubjectGenerator()))
86 .withFeatures(features)
87 .named(parentBuilder.getName() + ".asMap[].get[key]")
88 .suppressing(parentBuilder.getSuppressedTests())
89 .createTestSuite();
90 }
91 }
92
93 @Override
94 TestSuite computeEntriesTestSuite(
95 FeatureSpecificTestSuiteBuilder<?, ? extends
96 OneSizeTestContainerGenerator<SetMultimap<K, V>, Map.Entry<K, V>>> parentBuilder) {
97 return SetTestSuiteBuilder.using(
98 new EntriesGenerator<K, V>(parentBuilder.getSubjectGenerator()))
99 .withFeatures(computeEntriesFeatures(parentBuilder.getFeatures()))
100 .named(parentBuilder.getName() + ".entries")
101 .suppressing(parentBuilder.getSuppressedTests())
102 .createTestSuite();
103 }
104
105 private static class EntriesGenerator<K, V>
106 extends MultimapTestSuiteBuilder.EntriesGenerator<K, V, SetMultimap<K, V>>
107 implements TestSetGenerator<Entry<K, V>> {
108
109 public EntriesGenerator(
110 OneSizeTestContainerGenerator<SetMultimap<K, V>, Entry<K, V>> multimapGenerator) {
111 super(multimapGenerator);
112 }
113
114 @Override
115 public Set<Entry<K, V>> create(Object... elements) {
116 return (Set<Entry<K, V>>) super.create(elements);
117 }
118 }
119
120 static class MultimapGetGenerator<K, V>
121 extends MultimapTestSuiteBuilder.MultimapGetGenerator<K, V, SetMultimap<K, V>>
122 implements TestSetGenerator<V> {
123 public MultimapGetGenerator(
124 OneSizeTestContainerGenerator<SetMultimap<K, V>, Entry<K, V>> multimapGenerator) {
125 super(multimapGenerator);
126 }
127
128 @Override
129 public Set<V> create(Object... elements) {
130 return (Set<V>) super.create(elements);
131 }
132
133 }
134
135 static class MultimapAsMapGetGenerator<K, V>
136 extends MultimapTestSuiteBuilder.MultimapAsMapGetGenerator<K, V, SetMultimap<K, V>>
137 implements TestSetGenerator<V> {
138 public MultimapAsMapGetGenerator(
139 OneSizeTestContainerGenerator<SetMultimap<K, V>, Entry<K, V>> multimapGenerator) {
140 super(multimapGenerator);
141 }
142
143 @Override
144 public Set<V> create(Object... elements) {
145 return (Set<V>) super.create(elements);
146 }
147 }
148 }