| /* |
| * Licensed to the Apache Software Foundation (ASF) under one or more |
| * contributor license agreements. See the NOTICE file distributed with |
| * this work for additional information regarding copyright ownership. |
| * The ASF licenses this file to You under the Apache License, Version 2.0 |
| * (the "License"); you may not use this file except in compliance with |
| * the License. You may obtain a copy of the License at |
| * |
| * http://www.apache.org/licenses/LICENSE-2.0 |
| * |
| * Unless required by applicable law or agreed to in writing, software |
| * distributed under the License is distributed on an "AS IS" BASIS, |
| * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. |
| * See the License for the specific language governing permissions and |
| * limitations under the License. |
| */ |
| package org.apache.harmony.tests.java.util; |
| |
| import java.util.ArrayList; |
| import java.util.Arrays; |
| import java.util.Collection; |
| import java.util.ConcurrentModificationException; |
| import java.util.HashSet; |
| import java.util.Iterator; |
| import java.util.List; |
| import java.util.Set; |
| import java.util.Vector; |
| |
| import tests.support.Support_ListTest; |
| |
| public class ArrayListTest extends junit.framework.TestCase { |
| |
| List alist; |
| |
| Object[] objArray; |
| |
| /** |
| * java.util.ArrayList#ArrayList() |
| */ |
| public void test_Constructor() { |
| // Test for method java.util.ArrayList() |
| new Support_ListTest("", alist).runTest(); |
| |
| ArrayList subList = new ArrayList(); |
| for (int i = -50; i < 150; i++) |
| subList.add(new Integer(i)); |
| new Support_ListTest("", subList.subList(50, 150)).runTest(); |
| } |
| |
| /** |
| * java.util.ArrayList#ArrayList(int) |
| */ |
| public void test_ConstructorI() { |
| // Test for method java.util.ArrayList(int) |
| ArrayList al = new ArrayList(5); |
| assertEquals("Incorrect arrayList created", 0, al.size()); |
| |
| al = new ArrayList(0); |
| assertEquals("Incorrect arrayList created", 0, al.size()); |
| |
| try { |
| new ArrayList(-1); |
| fail("IllegalArgumentException expected"); |
| } catch (IllegalArgumentException expected) { |
| } |
| } |
| |
| /** |
| * java.util.ArrayList#ArrayList(java.util.Collection) |
| */ |
| public void test_ConstructorLjava_util_Collection() { |
| // Test for method java.util.ArrayList(java.util.Collection) |
| ArrayList al = new ArrayList(Arrays.asList(objArray)); |
| assertTrue("arrayList created from collection has incorrect size", al |
| .size() == objArray.length); |
| for (int counter = 0; counter < objArray.length; counter++) |
| assertTrue( |
| "arrayList created from collection has incorrect elements", |
| al.get(counter) == objArray[counter]); |
| try { |
| new ArrayList(null); |
| fail("NullPointerException expected"); |
| } catch (NullPointerException e) { |
| //expected |
| } |
| |
| } |
| |
| public void testConstructorWithConcurrentCollection() { |
| Collection<String> collection = shrinksOnSize("A", "B", "C", "D"); |
| ArrayList<String> list = new ArrayList<String>(collection); |
| assertFalse(list.contains(null)); |
| } |
| |
| /** |
| * java.util.ArrayList#add(int, java.lang.Object) |
| */ |
| public void test_addILjava_lang_Object() { |
| // Test for method void java.util.ArrayList.add(int, java.lang.Object) |
| Object o; |
| alist.add(50, o = new Object()); |
| assertTrue("Failed to add Object", alist.get(50) == o); |
| assertTrue("Failed to fix up list after insert", |
| alist.get(51) == objArray[50] |
| && (alist.get(52) == objArray[51])); |
| Object oldItem = alist.get(25); |
| alist.add(25, null); |
| assertNull("Should have returned null", alist.get(25)); |
| assertTrue("Should have returned the old item from slot 25", alist |
| .get(26) == oldItem); |
| |
| alist.add(0, o = new Object()); |
| assertEquals("Failed to add Object", alist.get(0), o); |
| assertEquals(alist.get(1), objArray[0]); |
| assertEquals(alist.get(2), objArray[1]); |
| |
| oldItem = alist.get(0); |
| alist.add(0, null); |
| assertNull("Should have returned null", alist.get(0)); |
| assertEquals("Should have returned the old item from slot 0", alist |
| .get(1), oldItem); |
| |
| try { |
| alist.add(-1, new Object()); |
| fail("Should throw IndexOutOfBoundsException"); |
| } catch (IndexOutOfBoundsException e) { |
| // Expected |
| assertNotNull(e.getMessage()); |
| } |
| |
| try { |
| alist.add(-1, null); |
| fail("Should throw IndexOutOfBoundsException"); |
| } catch (IndexOutOfBoundsException e) { |
| // Expected |
| assertNotNull(e.getMessage()); |
| } |
| |
| try { |
| alist.add(alist.size() + 1, new Object()); |
| fail("Should throw IndexOutOfBoundsException"); |
| } catch (IndexOutOfBoundsException e) { |
| // Expected |
| assertNotNull(e.getMessage()); |
| } |
| |
| try { |
| alist.add(alist.size() + 1, null); |
| fail("Should throw IndexOutOfBoundsException"); |
| } catch (IndexOutOfBoundsException e) { |
| // Expected |
| assertNotNull(e.getMessage()); |
| } |
| } |
| |
| /** |
| * java.util.ArrayList#add(int, java.lang.Object) |
| */ |
| public void test_addILjava_lang_Object_2() { |
| Object o = new Object(); |
| int size = alist.size(); |
| alist.add(size, o); |
| assertEquals("Failed to add Object", alist.get(size), o); |
| assertEquals(alist.get(size - 2), objArray[size - 2]); |
| assertEquals(alist.get(size - 1), objArray[size - 1]); |
| |
| alist.remove(size); |
| |
| size = alist.size(); |
| alist.add(size, null); |
| assertNull("Should have returned null", alist.get(size)); |
| assertEquals(alist.get(size - 2), objArray[size - 2]); |
| assertEquals(alist.get(size - 1), objArray[size - 1]); |
| } |
| |
| /** |
| * java.util.ArrayList#add(java.lang.Object) |
| */ |
| public void test_addLjava_lang_Object() { |
| // Test for method boolean java.util.ArrayList.add(java.lang.Object) |
| Object o = new Object(); |
| alist.add(o); |
| assertTrue("Failed to add Object", alist.get(alist.size() - 1) == o); |
| alist.add(null); |
| assertNull("Failed to add null", alist.get(alist.size() - 1)); |
| } |
| |
| /** |
| * java.util.ArrayList#addAll(int, java.util.Collection) |
| */ |
| public void test_addAllILjava_util_Collection() { |
| // Test for method boolean java.util.ArrayList.addAll(int, |
| // java.util.Collection) |
| alist.addAll(50, alist); |
| assertEquals("Returned incorrect size after adding to existing list", |
| 200, alist.size()); |
| for (int i = 0; i < 50; i++) |
| assertTrue("Manipulated elements < index", |
| alist.get(i) == objArray[i]); |
| for (int i = 0; i >= 50 && (i < 150); i++) |
| assertTrue("Failed to ad elements properly", |
| alist.get(i) == objArray[i - 50]); |
| for (int i = 0; i >= 150 && (i < 200); i++) |
| assertTrue("Failed to ad elements properly", |
| alist.get(i) == objArray[i - 100]); |
| ArrayList listWithNulls = new ArrayList(); |
| listWithNulls.add(null); |
| listWithNulls.add(null); |
| listWithNulls.add("yoink"); |
| listWithNulls.add("kazoo"); |
| listWithNulls.add(null); |
| alist.addAll(100, listWithNulls); |
| assertTrue("Incorrect size: " + alist.size(), alist.size() == 205); |
| assertNull("Item at slot 100 should be null", alist.get(100)); |
| assertNull("Item at slot 101 should be null", alist.get(101)); |
| assertEquals("Item at slot 102 should be 'yoink'", "yoink", alist |
| .get(102)); |
| assertEquals("Item at slot 103 should be 'kazoo'", "kazoo", alist |
| .get(103)); |
| assertNull("Item at slot 104 should be null", alist.get(104)); |
| alist.addAll(205, listWithNulls); |
| assertTrue("Incorrect size2: " + alist.size(), alist.size() == 210); |
| } |
| |
| /** |
| * java.util.ArrayList#addAll(int, java.util.Collection) |
| */ |
| @SuppressWarnings("unchecked") |
| public void test_addAllILjava_util_Collection_2() { |
| // Regression for HARMONY-467 |
| ArrayList obj = new ArrayList(); |
| try { |
| obj.addAll((int) -1, (Collection) null); |
| fail("IndexOutOfBoundsException expected"); |
| } catch (IndexOutOfBoundsException e) { |
| // Expected |
| assertNotNull(e.getMessage()); |
| } |
| |
| // Regression for HARMONY-5705 |
| String[] data = new String[] { "1", "2", "3", "4", "5", "6", "7", "8" }; |
| ArrayList list1 = new ArrayList(); |
| ArrayList list2 = new ArrayList(); |
| for (String d : data) { |
| list1.add(d); |
| list2.add(d); |
| list2.add(d); |
| } |
| while (list1.size() > 0) |
| list1.remove(0); |
| list1.addAll(list2); |
| assertTrue("The object list is not the same as original list", list1 |
| .containsAll(list2) |
| && list2.containsAll(list1)); |
| |
| obj = new ArrayList(); |
| for (int i = 0; i < 100; i++) { |
| if (list1.size() > 0) { |
| obj.removeAll(list1); |
| obj.addAll(list1); |
| } |
| } |
| assertTrue("The object list is not the same as original list", obj |
| .containsAll(list1) |
| && list1.containsAll(obj)); |
| |
| // Regression for Harmony-5799 |
| list1 = new ArrayList(); |
| list2 = new ArrayList(); |
| int location = 2; |
| |
| String[] strings = { "0", "1", "2", "3", "4", "5", "6" }; |
| int[] integers = { 0, 1, 2, 3, 4, 5, 6, 7, 8, 9 }; |
| for (int i = 0; i < 7; i++) { |
| list1.add(strings[i]); |
| } |
| for (int i = 0; i < 10; i++) { |
| list2.add(integers[i]); |
| } |
| list1.remove(location); |
| list1.addAll(location, list2); |
| |
| // Inserted elements should be equal to integers array |
| for (int i = 0; i < integers.length; i++) { |
| assertEquals(integers[i], list1.get(location + i)); |
| } |
| // Elements after inserted location should |
| // be equals to related elements in strings array |
| for (int i = location + 1; i < strings.length; i++) { |
| assertEquals(strings[i], list1.get(i + integers.length - 1)); |
| } |
| } |
| |
| /** |
| * java.util.ArrayList#addAll(int, java.util.Collection) |
| */ |
| public void test_addAllILjava_util_Collection_3() { |
| ArrayList obj = new ArrayList(); |
| obj.addAll(0, obj); |
| obj.addAll(obj.size(), obj); |
| try { |
| obj.addAll(-1, obj); |
| fail("Should throw IndexOutOfBoundsException"); |
| } catch (IndexOutOfBoundsException e) { |
| // Expected |
| assertNotNull(e.getMessage()); |
| } |
| |
| try { |
| obj.addAll(obj.size() + 1, obj); |
| fail("Should throw IndexOutOfBoundsException"); |
| } catch (IndexOutOfBoundsException e) { |
| // Expected |
| assertNotNull(e.getMessage()); |
| } |
| |
| try { |
| obj.addAll(0, null); |
| fail("Should throw NullPointerException"); |
| } catch (NullPointerException e) { |
| // Excepted |
| } |
| |
| try { |
| obj.addAll(obj.size() + 1, null); |
| fail("Should throw IndexOutOfBoundsException"); |
| } catch (IndexOutOfBoundsException e) { |
| // Expected |
| assertNotNull(e.getMessage()); |
| } |
| |
| try { |
| obj.addAll((int) -1, (Collection) null); |
| fail("IndexOutOfBoundsException expected"); |
| } catch (IndexOutOfBoundsException e) { |
| // Expected |
| assertNotNull(e.getMessage()); |
| } |
| } |
| |
| // BEGIN android-removed |
| // The spec does not mandate that IndexOutOfBoundsException be thrown in |
| // preference to NullPointerException when the caller desserves both. |
| // |
| // /** |
| // * java.util.ArrayList#addAll(int, java.util.Collection) |
| // */ |
| // public void test_addAllILjava_util_Collection_2() { |
| // // Regression for HARMONY-467 |
| // ArrayList obj = new ArrayList(); |
| // try { |
| // obj.addAll((int) -1, (Collection) null); |
| // fail("IndexOutOfBoundsException expected"); |
| // } catch (IndexOutOfBoundsException e) { |
| // } |
| // } |
| // END android-removed |
| |
| /** |
| * java.util.ArrayList#addAll(java.util.Collection) |
| */ |
| public void test_addAllLjava_util_Collection() { |
| // Test for method boolean |
| // java.util.ArrayList.addAll(java.util.Collection) |
| List l = new ArrayList(); |
| l.addAll(alist); |
| for (int i = 0; i < alist.size(); i++) |
| assertTrue("Failed to add elements properly", l.get(i).equals( |
| alist.get(i))); |
| alist.addAll(alist); |
| assertEquals("Returned incorrect size after adding to existing list", |
| 200, alist.size()); |
| for (int i = 0; i < 100; i++) { |
| assertTrue("Added to list in incorrect order", alist.get(i).equals( |
| l.get(i))); |
| assertTrue("Failed to add to existing list", alist.get(i + 100) |
| .equals(l.get(i))); |
| } |
| Set setWithNulls = new HashSet(); |
| setWithNulls.add(null); |
| setWithNulls.add(null); |
| setWithNulls.add("yoink"); |
| setWithNulls.add("kazoo"); |
| setWithNulls.add(null); |
| alist.addAll(100, setWithNulls); |
| Iterator i = setWithNulls.iterator(); |
| assertTrue("Item at slot 100 is wrong: " + alist.get(100), alist |
| .get(100) == i.next()); |
| assertTrue("Item at slot 101 is wrong: " + alist.get(101), alist |
| .get(101) == i.next()); |
| assertTrue("Item at slot 103 is wrong: " + alist.get(102), alist |
| .get(102) == i.next()); |
| |
| try { |
| alist.addAll(null); |
| fail("Should throw NullPointerException"); |
| } catch (NullPointerException e) { |
| // Excepted |
| } |
| |
| // Regression test for Harmony-3481 |
| ArrayList<Integer> originalList = new ArrayList<Integer>(12); |
| for (int j = 0; j < 12; j++) { |
| originalList.add(j); |
| } |
| |
| originalList.remove(0); |
| originalList.remove(0); |
| |
| ArrayList<Integer> additionalList = new ArrayList<Integer>(11); |
| for (int j = 0; j < 11; j++) { |
| additionalList.add(j); |
| } |
| assertTrue(originalList.addAll(additionalList)); |
| assertEquals(21, originalList.size()); |
| |
| } |
| |
| public void test_ArrayList_addAll_scenario1() { |
| ArrayList arrayListA = new ArrayList(); |
| arrayListA.add(1); |
| ArrayList arrayListB = new ArrayList(); |
| arrayListB.add(1); |
| arrayListA.addAll(1, arrayListB); |
| int size = arrayListA.size(); |
| assertEquals(2, size); |
| for (int index = 0; index < size; index++) { |
| assertEquals(1, arrayListA.get(index)); |
| } |
| } |
| |
| public void test_ArrayList_addAll_scenario2() { |
| ArrayList arrayList = new ArrayList(); |
| arrayList.add(1); |
| arrayList.addAll(1, arrayList); |
| int size = arrayList.size(); |
| assertEquals(2, size); |
| for (int index = 0; index < size; index++) { |
| assertEquals(1, arrayList.get(index)); |
| } |
| } |
| |
| // Regression test for HARMONY-5839 |
| public void testaddAllHarmony5839() { |
| Collection coll = Arrays.asList(new String[] { "1", "2" }); |
| List list = new ArrayList(); |
| list.add("a"); |
| list.add(0, "b"); |
| list.add(0, "c"); |
| list.add(0, "d"); |
| list.add(0, "e"); |
| list.add(0, "f"); |
| list.add(0, "g"); |
| list.add(0, "h"); |
| list.add(0, "i"); |
| |
| list.addAll(6, coll); |
| |
| assertEquals(11, list.size()); |
| assertFalse(list.contains(null)); |
| } |
| |
| /** |
| * java.util.ArrayList#clear() |
| */ |
| public void test_clear() { |
| // Test for method void java.util.ArrayList.clear() |
| alist.clear(); |
| assertEquals("List did not clear", 0, alist.size()); |
| alist.add(null); |
| alist.add(null); |
| alist.add(null); |
| alist.add("bam"); |
| alist.clear(); |
| assertEquals("List with nulls did not clear", 0, alist.size()); |
| /* |
| * for (int i = 0; i < alist.size(); i++) assertNull("Failed to clear |
| * list", alist.get(i)); |
| */ |
| |
| } |
| |
| /** |
| * java.util.ArrayList#clone() |
| */ |
| public void test_clone() { |
| // Test for method java.lang.Object java.util.ArrayList.clone() |
| ArrayList x = (ArrayList) (((ArrayList) (alist)).clone()); |
| assertTrue("Cloned list was inequal to original", x.equals(alist)); |
| for (int i = 0; i < alist.size(); i++) |
| assertTrue("Cloned list contains incorrect elements", |
| alist.get(i) == x.get(i)); |
| |
| alist.add(null); |
| alist.add(25, null); |
| x = (ArrayList) (((ArrayList) (alist)).clone()); |
| assertTrue("nulls test - Cloned list was inequal to original", x |
| .equals(alist)); |
| for (int i = 0; i < alist.size(); i++) |
| assertTrue("nulls test - Cloned list contains incorrect elements", |
| alist.get(i) == x.get(i)); |
| |
| } |
| |
| /** |
| * java.util.ArrayList#contains(java.lang.Object) |
| */ |
| public void test_containsLjava_lang_Object() { |
| // Test for method boolean |
| // java.util.ArrayList.contains(java.lang.Object) |
| assertTrue("Returned false for valid element", alist |
| .contains(objArray[99])); |
| assertTrue("Returned false for equal element", alist |
| .contains(new Integer(8))); |
| assertTrue("Returned true for invalid element", !alist |
| .contains(new Object())); |
| assertTrue("Returned true for null but should have returned false", |
| !alist.contains(null)); |
| alist.add(null); |
| assertTrue("Returned false for null but should have returned true", |
| alist.contains(null)); |
| } |
| |
| /** |
| * java.util.ArrayList#ensureCapacity(int) |
| */ |
| public void test_ensureCapacityI() throws Exception { |
| // Test for method void java.util.ArrayList.ensureCapacity(int) |
| // TODO : There is no good way to test this as it only really impacts on |
| // the private implementation. |
| |
| Object testObject = new Object(); |
| int capacity = 20; |
| ArrayList al = new ArrayList(capacity); |
| int i; |
| for (i = 0; i < capacity / 2; i++) { |
| al.add(i, new Object()); |
| } |
| al.add(i, testObject); |
| int location = al.indexOf(testObject); |
| al.ensureCapacity(capacity); |
| assertTrue("EnsureCapacity moved objects around in array1.", |
| location == al.indexOf(testObject)); |
| al.remove(0); |
| al.ensureCapacity(capacity); |
| assertTrue("EnsureCapacity moved objects around in array2.", |
| --location == al.indexOf(testObject)); |
| al.ensureCapacity(capacity + 2); |
| assertTrue("EnsureCapacity did not change location.", location == al |
| .indexOf(testObject)); |
| |
| ArrayList<String> list = new ArrayList<String>(1); |
| list.add("hello"); |
| list.ensureCapacity(Integer.MIN_VALUE); |
| } |
| |
| /** |
| * java.util.ArrayList#get(int) |
| */ |
| public void test_getI() { |
| // Test for method java.lang.Object java.util.ArrayList.get(int) |
| assertTrue("Returned incorrect element", alist.get(22) == objArray[22]); |
| try { |
| alist.get(8765); |
| fail("Failed to throw expected exception for index > size"); |
| } catch (IndexOutOfBoundsException e) { |
| // Expected |
| assertNotNull(e.getMessage()); |
| } |
| } |
| |
| /** |
| * java.util.ArrayList#indexOf(java.lang.Object) |
| */ |
| public void test_indexOfLjava_lang_Object() { |
| // Test for method int java.util.ArrayList.indexOf(java.lang.Object) |
| assertEquals("Returned incorrect index", 87, alist |
| .indexOf(objArray[87])); |
| assertEquals("Returned index for invalid Object", -1, alist |
| .indexOf(new Object())); |
| alist.add(25, null); |
| alist.add(50, null); |
| assertTrue("Wrong indexOf for null. Wanted 25 got: " |
| + alist.indexOf(null), alist.indexOf(null) == 25); |
| } |
| |
| /** |
| * java.util.ArrayList#isEmpty() |
| */ |
| public void test_isEmpty() { |
| // Test for method boolean java.util.ArrayList.isEmpty() |
| assertTrue("isEmpty returned false for new list", new ArrayList() |
| .isEmpty()); |
| assertTrue("Returned true for existing list with elements", !alist |
| .isEmpty()); |
| } |
| |
| /** |
| * java.util.ArrayList#lastIndexOf(java.lang.Object) |
| */ |
| public void test_lastIndexOfLjava_lang_Object() { |
| // Test for method int java.util.ArrayList.lastIndexOf(java.lang.Object) |
| alist.add(new Integer(99)); |
| assertEquals("Returned incorrect index", 100, alist |
| .lastIndexOf(objArray[99])); |
| assertEquals("Returned index for invalid Object", -1, alist |
| .lastIndexOf(new Object())); |
| alist.add(25, null); |
| alist.add(50, null); |
| assertTrue("Wrong lastIndexOf for null. Wanted 50 got: " |
| + alist.lastIndexOf(null), alist.lastIndexOf(null) == 50); |
| } |
| |
| /** |
| * {@link java.util.ArrayList#removeRange(int, int)} |
| */ |
| public void test_removeRange() { |
| MockArrayList mylist = new MockArrayList(); |
| mylist.removeRange(0, 0); |
| |
| try { |
| mylist.removeRange(0, 1); |
| fail("Should throw IndexOutOfBoundsException"); |
| } catch (IndexOutOfBoundsException e) { |
| // Expected |
| assertNotNull(e.getMessage()); |
| } |
| |
| int[] data = { 1, 2, 3 }; |
| for (int i = 0; i < data.length; i++) { |
| mylist.add(i, data[i]); |
| } |
| |
| mylist.removeRange(0, 1); |
| assertEquals(data[1], mylist.get(0)); |
| assertEquals(data[2], mylist.get(1)); |
| |
| try { |
| mylist.removeRange(-1, 1); |
| fail("Should throw IndexOutOfBoundsException"); |
| } catch (IndexOutOfBoundsException e) { |
| // Expected |
| assertNotNull(e.getMessage()); |
| } |
| |
| try { |
| mylist.removeRange(0, -1); |
| fail("Should throw IndexOutOfBoundsException"); |
| } catch (IndexOutOfBoundsException e) { |
| // Expected |
| assertNotNull(e.getMessage()); |
| } |
| |
| try { |
| mylist.removeRange(1, 0); |
| fail("Should throw IndexOutOfBoundsException"); |
| } catch (IndexOutOfBoundsException e) { |
| // Expected |
| assertNotNull(e.getMessage()); |
| } |
| |
| try { |
| mylist.removeRange(2, 1); |
| fail("Should throw IndexOutOfBoundsException"); |
| } catch (IndexOutOfBoundsException e) { |
| // Expected |
| assertNotNull(e.getMessage()); |
| } |
| } |
| |
| /** |
| * java.util.ArrayList#remove(int) |
| */ |
| public void test_removeI() { |
| // Test for method java.lang.Object java.util.ArrayList.remove(int) |
| alist.remove(10); |
| assertEquals("Failed to remove element", -1, alist |
| .indexOf(objArray[10])); |
| try { |
| alist.remove(999); |
| fail("Failed to throw exception when index out of range"); |
| } catch (IndexOutOfBoundsException e) { |
| // Expected |
| assertNotNull(e.getMessage()); |
| } |
| |
| ArrayList myList = (ArrayList) (((ArrayList) (alist)).clone()); |
| alist.add(25, null); |
| alist.add(50, null); |
| alist.remove(50); |
| alist.remove(25); |
| assertTrue("Removing nulls did not work", alist.equals(myList)); |
| |
| List list = new ArrayList(Arrays.asList(new String[] { "a", "b", "c", |
| "d", "e", "f", "g" })); |
| assertTrue("Removed wrong element 1", list.remove(0) == "a"); |
| assertTrue("Removed wrong element 2", list.remove(4) == "f"); |
| String[] result = new String[5]; |
| list.toArray(result); |
| assertTrue("Removed wrong element 3", Arrays.equals(result, |
| new String[] { "b", "c", "d", "e", "g" })); |
| |
| List l = new ArrayList(0); |
| l.add(new Object()); |
| l.add(new Object()); |
| l.remove(0); |
| l.remove(0); |
| try { |
| l.remove(-1); |
| fail("-1 should cause exception"); |
| } catch (IndexOutOfBoundsException e) { |
| // Expected |
| assertNotNull(e.getMessage()); |
| } |
| try { |
| l.remove(0); |
| fail("0 should case exception"); |
| } catch (IndexOutOfBoundsException e) { |
| // Expected |
| assertNotNull(e.getMessage()); |
| } |
| } |
| |
| /** |
| * java.util.ArrayList#set(int, java.lang.Object) |
| */ |
| public void test_setILjava_lang_Object() { |
| // Test for method java.lang.Object java.util.ArrayList.set(int, |
| // java.lang.Object) |
| Object obj; |
| alist.set(65, obj = new Object()); |
| assertTrue("Failed to set object", alist.get(65) == obj); |
| alist.set(50, null); |
| assertNull("Setting to null did not work", alist.get(50)); |
| assertTrue("Setting increased the list's size to: " + alist.size(), |
| alist.size() == 100); |
| |
| obj = new Object(); |
| alist.set(0, obj); |
| assertTrue("Failed to set object", alist.get(0) == obj); |
| |
| try { |
| alist.set(-1, obj); |
| fail("Should throw IndexOutOfBoundsException"); |
| } catch (IndexOutOfBoundsException e) { |
| // Expected |
| assertNotNull(e.getMessage()); |
| } |
| |
| try { |
| alist.set(alist.size(), obj); |
| fail("Should throw IndexOutOfBoundsException"); |
| } catch (IndexOutOfBoundsException e) { |
| // Expected |
| assertNotNull(e.getMessage()); |
| } |
| |
| try { |
| alist.set(-1, null); |
| fail("Should throw IndexOutOfBoundsException"); |
| } catch (IndexOutOfBoundsException e) { |
| // Expected |
| assertNotNull(e.getMessage()); |
| } |
| |
| try { |
| alist.set(alist.size(), null); |
| fail("Should throw IndexOutOfBoundsException"); |
| } catch (IndexOutOfBoundsException e) { |
| // Expected |
| assertNotNull(e.getMessage()); |
| } |
| } |
| |
| /** |
| * java.util.ArrayList#size() |
| */ |
| public void test_size() { |
| // Test for method int java.util.ArrayList.size() |
| assertEquals("Returned incorrect size for exiting list", 100, alist |
| .size()); |
| assertEquals("Returned incorrect size for new list", 0, new ArrayList() |
| .size()); |
| } |
| |
| /** |
| * java.util.AbstractCollection#toString() |
| */ |
| public void test_toString() { |
| ArrayList l = new ArrayList(1); |
| l.add(l); |
| String result = l.toString(); |
| assertTrue("should contain self ref", result.indexOf("(this") > -1); |
| } |
| |
| /** |
| * java.util.ArrayList#toArray() |
| */ |
| public void test_toArray() { |
| // Test for method java.lang.Object [] java.util.ArrayList.toArray() |
| alist.set(25, null); |
| alist.set(75, null); |
| Object[] obj = alist.toArray(); |
| assertEquals("Returned array of incorrect size", objArray.length, |
| obj.length); |
| |
| for (int i = 0; i < obj.length; i++) { |
| if ((i == 25) || (i == 75)) |
| assertNull("Should be null at: " + i + " but instead got: " |
| + obj[i], obj[i]); |
| else |
| assertTrue("Returned incorrect array: " + i, |
| obj[i] == objArray[i]); |
| } |
| |
| } |
| |
| /** |
| * java.util.ArrayList#toArray(java.lang.Object[]) |
| */ |
| public void test_toArray$Ljava_lang_Object() { |
| // Test for method java.lang.Object [] |
| // java.util.ArrayList.toArray(java.lang.Object []) |
| alist.set(25, null); |
| alist.set(75, null); |
| Integer[] argArray = new Integer[100]; |
| Object[] retArray; |
| retArray = alist.toArray(argArray); |
| assertTrue("Returned different array than passed", retArray == argArray); |
| argArray = new Integer[1000]; |
| retArray = alist.toArray(argArray); |
| assertNull("Failed to set first extra element to null", argArray[alist |
| .size()]); |
| for (int i = 0; i < 100; i++) { |
| if ((i == 25) || (i == 75)) |
| assertNull("Should be null: " + i, retArray[i]); |
| else |
| assertTrue("Returned incorrect array: " + i, |
| retArray[i] == objArray[i]); |
| } |
| |
| String[] strArray = new String[100]; |
| try { |
| alist.toArray(strArray); |
| fail("ArrayStoreException expected"); |
| } catch (ArrayStoreException e) { |
| //expected |
| } |
| } |
| |
| /** |
| * java.util.ArrayList#trimToSize() |
| */ |
| public void test_trimToSize() { |
| // Test for method void java.util.ArrayList.trimToSize() |
| for (int i = 99; i > 24; i--) |
| alist.remove(i); |
| ((ArrayList) alist).trimToSize(); |
| assertEquals("Returned incorrect size after trim", 25, alist.size()); |
| for (int i = 0; i < alist.size(); i++) |
| assertTrue("Trimmed list contained incorrect elements", alist |
| .get(i) == objArray[i]); |
| Vector v = new Vector(); |
| v.add("a"); |
| ArrayList al = new ArrayList(v); |
| al.add("b"); |
| Iterator it = al.iterator(); |
| al.trimToSize(); |
| try { |
| it.next(); |
| fail("should throw a ConcurrentModificationException"); |
| } catch (ConcurrentModificationException ioobe) { |
| // expected |
| } |
| } |
| |
| public void test_trimToSize_02() { |
| ArrayList list = new ArrayList(Arrays.asList(new String[] { "a", "b", "c", |
| "d", "e", "f", "g" })); |
| list.remove("a"); |
| list.remove("f"); |
| list.trimToSize(); |
| } |
| |
| public void test_addAll() { |
| ArrayList list = new ArrayList(); |
| list.add("one"); |
| list.add("two"); |
| assertEquals(2, list.size()); |
| |
| list.remove(0); |
| assertEquals(1, list.size()); |
| |
| ArrayList collection = new ArrayList(); |
| collection.add("1"); |
| collection.add("2"); |
| collection.add("3"); |
| assertEquals(3, collection.size()); |
| |
| list.addAll(0, collection); |
| assertEquals(4, list.size()); |
| |
| list.remove(0); |
| list.remove(0); |
| assertEquals(2, list.size()); |
| |
| collection.add("4"); |
| collection.add("5"); |
| collection.add("6"); |
| collection.add("7"); |
| collection.add("8"); |
| collection.add("9"); |
| collection.add("10"); |
| collection.add("11"); |
| collection.add("12"); |
| |
| assertEquals(12, collection.size()); |
| |
| list.addAll(0, collection); |
| assertEquals(14, list.size()); |
| } |
| |
| public void test_removeLjava_lang_Object() { |
| List list = new ArrayList(Arrays.asList(new String[] { "a", "b", "c", |
| "d", "e", "f", "g" })); |
| assertTrue("Removed wrong element 1", list.remove("a")); |
| assertTrue("Removed wrong element 2", list.remove("f")); |
| String[] result = new String[5]; |
| list.toArray(result); |
| assertTrue("Removed wrong element 3", Arrays.equals(result, |
| new String[] { "b", "c", "d", "e", "g" })); |
| } |
| |
| public void testAddAllWithConcurrentCollection() { |
| ArrayList<String> list = new ArrayList<String>(); |
| list.addAll(shrinksOnSize("A", "B", "C", "D")); |
| assertFalse(list.contains(null)); |
| } |
| |
| public void testAddAllAtPositionWithConcurrentCollection() { |
| ArrayList<String> list = new ArrayList<String>( |
| Arrays.asList("A", "B", "C", "D")); |
| |
| list.addAll(3, shrinksOnSize("E", "F", "G", "H")); |
| assertFalse(list.contains(null)); |
| } |
| |
| public void test_override_size() throws Exception { |
| ArrayList testlist = new MockArrayList(); |
| // though size is overriden, it should passed without exception |
| testlist.add("test_0"); |
| testlist.add("test_1"); |
| testlist.add("test_2"); |
| testlist.add(1, "test_3"); |
| testlist.get(1); |
| testlist.remove(2); |
| testlist.set(1, "test_4"); |
| } |
| |
| public class MockArrayList extends ArrayList { |
| public int size() { |
| return 0; |
| } |
| |
| public void removeRange(int begin, int end) { |
| super.removeRange(begin, end); |
| } |
| } |
| |
| public void test_removeRangeII() { |
| MockArrayList mal = new MockArrayList(); |
| mal.add("a"); |
| mal.add("b"); |
| mal.add("c"); |
| mal.add("d"); |
| mal.add("e"); |
| mal.add("f"); |
| mal.add("g"); |
| mal.add("h"); |
| |
| mal.removeRange(2, 4); |
| |
| String[] result = new String[6]; |
| mal.toArray(result); |
| assertTrue("Removed wrong element 3", Arrays.equals(result, |
| new String[] { "a", "b", "e", "f", "g", "h"})); |
| } |
| |
| public static class ArrayListExtend extends ArrayList { |
| |
| private int size = 0; |
| |
| public ArrayListExtend() { |
| super(10); |
| } |
| |
| public boolean add(Object o) { |
| size++; |
| return super.add(o); |
| } |
| |
| public int size() { |
| return size; |
| } |
| } |
| |
| public void test_subclassing() { |
| ArrayListExtend a = new ArrayListExtend(); |
| /* |
| * Regression test for subclasses that override size() (which used to |
| * cause an exception when growing 'a'). |
| */ |
| for (int i = 0; i < 100; i++) { |
| a.add(new Object()); |
| } |
| } |
| |
| |
| /** |
| * Sets up the fixture, for example, open a network connection. This method |
| * is called before a test is executed. |
| */ |
| protected void setUp() throws Exception { |
| super.setUp(); |
| |
| objArray = new Object[100]; |
| for (int i = 0; i < objArray.length; i++) { |
| objArray[i] = new Integer(i); |
| } |
| |
| alist = new ArrayList(); |
| for (int i = 0; i < objArray.length; i++) { |
| alist.add(objArray[i]); |
| } |
| } |
| |
| @Override |
| protected void tearDown() throws Exception { |
| objArray = null; |
| alist = null; |
| |
| super.tearDown(); |
| } |
| |
| /** |
| * Returns a collection that emulates another thread calling remove() each |
| * time the current thread calls size(). |
| */ |
| private <T> Collection<T> shrinksOnSize(T... elements) { |
| return new HashSet<T>(Arrays.asList(elements)) { |
| boolean shrink = true; |
| |
| @Override |
| public int size() { |
| int result = super.size(); |
| if (shrink) { |
| Iterator<T> i = iterator(); |
| i.next(); |
| i.remove(); |
| } |
| return result; |
| } |
| |
| @Override |
| public Object[] toArray() { |
| shrink = false; |
| return super.toArray(); |
| } |
| }; |
| } |
| } |