CollectionsTest.java revision 2ad60cfc28e14ee8f0bb038720836a4696c478ad
1/*
2 * Licensed to the Apache Software Foundation (ASF) under one or more
3 * contributor license agreements.  See the NOTICE file distributed with
4 * this work for additional information regarding copyright ownership.
5 * The ASF licenses this file to You under the Apache License, Version 2.0
6 * (the "License"); you may not use this file except in compliance with
7 * the License.  You may obtain a copy of the License at
8 *
9 * http://www.apache.org/licenses/LICENSE-2.0
10 *
11 * Unless required by applicable law or agreed to in writing, software
12 * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
13 * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
14 * License for the specific language governing permissions and limitations under
15 * the License.
16 */
17
18package org.apache.harmony.luni.tests.java.util;
19
20import java.io.Serializable;
21import java.util.ArrayList;
22import java.util.Arrays;
23import java.util.Collection;
24import java.util.Collections;
25import java.util.Comparator;
26import java.util.HashMap;
27import java.util.HashSet;
28import java.util.LinkedList;
29import java.util.List;
30import java.util.Map;
31import java.util.RandomAccess;
32import java.util.Set;
33import java.util.SortedMap;
34import java.util.SortedSet;
35import java.util.TreeMap;
36import java.util.TreeSet;
37import java.util.Vector;
38
39import org.apache.harmony.testframework.serialization.SerializationTest;
40import org.apache.harmony.testframework.serialization.SerializationTest.SerializableAssert;
41
42import junit.framework.TestCase;
43import tests.util.SerializationTester;
44
45public class CollectionsTest extends TestCase {
46
47    private static final SerializableAssert comparator = new SerializableAssert() {
48        public void assertDeserialized(Serializable reference, Serializable test) {
49            assertSame(reference, test);
50        }
51    };
52
53    /**
54     * @tests java.util.Collections#binarySearch(java.util.List,
55     *        java.lang.Object, java.util.Comparator)
56     */
57    public void test_binarySearchLjava_util_ListLjava_lang_ObjectLjava_util_Comparator() {
58        // Regression for HARMONY-94
59        LinkedList<Integer> lst = new LinkedList<Integer>();
60        lst.add(new Integer(30));
61        Collections.sort(lst, null);
62        int index = Collections.binarySearch(lst, new Integer(2), null);
63        assertEquals(-1, index);
64    }
65
66    /**
67     * @tests java.util.Collections#binarySearch(java.util.List,
68     *        java.lang.Object)
69     */
70    @SuppressWarnings("unchecked")
71    public void test_binarySearchLjava_util_ListLjava_lang_Object() {
72        // regression for Harmony-1367
73        List localList = new LinkedList();
74        assertEquals(-1, Collections.binarySearch(localList, new Object()));
75        localList.add(new Object());
76        try {
77            Collections.binarySearch(localList, new Integer(1));
78            fail("Should throw ClassCastException");
79        } catch (ClassCastException e) {
80            // expected
81        }
82    }
83
84    /**
85     * @tests java.util.Collections#rotate(java.util.List, int)
86     */
87    public void test_rotateLjava_util_ListI() {
88        // Regression for HARMONY-19 Rotate an *empty* list
89        Collections.rotate(new ArrayList<Object>(), 25);
90
91        // Regression for HARMONY-20
92        List<String> list = new ArrayList<String>();
93        list.add(0, "zero");
94        list.add(1, "one");
95        list.add(2, "two");
96        list.add(3, "three");
97        list.add(4, "four");
98
99        Collections.rotate(list, Integer.MIN_VALUE);
100        assertEquals("Rotated incorrectly at position 0, ", "three",
101                list.get(0));
102        assertEquals("Rotated incorrectly at position 1, ", "four",
103                list.get(1));
104        assertEquals("Rotated incorrectly at position 2, ", "zero",
105                list.get(2));
106        assertEquals("Rotated incorrectly at position 3, ", "one",
107                list.get(3));
108        assertEquals("Rotated incorrectly at position 4, ", "two",
109                list.get(4));
110    }
111
112    /**
113     * @tests java.util.Collections#synchronizedCollection(java.util.Collection)
114     */
115    public void test_synchronizedCollectionLjava_util_Collection() {
116        try {
117            // Regression for HARMONY-93
118            Collections.synchronizedCollection(null);
119            fail("Assert 0: synchronizedCollection(null) must throw NPE");
120        } catch (NullPointerException e) {
121            // expected
122        }
123    }
124
125    /**
126     * @tests java.util.Collections#synchronizedSortedMap(java.util.SortedMap)
127     */
128    public void test_synchronizedSortedMapLjava_util_SortedMap() {
129        try {
130            // Regression for HARMONY-93
131            Collections.synchronizedSortedMap(null);
132            fail("Assert 0: synchronizedSortedMap(null) must throw NPE");
133        } catch (NullPointerException e) {
134            // expected
135        }
136    }
137
138    /**
139     * @tests java.util.Collections#synchronizedMap(java.util.Map)
140     */
141    public void test_synchronizedMapLjava_util_Map() {
142        try {
143            // Regression for HARMONY-93
144            Collections.synchronizedMap(null);
145            fail("Assert 0: synchronizedMap(map) must throw NPE");
146        } catch (NullPointerException e) {
147            // expected
148        }
149    }
150
151    /**
152     * @tests java.util.Collections#synchronizedSet(java.util.Set)
153     */
154    public void test_synchronizedSetLjava_util_Set() {
155        try {
156            // Regression for HARMONY-93
157            Collections.synchronizedSet(null);
158            fail("Assert 0: synchronizedSet(set) must throw NPE");
159        } catch (NullPointerException e) {
160            // expected
161        }
162    }
163
164    /**
165     * @tests java.util.Collections#synchronizedSortedSet(java.util.SortedSet)
166     */
167    public void test_synchronizedSortedSetLjava_util_SortedSet() {
168        try {
169            // Regression for HARMONY-93
170            Collections.synchronizedSortedSet(null);
171            fail("Assert 0: synchronizedSortedSet(null) must throw NPE");
172        } catch (NullPointerException e) {
173            // expected
174        }
175    }
176
177    /**
178     * @tests java.util.Collections#unmodifiableCollection(java.util.Collection)
179     */
180    public void test_unmodifiableCollectionLjava_util_Collection() {
181        try {
182            // Regression for HARMONY-93
183            Collections.unmodifiableCollection(null);
184            fail("Assert 0: unmodifiableCollection(null) must throw NPE");
185        } catch (NullPointerException e) {
186            // expected
187        }
188    }
189
190    /**
191     * @tests java.util.Collections#unmodifiableMap(java.util.Map)
192     */
193    public void test_unmodifiableMapLjava_util_Map() {
194        try {
195            // Regression for HARMONY-93
196            Collections.unmodifiableMap(null);
197            fail("Assert 0: unmodifiableMap(null) must throw NPE");
198        } catch (NullPointerException e) {
199            // expected
200        }
201    }
202
203    /**
204     * @tests java.util.Collections#unmodifiableSet(java.util.Set)
205     */
206    public void test_unmodifiableSetLjava_util_Set() {
207        try {
208            // Regression for HARMONY-93
209            Collections.unmodifiableSet(null);
210            fail("Assert 0: unmodifiableSet(null) must throw NPE");
211        } catch (NullPointerException e) {
212            // expected
213        }
214    }
215
216    /**
217     * @tests java.util.Collections#unmodifiableSortedMap(java.util.SortedMap)
218     */
219    public void test_unmodifiableSortedMapLjava_util_SortedMap() {
220        try {
221            // Regression for HARMONY-93
222            Collections.unmodifiableSortedMap(null);
223            fail("Assert 0: unmodifiableSortedMap(null) must throw NPE");
224        } catch (NullPointerException e) {
225            // expected
226        }
227    }
228
229    /**
230     * @tests java.util.Collections#unmodifiableSortedSet(java.util.SortedSet)
231     */
232    public void test_unmodifiableSortedSetLjava_util_SortedSet() {
233        try {
234            // Regression for HARMONY-93
235            Collections.unmodifiableSortedSet(null);
236            fail("Assert 0: unmodifiableSortedSet(null) must throw NPE");
237        } catch (NullPointerException e) {
238            // expected
239        }
240    }
241
242    /**
243     * @tests java.util.Collections#frequency(java.util.Collection,Object)
244     */
245    public void test_frequencyLjava_util_CollectionLint() {
246        try {
247            Collections.frequency(null, null);
248            fail("Assert 0: frequency(null,<any>) must throw NPE");
249        } catch (NullPointerException e) {}
250
251        List<String> strings = Arrays.asList(new String[] { "1", "2", "3", "1", "1" });
252
253        assertEquals("Assert 1: did not find three \"1\" strings", 3,
254                Collections.frequency(strings, "1"));
255
256        assertEquals("Assert 2: did not find one \"2\" strings", 1, Collections
257                .frequency(strings, "2"));
258
259        assertEquals("Assert 3: did not find three \"3\" strings", 1,
260                Collections.frequency(strings, "3"));
261
262        assertEquals("Assert 4: matched on null when there are none", 0,
263                Collections.frequency(strings, null));
264
265        List<Object> objects = Arrays.asList(new Object[] { new Integer(1), null, null,
266                new Long(1) });
267
268        assertEquals("Assert 5: did not find one Integer(1)", 1, Collections
269                .frequency(objects, new Integer(1)));
270
271        assertEquals("Assert 6: did not find one Long(1)", 1, Collections
272                .frequency(objects, new Long(1)));
273
274        assertEquals("Assert 7: did not find two null references", 2,
275                Collections.frequency(objects, null));
276    }
277
278    /**
279     * @tests java.util.Collections#reverseOrder()
280     */
281    public void test_reverseOrder() {
282        Comparator<String> roc = Collections.reverseOrder();
283        assertNotNull("Assert 0: comparator must not be null", roc);
284
285        assertTrue("Assert 1: comparator must implement Serializable",
286                roc instanceof Serializable);
287
288        String[] fixtureDesc = new String[] { "2", "1", "0" };
289        String[] numbers = new String[] { "0", "1", "2" };
290        Arrays.sort(numbers, roc);
291        assertTrue("Assert 2: the arrays are not equal, the sort failed",
292                Arrays.equals(fixtureDesc, numbers));
293    }
294
295    /**
296     * @tests java.util.Collections#reverseOrder(java.util.Comparator)
297     */
298    public void test_reverseOrderLjava_util_Comparator() {
299        Comparator<String> roc = Collections
300                .reverseOrder(String.CASE_INSENSITIVE_ORDER);
301        assertNotNull("Assert 0: comparator must not be null", roc);
302
303        assertTrue("Assert 1: comparator must implement Serializable",
304                roc instanceof Serializable);
305
306        String[] fixtureDesc = new String[] { "2", "1", "0" };
307        String[] numbers = new String[] { "0", "1", "2" };
308        Arrays.sort(numbers, roc);
309        assertTrue("Assert 2: the arrays are not equal, the sort failed",
310                Arrays.equals(fixtureDesc, numbers));
311
312        roc = Collections.reverseOrder(null);
313        assertNotNull("Assert 3: comparator must not be null", roc);
314
315        assertTrue("Assert 4: comparator must implement Serializable",
316                roc instanceof Serializable);
317
318        numbers = new String[] { "0", "1", "2" };
319        Arrays.sort(numbers, roc);
320        assertTrue("Assert 5: the arrays are not equal, the sort failed",
321                Arrays.equals(fixtureDesc, numbers));
322    }
323
324    public void test_AddAll() {
325        List<Object> l = new ArrayList<Object>();
326        assertFalse(Collections.addAll(l, new Object[] {}));
327        assertTrue(l.isEmpty());
328        assertTrue(Collections.addAll(l, new Object[] { new Integer(1),
329                new Integer(2), new Integer(3) }));
330        assertFalse(l.isEmpty());
331        assertTrue(l.equals(Arrays.asList(new Object[] { new Integer(1),
332                new Integer(2), new Integer(3) })));
333    }
334
335    public void test_Disjoint() {
336        Object[] arr1 = new Object[10];
337        for (int i = 0; i < arr1.length; i++) {
338            arr1[i] = new Integer(i);
339        }
340        Object[] arr2 = new Object[20];
341        for (int i = 0; i < arr2.length; i++) {
342            arr2[i] = new Integer(100 + i);
343        }
344        Collection<Object> c1 = new ArrayList<Object>();
345        Collection<Object> c2 = new ArrayList<Object>();
346        Collections.addAll(c1, arr1);
347        Collections.addAll(c2, arr2);
348        assertTrue(Collections.disjoint(c1, c2));
349        c1.add(arr2[10]);
350        assertFalse(Collections.disjoint(c1, c2));
351
352        c1 = new LinkedList<Object>();
353        c2 = new LinkedList<Object>();
354        Collections.addAll(c1, arr1);
355        Collections.addAll(c2, arr2);
356        assertTrue(Collections.disjoint(c1, c2));
357        c1.add(arr2[10]);
358        assertFalse(Collections.disjoint(c1, c2));
359
360        c1 = new TreeSet<Object>();
361        c2 = new TreeSet<Object>();
362        Collections.addAll(c1, arr1);
363        Collections.addAll(c2, arr2);
364        assertTrue(Collections.disjoint(c1, c2));
365        c1.add(arr2[10]);
366        assertFalse(Collections.disjoint(c1, c2));
367
368        c1 = new HashSet<Object>();
369        c2 = new HashSet<Object>();
370        Collections.addAll(c1, arr1);
371        Collections.addAll(c2, arr2);
372        assertTrue(Collections.disjoint(c1, c2));
373        c1.add(arr2[10]);
374        assertFalse(Collections.disjoint(c1, c2));
375
376        c1 = new LinkedList<Object>();
377        c2 = new TreeSet<Object>();
378        Collections.addAll(c1, arr1);
379        Collections.addAll(c2, arr2);
380        assertTrue(Collections.disjoint(c1, c2));
381        c1.add(arr2[10]);
382        assertFalse(Collections.disjoint(c1, c2));
383
384        c1 = new Vector<Object>();
385        c2 = new HashSet<Object>();
386        Collections.addAll(c1, arr1);
387        Collections.addAll(c2, arr2);
388        assertTrue(Collections.disjoint(c1, c2));
389        c1.add(arr2[10]);
390        assertFalse(Collections.disjoint(c1, c2));
391
392    }
393
394    /**
395     * @tests java.util.Collections.EmptyList#readResolve()
396     */
397    public void test_EmptyList_readResolve() throws Exception {
398        SerializationTest.verifySelf(Collections.EMPTY_LIST, comparator);
399    }
400
401    /**
402     * @tests java.util.Collections.EmptyMap#readResolve()
403     */
404    public void test_EmptyMap_readResolve() throws Exception {
405        SerializationTest.verifySelf(Collections.EMPTY_MAP, comparator);
406    }
407
408    /**
409     * @tests java.util.Collections.EmptySet#readResolve()
410     */
411    public void test_EmptySet_readResolve() throws Exception {
412        SerializationTest.verifySelf(Collections.EMPTY_SET, comparator);
413    }
414
415    public void test_checkedCollectionSerializationCompatability() throws Exception {
416        Collection<String> c = Collections.emptySet();
417        c = Collections.checkedCollection(c, String.class);
418        SerializationTester.assertCompabilityEquals(c, "/serialization/org/apache/harmony/luni/tests/java/util/Collections_CheckedCollection.golden.ser");
419    }
420
421    public void test_checkedListRandomAccessSerializationCompatability() throws Exception {
422        List<String> c = new ArrayList<String>();
423        assertTrue(c instanceof RandomAccess);
424        c = Collections.checkedList(c, String.class);
425        SerializationTester.assertCompabilityEquals(c, "/serialization/org/apache/harmony/luni/tests/java/util/Collections_CheckedListRandomAccess.golden.ser");
426    }
427
428    public void test_checkedListSerializationCompatability() throws Exception {
429        List<String> c = new LinkedList<String>();
430        assertFalse(c instanceof RandomAccess);
431        c = Collections.checkedList(c, String.class);
432        SerializationTester.assertCompabilityEquals(c, "/serialization/org/apache/harmony/luni/tests/java/util/Collections_CheckedList.golden.ser");
433    }
434
435    public void test_checkedSetSerializationCompatability() throws Exception {
436        Set<String> c = new HashSet<String>();
437        assertFalse(c instanceof SortedSet);
438        c = Collections.checkedSet(c, String.class);
439        SerializationTester.assertCompabilityEquals(c, "/serialization/org/apache/harmony/luni/tests/java/util/Collections_CheckedSet.golden.ser");
440    }
441
442    public void test_checkedMapSerializationCompatability() throws Exception {
443        Map<String, String> c = new HashMap<String, String>();
444        assertFalse(c instanceof SortedMap);
445        c = Collections.checkedMap(c, String.class, String.class);
446        SerializationTester.assertCompabilityEquals(c, "/serialization/org/apache/harmony/luni/tests/java/util/Collections_CheckedMap.golden.ser");
447    }
448
449    public void test_checkedSortedSetSerializationCompatability() throws Exception {
450        SortedSet<String> c = new TreeSet<String>();
451        c = Collections.checkedSortedSet(c, String.class);
452        SerializationTester.assertCompabilityEquals(c, "/serialization/org/apache/harmony/luni/tests/java/util/Collections_CheckedSortedSet.golden.ser");
453    }
454
455    public void test_checkedSortedMapSerializationCompatability() throws Exception {
456        SortedMap<String, String> c = new TreeMap<String, String>();
457        c = Collections.checkedSortedMap(c, String.class, String.class);
458        SerializationTester.assertCompabilityEquals(c, "/serialization/org/apache/harmony/luni/tests/java/util/Collections_CheckedSortedMap.golden.ser");
459    }
460}
461