1adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project/*
2adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project *  Licensed to the Apache Software Foundation (ASF) under one or more
3adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project *  contributor license agreements.  See the NOTICE file distributed with
4adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project *  this work for additional information regarding copyright ownership.
5adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project *  The ASF licenses this file to You under the Apache License, Version 2.0
6adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project *  (the "License"); you may not use this file except in compliance with
7adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project *  the License.  You may obtain a copy of the License at
8adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project *
9adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project *     http://www.apache.org/licenses/LICENSE-2.0
10adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project *
11adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project *  Unless required by applicable law or agreed to in writing, software
12adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project *  distributed under the License is distributed on an "AS IS" BASIS,
13adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project *  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
14adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project *  See the License for the specific language governing permissions and
15adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project *  limitations under the License.
16adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project */
17ab762bb740405d0fefcccf4a0899a234f995be13Narayan Kamathpackage org.apache.harmony.tests.java.util;
18adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project
194c89023ef86f29fa9add7db2574f2169fe842577Narayan Kamathimport java.util.ArrayDeque;
20adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Projectimport java.util.ArrayList;
21adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Projectimport java.util.Arrays;
22adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Projectimport java.util.Collection;
23ba45f538a14c08015021e899f5883f07ed2ff237Narayan Kamathimport java.util.ConcurrentModificationException;
24adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Projectimport java.util.HashSet;
25adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Projectimport java.util.Iterator;
26adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Projectimport java.util.List;
27adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Projectimport java.util.Set;
284c89023ef86f29fa9add7db2574f2169fe842577Narayan Kamathimport java.util.Spliterator;
29adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Projectimport java.util.Vector;
30adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project
314c89023ef86f29fa9add7db2574f2169fe842577Narayan Kamathimport libcore.java.util.SpliteratorTester;
32adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Projectimport tests.support.Support_ListTest;
333984cdba314a0f7b0587000dec99ff26fd9bcbb5Narayan Kamathimport libcore.java.util.ForEachRemainingTester;
34adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project
355c35c7ebda68cc39b6bdee20f678a150336ebd1dYi Kongimport static libcore.java.util.RemoveIfTester.*;
365c35c7ebda68cc39b6bdee20f678a150336ebd1dYi Kong
37adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Projectpublic class ArrayListTest extends junit.framework.TestCase {
38adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project
39adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    List alist;
40adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project
41740cbf1565815f08d9fb3a0a8d4a581cdc0d2a9dJorg Pleumann    Object[] objArray;
427de2d41b95fc968b0ccc530c28d66f003ff9ab2aJoshua Bloch
43adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    /**
44229e34b182b98e1dba15d3dc6341954986ae2b7aBrian Carlstrom     * java.util.ArrayList#ArrayList()
45adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     */
46adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    public void test_Constructor() {
47adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        // Test for method java.util.ArrayList()
48adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        new Support_ListTest("", alist).runTest();
49adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project
50adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        ArrayList subList = new ArrayList();
51adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        for (int i = -50; i < 150; i++)
52adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            subList.add(new Integer(i));
53adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        new Support_ListTest("", subList.subList(50, 150)).runTest();
54adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    }
55adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project
56adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    /**
57229e34b182b98e1dba15d3dc6341954986ae2b7aBrian Carlstrom     * java.util.ArrayList#ArrayList(int)
58adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     */
59adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    public void test_ConstructorI() {
60adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        // Test for method java.util.ArrayList(int)
61adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        ArrayList al = new ArrayList(5);
62adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        assertEquals("Incorrect arrayList created", 0, al.size());
637de2d41b95fc968b0ccc530c28d66f003ff9ab2aJoshua Bloch
64ba45f538a14c08015021e899f5883f07ed2ff237Narayan Kamath        al = new ArrayList(0);
65ba45f538a14c08015021e899f5883f07ed2ff237Narayan Kamath        assertEquals("Incorrect arrayList created", 0, al.size());
66ba45f538a14c08015021e899f5883f07ed2ff237Narayan Kamath
67adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        try {
68ba45f538a14c08015021e899f5883f07ed2ff237Narayan Kamath            new ArrayList(-1);
69adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            fail("IllegalArgumentException expected");
70ba45f538a14c08015021e899f5883f07ed2ff237Narayan Kamath        } catch (IllegalArgumentException expected) {
71adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        }
72adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    }
73adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project
74adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    /**
75229e34b182b98e1dba15d3dc6341954986ae2b7aBrian Carlstrom     * java.util.ArrayList#ArrayList(java.util.Collection)
76adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     */
77adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    public void test_ConstructorLjava_util_Collection() {
78adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        // Test for method java.util.ArrayList(java.util.Collection)
79adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        ArrayList al = new ArrayList(Arrays.asList(objArray));
80adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        assertTrue("arrayList created from collection has incorrect size", al
81adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project                .size() == objArray.length);
82adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        for (int counter = 0; counter < objArray.length; counter++)
83adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            assertTrue(
84adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project                    "arrayList created from collection has incorrect elements",
85adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project                    al.get(counter) == objArray[counter]);
86adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        try {
87adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            new ArrayList(null);
88adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            fail("NullPointerException expected");
89adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        } catch (NullPointerException e) {
90adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            //expected
91adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        }
92adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project
93adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    }
94adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project
95ba45f538a14c08015021e899f5883f07ed2ff237Narayan Kamath    public void testConstructorWithConcurrentCollection() {
96ba45f538a14c08015021e899f5883f07ed2ff237Narayan Kamath        Collection<String> collection = shrinksOnSize("A", "B", "C", "D");
97ba45f538a14c08015021e899f5883f07ed2ff237Narayan Kamath        ArrayList<String> list = new ArrayList<String>(collection);
98ba45f538a14c08015021e899f5883f07ed2ff237Narayan Kamath        assertFalse(list.contains(null));
99ba45f538a14c08015021e899f5883f07ed2ff237Narayan Kamath    }
100ba45f538a14c08015021e899f5883f07ed2ff237Narayan Kamath
101adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    /**
102229e34b182b98e1dba15d3dc6341954986ae2b7aBrian Carlstrom     * java.util.ArrayList#add(int, java.lang.Object)
103adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     */
104adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    public void test_addILjava_lang_Object() {
105adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        // Test for method void java.util.ArrayList.add(int, java.lang.Object)
106adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        Object o;
107adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        alist.add(50, o = new Object());
108adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        assertTrue("Failed to add Object", alist.get(50) == o);
109adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        assertTrue("Failed to fix up list after insert",
110adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project                alist.get(51) == objArray[50]
111adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project                        && (alist.get(52) == objArray[51]));
112adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        Object oldItem = alist.get(25);
113adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        alist.add(25, null);
114adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        assertNull("Should have returned null", alist.get(25));
115adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        assertTrue("Should have returned the old item from slot 25", alist
116adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project                .get(26) == oldItem);
1177de2d41b95fc968b0ccc530c28d66f003ff9ab2aJoshua Bloch
118ba45f538a14c08015021e899f5883f07ed2ff237Narayan Kamath        alist.add(0, o = new Object());
119ba45f538a14c08015021e899f5883f07ed2ff237Narayan Kamath        assertEquals("Failed to add Object", alist.get(0), o);
120ba45f538a14c08015021e899f5883f07ed2ff237Narayan Kamath        assertEquals(alist.get(1), objArray[0]);
121ba45f538a14c08015021e899f5883f07ed2ff237Narayan Kamath        assertEquals(alist.get(2), objArray[1]);
122ba45f538a14c08015021e899f5883f07ed2ff237Narayan Kamath
123ba45f538a14c08015021e899f5883f07ed2ff237Narayan Kamath        oldItem = alist.get(0);
124ba45f538a14c08015021e899f5883f07ed2ff237Narayan Kamath        alist.add(0, null);
125ba45f538a14c08015021e899f5883f07ed2ff237Narayan Kamath        assertNull("Should have returned null", alist.get(0));
126ba45f538a14c08015021e899f5883f07ed2ff237Narayan Kamath        assertEquals("Should have returned the old item from slot 0", alist
127ba45f538a14c08015021e899f5883f07ed2ff237Narayan Kamath                .get(1), oldItem);
128ba45f538a14c08015021e899f5883f07ed2ff237Narayan Kamath
129ba45f538a14c08015021e899f5883f07ed2ff237Narayan Kamath        try {
130ba45f538a14c08015021e899f5883f07ed2ff237Narayan Kamath            alist.add(-1, new Object());
131ba45f538a14c08015021e899f5883f07ed2ff237Narayan Kamath            fail("Should throw IndexOutOfBoundsException");
132ba45f538a14c08015021e899f5883f07ed2ff237Narayan Kamath        } catch (IndexOutOfBoundsException e) {
133ba45f538a14c08015021e899f5883f07ed2ff237Narayan Kamath            // Expected
134ba45f538a14c08015021e899f5883f07ed2ff237Narayan Kamath            assertNotNull(e.getMessage());
135ba45f538a14c08015021e899f5883f07ed2ff237Narayan Kamath        }
136ba45f538a14c08015021e899f5883f07ed2ff237Narayan Kamath
137adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        try {
138adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            alist.add(-1, null);
139ba45f538a14c08015021e899f5883f07ed2ff237Narayan Kamath            fail("Should throw IndexOutOfBoundsException");
140adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        } catch (IndexOutOfBoundsException e) {
141ba45f538a14c08015021e899f5883f07ed2ff237Narayan Kamath            // Expected
142ba45f538a14c08015021e899f5883f07ed2ff237Narayan Kamath            assertNotNull(e.getMessage());
143ba45f538a14c08015021e899f5883f07ed2ff237Narayan Kamath        }
144ba45f538a14c08015021e899f5883f07ed2ff237Narayan Kamath
145ba45f538a14c08015021e899f5883f07ed2ff237Narayan Kamath        try {
146ba45f538a14c08015021e899f5883f07ed2ff237Narayan Kamath            alist.add(alist.size() + 1, new Object());
147ba45f538a14c08015021e899f5883f07ed2ff237Narayan Kamath            fail("Should throw IndexOutOfBoundsException");
148ba45f538a14c08015021e899f5883f07ed2ff237Narayan Kamath        } catch (IndexOutOfBoundsException e) {
149ba45f538a14c08015021e899f5883f07ed2ff237Narayan Kamath            // Expected
150ba45f538a14c08015021e899f5883f07ed2ff237Narayan Kamath            assertNotNull(e.getMessage());
151adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        }
1527de2d41b95fc968b0ccc530c28d66f003ff9ab2aJoshua Bloch
153adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        try {
154adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            alist.add(alist.size() + 1, null);
155ba45f538a14c08015021e899f5883f07ed2ff237Narayan Kamath            fail("Should throw IndexOutOfBoundsException");
156adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        } catch (IndexOutOfBoundsException e) {
157ba45f538a14c08015021e899f5883f07ed2ff237Narayan Kamath            // Expected
158ba45f538a14c08015021e899f5883f07ed2ff237Narayan Kamath            assertNotNull(e.getMessage());
159adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        }
160adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    }
161adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project
162adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    /**
163ba45f538a14c08015021e899f5883f07ed2ff237Narayan Kamath     * java.util.ArrayList#add(int, java.lang.Object)
164ba45f538a14c08015021e899f5883f07ed2ff237Narayan Kamath     */
165ba45f538a14c08015021e899f5883f07ed2ff237Narayan Kamath    public void test_addILjava_lang_Object_2() {
166ba45f538a14c08015021e899f5883f07ed2ff237Narayan Kamath        Object o = new Object();
167ba45f538a14c08015021e899f5883f07ed2ff237Narayan Kamath        int size = alist.size();
168ba45f538a14c08015021e899f5883f07ed2ff237Narayan Kamath        alist.add(size, o);
169ba45f538a14c08015021e899f5883f07ed2ff237Narayan Kamath        assertEquals("Failed to add Object", alist.get(size), o);
170ba45f538a14c08015021e899f5883f07ed2ff237Narayan Kamath        assertEquals(alist.get(size - 2), objArray[size - 2]);
171ba45f538a14c08015021e899f5883f07ed2ff237Narayan Kamath        assertEquals(alist.get(size - 1), objArray[size - 1]);
172ba45f538a14c08015021e899f5883f07ed2ff237Narayan Kamath
173ba45f538a14c08015021e899f5883f07ed2ff237Narayan Kamath        alist.remove(size);
174ba45f538a14c08015021e899f5883f07ed2ff237Narayan Kamath
175ba45f538a14c08015021e899f5883f07ed2ff237Narayan Kamath        size = alist.size();
176ba45f538a14c08015021e899f5883f07ed2ff237Narayan Kamath        alist.add(size, null);
177ba45f538a14c08015021e899f5883f07ed2ff237Narayan Kamath        assertNull("Should have returned null", alist.get(size));
178ba45f538a14c08015021e899f5883f07ed2ff237Narayan Kamath        assertEquals(alist.get(size - 2), objArray[size - 2]);
179ba45f538a14c08015021e899f5883f07ed2ff237Narayan Kamath        assertEquals(alist.get(size - 1), objArray[size - 1]);
180ba45f538a14c08015021e899f5883f07ed2ff237Narayan Kamath    }
181ba45f538a14c08015021e899f5883f07ed2ff237Narayan Kamath
182ba45f538a14c08015021e899f5883f07ed2ff237Narayan Kamath    /**
183229e34b182b98e1dba15d3dc6341954986ae2b7aBrian Carlstrom     * java.util.ArrayList#add(java.lang.Object)
184adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     */
185adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    public void test_addLjava_lang_Object() {
186adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        // Test for method boolean java.util.ArrayList.add(java.lang.Object)
187adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        Object o = new Object();
188adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        alist.add(o);
189adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        assertTrue("Failed to add Object", alist.get(alist.size() - 1) == o);
190adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        alist.add(null);
191adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        assertNull("Failed to add null", alist.get(alist.size() - 1));
192adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    }
193adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project
194adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    /**
195229e34b182b98e1dba15d3dc6341954986ae2b7aBrian Carlstrom     * java.util.ArrayList#addAll(int, java.util.Collection)
196adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     */
197adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    public void test_addAllILjava_util_Collection() {
198adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        // Test for method boolean java.util.ArrayList.addAll(int,
199adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        // java.util.Collection)
200adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        alist.addAll(50, alist);
201adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        assertEquals("Returned incorrect size after adding to existing list",
202adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project                200, alist.size());
203adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        for (int i = 0; i < 50; i++)
204adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            assertTrue("Manipulated elements < index",
205adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project                    alist.get(i) == objArray[i]);
206adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        for (int i = 0; i >= 50 && (i < 150); i++)
207adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            assertTrue("Failed to ad elements properly",
208adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project                    alist.get(i) == objArray[i - 50]);
209adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        for (int i = 0; i >= 150 && (i < 200); i++)
210adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            assertTrue("Failed to ad elements properly",
211adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project                    alist.get(i) == objArray[i - 100]);
212adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        ArrayList listWithNulls = new ArrayList();
213adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        listWithNulls.add(null);
214adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        listWithNulls.add(null);
215adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        listWithNulls.add("yoink");
216adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        listWithNulls.add("kazoo");
217adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        listWithNulls.add(null);
218adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        alist.addAll(100, listWithNulls);
219adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        assertTrue("Incorrect size: " + alist.size(), alist.size() == 205);
220adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        assertNull("Item at slot 100 should be null", alist.get(100));
221adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        assertNull("Item at slot 101 should be null", alist.get(101));
222ba45f538a14c08015021e899f5883f07ed2ff237Narayan Kamath        assertEquals("Item at slot 102 should be 'yoink'", "yoink", alist
223ba45f538a14c08015021e899f5883f07ed2ff237Narayan Kamath                .get(102));
224ba45f538a14c08015021e899f5883f07ed2ff237Narayan Kamath        assertEquals("Item at slot 103 should be 'kazoo'", "kazoo", alist
225ba45f538a14c08015021e899f5883f07ed2ff237Narayan Kamath                .get(103));
226adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        assertNull("Item at slot 104 should be null", alist.get(104));
227adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        alist.addAll(205, listWithNulls);
228adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        assertTrue("Incorrect size2: " + alist.size(), alist.size() == 210);
229ba45f538a14c08015021e899f5883f07ed2ff237Narayan Kamath    }
230adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project
231ba45f538a14c08015021e899f5883f07ed2ff237Narayan Kamath    /**
232ba45f538a14c08015021e899f5883f07ed2ff237Narayan Kamath     * java.util.ArrayList#addAll(int, java.util.Collection)
233ba45f538a14c08015021e899f5883f07ed2ff237Narayan Kamath     */
234ba45f538a14c08015021e899f5883f07ed2ff237Narayan Kamath    @SuppressWarnings("unchecked")
235ba45f538a14c08015021e899f5883f07ed2ff237Narayan Kamath    public void test_addAllILjava_util_Collection_2() {
236ba45f538a14c08015021e899f5883f07ed2ff237Narayan Kamath        // Regression for HARMONY-467
237ba45f538a14c08015021e899f5883f07ed2ff237Narayan Kamath        ArrayList obj = new ArrayList();
238adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        try {
239ba45f538a14c08015021e899f5883f07ed2ff237Narayan Kamath            obj.addAll((int) -1, (Collection) null);
240adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            fail("IndexOutOfBoundsException expected");
241adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        } catch (IndexOutOfBoundsException e) {
242ba45f538a14c08015021e899f5883f07ed2ff237Narayan Kamath            // Expected
243ba45f538a14c08015021e899f5883f07ed2ff237Narayan Kamath            assertNotNull(e.getMessage());
244ba45f538a14c08015021e899f5883f07ed2ff237Narayan Kamath        }
245ba45f538a14c08015021e899f5883f07ed2ff237Narayan Kamath
246ba45f538a14c08015021e899f5883f07ed2ff237Narayan Kamath        // Regression for HARMONY-5705
247ba45f538a14c08015021e899f5883f07ed2ff237Narayan Kamath        String[] data = new String[] { "1", "2", "3", "4", "5", "6", "7", "8" };
248ba45f538a14c08015021e899f5883f07ed2ff237Narayan Kamath        ArrayList list1 = new ArrayList();
249ba45f538a14c08015021e899f5883f07ed2ff237Narayan Kamath        ArrayList list2 = new ArrayList();
250ba45f538a14c08015021e899f5883f07ed2ff237Narayan Kamath        for (String d : data) {
251ba45f538a14c08015021e899f5883f07ed2ff237Narayan Kamath            list1.add(d);
252ba45f538a14c08015021e899f5883f07ed2ff237Narayan Kamath            list2.add(d);
253ba45f538a14c08015021e899f5883f07ed2ff237Narayan Kamath            list2.add(d);
254ba45f538a14c08015021e899f5883f07ed2ff237Narayan Kamath        }
255ba45f538a14c08015021e899f5883f07ed2ff237Narayan Kamath        while (list1.size() > 0)
256ba45f538a14c08015021e899f5883f07ed2ff237Narayan Kamath            list1.remove(0);
257ba45f538a14c08015021e899f5883f07ed2ff237Narayan Kamath        list1.addAll(list2);
258ba45f538a14c08015021e899f5883f07ed2ff237Narayan Kamath        assertTrue("The object list is not the same as original list", list1
259ba45f538a14c08015021e899f5883f07ed2ff237Narayan Kamath                .containsAll(list2)
260ba45f538a14c08015021e899f5883f07ed2ff237Narayan Kamath                && list2.containsAll(list1));
261ba45f538a14c08015021e899f5883f07ed2ff237Narayan Kamath
262ba45f538a14c08015021e899f5883f07ed2ff237Narayan Kamath        obj = new ArrayList();
263ba45f538a14c08015021e899f5883f07ed2ff237Narayan Kamath        for (int i = 0; i < 100; i++) {
264ba45f538a14c08015021e899f5883f07ed2ff237Narayan Kamath            if (list1.size() > 0) {
265ba45f538a14c08015021e899f5883f07ed2ff237Narayan Kamath                obj.removeAll(list1);
266ba45f538a14c08015021e899f5883f07ed2ff237Narayan Kamath                obj.addAll(list1);
267ba45f538a14c08015021e899f5883f07ed2ff237Narayan Kamath            }
268ba45f538a14c08015021e899f5883f07ed2ff237Narayan Kamath        }
269ba45f538a14c08015021e899f5883f07ed2ff237Narayan Kamath        assertTrue("The object list is not the same as original list", obj
270ba45f538a14c08015021e899f5883f07ed2ff237Narayan Kamath                .containsAll(list1)
271ba45f538a14c08015021e899f5883f07ed2ff237Narayan Kamath                && list1.containsAll(obj));
272ba45f538a14c08015021e899f5883f07ed2ff237Narayan Kamath
273ba45f538a14c08015021e899f5883f07ed2ff237Narayan Kamath        // Regression for Harmony-5799
274ba45f538a14c08015021e899f5883f07ed2ff237Narayan Kamath        list1 = new ArrayList();
275ba45f538a14c08015021e899f5883f07ed2ff237Narayan Kamath        list2 = new ArrayList();
276ba45f538a14c08015021e899f5883f07ed2ff237Narayan Kamath        int location = 2;
277ba45f538a14c08015021e899f5883f07ed2ff237Narayan Kamath
278ba45f538a14c08015021e899f5883f07ed2ff237Narayan Kamath        String[] strings = { "0", "1", "2", "3", "4", "5", "6" };
279ba45f538a14c08015021e899f5883f07ed2ff237Narayan Kamath        int[] integers = { 0, 1, 2, 3, 4, 5, 6, 7, 8, 9 };
280ba45f538a14c08015021e899f5883f07ed2ff237Narayan Kamath        for (int i = 0; i < 7; i++) {
281ba45f538a14c08015021e899f5883f07ed2ff237Narayan Kamath            list1.add(strings[i]);
282ba45f538a14c08015021e899f5883f07ed2ff237Narayan Kamath        }
283ba45f538a14c08015021e899f5883f07ed2ff237Narayan Kamath        for (int i = 0; i < 10; i++) {
284ba45f538a14c08015021e899f5883f07ed2ff237Narayan Kamath            list2.add(integers[i]);
285adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        }
286ba45f538a14c08015021e899f5883f07ed2ff237Narayan Kamath        list1.remove(location);
287ba45f538a14c08015021e899f5883f07ed2ff237Narayan Kamath        list1.addAll(location, list2);
288adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project
289ba45f538a14c08015021e899f5883f07ed2ff237Narayan Kamath        // Inserted elements should be equal to integers array
290ba45f538a14c08015021e899f5883f07ed2ff237Narayan Kamath        for (int i = 0; i < integers.length; i++) {
291ba45f538a14c08015021e899f5883f07ed2ff237Narayan Kamath            assertEquals(integers[i], list1.get(location + i));
292ba45f538a14c08015021e899f5883f07ed2ff237Narayan Kamath        }
293ba45f538a14c08015021e899f5883f07ed2ff237Narayan Kamath        // Elements after inserted location should
294ba45f538a14c08015021e899f5883f07ed2ff237Narayan Kamath        // be equals to related elements in strings array
295ba45f538a14c08015021e899f5883f07ed2ff237Narayan Kamath        for (int i = location + 1; i < strings.length; i++) {
296ba45f538a14c08015021e899f5883f07ed2ff237Narayan Kamath            assertEquals(strings[i], list1.get(i + integers.length - 1));
297ba45f538a14c08015021e899f5883f07ed2ff237Narayan Kamath        }
298ba45f538a14c08015021e899f5883f07ed2ff237Narayan Kamath    }
299ba45f538a14c08015021e899f5883f07ed2ff237Narayan Kamath
300ba45f538a14c08015021e899f5883f07ed2ff237Narayan Kamath    /**
301ba45f538a14c08015021e899f5883f07ed2ff237Narayan Kamath     * java.util.ArrayList#addAll(int, java.util.Collection)
302ba45f538a14c08015021e899f5883f07ed2ff237Narayan Kamath     */
303ba45f538a14c08015021e899f5883f07ed2ff237Narayan Kamath    public void test_addAllILjava_util_Collection_3() {
304ba45f538a14c08015021e899f5883f07ed2ff237Narayan Kamath        ArrayList obj = new ArrayList();
305ba45f538a14c08015021e899f5883f07ed2ff237Narayan Kamath        obj.addAll(0, obj);
306ba45f538a14c08015021e899f5883f07ed2ff237Narayan Kamath        obj.addAll(obj.size(), obj);
307adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        try {
308ba45f538a14c08015021e899f5883f07ed2ff237Narayan Kamath            obj.addAll(-1, obj);
309ba45f538a14c08015021e899f5883f07ed2ff237Narayan Kamath            fail("Should throw IndexOutOfBoundsException");
310adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        } catch (IndexOutOfBoundsException e) {
311ba45f538a14c08015021e899f5883f07ed2ff237Narayan Kamath            // Expected
312ba45f538a14c08015021e899f5883f07ed2ff237Narayan Kamath            assertNotNull(e.getMessage());
313adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        }
314adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project
315adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        try {
316ba45f538a14c08015021e899f5883f07ed2ff237Narayan Kamath            obj.addAll(obj.size() + 1, obj);
317ba45f538a14c08015021e899f5883f07ed2ff237Narayan Kamath            fail("Should throw IndexOutOfBoundsException");
318ba45f538a14c08015021e899f5883f07ed2ff237Narayan Kamath        } catch (IndexOutOfBoundsException e) {
319ba45f538a14c08015021e899f5883f07ed2ff237Narayan Kamath            // Expected
320ba45f538a14c08015021e899f5883f07ed2ff237Narayan Kamath            assertNotNull(e.getMessage());
321ba45f538a14c08015021e899f5883f07ed2ff237Narayan Kamath        }
322ba45f538a14c08015021e899f5883f07ed2ff237Narayan Kamath
323ba45f538a14c08015021e899f5883f07ed2ff237Narayan Kamath        try {
324ba45f538a14c08015021e899f5883f07ed2ff237Narayan Kamath            obj.addAll(0, null);
325ba45f538a14c08015021e899f5883f07ed2ff237Narayan Kamath            fail("Should throw NullPointerException");
326adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        } catch (NullPointerException e) {
327ba45f538a14c08015021e899f5883f07ed2ff237Narayan Kamath            // Excepted
328ba45f538a14c08015021e899f5883f07ed2ff237Narayan Kamath        }
329ba45f538a14c08015021e899f5883f07ed2ff237Narayan Kamath
330ba45f538a14c08015021e899f5883f07ed2ff237Narayan Kamath        try {
331ba45f538a14c08015021e899f5883f07ed2ff237Narayan Kamath            obj.addAll(obj.size() + 1, null);
332ba45f538a14c08015021e899f5883f07ed2ff237Narayan Kamath            fail("Should throw IndexOutOfBoundsException");
333ba45f538a14c08015021e899f5883f07ed2ff237Narayan Kamath        } catch (IndexOutOfBoundsException e) {
334ba45f538a14c08015021e899f5883f07ed2ff237Narayan Kamath            // Expected
335ba45f538a14c08015021e899f5883f07ed2ff237Narayan Kamath            assertNotNull(e.getMessage());
336ba45f538a14c08015021e899f5883f07ed2ff237Narayan Kamath        }
337ba45f538a14c08015021e899f5883f07ed2ff237Narayan Kamath
338ba45f538a14c08015021e899f5883f07ed2ff237Narayan Kamath        try {
339ba45f538a14c08015021e899f5883f07ed2ff237Narayan Kamath            obj.addAll((int) -1, (Collection) null);
340ba45f538a14c08015021e899f5883f07ed2ff237Narayan Kamath            fail("IndexOutOfBoundsException expected");
341ba45f538a14c08015021e899f5883f07ed2ff237Narayan Kamath        } catch (IndexOutOfBoundsException e) {
342ba45f538a14c08015021e899f5883f07ed2ff237Narayan Kamath            // Expected
343ba45f538a14c08015021e899f5883f07ed2ff237Narayan Kamath            assertNotNull(e.getMessage());
344adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        }
345adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    }
346adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project
3477de2d41b95fc968b0ccc530c28d66f003ff9ab2aJoshua Bloch// BEGIN android-removed
3487de2d41b95fc968b0ccc530c28d66f003ff9ab2aJoshua Bloch// The spec does not mandate that IndexOutOfBoundsException be thrown in
3497de2d41b95fc968b0ccc530c28d66f003ff9ab2aJoshua Bloch// preference to NullPointerException when the caller desserves both.
3507de2d41b95fc968b0ccc530c28d66f003ff9ab2aJoshua Bloch//
3517de2d41b95fc968b0ccc530c28d66f003ff9ab2aJoshua Bloch//    /**
352229e34b182b98e1dba15d3dc6341954986ae2b7aBrian Carlstrom//     * java.util.ArrayList#addAll(int, java.util.Collection)
3537de2d41b95fc968b0ccc530c28d66f003ff9ab2aJoshua Bloch//     */
3547de2d41b95fc968b0ccc530c28d66f003ff9ab2aJoshua Bloch//    public void test_addAllILjava_util_Collection_2() {
3557de2d41b95fc968b0ccc530c28d66f003ff9ab2aJoshua Bloch//        // Regression for HARMONY-467
3567de2d41b95fc968b0ccc530c28d66f003ff9ab2aJoshua Bloch//        ArrayList obj = new ArrayList();
3577de2d41b95fc968b0ccc530c28d66f003ff9ab2aJoshua Bloch//        try {
3587de2d41b95fc968b0ccc530c28d66f003ff9ab2aJoshua Bloch//            obj.addAll((int) -1, (Collection) null);
3597de2d41b95fc968b0ccc530c28d66f003ff9ab2aJoshua Bloch//            fail("IndexOutOfBoundsException expected");
3607de2d41b95fc968b0ccc530c28d66f003ff9ab2aJoshua Bloch//        } catch (IndexOutOfBoundsException e) {
3617de2d41b95fc968b0ccc530c28d66f003ff9ab2aJoshua Bloch//        }
3627de2d41b95fc968b0ccc530c28d66f003ff9ab2aJoshua Bloch//    }
3637de2d41b95fc968b0ccc530c28d66f003ff9ab2aJoshua Bloch// END android-removed
364adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project
365adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    /**
366229e34b182b98e1dba15d3dc6341954986ae2b7aBrian Carlstrom     * java.util.ArrayList#addAll(java.util.Collection)
367adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     */
368adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    public void test_addAllLjava_util_Collection() {
369adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        // Test for method boolean
370adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        // java.util.ArrayList.addAll(java.util.Collection)
371adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        List l = new ArrayList();
372adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        l.addAll(alist);
373adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        for (int i = 0; i < alist.size(); i++)
374adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            assertTrue("Failed to add elements properly", l.get(i).equals(
375adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project                    alist.get(i)));
376adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        alist.addAll(alist);
377adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        assertEquals("Returned incorrect size after adding to existing list",
378adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project                200, alist.size());
379adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        for (int i = 0; i < 100; i++) {
380ba45f538a14c08015021e899f5883f07ed2ff237Narayan Kamath            assertTrue("Added to list in incorrect order", alist.get(i).equals(
381ba45f538a14c08015021e899f5883f07ed2ff237Narayan Kamath                    l.get(i)));
382adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            assertTrue("Failed to add to existing list", alist.get(i + 100)
383adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project                    .equals(l.get(i)));
384adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        }
385adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        Set setWithNulls = new HashSet();
386adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        setWithNulls.add(null);
387adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        setWithNulls.add(null);
388adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        setWithNulls.add("yoink");
389adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        setWithNulls.add("kazoo");
390adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        setWithNulls.add(null);
391adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        alist.addAll(100, setWithNulls);
392adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        Iterator i = setWithNulls.iterator();
393adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        assertTrue("Item at slot 100 is wrong: " + alist.get(100), alist
394adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project                .get(100) == i.next());
395adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        assertTrue("Item at slot 101 is wrong: " + alist.get(101), alist
396adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project                .get(101) == i.next());
397adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        assertTrue("Item at slot 103 is wrong: " + alist.get(102), alist
398adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project                .get(102) == i.next());
3997de2d41b95fc968b0ccc530c28d66f003ff9ab2aJoshua Bloch
400ba45f538a14c08015021e899f5883f07ed2ff237Narayan Kamath        try {
401ba45f538a14c08015021e899f5883f07ed2ff237Narayan Kamath            alist.addAll(null);
402ba45f538a14c08015021e899f5883f07ed2ff237Narayan Kamath            fail("Should throw NullPointerException");
403ba45f538a14c08015021e899f5883f07ed2ff237Narayan Kamath        } catch (NullPointerException e) {
404ba45f538a14c08015021e899f5883f07ed2ff237Narayan Kamath            // Excepted
405ba45f538a14c08015021e899f5883f07ed2ff237Narayan Kamath        }
4067de2d41b95fc968b0ccc530c28d66f003ff9ab2aJoshua Bloch
407adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        // Regression test for Harmony-3481
408adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        ArrayList<Integer> originalList = new ArrayList<Integer>(12);
409adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        for (int j = 0; j < 12; j++) {
410adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            originalList.add(j);
411adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        }
4127de2d41b95fc968b0ccc530c28d66f003ff9ab2aJoshua Bloch
413adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        originalList.remove(0);
414adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        originalList.remove(0);
4157de2d41b95fc968b0ccc530c28d66f003ff9ab2aJoshua Bloch
416adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        ArrayList<Integer> additionalList = new ArrayList<Integer>(11);
417adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        for (int j = 0; j < 11; j++) {
418adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            additionalList.add(j);
419adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        }
420adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        assertTrue(originalList.addAll(additionalList));
421adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        assertEquals(21, originalList.size());
422adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project
423ba45f538a14c08015021e899f5883f07ed2ff237Narayan Kamath    }
424ba45f538a14c08015021e899f5883f07ed2ff237Narayan Kamath
425ba45f538a14c08015021e899f5883f07ed2ff237Narayan Kamath    public void test_ArrayList_addAll_scenario1() {
426ba45f538a14c08015021e899f5883f07ed2ff237Narayan Kamath        ArrayList arrayListA = new ArrayList();
427ba45f538a14c08015021e899f5883f07ed2ff237Narayan Kamath        arrayListA.add(1);
428ba45f538a14c08015021e899f5883f07ed2ff237Narayan Kamath        ArrayList arrayListB = new ArrayList();
429ba45f538a14c08015021e899f5883f07ed2ff237Narayan Kamath        arrayListB.add(1);
430ba45f538a14c08015021e899f5883f07ed2ff237Narayan Kamath        arrayListA.addAll(1, arrayListB);
431ba45f538a14c08015021e899f5883f07ed2ff237Narayan Kamath        int size = arrayListA.size();
432ba45f538a14c08015021e899f5883f07ed2ff237Narayan Kamath        assertEquals(2, size);
433ba45f538a14c08015021e899f5883f07ed2ff237Narayan Kamath        for (int index = 0; index < size; index++) {
434ba45f538a14c08015021e899f5883f07ed2ff237Narayan Kamath            assertEquals(1, arrayListA.get(index));
435ba45f538a14c08015021e899f5883f07ed2ff237Narayan Kamath        }
436ba45f538a14c08015021e899f5883f07ed2ff237Narayan Kamath    }
437ba45f538a14c08015021e899f5883f07ed2ff237Narayan Kamath
438ba45f538a14c08015021e899f5883f07ed2ff237Narayan Kamath    public void test_ArrayList_addAll_scenario2() {
439ba45f538a14c08015021e899f5883f07ed2ff237Narayan Kamath        ArrayList arrayList = new ArrayList();
440ba45f538a14c08015021e899f5883f07ed2ff237Narayan Kamath        arrayList.add(1);
441ba45f538a14c08015021e899f5883f07ed2ff237Narayan Kamath        arrayList.addAll(1, arrayList);
442ba45f538a14c08015021e899f5883f07ed2ff237Narayan Kamath        int size = arrayList.size();
443ba45f538a14c08015021e899f5883f07ed2ff237Narayan Kamath        assertEquals(2, size);
444ba45f538a14c08015021e899f5883f07ed2ff237Narayan Kamath        for (int index = 0; index < size; index++) {
445ba45f538a14c08015021e899f5883f07ed2ff237Narayan Kamath            assertEquals(1, arrayList.get(index));
446adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        }
447adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    }
448adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project
449ba45f538a14c08015021e899f5883f07ed2ff237Narayan Kamath    // Regression test for HARMONY-5839
450ba45f538a14c08015021e899f5883f07ed2ff237Narayan Kamath    public void testaddAllHarmony5839() {
451ba45f538a14c08015021e899f5883f07ed2ff237Narayan Kamath        Collection coll = Arrays.asList(new String[] { "1", "2" });
452ba45f538a14c08015021e899f5883f07ed2ff237Narayan Kamath        List list = new ArrayList();
453ba45f538a14c08015021e899f5883f07ed2ff237Narayan Kamath        list.add("a");
454ba45f538a14c08015021e899f5883f07ed2ff237Narayan Kamath        list.add(0, "b");
455ba45f538a14c08015021e899f5883f07ed2ff237Narayan Kamath        list.add(0, "c");
456ba45f538a14c08015021e899f5883f07ed2ff237Narayan Kamath        list.add(0, "d");
457ba45f538a14c08015021e899f5883f07ed2ff237Narayan Kamath        list.add(0, "e");
458ba45f538a14c08015021e899f5883f07ed2ff237Narayan Kamath        list.add(0, "f");
459ba45f538a14c08015021e899f5883f07ed2ff237Narayan Kamath        list.add(0, "g");
460ba45f538a14c08015021e899f5883f07ed2ff237Narayan Kamath        list.add(0, "h");
461ba45f538a14c08015021e899f5883f07ed2ff237Narayan Kamath        list.add(0, "i");
462ba45f538a14c08015021e899f5883f07ed2ff237Narayan Kamath
463ba45f538a14c08015021e899f5883f07ed2ff237Narayan Kamath        list.addAll(6, coll);
464ba45f538a14c08015021e899f5883f07ed2ff237Narayan Kamath
465ba45f538a14c08015021e899f5883f07ed2ff237Narayan Kamath        assertEquals(11, list.size());
466ba45f538a14c08015021e899f5883f07ed2ff237Narayan Kamath        assertFalse(list.contains(null));
467ba45f538a14c08015021e899f5883f07ed2ff237Narayan Kamath    }
468ba45f538a14c08015021e899f5883f07ed2ff237Narayan Kamath
469adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    /**
470229e34b182b98e1dba15d3dc6341954986ae2b7aBrian Carlstrom     * java.util.ArrayList#clear()
471adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     */
472adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    public void test_clear() {
473adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        // Test for method void java.util.ArrayList.clear()
474adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        alist.clear();
475adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        assertEquals("List did not clear", 0, alist.size());
476adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        alist.add(null);
477adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        alist.add(null);
478adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        alist.add(null);
479adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        alist.add("bam");
480adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        alist.clear();
481adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        assertEquals("List with nulls did not clear", 0, alist.size());
482adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        /*
483adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project         * for (int i = 0; i < alist.size(); i++) assertNull("Failed to clear
484adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project         * list", alist.get(i));
485adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project         */
486adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project
487adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    }
488adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project
489adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    /**
490229e34b182b98e1dba15d3dc6341954986ae2b7aBrian Carlstrom     * java.util.ArrayList#clone()
491adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     */
492adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    public void test_clone() {
493adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        // Test for method java.lang.Object java.util.ArrayList.clone()
494adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        ArrayList x = (ArrayList) (((ArrayList) (alist)).clone());
495adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        assertTrue("Cloned list was inequal to original", x.equals(alist));
496adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        for (int i = 0; i < alist.size(); i++)
497adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            assertTrue("Cloned list contains incorrect elements",
498adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project                    alist.get(i) == x.get(i));
499adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project
500adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        alist.add(null);
501adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        alist.add(25, null);
502adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        x = (ArrayList) (((ArrayList) (alist)).clone());
503adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        assertTrue("nulls test - Cloned list was inequal to original", x
504adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project                .equals(alist));
505adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        for (int i = 0; i < alist.size(); i++)
506adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            assertTrue("nulls test - Cloned list contains incorrect elements",
507adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project                    alist.get(i) == x.get(i));
508adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project
509adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    }
510adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project
511adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    /**
512229e34b182b98e1dba15d3dc6341954986ae2b7aBrian Carlstrom     * java.util.ArrayList#contains(java.lang.Object)
513adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     */
514adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    public void test_containsLjava_lang_Object() {
515adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        // Test for method boolean
516adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        // java.util.ArrayList.contains(java.lang.Object)
517adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        assertTrue("Returned false for valid element", alist
518adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project                .contains(objArray[99]));
519adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        assertTrue("Returned false for equal element", alist
520adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project                .contains(new Integer(8)));
521adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        assertTrue("Returned true for invalid element", !alist
522adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project                .contains(new Object()));
523adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        assertTrue("Returned true for null but should have returned false",
524adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project                !alist.contains(null));
525adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        alist.add(null);
526adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        assertTrue("Returned false for null but should have returned true",
527adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project                alist.contains(null));
528adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    }
529adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project
530adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    /**
531229e34b182b98e1dba15d3dc6341954986ae2b7aBrian Carlstrom     * java.util.ArrayList#ensureCapacity(int)
532adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     */
533ba45f538a14c08015021e899f5883f07ed2ff237Narayan Kamath    public void test_ensureCapacityI() throws Exception {
534adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        // Test for method void java.util.ArrayList.ensureCapacity(int)
535adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        // TODO : There is no good way to test this as it only really impacts on
536adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        // the private implementation.
537adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project
538adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        Object testObject = new Object();
539adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        int capacity = 20;
540adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        ArrayList al = new ArrayList(capacity);
541adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        int i;
542adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        for (i = 0; i < capacity / 2; i++) {
543adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            al.add(i, new Object());
544adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        }
545adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        al.add(i, testObject);
546adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        int location = al.indexOf(testObject);
547ba45f538a14c08015021e899f5883f07ed2ff237Narayan Kamath        al.ensureCapacity(capacity);
548ba45f538a14c08015021e899f5883f07ed2ff237Narayan Kamath        assertTrue("EnsureCapacity moved objects around in array1.",
549ba45f538a14c08015021e899f5883f07ed2ff237Narayan Kamath                location == al.indexOf(testObject));
550ba45f538a14c08015021e899f5883f07ed2ff237Narayan Kamath        al.remove(0);
551ba45f538a14c08015021e899f5883f07ed2ff237Narayan Kamath        al.ensureCapacity(capacity);
552ba45f538a14c08015021e899f5883f07ed2ff237Narayan Kamath        assertTrue("EnsureCapacity moved objects around in array2.",
553ba45f538a14c08015021e899f5883f07ed2ff237Narayan Kamath                --location == al.indexOf(testObject));
554ba45f538a14c08015021e899f5883f07ed2ff237Narayan Kamath        al.ensureCapacity(capacity + 2);
555ba45f538a14c08015021e899f5883f07ed2ff237Narayan Kamath        assertTrue("EnsureCapacity did not change location.", location == al
556ba45f538a14c08015021e899f5883f07ed2ff237Narayan Kamath                .indexOf(testObject));
557ba45f538a14c08015021e899f5883f07ed2ff237Narayan Kamath
558ba45f538a14c08015021e899f5883f07ed2ff237Narayan Kamath        ArrayList<String> list = new ArrayList<String>(1);
559ba45f538a14c08015021e899f5883f07ed2ff237Narayan Kamath        list.add("hello");
560ba45f538a14c08015021e899f5883f07ed2ff237Narayan Kamath        list.ensureCapacity(Integer.MIN_VALUE);
561adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    }
562adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project
563adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    /**
564229e34b182b98e1dba15d3dc6341954986ae2b7aBrian Carlstrom     * java.util.ArrayList#get(int)
565adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     */
566adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    public void test_getI() {
567adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        // Test for method java.lang.Object java.util.ArrayList.get(int)
568adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        assertTrue("Returned incorrect element", alist.get(22) == objArray[22]);
569adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        try {
570adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            alist.get(8765);
571adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            fail("Failed to throw expected exception for index > size");
572adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        } catch (IndexOutOfBoundsException e) {
573ba45f538a14c08015021e899f5883f07ed2ff237Narayan Kamath            // Expected
574ba45f538a14c08015021e899f5883f07ed2ff237Narayan Kamath            assertNotNull(e.getMessage());
575adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        }
576adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    }
577adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project
578adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    /**
579229e34b182b98e1dba15d3dc6341954986ae2b7aBrian Carlstrom     * java.util.ArrayList#indexOf(java.lang.Object)
580adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     */
581adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    public void test_indexOfLjava_lang_Object() {
582adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        // Test for method int java.util.ArrayList.indexOf(java.lang.Object)
583ba45f538a14c08015021e899f5883f07ed2ff237Narayan Kamath        assertEquals("Returned incorrect index", 87, alist
584ba45f538a14c08015021e899f5883f07ed2ff237Narayan Kamath                .indexOf(objArray[87]));
585adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        assertEquals("Returned index for invalid Object", -1, alist
586adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project                .indexOf(new Object()));
587adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        alist.add(25, null);
588adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        alist.add(50, null);
589adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        assertTrue("Wrong indexOf for null.  Wanted 25 got: "
590adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project                + alist.indexOf(null), alist.indexOf(null) == 25);
591adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    }
592adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project
593adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    /**
594229e34b182b98e1dba15d3dc6341954986ae2b7aBrian Carlstrom     * java.util.ArrayList#isEmpty()
595adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     */
596adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    public void test_isEmpty() {
597adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        // Test for method boolean java.util.ArrayList.isEmpty()
598adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        assertTrue("isEmpty returned false for new list", new ArrayList()
599adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project                .isEmpty());
600adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        assertTrue("Returned true for existing list with elements", !alist
601adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project                .isEmpty());
602adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    }
603adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project
604adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    /**
605229e34b182b98e1dba15d3dc6341954986ae2b7aBrian Carlstrom     * java.util.ArrayList#lastIndexOf(java.lang.Object)
606adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     */
607adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    public void test_lastIndexOfLjava_lang_Object() {
608adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        // Test for method int java.util.ArrayList.lastIndexOf(java.lang.Object)
609adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        alist.add(new Integer(99));
610ba45f538a14c08015021e899f5883f07ed2ff237Narayan Kamath        assertEquals("Returned incorrect index", 100, alist
611ba45f538a14c08015021e899f5883f07ed2ff237Narayan Kamath                .lastIndexOf(objArray[99]));
612adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        assertEquals("Returned index for invalid Object", -1, alist
613adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project                .lastIndexOf(new Object()));
614adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        alist.add(25, null);
615adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        alist.add(50, null);
616adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        assertTrue("Wrong lastIndexOf for null.  Wanted 50 got: "
617adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project                + alist.lastIndexOf(null), alist.lastIndexOf(null) == 50);
618adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    }
619adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project
620adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    /**
621ba45f538a14c08015021e899f5883f07ed2ff237Narayan Kamath     * {@link java.util.ArrayList#removeRange(int, int)}
622ba45f538a14c08015021e899f5883f07ed2ff237Narayan Kamath     */
623ba45f538a14c08015021e899f5883f07ed2ff237Narayan Kamath    public void test_removeRange() {
624ba45f538a14c08015021e899f5883f07ed2ff237Narayan Kamath        MockArrayList mylist = new MockArrayList();
625ba45f538a14c08015021e899f5883f07ed2ff237Narayan Kamath        mylist.removeRange(0, 0);
626ba45f538a14c08015021e899f5883f07ed2ff237Narayan Kamath
627ba45f538a14c08015021e899f5883f07ed2ff237Narayan Kamath        try {
628ba45f538a14c08015021e899f5883f07ed2ff237Narayan Kamath            mylist.removeRange(0, 1);
629ba45f538a14c08015021e899f5883f07ed2ff237Narayan Kamath            fail("Should throw IndexOutOfBoundsException");
630ba45f538a14c08015021e899f5883f07ed2ff237Narayan Kamath        } catch (IndexOutOfBoundsException e) {
631ba45f538a14c08015021e899f5883f07ed2ff237Narayan Kamath            // Expected
632ba45f538a14c08015021e899f5883f07ed2ff237Narayan Kamath            assertNotNull(e.getMessage());
633ba45f538a14c08015021e899f5883f07ed2ff237Narayan Kamath        }
634ba45f538a14c08015021e899f5883f07ed2ff237Narayan Kamath
635ba45f538a14c08015021e899f5883f07ed2ff237Narayan Kamath        int[] data = { 1, 2, 3 };
636ba45f538a14c08015021e899f5883f07ed2ff237Narayan Kamath        for (int i = 0; i < data.length; i++) {
637ba45f538a14c08015021e899f5883f07ed2ff237Narayan Kamath            mylist.add(i, data[i]);
638ba45f538a14c08015021e899f5883f07ed2ff237Narayan Kamath        }
639ba45f538a14c08015021e899f5883f07ed2ff237Narayan Kamath
640ba45f538a14c08015021e899f5883f07ed2ff237Narayan Kamath        mylist.removeRange(0, 1);
641ba45f538a14c08015021e899f5883f07ed2ff237Narayan Kamath        assertEquals(data[1], mylist.get(0));
642ba45f538a14c08015021e899f5883f07ed2ff237Narayan Kamath        assertEquals(data[2], mylist.get(1));
643ba45f538a14c08015021e899f5883f07ed2ff237Narayan Kamath
644ba45f538a14c08015021e899f5883f07ed2ff237Narayan Kamath        try {
645ba45f538a14c08015021e899f5883f07ed2ff237Narayan Kamath            mylist.removeRange(-1, 1);
646ba45f538a14c08015021e899f5883f07ed2ff237Narayan Kamath            fail("Should throw IndexOutOfBoundsException");
647ba45f538a14c08015021e899f5883f07ed2ff237Narayan Kamath        } catch (IndexOutOfBoundsException e) {
648ba45f538a14c08015021e899f5883f07ed2ff237Narayan Kamath            // Expected
649ba45f538a14c08015021e899f5883f07ed2ff237Narayan Kamath            assertNotNull(e.getMessage());
650ba45f538a14c08015021e899f5883f07ed2ff237Narayan Kamath        }
651ba45f538a14c08015021e899f5883f07ed2ff237Narayan Kamath
652ba45f538a14c08015021e899f5883f07ed2ff237Narayan Kamath        try {
653ba45f538a14c08015021e899f5883f07ed2ff237Narayan Kamath            mylist.removeRange(0, -1);
654ba45f538a14c08015021e899f5883f07ed2ff237Narayan Kamath            fail("Should throw IndexOutOfBoundsException");
655ba45f538a14c08015021e899f5883f07ed2ff237Narayan Kamath        } catch (IndexOutOfBoundsException e) {
656ba45f538a14c08015021e899f5883f07ed2ff237Narayan Kamath            // Expected
657ba45f538a14c08015021e899f5883f07ed2ff237Narayan Kamath            assertNotNull(e.getMessage());
658ba45f538a14c08015021e899f5883f07ed2ff237Narayan Kamath        }
659ba45f538a14c08015021e899f5883f07ed2ff237Narayan Kamath
660ba45f538a14c08015021e899f5883f07ed2ff237Narayan Kamath        try {
661ba45f538a14c08015021e899f5883f07ed2ff237Narayan Kamath            mylist.removeRange(1, 0);
662ba45f538a14c08015021e899f5883f07ed2ff237Narayan Kamath            fail("Should throw IndexOutOfBoundsException");
663ba45f538a14c08015021e899f5883f07ed2ff237Narayan Kamath        } catch (IndexOutOfBoundsException e) {
664ba45f538a14c08015021e899f5883f07ed2ff237Narayan Kamath            // Expected
665ba45f538a14c08015021e899f5883f07ed2ff237Narayan Kamath            assertNotNull(e.getMessage());
666ba45f538a14c08015021e899f5883f07ed2ff237Narayan Kamath        }
667ba45f538a14c08015021e899f5883f07ed2ff237Narayan Kamath
668ba45f538a14c08015021e899f5883f07ed2ff237Narayan Kamath        try {
669ba45f538a14c08015021e899f5883f07ed2ff237Narayan Kamath            mylist.removeRange(2, 1);
670ba45f538a14c08015021e899f5883f07ed2ff237Narayan Kamath            fail("Should throw IndexOutOfBoundsException");
671ba45f538a14c08015021e899f5883f07ed2ff237Narayan Kamath        } catch (IndexOutOfBoundsException e) {
672ba45f538a14c08015021e899f5883f07ed2ff237Narayan Kamath            // Expected
673ba45f538a14c08015021e899f5883f07ed2ff237Narayan Kamath            assertNotNull(e.getMessage());
674ba45f538a14c08015021e899f5883f07ed2ff237Narayan Kamath        }
675ba45f538a14c08015021e899f5883f07ed2ff237Narayan Kamath    }
676ba45f538a14c08015021e899f5883f07ed2ff237Narayan Kamath
677ba45f538a14c08015021e899f5883f07ed2ff237Narayan Kamath    /**
678229e34b182b98e1dba15d3dc6341954986ae2b7aBrian Carlstrom     * java.util.ArrayList#remove(int)
679adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     */
680adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    public void test_removeI() {
681adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        // Test for method java.lang.Object java.util.ArrayList.remove(int)
682adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        alist.remove(10);
683ba45f538a14c08015021e899f5883f07ed2ff237Narayan Kamath        assertEquals("Failed to remove element", -1, alist
684ba45f538a14c08015021e899f5883f07ed2ff237Narayan Kamath                .indexOf(objArray[10]));
685adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        try {
686adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            alist.remove(999);
687adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            fail("Failed to throw exception when index out of range");
688adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        } catch (IndexOutOfBoundsException e) {
689ba45f538a14c08015021e899f5883f07ed2ff237Narayan Kamath            // Expected
690ba45f538a14c08015021e899f5883f07ed2ff237Narayan Kamath            assertNotNull(e.getMessage());
691adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        }
692adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project
693adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        ArrayList myList = (ArrayList) (((ArrayList) (alist)).clone());
694adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        alist.add(25, null);
695adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        alist.add(50, null);
696adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        alist.remove(50);
697adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        alist.remove(25);
698adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        assertTrue("Removing nulls did not work", alist.equals(myList));
699adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project
700adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        List list = new ArrayList(Arrays.asList(new String[] { "a", "b", "c",
701adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project                "d", "e", "f", "g" }));
702adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        assertTrue("Removed wrong element 1", list.remove(0) == "a");
703adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        assertTrue("Removed wrong element 2", list.remove(4) == "f");
704adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        String[] result = new String[5];
705adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        list.toArray(result);
706adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        assertTrue("Removed wrong element 3", Arrays.equals(result,
707adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project                new String[] { "b", "c", "d", "e", "g" }));
708adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project
709adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        List l = new ArrayList(0);
710adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        l.add(new Object());
711adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        l.add(new Object());
712adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        l.remove(0);
713adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        l.remove(0);
714adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        try {
715adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            l.remove(-1);
716adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            fail("-1 should cause exception");
717adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        } catch (IndexOutOfBoundsException e) {
718ba45f538a14c08015021e899f5883f07ed2ff237Narayan Kamath            // Expected
719ba45f538a14c08015021e899f5883f07ed2ff237Narayan Kamath            assertNotNull(e.getMessage());
720adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        }
721adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        try {
722adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            l.remove(0);
723adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            fail("0 should case exception");
724adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        } catch (IndexOutOfBoundsException e) {
725ba45f538a14c08015021e899f5883f07ed2ff237Narayan Kamath            // Expected
726ba45f538a14c08015021e899f5883f07ed2ff237Narayan Kamath            assertNotNull(e.getMessage());
727adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        }
728adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    }
729adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project
730adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    /**
731229e34b182b98e1dba15d3dc6341954986ae2b7aBrian Carlstrom     * java.util.ArrayList#set(int, java.lang.Object)
732adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     */
733adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    public void test_setILjava_lang_Object() {
734adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        // Test for method java.lang.Object java.util.ArrayList.set(int,
735adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        // java.lang.Object)
736adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        Object obj;
737adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        alist.set(65, obj = new Object());
738adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        assertTrue("Failed to set object", alist.get(65) == obj);
739adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        alist.set(50, null);
740adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        assertNull("Setting to null did not work", alist.get(50));
741adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        assertTrue("Setting increased the list's size to: " + alist.size(),
742adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project                alist.size() == 100);
743adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project
744ba45f538a14c08015021e899f5883f07ed2ff237Narayan Kamath        obj = new Object();
745ba45f538a14c08015021e899f5883f07ed2ff237Narayan Kamath        alist.set(0, obj);
746ba45f538a14c08015021e899f5883f07ed2ff237Narayan Kamath        assertTrue("Failed to set object", alist.get(0) == obj);
747ba45f538a14c08015021e899f5883f07ed2ff237Narayan Kamath
748ba45f538a14c08015021e899f5883f07ed2ff237Narayan Kamath        try {
749ba45f538a14c08015021e899f5883f07ed2ff237Narayan Kamath            alist.set(-1, obj);
750ba45f538a14c08015021e899f5883f07ed2ff237Narayan Kamath            fail("Should throw IndexOutOfBoundsException");
751ba45f538a14c08015021e899f5883f07ed2ff237Narayan Kamath        } catch (IndexOutOfBoundsException e) {
752ba45f538a14c08015021e899f5883f07ed2ff237Narayan Kamath            // Expected
753ba45f538a14c08015021e899f5883f07ed2ff237Narayan Kamath            assertNotNull(e.getMessage());
754ba45f538a14c08015021e899f5883f07ed2ff237Narayan Kamath        }
755ba45f538a14c08015021e899f5883f07ed2ff237Narayan Kamath
756ba45f538a14c08015021e899f5883f07ed2ff237Narayan Kamath        try {
757ba45f538a14c08015021e899f5883f07ed2ff237Narayan Kamath            alist.set(alist.size(), obj);
758ba45f538a14c08015021e899f5883f07ed2ff237Narayan Kamath            fail("Should throw IndexOutOfBoundsException");
759ba45f538a14c08015021e899f5883f07ed2ff237Narayan Kamath        } catch (IndexOutOfBoundsException e) {
760ba45f538a14c08015021e899f5883f07ed2ff237Narayan Kamath            // Expected
761ba45f538a14c08015021e899f5883f07ed2ff237Narayan Kamath            assertNotNull(e.getMessage());
762ba45f538a14c08015021e899f5883f07ed2ff237Narayan Kamath        }
763ba45f538a14c08015021e899f5883f07ed2ff237Narayan Kamath
764adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        try {
765adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            alist.set(-1, null);
766ba45f538a14c08015021e899f5883f07ed2ff237Narayan Kamath            fail("Should throw IndexOutOfBoundsException");
767adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        } catch (IndexOutOfBoundsException e) {
768ba45f538a14c08015021e899f5883f07ed2ff237Narayan Kamath            // Expected
769ba45f538a14c08015021e899f5883f07ed2ff237Narayan Kamath            assertNotNull(e.getMessage());
770adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        }
771adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project
772adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        try {
773ba45f538a14c08015021e899f5883f07ed2ff237Narayan Kamath            alist.set(alist.size(), null);
774ba45f538a14c08015021e899f5883f07ed2ff237Narayan Kamath            fail("Should throw IndexOutOfBoundsException");
775adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        } catch (IndexOutOfBoundsException e) {
776ba45f538a14c08015021e899f5883f07ed2ff237Narayan Kamath            // Expected
777ba45f538a14c08015021e899f5883f07ed2ff237Narayan Kamath            assertNotNull(e.getMessage());
778adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        }
779adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    }
780adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project
781adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    /**
782229e34b182b98e1dba15d3dc6341954986ae2b7aBrian Carlstrom     * java.util.ArrayList#size()
783adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     */
784adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    public void test_size() {
785adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        // Test for method int java.util.ArrayList.size()
786ba45f538a14c08015021e899f5883f07ed2ff237Narayan Kamath        assertEquals("Returned incorrect size for exiting list", 100, alist
787ba45f538a14c08015021e899f5883f07ed2ff237Narayan Kamath                .size());
788adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        assertEquals("Returned incorrect size for new list", 0, new ArrayList()
789adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project                .size());
790adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    }
791adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project
792adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    /**
793ba45f538a14c08015021e899f5883f07ed2ff237Narayan Kamath     * java.util.AbstractCollection#toString()
794ba45f538a14c08015021e899f5883f07ed2ff237Narayan Kamath     */
795ba45f538a14c08015021e899f5883f07ed2ff237Narayan Kamath    public void test_toString() {
796ba45f538a14c08015021e899f5883f07ed2ff237Narayan Kamath        ArrayList l = new ArrayList(1);
797ba45f538a14c08015021e899f5883f07ed2ff237Narayan Kamath        l.add(l);
798ba45f538a14c08015021e899f5883f07ed2ff237Narayan Kamath        String result = l.toString();
799ba45f538a14c08015021e899f5883f07ed2ff237Narayan Kamath        assertTrue("should contain self ref", result.indexOf("(this") > -1);
800ba45f538a14c08015021e899f5883f07ed2ff237Narayan Kamath    }
801ba45f538a14c08015021e899f5883f07ed2ff237Narayan Kamath
802ba45f538a14c08015021e899f5883f07ed2ff237Narayan Kamath    /**
803229e34b182b98e1dba15d3dc6341954986ae2b7aBrian Carlstrom     * java.util.ArrayList#toArray()
804adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     */
805adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    public void test_toArray() {
806adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        // Test for method java.lang.Object [] java.util.ArrayList.toArray()
807adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        alist.set(25, null);
808adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        alist.set(75, null);
809adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        Object[] obj = alist.toArray();
810adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        assertEquals("Returned array of incorrect size", objArray.length,
811adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project                obj.length);
812adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project
813adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        for (int i = 0; i < obj.length; i++) {
814adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            if ((i == 25) || (i == 75))
815adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project                assertNull("Should be null at: " + i + " but instead got: "
816adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project                        + obj[i], obj[i]);
817adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            else
818adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project                assertTrue("Returned incorrect array: " + i,
819adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project                        obj[i] == objArray[i]);
820adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        }
821adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project
822adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    }
823adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project
824adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    /**
825229e34b182b98e1dba15d3dc6341954986ae2b7aBrian Carlstrom     * java.util.ArrayList#toArray(java.lang.Object[])
826adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     */
827adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    public void test_toArray$Ljava_lang_Object() {
828adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        // Test for method java.lang.Object []
829adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        // java.util.ArrayList.toArray(java.lang.Object [])
830adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        alist.set(25, null);
831adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        alist.set(75, null);
832adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        Integer[] argArray = new Integer[100];
833adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        Object[] retArray;
834adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        retArray = alist.toArray(argArray);
835adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        assertTrue("Returned different array than passed", retArray == argArray);
836adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        argArray = new Integer[1000];
837adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        retArray = alist.toArray(argArray);
838adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        assertNull("Failed to set first extra element to null", argArray[alist
839adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project                .size()]);
840adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        for (int i = 0; i < 100; i++) {
841adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            if ((i == 25) || (i == 75))
842adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project                assertNull("Should be null: " + i, retArray[i]);
843adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            else
844adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project                assertTrue("Returned incorrect array: " + i,
845adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project                        retArray[i] == objArray[i]);
846adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        }
8477de2d41b95fc968b0ccc530c28d66f003ff9ab2aJoshua Bloch
848adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        String[] strArray = new String[100];
849adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        try {
850adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            alist.toArray(strArray);
851adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            fail("ArrayStoreException expected");
852adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        } catch (ArrayStoreException e) {
853adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            //expected
854adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        }
855adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    }
856adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project
857adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    /**
858229e34b182b98e1dba15d3dc6341954986ae2b7aBrian Carlstrom     * java.util.ArrayList#trimToSize()
859adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     */
860ba45f538a14c08015021e899f5883f07ed2ff237Narayan Kamath    public void test_trimToSize() {
861adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        // Test for method void java.util.ArrayList.trimToSize()
862adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        for (int i = 99; i > 24; i--)
863adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            alist.remove(i);
864adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        ((ArrayList) alist).trimToSize();
865adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        assertEquals("Returned incorrect size after trim", 25, alist.size());
866adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        for (int i = 0; i < alist.size(); i++)
867adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            assertTrue("Trimmed list contained incorrect elements", alist
868adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project                    .get(i) == objArray[i]);
869adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        Vector v = new Vector();
870adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        v.add("a");
871adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        ArrayList al = new ArrayList(v);
872ba45f538a14c08015021e899f5883f07ed2ff237Narayan Kamath        al.add("b");
873adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        Iterator it = al.iterator();
874adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        al.trimToSize();
875adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        try {
876adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            it.next();
877adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            fail("should throw a ConcurrentModificationException");
878adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        } catch (ConcurrentModificationException ioobe) {
879adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            // expected
880adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        }
881adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    }
882adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project
883adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    public void test_trimToSize_02() {
884adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        ArrayList list = new ArrayList(Arrays.asList(new String[] { "a", "b", "c",
885adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project                "d", "e", "f", "g" }));
886adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        list.remove("a");
887adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        list.remove("f");
888adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        list.trimToSize();
889adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    }
890adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project
891adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    public void test_addAll() {
892adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        ArrayList list = new ArrayList();
893adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        list.add("one");
894adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        list.add("two");
895adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        assertEquals(2, list.size());
896adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project
897adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        list.remove(0);
898adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        assertEquals(1, list.size());
8997de2d41b95fc968b0ccc530c28d66f003ff9ab2aJoshua Bloch
900adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        ArrayList collection = new ArrayList();
901adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        collection.add("1");
902adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        collection.add("2");
903adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        collection.add("3");
904adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        assertEquals(3, collection.size());
9057de2d41b95fc968b0ccc530c28d66f003ff9ab2aJoshua Bloch
906adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        list.addAll(0, collection);
907adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        assertEquals(4, list.size());
9087de2d41b95fc968b0ccc530c28d66f003ff9ab2aJoshua Bloch
909adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        list.remove(0);
910adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        list.remove(0);
911adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        assertEquals(2, list.size());
912adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project
913adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        collection.add("4");
914adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        collection.add("5");
915adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        collection.add("6");
916adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        collection.add("7");
917adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        collection.add("8");
918adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        collection.add("9");
919adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        collection.add("10");
920adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        collection.add("11");
921adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        collection.add("12");
9227de2d41b95fc968b0ccc530c28d66f003ff9ab2aJoshua Bloch
923adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        assertEquals(12, collection.size());
9247de2d41b95fc968b0ccc530c28d66f003ff9ab2aJoshua Bloch
925adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        list.addAll(0, collection);
926adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        assertEquals(14, list.size());
927adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    }
9287de2d41b95fc968b0ccc530c28d66f003ff9ab2aJoshua Bloch
929adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    public void test_removeLjava_lang_Object() {
930adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        List list = new ArrayList(Arrays.asList(new String[] { "a", "b", "c",
931adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project                "d", "e", "f", "g" }));
932adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        assertTrue("Removed wrong element 1", list.remove("a"));
933adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        assertTrue("Removed wrong element 2", list.remove("f"));
934adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        String[] result = new String[5];
935adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        list.toArray(result);
936adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        assertTrue("Removed wrong element 3", Arrays.equals(result,
937adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project                new String[] { "b", "c", "d", "e", "g" }));
938adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    }
939adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project
940ba45f538a14c08015021e899f5883f07ed2ff237Narayan Kamath    public void testAddAllWithConcurrentCollection() {
941ba45f538a14c08015021e899f5883f07ed2ff237Narayan Kamath        ArrayList<String> list = new ArrayList<String>();
942ba45f538a14c08015021e899f5883f07ed2ff237Narayan Kamath        list.addAll(shrinksOnSize("A", "B", "C", "D"));
943ba45f538a14c08015021e899f5883f07ed2ff237Narayan Kamath        assertFalse(list.contains(null));
944ba45f538a14c08015021e899f5883f07ed2ff237Narayan Kamath    }
945ba45f538a14c08015021e899f5883f07ed2ff237Narayan Kamath
946ba45f538a14c08015021e899f5883f07ed2ff237Narayan Kamath    public void testAddAllAtPositionWithConcurrentCollection() {
947ba45f538a14c08015021e899f5883f07ed2ff237Narayan Kamath        ArrayList<String> list = new ArrayList<String>(
948ba45f538a14c08015021e899f5883f07ed2ff237Narayan Kamath                Arrays.asList("A", "B", "C", "D"));
949ba45f538a14c08015021e899f5883f07ed2ff237Narayan Kamath
950ba45f538a14c08015021e899f5883f07ed2ff237Narayan Kamath        list.addAll(3, shrinksOnSize("E", "F", "G", "H"));
951ba45f538a14c08015021e899f5883f07ed2ff237Narayan Kamath        assertFalse(list.contains(null));
952ba45f538a14c08015021e899f5883f07ed2ff237Narayan Kamath    }
953ba45f538a14c08015021e899f5883f07ed2ff237Narayan Kamath
954ba45f538a14c08015021e899f5883f07ed2ff237Narayan Kamath    public void test_override_size() throws Exception {
955ba45f538a14c08015021e899f5883f07ed2ff237Narayan Kamath        ArrayList testlist = new MockArrayList();
956ba45f538a14c08015021e899f5883f07ed2ff237Narayan Kamath        // though size is overriden, it should passed without exception
957ba45f538a14c08015021e899f5883f07ed2ff237Narayan Kamath        testlist.add("test_0");
958ba45f538a14c08015021e899f5883f07ed2ff237Narayan Kamath        testlist.add("test_1");
959ba45f538a14c08015021e899f5883f07ed2ff237Narayan Kamath        testlist.add("test_2");
960ba45f538a14c08015021e899f5883f07ed2ff237Narayan Kamath        testlist.add(1, "test_3");
961ba45f538a14c08015021e899f5883f07ed2ff237Narayan Kamath        testlist.get(1);
962ba45f538a14c08015021e899f5883f07ed2ff237Narayan Kamath        testlist.remove(2);
963ba45f538a14c08015021e899f5883f07ed2ff237Narayan Kamath        testlist.set(1, "test_4");
964ba45f538a14c08015021e899f5883f07ed2ff237Narayan Kamath    }
965ba45f538a14c08015021e899f5883f07ed2ff237Narayan Kamath
966ba45f538a14c08015021e899f5883f07ed2ff237Narayan Kamath    public class MockArrayList extends ArrayList {
967ba45f538a14c08015021e899f5883f07ed2ff237Narayan Kamath        public int size() {
968ba45f538a14c08015021e899f5883f07ed2ff237Narayan Kamath            return 0;
969adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        }
970adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project
971adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        public void removeRange(int begin, int end) {
972adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            super.removeRange(begin, end);
973adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        }
974adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    }
975adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project
976adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    public void test_removeRangeII() {
977ba45f538a14c08015021e899f5883f07ed2ff237Narayan Kamath        MockArrayList mal = new MockArrayList();
978adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        mal.add("a");
979adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        mal.add("b");
980adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        mal.add("c");
981adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        mal.add("d");
982adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        mal.add("e");
983adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        mal.add("f");
984adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        mal.add("g");
985adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        mal.add("h");
9867de2d41b95fc968b0ccc530c28d66f003ff9ab2aJoshua Bloch
987adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        mal.removeRange(2, 4);
988adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project
989adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        String[] result = new String[6];
990adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        mal.toArray(result);
991adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        assertTrue("Removed wrong element 3", Arrays.equals(result,
992adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project                new String[] { "a", "b", "e", "f", "g", "h"}));
993adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    }
994adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project
995ba45f538a14c08015021e899f5883f07ed2ff237Narayan Kamath    public static class ArrayListExtend extends ArrayList {
996ba45f538a14c08015021e899f5883f07ed2ff237Narayan Kamath
997ba45f538a14c08015021e899f5883f07ed2ff237Narayan Kamath        private int size = 0;
998ba45f538a14c08015021e899f5883f07ed2ff237Narayan Kamath
999ba45f538a14c08015021e899f5883f07ed2ff237Narayan Kamath        public ArrayListExtend() {
1000ba45f538a14c08015021e899f5883f07ed2ff237Narayan Kamath            super(10);
1001ba45f538a14c08015021e899f5883f07ed2ff237Narayan Kamath        }
1002ba45f538a14c08015021e899f5883f07ed2ff237Narayan Kamath
1003ba45f538a14c08015021e899f5883f07ed2ff237Narayan Kamath        public boolean add(Object o) {
1004ba45f538a14c08015021e899f5883f07ed2ff237Narayan Kamath            size++;
1005ba45f538a14c08015021e899f5883f07ed2ff237Narayan Kamath            return super.add(o);
1006ba45f538a14c08015021e899f5883f07ed2ff237Narayan Kamath        }
1007ba45f538a14c08015021e899f5883f07ed2ff237Narayan Kamath
1008ba45f538a14c08015021e899f5883f07ed2ff237Narayan Kamath        public int size() {
1009ba45f538a14c08015021e899f5883f07ed2ff237Narayan Kamath            return size;
1010ba45f538a14c08015021e899f5883f07ed2ff237Narayan Kamath        }
1011ba45f538a14c08015021e899f5883f07ed2ff237Narayan Kamath    }
1012ba45f538a14c08015021e899f5883f07ed2ff237Narayan Kamath
1013ba45f538a14c08015021e899f5883f07ed2ff237Narayan Kamath    public void test_subclassing() {
1014ba45f538a14c08015021e899f5883f07ed2ff237Narayan Kamath        ArrayListExtend a = new ArrayListExtend();
1015ba45f538a14c08015021e899f5883f07ed2ff237Narayan Kamath        /*
1016ba45f538a14c08015021e899f5883f07ed2ff237Narayan Kamath         * Regression test for subclasses that override size() (which used to
1017ba45f538a14c08015021e899f5883f07ed2ff237Narayan Kamath         * cause an exception when growing 'a').
1018ba45f538a14c08015021e899f5883f07ed2ff237Narayan Kamath         */
1019ba45f538a14c08015021e899f5883f07ed2ff237Narayan Kamath        for (int i = 0; i < 100; i++) {
1020ba45f538a14c08015021e899f5883f07ed2ff237Narayan Kamath            a.add(new Object());
1021ba45f538a14c08015021e899f5883f07ed2ff237Narayan Kamath        }
1022ba45f538a14c08015021e899f5883f07ed2ff237Narayan Kamath    }
1023ba45f538a14c08015021e899f5883f07ed2ff237Narayan Kamath
1024b10b2a3ab693cfd6156d06ffe4e00ce69b9c9194Narayan Kamath    // http://b/25867131 et al.
1025b10b2a3ab693cfd6156d06ffe4e00ce69b9c9194Narayan Kamath    public void testIteratorAddAfterCompleteIteration() {
1026887ab3fe607c582e10e33b3d631401d7a791aaedNarayan Kamath        ArrayList<String> strings = new ArrayList<>();
1027b10b2a3ab693cfd6156d06ffe4e00ce69b9c9194Narayan Kamath        strings.add("string1");
1028b10b2a3ab693cfd6156d06ffe4e00ce69b9c9194Narayan Kamath        Iterator<String> it = strings.iterator();
1029b10b2a3ab693cfd6156d06ffe4e00ce69b9c9194Narayan Kamath        assertTrue(it.hasNext());
1030b10b2a3ab693cfd6156d06ffe4e00ce69b9c9194Narayan Kamath        assertEquals("string1", it.next());
1031b10b2a3ab693cfd6156d06ffe4e00ce69b9c9194Narayan Kamath        assertFalse(it.hasNext());
1032b10b2a3ab693cfd6156d06ffe4e00ce69b9c9194Narayan Kamath        strings.add("string2");
1033b10b2a3ab693cfd6156d06ffe4e00ce69b9c9194Narayan Kamath        // The value of hasNext() must not flap between true and false. If we returned "true"
1034b10b2a3ab693cfd6156d06ffe4e00ce69b9c9194Narayan Kamath        // here, we'd fail with a CME on the next call to next() anyway.
1035b10b2a3ab693cfd6156d06ffe4e00ce69b9c9194Narayan Kamath        assertFalse(it.hasNext());
1036b10b2a3ab693cfd6156d06ffe4e00ce69b9c9194Narayan Kamath    }
1037b10b2a3ab693cfd6156d06ffe4e00ce69b9c9194Narayan Kamath
1038b10b2a3ab693cfd6156d06ffe4e00ce69b9c9194Narayan Kamath    public void testHasNextAfterRemoval() {
1039b10b2a3ab693cfd6156d06ffe4e00ce69b9c9194Narayan Kamath        ArrayList<String> strings = new ArrayList<>();
1040b10b2a3ab693cfd6156d06ffe4e00ce69b9c9194Narayan Kamath        strings.add("string1");
1041b10b2a3ab693cfd6156d06ffe4e00ce69b9c9194Narayan Kamath        Iterator<String> it = strings.iterator();
1042b10b2a3ab693cfd6156d06ffe4e00ce69b9c9194Narayan Kamath        it.next();
1043b10b2a3ab693cfd6156d06ffe4e00ce69b9c9194Narayan Kamath        it.remove();
1044b10b2a3ab693cfd6156d06ffe4e00ce69b9c9194Narayan Kamath        assertFalse(it.hasNext());
1045b10b2a3ab693cfd6156d06ffe4e00ce69b9c9194Narayan Kamath
1046b10b2a3ab693cfd6156d06ffe4e00ce69b9c9194Narayan Kamath        strings = new ArrayList<>();
1047b10b2a3ab693cfd6156d06ffe4e00ce69b9c9194Narayan Kamath        strings.add("string1");
1048b10b2a3ab693cfd6156d06ffe4e00ce69b9c9194Narayan Kamath        strings.add("string2");
1049b10b2a3ab693cfd6156d06ffe4e00ce69b9c9194Narayan Kamath        it = strings.iterator();
1050b10b2a3ab693cfd6156d06ffe4e00ce69b9c9194Narayan Kamath        it.next();
1051b10b2a3ab693cfd6156d06ffe4e00ce69b9c9194Narayan Kamath        it.remove();
1052b10b2a3ab693cfd6156d06ffe4e00ce69b9c9194Narayan Kamath        assertTrue(it.hasNext());
1053b10b2a3ab693cfd6156d06ffe4e00ce69b9c9194Narayan Kamath        assertEquals("string2", it.next());
1054b10b2a3ab693cfd6156d06ffe4e00ce69b9c9194Narayan Kamath    }
1055b10b2a3ab693cfd6156d06ffe4e00ce69b9c9194Narayan Kamath
1056887ab3fe607c582e10e33b3d631401d7a791aaedNarayan Kamath    // http://b/27430229
1057887ab3fe607c582e10e33b3d631401d7a791aaedNarayan Kamath    public void testRemoveAllDuringIteration() {
1058887ab3fe607c582e10e33b3d631401d7a791aaedNarayan Kamath        ArrayList<String> list = new ArrayList<>();
1059887ab3fe607c582e10e33b3d631401d7a791aaedNarayan Kamath        list.add("food");
1060887ab3fe607c582e10e33b3d631401d7a791aaedNarayan Kamath        Iterator<String> iterator = list.iterator();
1061887ab3fe607c582e10e33b3d631401d7a791aaedNarayan Kamath        iterator.next();
1062887ab3fe607c582e10e33b3d631401d7a791aaedNarayan Kamath        list.clear();
1063887ab3fe607c582e10e33b3d631401d7a791aaedNarayan Kamath        assertFalse(iterator.hasNext());
1064887ab3fe607c582e10e33b3d631401d7a791aaedNarayan Kamath    }
1065887ab3fe607c582e10e33b3d631401d7a791aaedNarayan Kamath
106660796efea3a74e02aea384b8eb56103ea21b880bPrzemyslaw Szczepaniak    public void test_forEach() throws Exception {
106760796efea3a74e02aea384b8eb56103ea21b880bPrzemyslaw Szczepaniak        ArrayList<Integer> list = new ArrayList<>();
106860796efea3a74e02aea384b8eb56103ea21b880bPrzemyslaw Szczepaniak        list.add(0);
106960796efea3a74e02aea384b8eb56103ea21b880bPrzemyslaw Szczepaniak        list.add(1);
107060796efea3a74e02aea384b8eb56103ea21b880bPrzemyslaw Szczepaniak        list.add(2);
107160796efea3a74e02aea384b8eb56103ea21b880bPrzemyslaw Szczepaniak
107260796efea3a74e02aea384b8eb56103ea21b880bPrzemyslaw Szczepaniak        ArrayList<Integer> output = new ArrayList<>();
107360796efea3a74e02aea384b8eb56103ea21b880bPrzemyslaw Szczepaniak        list.forEach(k -> output.add(k));
107460796efea3a74e02aea384b8eb56103ea21b880bPrzemyslaw Szczepaniak
107560796efea3a74e02aea384b8eb56103ea21b880bPrzemyslaw Szczepaniak        assertEquals(list, output);
107660796efea3a74e02aea384b8eb56103ea21b880bPrzemyslaw Szczepaniak    }
107760796efea3a74e02aea384b8eb56103ea21b880bPrzemyslaw Szczepaniak
107860796efea3a74e02aea384b8eb56103ea21b880bPrzemyslaw Szczepaniak    public void test_forEach_NPE() throws Exception {
107960796efea3a74e02aea384b8eb56103ea21b880bPrzemyslaw Szczepaniak        ArrayList<Integer> list = new ArrayList<>();
108060796efea3a74e02aea384b8eb56103ea21b880bPrzemyslaw Szczepaniak        try {
108160796efea3a74e02aea384b8eb56103ea21b880bPrzemyslaw Szczepaniak            list.forEach(null);
108260796efea3a74e02aea384b8eb56103ea21b880bPrzemyslaw Szczepaniak            fail();
108360796efea3a74e02aea384b8eb56103ea21b880bPrzemyslaw Szczepaniak        } catch(NullPointerException expected) {}
108460796efea3a74e02aea384b8eb56103ea21b880bPrzemyslaw Szczepaniak    }
108560796efea3a74e02aea384b8eb56103ea21b880bPrzemyslaw Szczepaniak
108660796efea3a74e02aea384b8eb56103ea21b880bPrzemyslaw Szczepaniak    public void test_forEach_CME() throws Exception {
108760796efea3a74e02aea384b8eb56103ea21b880bPrzemyslaw Szczepaniak        ArrayList<Integer> list = new ArrayList<>();
108860796efea3a74e02aea384b8eb56103ea21b880bPrzemyslaw Szczepaniak        list.add(1);
108960796efea3a74e02aea384b8eb56103ea21b880bPrzemyslaw Szczepaniak        list.add(2);
109060796efea3a74e02aea384b8eb56103ea21b880bPrzemyslaw Szczepaniak        ArrayList<Integer> processed = new ArrayList<>();
109160796efea3a74e02aea384b8eb56103ea21b880bPrzemyslaw Szczepaniak        try {
10923984cdba314a0f7b0587000dec99ff26fd9bcbb5Narayan Kamath            list.forEach(t -> { processed.add(t); list.add(t); });
109360796efea3a74e02aea384b8eb56103ea21b880bPrzemyslaw Szczepaniak            fail();
109460796efea3a74e02aea384b8eb56103ea21b880bPrzemyslaw Szczepaniak        } catch(ConcurrentModificationException expected) {}
109560796efea3a74e02aea384b8eb56103ea21b880bPrzemyslaw Szczepaniak        assertEquals(1, processed.size());
109660796efea3a74e02aea384b8eb56103ea21b880bPrzemyslaw Szczepaniak    }
109760796efea3a74e02aea384b8eb56103ea21b880bPrzemyslaw Szczepaniak
109860796efea3a74e02aea384b8eb56103ea21b880bPrzemyslaw Szczepaniak    public void test_forEach_CME_onLastElement() throws Exception {
109960796efea3a74e02aea384b8eb56103ea21b880bPrzemyslaw Szczepaniak        ArrayList<Integer> list = new ArrayList<>();
110060796efea3a74e02aea384b8eb56103ea21b880bPrzemyslaw Szczepaniak        list.add(1);
110160796efea3a74e02aea384b8eb56103ea21b880bPrzemyslaw Szczepaniak        list.add(2);
110260796efea3a74e02aea384b8eb56103ea21b880bPrzemyslaw Szczepaniak        list.add(3);
110360796efea3a74e02aea384b8eb56103ea21b880bPrzemyslaw Szczepaniak        try {
11043984cdba314a0f7b0587000dec99ff26fd9bcbb5Narayan Kamath            list.forEach(t -> {
11053984cdba314a0f7b0587000dec99ff26fd9bcbb5Narayan Kamath                if (t == 3) list.add(t);
11063984cdba314a0f7b0587000dec99ff26fd9bcbb5Narayan Kamath            });
110760796efea3a74e02aea384b8eb56103ea21b880bPrzemyslaw Szczepaniak            fail();
110860796efea3a74e02aea384b8eb56103ea21b880bPrzemyslaw Szczepaniak        } catch(ConcurrentModificationException expected) {}
110960796efea3a74e02aea384b8eb56103ea21b880bPrzemyslaw Szczepaniak    }
11107de2d41b95fc968b0ccc530c28d66f003ff9ab2aJoshua Bloch
11113984cdba314a0f7b0587000dec99ff26fd9bcbb5Narayan Kamath    public void test_forEachRemaining_iterator() throws Exception {
11123984cdba314a0f7b0587000dec99ff26fd9bcbb5Narayan Kamath        ForEachRemainingTester.runTests(ArrayList.class, new String[] { "foo", "bar", "baz"});
11133984cdba314a0f7b0587000dec99ff26fd9bcbb5Narayan Kamath        ForEachRemainingTester.runTests(ArrayList.class, new String[] { "foo" });
11143984cdba314a0f7b0587000dec99ff26fd9bcbb5Narayan Kamath    }
11153984cdba314a0f7b0587000dec99ff26fd9bcbb5Narayan Kamath
11164c89023ef86f29fa9add7db2574f2169fe842577Narayan Kamath    public void test_spliterator() throws Exception {
11174c89023ef86f29fa9add7db2574f2169fe842577Narayan Kamath        ArrayList<Integer> testElements = new ArrayList<>(
11184c89023ef86f29fa9add7db2574f2169fe842577Narayan Kamath                Arrays.asList(1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16));
11194c89023ef86f29fa9add7db2574f2169fe842577Narayan Kamath        ArrayList<Integer> list = new ArrayList<>();
11204c89023ef86f29fa9add7db2574f2169fe842577Narayan Kamath        list.addAll(testElements);
11214c89023ef86f29fa9add7db2574f2169fe842577Narayan Kamath
11224c89023ef86f29fa9add7db2574f2169fe842577Narayan Kamath        SpliteratorTester.runBasicIterationTests(list.spliterator(), testElements);
11234c89023ef86f29fa9add7db2574f2169fe842577Narayan Kamath        SpliteratorTester.runBasicSplitTests(list, testElements);
11244c89023ef86f29fa9add7db2574f2169fe842577Narayan Kamath        SpliteratorTester.testSpliteratorNPE(list.spliterator());
11254c89023ef86f29fa9add7db2574f2169fe842577Narayan Kamath
11264c89023ef86f29fa9add7db2574f2169fe842577Narayan Kamath        assertTrue(list.spliterator().hasCharacteristics(
11274c89023ef86f29fa9add7db2574f2169fe842577Narayan Kamath                Spliterator.ORDERED | Spliterator.SIZED | Spliterator.SUBSIZED));
11284c89023ef86f29fa9add7db2574f2169fe842577Narayan Kamath
11294c89023ef86f29fa9add7db2574f2169fe842577Narayan Kamath        SpliteratorTester.runOrderedTests(list);
11304c89023ef86f29fa9add7db2574f2169fe842577Narayan Kamath        SpliteratorTester.runSizedTests(list, 16 /* expected size */);
11314c89023ef86f29fa9add7db2574f2169fe842577Narayan Kamath        SpliteratorTester.runSubSizedTests(list, 16 /* expected size */);
11324c89023ef86f29fa9add7db2574f2169fe842577Narayan Kamath    }
11334c89023ef86f29fa9add7db2574f2169fe842577Narayan Kamath
11344c89023ef86f29fa9add7db2574f2169fe842577Narayan Kamath    public void test_spliterator_CME() throws Exception {
11354c89023ef86f29fa9add7db2574f2169fe842577Narayan Kamath        ArrayList<Integer> list = new ArrayList<>();
11364c89023ef86f29fa9add7db2574f2169fe842577Narayan Kamath        list.add(52);
11374c89023ef86f29fa9add7db2574f2169fe842577Narayan Kamath
11384c89023ef86f29fa9add7db2574f2169fe842577Narayan Kamath        Spliterator<Integer> sp = list.spliterator();
11394c89023ef86f29fa9add7db2574f2169fe842577Narayan Kamath        try {
11404c89023ef86f29fa9add7db2574f2169fe842577Narayan Kamath            sp.tryAdvance(value -> list.add(value));
11414c89023ef86f29fa9add7db2574f2169fe842577Narayan Kamath            fail();
11424c89023ef86f29fa9add7db2574f2169fe842577Narayan Kamath        } catch (ConcurrentModificationException expected) {
11434c89023ef86f29fa9add7db2574f2169fe842577Narayan Kamath        }
11444c89023ef86f29fa9add7db2574f2169fe842577Narayan Kamath
11453a923d039f9176b87d6ee449e9b263cf5cd902edNarayan Kamath        ArrayList<Integer> list2 = new ArrayList<>();
11463a923d039f9176b87d6ee449e9b263cf5cd902edNarayan Kamath        list2.add(52);
11474c89023ef86f29fa9add7db2574f2169fe842577Narayan Kamath        try {
11483a923d039f9176b87d6ee449e9b263cf5cd902edNarayan Kamath            sp.forEachRemaining(value -> list2.add(value));
11494c89023ef86f29fa9add7db2574f2169fe842577Narayan Kamath            fail();
11504c89023ef86f29fa9add7db2574f2169fe842577Narayan Kamath        } catch (ConcurrentModificationException expected) {
11514c89023ef86f29fa9add7db2574f2169fe842577Narayan Kamath        }
11524c89023ef86f29fa9add7db2574f2169fe842577Narayan Kamath    }
11534c89023ef86f29fa9add7db2574f2169fe842577Narayan Kamath
11545c35c7ebda68cc39b6bdee20f678a150336ebd1dYi Kong    public void test_removeIf() {
11555c35c7ebda68cc39b6bdee20f678a150336ebd1dYi Kong        runBasicRemoveIfTests(ArrayList<Integer>::new);
11565c35c7ebda68cc39b6bdee20f678a150336ebd1dYi Kong        runBasicRemoveIfTestsUnordered(ArrayList<Integer>::new);
11575c35c7ebda68cc39b6bdee20f678a150336ebd1dYi Kong        runRemoveIfOnEmpty(ArrayList<Integer>::new);
11585c35c7ebda68cc39b6bdee20f678a150336ebd1dYi Kong        testRemoveIfNPE(ArrayList<Integer>::new);
11595c35c7ebda68cc39b6bdee20f678a150336ebd1dYi Kong        testRemoveIfCME(ArrayList<Integer>::new);
11605c35c7ebda68cc39b6bdee20f678a150336ebd1dYi Kong    }
11615c35c7ebda68cc39b6bdee20f678a150336ebd1dYi Kong
1162def94956afbfc17ea65390d16d032f9b790a5dcaNarayan Kamath    public void test_sublist_spliterator() {
1163def94956afbfc17ea65390d16d032f9b790a5dcaNarayan Kamath        ArrayList<Integer> testElements = new ArrayList<>(
1164def94956afbfc17ea65390d16d032f9b790a5dcaNarayan Kamath                Arrays.asList(1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16));
1165def94956afbfc17ea65390d16d032f9b790a5dcaNarayan Kamath        List<Integer> list = new ArrayList<>();
1166def94956afbfc17ea65390d16d032f9b790a5dcaNarayan Kamath        list.addAll(testElements);
1167def94956afbfc17ea65390d16d032f9b790a5dcaNarayan Kamath
1168def94956afbfc17ea65390d16d032f9b790a5dcaNarayan Kamath        testElements = new ArrayList<Integer>(list.subList(8, 16));
1169def94956afbfc17ea65390d16d032f9b790a5dcaNarayan Kamath        list = list.subList(8, 16);
1170def94956afbfc17ea65390d16d032f9b790a5dcaNarayan Kamath
1171def94956afbfc17ea65390d16d032f9b790a5dcaNarayan Kamath        SpliteratorTester.runBasicIterationTests(list.spliterator(), testElements);
1172def94956afbfc17ea65390d16d032f9b790a5dcaNarayan Kamath        SpliteratorTester.runBasicSplitTests(list, testElements);
1173def94956afbfc17ea65390d16d032f9b790a5dcaNarayan Kamath        SpliteratorTester.testSpliteratorNPE(list.spliterator());
1174def94956afbfc17ea65390d16d032f9b790a5dcaNarayan Kamath
1175def94956afbfc17ea65390d16d032f9b790a5dcaNarayan Kamath        assertTrue(list.spliterator().hasCharacteristics(
1176def94956afbfc17ea65390d16d032f9b790a5dcaNarayan Kamath                Spliterator.ORDERED | Spliterator.SIZED | Spliterator.SUBSIZED));
1177def94956afbfc17ea65390d16d032f9b790a5dcaNarayan Kamath
1178def94956afbfc17ea65390d16d032f9b790a5dcaNarayan Kamath        SpliteratorTester.runOrderedTests(list);
1179def94956afbfc17ea65390d16d032f9b790a5dcaNarayan Kamath        SpliteratorTester.runSizedTests(list, 8 /* expected size */);
1180def94956afbfc17ea65390d16d032f9b790a5dcaNarayan Kamath        SpliteratorTester.runSubSizedTests(list, 8 /* expected size */);
1181def94956afbfc17ea65390d16d032f9b790a5dcaNarayan Kamath    }
1182def94956afbfc17ea65390d16d032f9b790a5dcaNarayan Kamath
1183adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    /**
1184adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     * Sets up the fixture, for example, open a network connection. This method
1185adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     * is called before a test is executed.
1186adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     */
1187adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    protected void setUp() throws Exception {
1188adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        super.setUp();
11897de2d41b95fc968b0ccc530c28d66f003ff9ab2aJoshua Bloch
1190740cbf1565815f08d9fb3a0a8d4a581cdc0d2a9dJorg Pleumann        objArray = new Object[100];
1191740cbf1565815f08d9fb3a0a8d4a581cdc0d2a9dJorg Pleumann        for (int i = 0; i < objArray.length; i++) {
1192740cbf1565815f08d9fb3a0a8d4a581cdc0d2a9dJorg Pleumann            objArray[i] = new Integer(i);
1193740cbf1565815f08d9fb3a0a8d4a581cdc0d2a9dJorg Pleumann        }
11947de2d41b95fc968b0ccc530c28d66f003ff9ab2aJoshua Bloch
1195adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        alist = new ArrayList();
1196740cbf1565815f08d9fb3a0a8d4a581cdc0d2a9dJorg Pleumann        for (int i = 0; i < objArray.length; i++) {
1197adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            alist.add(objArray[i]);
1198740cbf1565815f08d9fb3a0a8d4a581cdc0d2a9dJorg Pleumann        }
1199740cbf1565815f08d9fb3a0a8d4a581cdc0d2a9dJorg Pleumann    }
12007de2d41b95fc968b0ccc530c28d66f003ff9ab2aJoshua Bloch
1201740cbf1565815f08d9fb3a0a8d4a581cdc0d2a9dJorg Pleumann    @Override
1202740cbf1565815f08d9fb3a0a8d4a581cdc0d2a9dJorg Pleumann    protected void tearDown() throws Exception {
1203740cbf1565815f08d9fb3a0a8d4a581cdc0d2a9dJorg Pleumann        objArray = null;
1204740cbf1565815f08d9fb3a0a8d4a581cdc0d2a9dJorg Pleumann        alist = null;
12057de2d41b95fc968b0ccc530c28d66f003ff9ab2aJoshua Bloch
1206740cbf1565815f08d9fb3a0a8d4a581cdc0d2a9dJorg Pleumann        super.tearDown();
1207adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    }
1208ba45f538a14c08015021e899f5883f07ed2ff237Narayan Kamath
1209ba45f538a14c08015021e899f5883f07ed2ff237Narayan Kamath    /**
1210ba45f538a14c08015021e899f5883f07ed2ff237Narayan Kamath     * Returns a collection that emulates another thread calling remove() each
1211ba45f538a14c08015021e899f5883f07ed2ff237Narayan Kamath     * time the current thread calls size().
1212ba45f538a14c08015021e899f5883f07ed2ff237Narayan Kamath     */
1213ba45f538a14c08015021e899f5883f07ed2ff237Narayan Kamath    private <T> Collection<T> shrinksOnSize(T... elements) {
1214ba45f538a14c08015021e899f5883f07ed2ff237Narayan Kamath        return new HashSet<T>(Arrays.asList(elements)) {
1215ba45f538a14c08015021e899f5883f07ed2ff237Narayan Kamath            boolean shrink = true;
1216ba45f538a14c08015021e899f5883f07ed2ff237Narayan Kamath
1217ba45f538a14c08015021e899f5883f07ed2ff237Narayan Kamath            @Override
1218ba45f538a14c08015021e899f5883f07ed2ff237Narayan Kamath            public int size() {
1219ba45f538a14c08015021e899f5883f07ed2ff237Narayan Kamath                int result = super.size();
1220ba45f538a14c08015021e899f5883f07ed2ff237Narayan Kamath                if (shrink) {
1221ba45f538a14c08015021e899f5883f07ed2ff237Narayan Kamath                    Iterator<T> i = iterator();
1222ba45f538a14c08015021e899f5883f07ed2ff237Narayan Kamath                    i.next();
1223ba45f538a14c08015021e899f5883f07ed2ff237Narayan Kamath                    i.remove();
1224ba45f538a14c08015021e899f5883f07ed2ff237Narayan Kamath                }
1225ba45f538a14c08015021e899f5883f07ed2ff237Narayan Kamath                return result;
1226ba45f538a14c08015021e899f5883f07ed2ff237Narayan Kamath            }
1227ba45f538a14c08015021e899f5883f07ed2ff237Narayan Kamath
1228ba45f538a14c08015021e899f5883f07ed2ff237Narayan Kamath            @Override
1229ba45f538a14c08015021e899f5883f07ed2ff237Narayan Kamath            public Object[] toArray() {
1230ba45f538a14c08015021e899f5883f07ed2ff237Narayan Kamath                shrink = false;
1231ba45f538a14c08015021e899f5883f07ed2ff237Narayan Kamath                return super.toArray();
1232ba45f538a14c08015021e899f5883f07ed2ff237Narayan Kamath            }
1233ba45f538a14c08015021e899f5883f07ed2ff237Narayan Kamath        };
1234ba45f538a14c08015021e899f5883f07ed2ff237Narayan Kamath    }
1235adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project}
1236