1 /*
2  * Copyright (C) 2016 The Android Open Source Project
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 
18 package libcore.java.util.tests;
19 
20 import com.google.common.collect.testing.TestsForMapsInJavaUtil;
21 import com.google.common.collect.testing.testers.CollectionAddAllTester;
22 import com.google.common.collect.testing.testers.CollectionAddTester;
23 
24 import junit.framework.Test;
25 import junit.framework.TestSuite;
26 
27 import java.lang.reflect.Method;
28 import java.util.Arrays;
29 import java.util.Collection;
30 import java.util.Objects;
31 
32 /**
33  * Guava-testlib tests for {@link MapsToTest} that were specified as a
34  * constructor argument.
35  */
36 public class AndroidTestsForMapsInJavaUtil extends TestsForMapsInJavaUtil {
37     public enum MapsToTest {
38         /** All Maps other than those below. */
39         OTHER,
40         /** TreeMao with natural ordering. */
41         TREE_MAP_NATURAL,
42         /** TreeMap with a Comparator. */
43         TREE_MAP_WITH_COMPARATOR,
44         /** ConcurrentSKipListMap with natural ordering. */
45         CONCURRENT_SKIP_LIST_MAP_NATURAL,
46         /** ConcurrentSKipListMap with a Comparator. */
47         CONCURRENT_SKIP_LIST_MAP_WITH_COMPARATOR
48     }
49 
50     private final MapsToTest mapsToTest;
51 
AndroidTestsForMapsInJavaUtil(MapsToTest mapsToTest)52     public AndroidTestsForMapsInJavaUtil(MapsToTest mapsToTest) {
53         this.mapsToTest = Objects.requireNonNull(mapsToTest);
54     }
55 
56     /**
57      * Returns the tests for the {@link MapsToTest} from {@code java.util}.
58      */
59     @Override
allTests()60     public final Test allTests() {
61         TestSuite suite = new TestSuite("java.util Maps: " + mapsToTest);
62         switch (mapsToTest) {
63             case OTHER:
64                 suite.addTest(testsForCheckedMap());
65                 suite.addTest(testsForCheckedSortedMap());
66                 suite.addTest(testsForEmptyMap());
67                 suite.addTest(testsForSingletonMap());
68                 suite.addTest(testsForHashMap());
69                 suite.addTest(testsForLinkedHashMap());
70                 suite.addTest(testsForEnumMap());
71                 suite.addTest(testsForConcurrentHashMap());
72                 break;
73             case TREE_MAP_NATURAL:
74                 suite.addTest(testsForTreeMapNatural());
75                 break;
76             case TREE_MAP_WITH_COMPARATOR:
77                 suite.addTest(testsForTreeMapWithComparator());
78                 break;
79             case CONCURRENT_SKIP_LIST_MAP_NATURAL:
80                 suite.addTest(testsForConcurrentSkipListMapNatural());
81                 break;
82             case CONCURRENT_SKIP_LIST_MAP_WITH_COMPARATOR:
83                 suite.addTest(testsForConcurrentSkipListMapWithComparator());
84                 break;
85             default:
86                 throw new IllegalArgumentException("Unknown part: " + mapsToTest);
87         }
88         return suite;
89     }
90 
91     @Override
suppressForConcurrentHashMap()92     protected final Collection<Method> suppressForConcurrentHashMap() {
93         // http://b/30853241
94         return Arrays.asList(
95                 CollectionAddAllTester.getAddAllUnsupportedNonePresentMethod(),
96                 CollectionAddAllTester.getAddAllUnsupportedSomePresentMethod(),
97                 CollectionAddTester.getAddUnsupportedNotPresentMethod());
98     }
99 }
100