ArrayListTest.java revision 561ee011997c6c2f1befbfaa9d5f0a99771c1d63
1/* 2 * Licensed to the Apache Software Foundation (ASF) under one or more 3 * contributor license agreements. See the NOTICE file distributed with 4 * this work for additional information regarding copyright ownership. 5 * The ASF licenses this file to You under the Apache License, Version 2.0 6 * (the "License"); you may not use this file except in compliance with 7 * the License. You may obtain a copy of the License at 8 * 9 * http://www.apache.org/licenses/LICENSE-2.0 10 * 11 * Unless required by applicable law or agreed to in writing, software 12 * distributed under the License is distributed on an "AS IS" BASIS, 13 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 14 * See the License for the specific language governing permissions and 15 * limitations under the License. 16 */ 17package org.apache.harmony.luni.tests.java.util; 18 19import java.util.ArrayList; 20import java.util.Arrays; 21import java.util.Collection; 22import java.util.ConcurrentModificationException; 23import java.util.HashSet; 24import java.util.Iterator; 25import java.util.List; 26import java.util.Set; 27import java.util.Vector; 28 29import tests.support.Support_ListTest; 30 31public class ArrayListTest extends junit.framework.TestCase { 32 33 List alist; 34 35 static Object[] objArray; 36 { 37 objArray = new Object[100]; 38 for (int i = 0; i < objArray.length; i++) 39 objArray[i] = new Integer(i); 40 } 41 42 /** 43 * @tests java.util.ArrayList#ArrayList() 44 */ 45 public void test_Constructor() { 46 // Test for method java.util.ArrayList() 47 new Support_ListTest("", alist).runTest(); 48 49 ArrayList subList = new ArrayList(); 50 for (int i = -50; i < 150; i++) 51 subList.add(new Integer(i)); 52 new Support_ListTest("", subList.subList(50, 150)).runTest(); 53 } 54 55 /** 56 * @tests java.util.ArrayList#ArrayList(int) 57 */ 58 public void test_ConstructorI() { 59 // Test for method java.util.ArrayList(int) 60 ArrayList al = new ArrayList(5); 61 assertEquals("Incorrect arrayList created", 0, al.size()); 62 63 al = new ArrayList(0); 64 assertEquals("Incorrect arrayList created", 0, al.size()); 65 66 try { 67 al = new ArrayList(-1); 68 fail("Should throw IllegalArgumentException"); 69 } catch (IllegalArgumentException e) { 70 // Excepted 71 } 72 } 73 74 /** 75 * @tests java.util.ArrayList#ArrayList(java.util.Collection) 76 */ 77 public void test_ConstructorLjava_util_Collection() { 78 // Test for method java.util.ArrayList(java.util.Collection) 79 ArrayList al = new ArrayList(Arrays.asList(objArray)); 80 assertTrue("arrayList created from collection has incorrect size", al 81 .size() == objArray.length); 82 for (int counter = 0; counter < objArray.length; counter++) 83 assertTrue( 84 "arrayList created from collection has incorrect elements", 85 al.get(counter) == objArray[counter]); 86 87 } 88 89 public void testConstructorWithConcurrentCollection() { 90 Collection<String> collection = shrinksOnSize("A", "B", "C", "D"); 91 ArrayList<String> list = new ArrayList<String>(collection); 92 assertFalse(list.contains(null)); 93 } 94 95 /** 96 * @tests java.util.ArrayList#add(int, java.lang.Object) 97 */ 98 public void test_addILjava_lang_Object() { 99 // Test for method void java.util.ArrayList.add(int, java.lang.Object) 100 Object o; 101 alist.add(50, o = new Object()); 102 assertTrue("Failed to add Object", alist.get(50) == o); 103 assertTrue("Failed to fix up list after insert", 104 alist.get(51) == objArray[50] 105 && (alist.get(52) == objArray[51])); 106 Object oldItem = alist.get(25); 107 alist.add(25, null); 108 assertNull("Should have returned null", alist.get(25)); 109 assertTrue("Should have returned the old item from slot 25", alist 110 .get(26) == oldItem); 111 112 alist.add(0, o = new Object()); 113 assertEquals("Failed to add Object", alist.get(0), o); 114 assertEquals(alist.get(1), objArray[0]); 115 assertEquals(alist.get(2), objArray[1]); 116 117 oldItem = alist.get(0); 118 alist.add(0, null); 119 assertNull("Should have returned null", alist.get(0)); 120 assertEquals("Should have returned the old item from slot 0", alist 121 .get(1), oldItem); 122 123 try { 124 alist.add(-1, new Object()); 125 fail("Should throw IndexOutOfBoundsException"); 126 } catch (IndexOutOfBoundsException e) { 127 // Expected 128 assertNotNull(e.getMessage()); 129 } 130 131 try { 132 alist.add(-1, null); 133 fail("Should throw IndexOutOfBoundsException"); 134 } catch (IndexOutOfBoundsException e) { 135 // Expected 136 assertNotNull(e.getMessage()); 137 } 138 139 try { 140 alist.add(alist.size() + 1, new Object()); 141 fail("Should throw IndexOutOfBoundsException"); 142 } catch (IndexOutOfBoundsException e) { 143 // Expected 144 assertNotNull(e.getMessage()); 145 } 146 147 try { 148 alist.add(alist.size() + 1, null); 149 fail("Should throw IndexOutOfBoundsException"); 150 } catch (IndexOutOfBoundsException e) { 151 // Expected 152 assertNotNull(e.getMessage()); 153 } 154 } 155 156 /** 157 * @tests java.util.ArrayList#add(int, java.lang.Object) 158 */ 159 public void test_addILjava_lang_Object_2() { 160 Object o = new Object(); 161 int size = alist.size(); 162 alist.add(size, o); 163 assertEquals("Failed to add Object", alist.get(size), o); 164 assertEquals(alist.get(size - 2), objArray[size - 2]); 165 assertEquals(alist.get(size - 1), objArray[size - 1]); 166 167 alist.remove(size); 168 169 size = alist.size(); 170 alist.add(size, null); 171 assertNull("Should have returned null", alist.get(size)); 172 assertEquals(alist.get(size - 2), objArray[size - 2]); 173 assertEquals(alist.get(size - 1), objArray[size - 1]); 174 } 175 176 /** 177 * @tests java.util.ArrayList#add(java.lang.Object) 178 */ 179 public void test_addLjava_lang_Object() { 180 // Test for method boolean java.util.ArrayList.add(java.lang.Object) 181 Object o = new Object(); 182 alist.add(o); 183 assertTrue("Failed to add Object", alist.get(alist.size() - 1) == o); 184 alist.add(null); 185 assertNull("Failed to add null", alist.get(alist.size() - 1)); 186 } 187 188 /** 189 * @tests java.util.ArrayList#addAll(int, java.util.Collection) 190 */ 191 public void test_addAllILjava_util_Collection() { 192 // Test for method boolean java.util.ArrayList.addAll(int, 193 // java.util.Collection) 194 alist.addAll(50, alist); 195 assertEquals("Returned incorrect size after adding to existing list", 196 200, alist.size()); 197 for (int i = 0; i < 50; i++) 198 assertTrue("Manipulated elements < index", 199 alist.get(i) == objArray[i]); 200 for (int i = 0; i >= 50 && (i < 150); i++) 201 assertTrue("Failed to ad elements properly", 202 alist.get(i) == objArray[i - 50]); 203 for (int i = 0; i >= 150 && (i < 200); i++) 204 assertTrue("Failed to ad elements properly", 205 alist.get(i) == objArray[i - 100]); 206 ArrayList listWithNulls = new ArrayList(); 207 listWithNulls.add(null); 208 listWithNulls.add(null); 209 listWithNulls.add("yoink"); 210 listWithNulls.add("kazoo"); 211 listWithNulls.add(null); 212 alist.addAll(100, listWithNulls); 213 assertTrue("Incorrect size: " + alist.size(), alist.size() == 205); 214 assertNull("Item at slot 100 should be null", alist.get(100)); 215 assertNull("Item at slot 101 should be null", alist.get(101)); 216 assertEquals("Item at slot 102 should be 'yoink'", "yoink", alist 217 .get(102)); 218 assertEquals("Item at slot 103 should be 'kazoo'", "kazoo", alist 219 .get(103)); 220 assertNull("Item at slot 104 should be null", alist.get(104)); 221 alist.addAll(205, listWithNulls); 222 assertTrue("Incorrect size2: " + alist.size(), alist.size() == 210); 223 } 224 225 /** 226 * @tests java.util.ArrayList#addAll(int, java.util.Collection) 227 */ 228 @SuppressWarnings("unchecked") 229 public void test_addAllILjava_util_Collection_2() { 230 // Regression for HARMONY-467 231 ArrayList obj = new ArrayList(); 232 try { 233 obj.addAll((int) -1, (Collection) null); 234 fail("IndexOutOfBoundsException expected"); 235 } catch (IndexOutOfBoundsException e) { 236 // Expected 237 assertNotNull(e.getMessage()); 238 } 239 240 // Regression for HARMONY-5705 241 String[] data = new String[] { "1", "2", "3", "4", "5", "6", "7", "8" }; 242 ArrayList list1 = new ArrayList(); 243 ArrayList list2 = new ArrayList(); 244 for (String d : data) { 245 list1.add(d); 246 list2.add(d); 247 list2.add(d); 248 } 249 while (list1.size() > 0) 250 list1.remove(0); 251 list1.addAll(list2); 252 assertTrue("The object list is not the same as original list", list1 253 .containsAll(list2) 254 && list2.containsAll(list1)); 255 256 obj = new ArrayList(); 257 for (int i = 0; i < 100; i++) { 258 if (list1.size() > 0) { 259 obj.removeAll(list1); 260 obj.addAll(list1); 261 } 262 } 263 assertTrue("The object list is not the same as original list", obj 264 .containsAll(list1) 265 && list1.containsAll(obj)); 266 267 // Regression for Harmony-5799 268 list1 = new ArrayList(); 269 list2 = new ArrayList(); 270 int location = 2; 271 272 String[] strings = { "0", "1", "2", "3", "4", "5", "6" }; 273 int[] integers = { 0, 1, 2, 3, 4, 5, 6, 7, 8, 9 }; 274 for (int i = 0; i < 7; i++) { 275 list1.add(strings[i]); 276 } 277 for (int i = 0; i < 10; i++) { 278 list2.add(integers[i]); 279 } 280 list1.remove(location); 281 list1.addAll(location, list2); 282 283 // Inserted elements should be equal to integers array 284 for (int i = 0; i < integers.length; i++) { 285 assertEquals(integers[i], list1.get(location + i)); 286 } 287 // Elements after inserted location should 288 // be equals to related elements in strings array 289 for (int i = location + 1; i < strings.length; i++) { 290 assertEquals(strings[i], list1.get(i + integers.length - 1)); 291 } 292 } 293 294 /** 295 * @tests java.util.ArrayList#addAll(int, java.util.Collection) 296 */ 297 public void test_addAllILjava_util_Collection_3() { 298 ArrayList obj = new ArrayList(); 299 obj.addAll(0, obj); 300 obj.addAll(obj.size(), obj); 301 try { 302 obj.addAll(-1, obj); 303 fail("Should throw IndexOutOfBoundsException"); 304 } catch (IndexOutOfBoundsException e) { 305 // Expected 306 assertNotNull(e.getMessage()); 307 } 308 309 try { 310 obj.addAll(obj.size() + 1, obj); 311 fail("Should throw IndexOutOfBoundsException"); 312 } catch (IndexOutOfBoundsException e) { 313 // Expected 314 assertNotNull(e.getMessage()); 315 } 316 317 try { 318 obj.addAll(0, null); 319 fail("Should throw NullPointerException"); 320 } catch (NullPointerException e) { 321 // Excepted 322 } 323 324 try { 325 obj.addAll(obj.size() + 1, null); 326 fail("Should throw IndexOutOfBoundsException"); 327 } catch (IndexOutOfBoundsException e) { 328 // Expected 329 assertNotNull(e.getMessage()); 330 } 331 332 try { 333 obj.addAll((int) -1, (Collection) null); 334 fail("IndexOutOfBoundsException expected"); 335 } catch (IndexOutOfBoundsException e) { 336 // Expected 337 assertNotNull(e.getMessage()); 338 } 339 } 340 341 public void test_addAllCollectionOfQextendsE() { 342 // Regression for HARMONY-539 343 // https://issues.apache.org/jira/browse/HARMONY-539 344 ArrayList<String> alist = new ArrayList<String>(); 345 ArrayList<String> blist = new ArrayList<String>(); 346 alist.add("a"); 347 alist.add("b"); 348 blist.add("c"); 349 blist.add("d"); 350 blist.remove(0); 351 blist.addAll(0, alist); 352 assertEquals("a", blist.get(0)); 353 assertEquals("b", blist.get(1)); 354 assertEquals("d", blist.get(2)); 355 } 356 357 /** 358 * @tests java.util.ArrayList#addAll(java.util.Collection) 359 */ 360 public void test_addAllLjava_util_Collection() { 361 // Test for method boolean 362 // java.util.ArrayList.addAll(java.util.Collection) 363 List l = new ArrayList(); 364 l.addAll(alist); 365 for (int i = 0; i < alist.size(); i++) 366 assertTrue("Failed to add elements properly", l.get(i).equals( 367 alist.get(i))); 368 alist.addAll(alist); 369 assertEquals("Returned incorrect size after adding to existing list", 370 200, alist.size()); 371 for (int i = 0; i < 100; i++) { 372 assertTrue("Added to list in incorrect order", alist.get(i).equals( 373 l.get(i))); 374 assertTrue("Failed to add to existing list", alist.get(i + 100) 375 .equals(l.get(i))); 376 } 377 Set setWithNulls = new HashSet(); 378 setWithNulls.add(null); 379 setWithNulls.add(null); 380 setWithNulls.add("yoink"); 381 setWithNulls.add("kazoo"); 382 setWithNulls.add(null); 383 alist.addAll(100, setWithNulls); 384 Iterator i = setWithNulls.iterator(); 385 assertTrue("Item at slot 100 is wrong: " + alist.get(100), alist 386 .get(100) == i.next()); 387 assertTrue("Item at slot 101 is wrong: " + alist.get(101), alist 388 .get(101) == i.next()); 389 assertTrue("Item at slot 103 is wrong: " + alist.get(102), alist 390 .get(102) == i.next()); 391 392 try { 393 alist.addAll(null); 394 fail("Should throw NullPointerException"); 395 } catch (NullPointerException e) { 396 // Excepted 397 } 398 399 // Regression test for Harmony-3481 400 ArrayList<Integer> originalList = new ArrayList<Integer>(12); 401 for (int j = 0; j < 12; j++) { 402 originalList.add(j); 403 } 404 405 originalList.remove(0); 406 originalList.remove(0); 407 408 ArrayList<Integer> additionalList = new ArrayList<Integer>(11); 409 for (int j = 0; j < 11; j++) { 410 additionalList.add(j); 411 } 412 assertTrue(originalList.addAll(additionalList)); 413 assertEquals(21, originalList.size()); 414 415 } 416 417 public void test_ArrayList_addAll_scenario1() { 418 ArrayList arrayListA = new ArrayList(); 419 arrayListA.add(1); 420 ArrayList arrayListB = new ArrayList(); 421 arrayListB.add(1); 422 arrayListA.addAll(1, arrayListB); 423 int size = arrayListA.size(); 424 assertEquals(2, size); 425 for (int index = 0; index < size; index++) { 426 assertEquals(1, arrayListA.get(index)); 427 } 428 } 429 430 public void test_ArrayList_addAll_scenario2() { 431 ArrayList arrayList = new ArrayList(); 432 arrayList.add(1); 433 arrayList.addAll(1, arrayList); 434 int size = arrayList.size(); 435 assertEquals(2, size); 436 for (int index = 0; index < size; index++) { 437 assertEquals(1, arrayList.get(index)); 438 } 439 } 440 441 // Regression test for HARMONY-5839 442 public void testaddAllHarmony5839() { 443 Collection coll = Arrays.asList(new String[] { "1", "2" }); 444 List list = new ArrayList(); 445 list.add("a"); 446 list.add(0, "b"); 447 list.add(0, "c"); 448 list.add(0, "d"); 449 list.add(0, "e"); 450 list.add(0, "f"); 451 list.add(0, "g"); 452 list.add(0, "h"); 453 list.add(0, "i"); 454 455 list.addAll(6, coll); 456 457 assertEquals(11, list.size()); 458 assertFalse(list.contains(null)); 459 } 460 461 /** 462 * @tests java.util.ArrayList#clear() 463 */ 464 public void test_clear() { 465 // Test for method void java.util.ArrayList.clear() 466 alist.clear(); 467 assertEquals("List did not clear", 0, alist.size()); 468 alist.add(null); 469 alist.add(null); 470 alist.add(null); 471 alist.add("bam"); 472 alist.clear(); 473 assertEquals("List with nulls did not clear", 0, alist.size()); 474 /* 475 * for (int i = 0; i < alist.size(); i++) assertNull("Failed to clear 476 * list", alist.get(i)); 477 */ 478 479 } 480 481 /** 482 * @tests java.util.ArrayList#clone() 483 */ 484 public void test_clone() { 485 // Test for method java.lang.Object java.util.ArrayList.clone() 486 ArrayList x = (ArrayList) (((ArrayList) (alist)).clone()); 487 assertTrue("Cloned list was inequal to original", x.equals(alist)); 488 for (int i = 0; i < alist.size(); i++) 489 assertTrue("Cloned list contains incorrect elements", 490 alist.get(i) == x.get(i)); 491 492 alist.add(null); 493 alist.add(25, null); 494 x = (ArrayList) (((ArrayList) (alist)).clone()); 495 assertTrue("nulls test - Cloned list was inequal to original", x 496 .equals(alist)); 497 for (int i = 0; i < alist.size(); i++) 498 assertTrue("nulls test - Cloned list contains incorrect elements", 499 alist.get(i) == x.get(i)); 500 501 } 502 503 /** 504 * @tests java.util.ArrayList#contains(java.lang.Object) 505 */ 506 public void test_containsLjava_lang_Object() { 507 // Test for method boolean 508 // java.util.ArrayList.contains(java.lang.Object) 509 assertTrue("Returned false for valid element", alist 510 .contains(objArray[99])); 511 assertTrue("Returned false for equal element", alist 512 .contains(new Integer(8))); 513 assertTrue("Returned true for invalid element", !alist 514 .contains(new Object())); 515 assertTrue("Returned true for null but should have returned false", 516 !alist.contains(null)); 517 alist.add(null); 518 assertTrue("Returned false for null but should have returned true", 519 alist.contains(null)); 520 } 521 522 /** 523 * @tests java.util.ArrayList#ensureCapacity(int) 524 */ 525 public void test_ensureCapacityI() { 526 // Test for method void java.util.ArrayList.ensureCapacity(int) 527 // TODO : There is no good way to test this as it only really impacts on 528 // the private implementation. 529 530 Object testObject = new Object(); 531 int capacity = 20; 532 ArrayList al = new ArrayList(capacity); 533 int i; 534 for (i = 0; i < capacity / 2; i++) { 535 al.add(i, new Object()); 536 } 537 al.add(i, testObject); 538 int location = al.indexOf(testObject); 539 al.ensureCapacity(capacity); 540 assertTrue("EnsureCapacity moved objects around in array1.", 541 location == al.indexOf(testObject)); 542 al.remove(0); 543 al.ensureCapacity(capacity); 544 assertTrue("EnsureCapacity moved objects around in array2.", 545 --location == al.indexOf(testObject)); 546 al.ensureCapacity(capacity + 2); 547 assertTrue("EnsureCapacity did not change location.", location == al 548 .indexOf(testObject)); 549 550 ArrayList<String> list = new ArrayList<String>(1); 551 list.add("hello"); 552 list.ensureCapacity(Integer.MIN_VALUE); 553 } 554 555 /** 556 * @tests java.util.ArrayList#get(int) 557 */ 558 public void test_getI() { 559 // Test for method java.lang.Object java.util.ArrayList.get(int) 560 assertTrue("Returned incorrect element", alist.get(22) == objArray[22]); 561 try { 562 alist.get(8765); 563 fail("Failed to throw expected exception for index > size"); 564 } catch (IndexOutOfBoundsException e) { 565 // Expected 566 assertNotNull(e.getMessage()); 567 } 568 } 569 570 /** 571 * @tests java.util.ArrayList#indexOf(java.lang.Object) 572 */ 573 public void test_indexOfLjava_lang_Object() { 574 // Test for method int java.util.ArrayList.indexOf(java.lang.Object) 575 assertEquals("Returned incorrect index", 87, alist 576 .indexOf(objArray[87])); 577 assertEquals("Returned index for invalid Object", -1, alist 578 .indexOf(new Object())); 579 alist.add(25, null); 580 alist.add(50, null); 581 assertTrue("Wrong indexOf for null. Wanted 25 got: " 582 + alist.indexOf(null), alist.indexOf(null) == 25); 583 } 584 585 /** 586 * @tests java.util.ArrayList#isEmpty() 587 */ 588 public void test_isEmpty() { 589 // Test for method boolean java.util.ArrayList.isEmpty() 590 assertTrue("isEmpty returned false for new list", new ArrayList() 591 .isEmpty()); 592 assertTrue("Returned true for existing list with elements", !alist 593 .isEmpty()); 594 } 595 596 /** 597 * @tests java.util.ArrayList#lastIndexOf(java.lang.Object) 598 */ 599 public void test_lastIndexOfLjava_lang_Object() { 600 // Test for method int java.util.ArrayList.lastIndexOf(java.lang.Object) 601 alist.add(new Integer(99)); 602 assertEquals("Returned incorrect index", 100, alist 603 .lastIndexOf(objArray[99])); 604 assertEquals("Returned index for invalid Object", -1, alist 605 .lastIndexOf(new Object())); 606 alist.add(25, null); 607 alist.add(50, null); 608 assertTrue("Wrong lastIndexOf for null. Wanted 50 got: " 609 + alist.lastIndexOf(null), alist.lastIndexOf(null) == 50); 610 } 611 612 /** 613 * @tests {@link java.util.ArrayList#removeRange(int, int)} 614 */ 615 public void test_removeRange() { 616 MockArrayList mylist = new MockArrayList(); 617 mylist.removeRange(0, 0); 618 619 try { 620 mylist.removeRange(0, 1); 621 fail("Should throw IndexOutOfBoundsException"); 622 } catch (IndexOutOfBoundsException e) { 623 // Expected 624 assertNotNull(e.getMessage()); 625 } 626 627 int[] data = { 1, 2, 3 }; 628 for (int i = 0; i < data.length; i++) { 629 mylist.add(i, data[i]); 630 } 631 632 mylist.removeRange(0, 1); 633 assertEquals(data[1], mylist.get(0)); 634 assertEquals(data[2], mylist.get(1)); 635 636 try { 637 mylist.removeRange(-1, 1); 638 fail("Should throw IndexOutOfBoundsException"); 639 } catch (IndexOutOfBoundsException e) { 640 // Expected 641 assertNotNull(e.getMessage()); 642 } 643 644 try { 645 mylist.removeRange(0, -1); 646 fail("Should throw IndexOutOfBoundsException"); 647 } catch (IndexOutOfBoundsException e) { 648 // Expected 649 assertNotNull(e.getMessage()); 650 } 651 652 try { 653 mylist.removeRange(1, 0); 654 fail("Should throw IndexOutOfBoundsException"); 655 } catch (IndexOutOfBoundsException e) { 656 // Expected 657 assertNotNull(e.getMessage()); 658 } 659 660 try { 661 mylist.removeRange(2, 1); 662 fail("Should throw IndexOutOfBoundsException"); 663 } catch (IndexOutOfBoundsException e) { 664 // Expected 665 assertNotNull(e.getMessage()); 666 } 667 } 668 669 /** 670 * @tests java.util.ArrayList#remove(int) 671 */ 672 public void test_removeI() { 673 // Test for method java.lang.Object java.util.ArrayList.remove(int) 674 alist.remove(10); 675 assertEquals("Failed to remove element", -1, alist 676 .indexOf(objArray[10])); 677 try { 678 alist.remove(999); 679 fail("Failed to throw exception when index out of range"); 680 } catch (IndexOutOfBoundsException e) { 681 // Expected 682 assertNotNull(e.getMessage()); 683 } 684 685 ArrayList myList = (ArrayList) (((ArrayList) (alist)).clone()); 686 alist.add(25, null); 687 alist.add(50, null); 688 alist.remove(50); 689 alist.remove(25); 690 assertTrue("Removing nulls did not work", alist.equals(myList)); 691 692 List list = new ArrayList(Arrays.asList(new String[] { "a", "b", "c", 693 "d", "e", "f", "g" })); 694 assertTrue("Removed wrong element 1", list.remove(0) == "a"); 695 assertTrue("Removed wrong element 2", list.remove(4) == "f"); 696 String[] result = new String[5]; 697 list.toArray(result); 698 assertTrue("Removed wrong element 3", Arrays.equals(result, 699 new String[] { "b", "c", "d", "e", "g" })); 700 701 List l = new ArrayList(0); 702 l.add(new Object()); 703 l.add(new Object()); 704 l.remove(0); 705 l.remove(0); 706 try { 707 l.remove(-1); 708 fail("-1 should cause exception"); 709 } catch (IndexOutOfBoundsException e) { 710 // Expected 711 assertNotNull(e.getMessage()); 712 } 713 try { 714 l.remove(0); 715 fail("0 should case exception"); 716 } catch (IndexOutOfBoundsException e) { 717 // Expected 718 assertNotNull(e.getMessage()); 719 } 720 } 721 722 /** 723 * @tests java.util.ArrayList#set(int, java.lang.Object) 724 */ 725 public void test_setILjava_lang_Object() { 726 // Test for method java.lang.Object java.util.ArrayList.set(int, 727 // java.lang.Object) 728 Object obj; 729 alist.set(65, obj = new Object()); 730 assertTrue("Failed to set object", alist.get(65) == obj); 731 alist.set(50, null); 732 assertNull("Setting to null did not work", alist.get(50)); 733 assertTrue("Setting increased the list's size to: " + alist.size(), 734 alist.size() == 100); 735 736 obj = new Object(); 737 alist.set(0, obj); 738 assertTrue("Failed to set object", alist.get(0) == obj); 739 740 try { 741 alist.set(-1, obj); 742 fail("Should throw IndexOutOfBoundsException"); 743 } catch (IndexOutOfBoundsException e) { 744 // Expected 745 assertNotNull(e.getMessage()); 746 } 747 748 try { 749 alist.set(alist.size(), obj); 750 fail("Should throw IndexOutOfBoundsException"); 751 } catch (IndexOutOfBoundsException e) { 752 // Expected 753 assertNotNull(e.getMessage()); 754 } 755 756 try { 757 alist.set(-1, null); 758 fail("Should throw IndexOutOfBoundsException"); 759 } catch (IndexOutOfBoundsException e) { 760 // Expected 761 assertNotNull(e.getMessage()); 762 } 763 764 try { 765 alist.set(alist.size(), null); 766 fail("Should throw IndexOutOfBoundsException"); 767 } catch (IndexOutOfBoundsException e) { 768 // Expected 769 assertNotNull(e.getMessage()); 770 } 771 } 772 773 /** 774 * @tests java.util.ArrayList#size() 775 */ 776 public void test_size() { 777 // Test for method int java.util.ArrayList.size() 778 assertEquals("Returned incorrect size for exiting list", 100, alist 779 .size()); 780 assertEquals("Returned incorrect size for new list", 0, new ArrayList() 781 .size()); 782 } 783 784 /** 785 * @tests java.util.AbstractCollection#toString() 786 */ 787 public void test_toString() { 788 ArrayList l = new ArrayList(1); 789 l.add(l); 790 String result = l.toString(); 791 assertTrue("should contain self ref", result.indexOf("(this") > -1); 792 } 793 794 /** 795 * @tests java.util.ArrayList#toArray() 796 */ 797 public void test_toArray() { 798 // Test for method java.lang.Object [] java.util.ArrayList.toArray() 799 alist.set(25, null); 800 alist.set(75, null); 801 Object[] obj = alist.toArray(); 802 assertEquals("Returned array of incorrect size", objArray.length, 803 obj.length); 804 805 for (int i = 0; i < obj.length; i++) { 806 if ((i == 25) || (i == 75)) 807 assertNull("Should be null at: " + i + " but instead got: " 808 + obj[i], obj[i]); 809 else 810 assertTrue("Returned incorrect array: " + i, 811 obj[i] == objArray[i]); 812 } 813 814 } 815 816 /** 817 * @tests java.util.ArrayList#toArray(java.lang.Object[]) 818 */ 819 public void test_toArray$Ljava_lang_Object() { 820 // Test for method java.lang.Object [] 821 // java.util.ArrayList.toArray(java.lang.Object []) 822 alist.set(25, null); 823 alist.set(75, null); 824 Integer[] argArray = new Integer[100]; 825 Object[] retArray; 826 retArray = alist.toArray(argArray); 827 assertTrue("Returned different array than passed", retArray == argArray); 828 argArray = new Integer[1000]; 829 retArray = alist.toArray(argArray); 830 assertNull("Failed to set first extra element to null", argArray[alist 831 .size()]); 832 for (int i = 0; i < 100; i++) { 833 if ((i == 25) || (i == 75)) 834 assertNull("Should be null: " + i, retArray[i]); 835 else 836 assertTrue("Returned incorrect array: " + i, 837 retArray[i] == objArray[i]); 838 } 839 } 840 841 /** 842 * @tests java.util.ArrayList#trimToSize() 843 */ 844 public void test_trimToSize() { 845 // Test for method void java.util.ArrayList.trimToSize() 846 for (int i = 99; i > 24; i--) 847 alist.remove(i); 848 ((ArrayList) alist).trimToSize(); 849 assertEquals("Returned incorrect size after trim", 25, alist.size()); 850 for (int i = 0; i < alist.size(); i++) 851 assertTrue("Trimmed list contained incorrect elements", alist 852 .get(i) == objArray[i]); 853 Vector v = new Vector(); 854 v.add("a"); 855 ArrayList al = new ArrayList(v); 856 Iterator it = al.iterator(); 857 al.trimToSize(); 858 try { 859 it.next(); 860 fail("should throw a ConcurrentModificationException"); 861 } catch (ConcurrentModificationException ioobe) { 862 // expected 863 } 864 } 865 866 /** 867 * @test java.util.ArrayList#addAll(int, Collection) 868 */ 869 public void test_addAll() { 870 ArrayList list = new ArrayList(); 871 list.add("one"); 872 list.add("two"); 873 assertEquals(2, list.size()); 874 875 list.remove(0); 876 assertEquals(1, list.size()); 877 878 ArrayList collection = new ArrayList(); 879 collection.add("1"); 880 collection.add("2"); 881 collection.add("3"); 882 assertEquals(3, collection.size()); 883 884 list.addAll(0, collection); 885 assertEquals(4, list.size()); 886 887 list.remove(0); 888 list.remove(0); 889 assertEquals(2, list.size()); 890 891 collection.add("4"); 892 collection.add("5"); 893 collection.add("6"); 894 collection.add("7"); 895 collection.add("8"); 896 collection.add("9"); 897 collection.add("10"); 898 collection.add("11"); 899 collection.add("12"); 900 901 assertEquals(12, collection.size()); 902 903 list.addAll(0, collection); 904 assertEquals(14, list.size()); 905 } 906 907 public void testAddAllWithConcurrentCollection() { 908 ArrayList<String> list = new ArrayList<String>(); 909 list.addAll(shrinksOnSize("A", "B", "C", "D")); 910 assertFalse(list.contains(null)); 911 } 912 913 public void testAddAllAtPositionWithConcurrentCollection() { 914 ArrayList<String> list = new ArrayList<String>( 915 Arrays.asList("A", "B", "C", "D")); 916 917 list.addAll(3, shrinksOnSize("E", "F", "G", "H")); 918 assertFalse(list.contains(null)); 919 } 920 921 public void test_override_size() throws Exception { 922 ArrayList testlist = new MockArrayList(); 923 // though size is overriden, it should passed without exception 924 testlist.add("test_0"); 925 testlist.add("test_1"); 926 testlist.add("test_2"); 927 testlist.add(1, "test_3"); 928 testlist.get(1); 929 testlist.remove(2); 930 testlist.set(1, "test_4"); 931 } 932 933 public static class ArrayListExtend extends ArrayList { 934 935 private int size = 0; 936 937 public ArrayListExtend() { 938 super(10); 939 } 940 941 public boolean add(Object o) { 942 size++; 943 return super.add(o); 944 } 945 946 public int size() { 947 return size; 948 } 949 } 950 951 public class MockArrayList extends ArrayList { 952 public int size() { 953 return 0; 954 } 955 956 public void removeRange(int start, int end) { 957 super.removeRange(start, end); 958 } 959 } 960 961 public void test_subclassing() { 962 ArrayListExtend a = new ArrayListExtend(); 963 /* 964 * Regression test for subclasses that override size() (which used to 965 * cause an exception when growing 'a'). 966 */ 967 for (int i = 0; i < 100; i++) { 968 a.add(new Object()); 969 } 970 } 971 972 /** 973 * Sets up the fixture, for example, open a network connection. This method 974 * is called before a test is executed. 975 */ 976 protected void setUp() throws Exception { 977 super.setUp(); 978 alist = new ArrayList(); 979 for (int i = 0; i < objArray.length; i++) 980 alist.add(objArray[i]); 981 } 982 983 /** 984 * Returns a collection that emulates another thread calling remove() each 985 * time the current thread calls size(). 986 */ 987 private <T> Collection<T> shrinksOnSize(T... elements) { 988 return new HashSet<T>(Arrays.asList(elements)) { 989 boolean shrink = true; 990 991 @Override 992 public int size() { 993 int result = super.size(); 994 if (shrink) { 995 Iterator<T> i = iterator(); 996 i.next(); 997 i.remove(); 998 } 999 return result; 1000 } 1001 1002 @Override 1003 public Object[] toArray() { 1004 shrink = false; 1005 return super.toArray(); 1006 } 1007 }; 1008 } 1009} 1010