1 /* 2 * Licensed to the Apache Software Foundation (ASF) under one or more 3 * contributor license agreements. See the NOTICE file distributed with 4 * this work for additional information regarding copyright ownership. 5 * The ASF licenses this file to You under the Apache License, Version 2.0 6 * (the "License"); you may not use this file except in compliance with 7 * the License. You may obtain a copy of the License at 8 * 9 * http://www.apache.org/licenses/LICENSE-2.0 10 * 11 * Unless required by applicable law or agreed to in writing, software 12 * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT 13 * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the 14 * License for the specific language governing permissions and limitations under 15 * the License. 16 */ 17 18 package org.apache.harmony.luni.tests.java.lang; 19 20 import java.io.Serializable; 21 import java.util.Arrays; 22 23 import junit.framework.TestCase; 24 25 import org.apache.harmony.testframework.serialization.SerializationTest; 26 import org.apache.harmony.testframework.serialization.SerializationTest.SerializableAssert; 27 28 public class StringBuilderTest extends TestCase { 29 30 /** 31 * @tests java.lang.StringBuilder.StringBuilder() 32 */ 33 public void test_Constructor() { 34 StringBuilder sb = new StringBuilder(); 35 assertNotNull(sb); 36 assertEquals(16, sb.capacity()); 37 } 38 39 /** 40 * @tests java.lang.StringBuilder.StringBuilder(int) 41 */ 42 public void test_ConstructorI() { 43 StringBuilder sb = new StringBuilder(24); 44 assertNotNull(sb); 45 assertEquals(24, sb.capacity()); 46 47 try { 48 new StringBuilder(-1); 49 fail("no exception"); 50 } catch (NegativeArraySizeException e) { 51 // Expected 52 } 53 54 assertNotNull(new StringBuilder(0)); 55 } 56 57 /** 58 * @tests java.lang.StringBuilder.StringBuilder(CharSequence) 59 */ 60 @SuppressWarnings("cast") 61 public void test_ConstructorLjava_lang_CharSequence() { 62 StringBuilder sb = new StringBuilder((CharSequence) "fixture"); 63 assertEquals("fixture", sb.toString()); 64 assertEquals("fixture".length() + 16, sb.capacity()); 65 66 sb = new StringBuilder((CharSequence) new StringBuffer("fixture")); 67 assertEquals("fixture", sb.toString()); 68 assertEquals("fixture".length() + 16, sb.capacity()); 69 70 try { 71 new StringBuilder((CharSequence) null); 72 fail("no NPE"); 73 } catch (NullPointerException e) { 74 // Expected 75 } 76 } 77 78 /** 79 * @tests java.lang.StringBuilder.StringBuilder(String) 80 */ 81 public void test_ConstructorLjava_lang_String() { 82 StringBuilder sb = new StringBuilder("fixture"); 83 assertEquals("fixture", sb.toString()); 84 assertEquals("fixture".length() + 16, sb.capacity()); 85 86 try { 87 new StringBuilder((String) null); 88 fail("no NPE"); 89 } catch (NullPointerException e) { 90 } 91 } 92 93 /** 94 * @tests java.lang.StringBuilder.append(boolean) 95 */ 96 public void test_appendZ() { 97 StringBuilder sb = new StringBuilder(); 98 assertSame(sb, sb.append(true)); 99 assertEquals("true", sb.toString()); 100 sb.setLength(0); 101 assertSame(sb, sb.append(false)); 102 assertEquals("false", sb.toString()); 103 } 104 105 /** 106 * @tests java.lang.StringBuilder.append(char) 107 */ 108 public void test_appendC() { 109 StringBuilder sb = new StringBuilder(); 110 assertSame(sb, sb.append('a')); 111 assertEquals("a", sb.toString()); 112 sb.setLength(0); 113 assertSame(sb, sb.append('b')); 114 assertEquals("b", sb.toString()); 115 } 116 117 /** 118 * @tests java.lang.StringBuilder.append(char[]) 119 */ 120 public void test_append$C() { 121 StringBuilder sb = new StringBuilder(); 122 assertSame(sb, sb.append(new char[] { 'a', 'b' })); 123 assertEquals("ab", sb.toString()); 124 sb.setLength(0); 125 assertSame(sb, sb.append(new char[] { 'c', 'd' })); 126 assertEquals("cd", sb.toString()); 127 try { 128 sb.append((char[]) null); 129 fail("no NPE"); 130 } catch (NullPointerException e) { 131 // Expected 132 } 133 } 134 135 /** 136 * @tests java.lang.StringBuilder.append(char[], int, int) 137 */ 138 public void test_append$CII() { 139 StringBuilder sb = new StringBuilder(); 140 assertSame(sb, sb.append(new char[] { 'a', 'b' }, 0, 2)); 141 assertEquals("ab", sb.toString()); 142 sb.setLength(0); 143 assertSame(sb, sb.append(new char[] { 'c', 'd' }, 0, 2)); 144 assertEquals("cd", sb.toString()); 145 146 sb.setLength(0); 147 assertSame(sb, sb.append(new char[] { 'a', 'b', 'c', 'd' }, 0, 2)); 148 assertEquals("ab", sb.toString()); 149 150 sb.setLength(0); 151 assertSame(sb, sb.append(new char[] { 'a', 'b', 'c', 'd' }, 2, 2)); 152 assertEquals("cd", sb.toString()); 153 154 sb.setLength(0); 155 assertSame(sb, sb.append(new char[] { 'a', 'b', 'c', 'd' }, 2, 0)); 156 assertEquals("", sb.toString()); 157 158 try { 159 sb.append((char[]) null, 0, 2); 160 fail("no NPE"); 161 } catch (NullPointerException e) { 162 // Expected 163 } 164 165 try { 166 sb.append(new char[] { 'a', 'b', 'c', 'd' }, -1, 2); 167 fail("no IOOBE, negative offset"); 168 } catch (IndexOutOfBoundsException e) { 169 // Expected 170 } 171 172 try { 173 sb.append(new char[] { 'a', 'b', 'c', 'd' }, 0, -1); 174 fail("no IOOBE, negative length"); 175 } catch (IndexOutOfBoundsException e) { 176 // Expected 177 } 178 179 try { 180 sb.append(new char[] { 'a', 'b', 'c', 'd' }, 2, 3); 181 fail("no IOOBE, offset and length overflow"); 182 } catch (IndexOutOfBoundsException e) { 183 // Expected 184 } 185 } 186 187 /** 188 * @tests java.lang.StringBuilder.append(CharSequence) 189 */ 190 public void test_appendLjava_lang_CharSequence() { 191 StringBuilder sb = new StringBuilder(); 192 assertSame(sb, sb.append((CharSequence) "ab")); 193 assertEquals("ab", sb.toString()); 194 sb.setLength(0); 195 assertSame(sb, sb.append((CharSequence) "cd")); 196 assertEquals("cd", sb.toString()); 197 sb.setLength(0); 198 assertSame(sb, sb.append((CharSequence) null)); 199 assertEquals("null", sb.toString()); 200 } 201 202 /** 203 * @tests java.lang.StringBuilder.append(CharSequence, int, int) 204 */ 205 @SuppressWarnings("cast") 206 public void test_appendLjava_lang_CharSequenceII() { 207 StringBuilder sb = new StringBuilder(); 208 assertSame(sb, sb.append((CharSequence) "ab", 0, 2)); 209 assertEquals("ab", sb.toString()); 210 sb.setLength(0); 211 assertSame(sb, sb.append((CharSequence) "cd", 0, 2)); 212 assertEquals("cd", sb.toString()); 213 sb.setLength(0); 214 assertSame(sb, sb.append((CharSequence) "abcd", 0, 2)); 215 assertEquals("ab", sb.toString()); 216 sb.setLength(0); 217 assertSame(sb, sb.append((CharSequence) "abcd", 2, 4)); 218 assertEquals("cd", sb.toString()); 219 sb.setLength(0); 220 assertSame(sb, sb.append((CharSequence) null, 0, 2)); 221 assertEquals("nu", sb.toString()); 222 } 223 224 /** 225 * @tests java.lang.StringBuilder.append(double) 226 */ 227 public void test_appendD() { 228 StringBuilder sb = new StringBuilder(); 229 assertSame(sb, sb.append(1D)); 230 assertEquals(String.valueOf(1D), sb.toString()); 231 sb.setLength(0); 232 assertSame(sb, sb.append(0D)); 233 assertEquals(String.valueOf(0D), sb.toString()); 234 sb.setLength(0); 235 assertSame(sb, sb.append(-1D)); 236 assertEquals(String.valueOf(-1D), sb.toString()); 237 sb.setLength(0); 238 assertSame(sb, sb.append(Double.NaN)); 239 assertEquals(String.valueOf(Double.NaN), sb.toString()); 240 sb.setLength(0); 241 assertSame(sb, sb.append(Double.NEGATIVE_INFINITY)); 242 assertEquals(String.valueOf(Double.NEGATIVE_INFINITY), sb.toString()); 243 sb.setLength(0); 244 assertSame(sb, sb.append(Double.POSITIVE_INFINITY)); 245 assertEquals(String.valueOf(Double.POSITIVE_INFINITY), sb.toString()); 246 sb.setLength(0); 247 assertSame(sb, sb.append(Double.MIN_VALUE)); 248 assertEquals(String.valueOf(Double.MIN_VALUE), sb.toString()); 249 sb.setLength(0); 250 assertSame(sb, sb.append(Double.MAX_VALUE)); 251 assertEquals(String.valueOf(Double.MAX_VALUE), sb.toString()); 252 } 253 254 /** 255 * @tests java.lang.StringBuilder.append(float) 256 */ 257 public void test_appendF() { 258 StringBuilder sb = new StringBuilder(); 259 assertSame(sb, sb.append(1F)); 260 assertEquals(String.valueOf(1F), sb.toString()); 261 sb.setLength(0); 262 assertSame(sb, sb.append(0F)); 263 assertEquals(String.valueOf(0F), sb.toString()); 264 sb.setLength(0); 265 assertSame(sb, sb.append(-1F)); 266 assertEquals(String.valueOf(-1F), sb.toString()); 267 sb.setLength(0); 268 assertSame(sb, sb.append(Float.NaN)); 269 assertEquals(String.valueOf(Float.NaN), sb.toString()); 270 sb.setLength(0); 271 assertSame(sb, sb.append(Float.NEGATIVE_INFINITY)); 272 assertEquals(String.valueOf(Float.NEGATIVE_INFINITY), sb.toString()); 273 sb.setLength(0); 274 assertSame(sb, sb.append(Float.POSITIVE_INFINITY)); 275 assertEquals(String.valueOf(Float.POSITIVE_INFINITY), sb.toString()); 276 sb.setLength(0); 277 assertSame(sb, sb.append(Float.MIN_VALUE)); 278 assertEquals(String.valueOf(Float.MIN_VALUE), sb.toString()); 279 sb.setLength(0); 280 assertSame(sb, sb.append(Float.MAX_VALUE)); 281 assertEquals(String.valueOf(Float.MAX_VALUE), sb.toString()); 282 } 283 284 /** 285 * @tests java.lang.StringBuilder.append(int) 286 */ 287 public void test_appendI() { 288 StringBuilder sb = new StringBuilder(); 289 assertSame(sb, sb.append(1)); 290 assertEquals(String.valueOf(1), sb.toString()); 291 sb.setLength(0); 292 assertSame(sb, sb.append(0)); 293 assertEquals(String.valueOf(0), sb.toString()); 294 sb.setLength(0); 295 assertSame(sb, sb.append(-1)); 296 assertEquals(String.valueOf(-1), sb.toString()); 297 sb.setLength(0); 298 assertSame(sb, sb.append(Integer.MIN_VALUE)); 299 assertEquals(String.valueOf(Integer.MIN_VALUE), sb.toString()); 300 sb.setLength(0); 301 assertSame(sb, sb.append(Integer.MAX_VALUE)); 302 assertEquals(String.valueOf(Integer.MAX_VALUE), sb.toString()); 303 } 304 305 /** 306 * @tests java.lang.StringBuilder.append(long) 307 */ 308 public void test_appendL() { 309 StringBuilder sb = new StringBuilder(); 310 assertSame(sb, sb.append(1L)); 311 assertEquals(String.valueOf(1L), sb.toString()); 312 sb.setLength(0); 313 assertSame(sb, sb.append(0L)); 314 assertEquals(String.valueOf(0L), sb.toString()); 315 sb.setLength(0); 316 assertSame(sb, sb.append(-1L)); 317 assertEquals(String.valueOf(-1L), sb.toString()); 318 sb.setLength(0); 319 assertSame(sb, sb.append(Integer.MIN_VALUE)); 320 assertEquals(String.valueOf(Integer.MIN_VALUE), sb.toString()); 321 sb.setLength(0); 322 assertSame(sb, sb.append(Integer.MAX_VALUE)); 323 assertEquals(String.valueOf(Integer.MAX_VALUE), sb.toString()); 324 } 325 326 /** 327 * @tests java.lang.StringBuilder.append(Object)' 328 */ 329 public void test_appendLjava_lang_Object() { 330 StringBuilder sb = new StringBuilder(); 331 assertSame(sb, sb.append(Fixture.INSTANCE)); 332 assertEquals(Fixture.INSTANCE.toString(), sb.toString()); 333 334 sb.setLength(0); 335 assertSame(sb, sb.append((Object) null)); 336 assertEquals("null", sb.toString()); 337 } 338 339 /** 340 * @tests java.lang.StringBuilder.append(String) 341 */ 342 public void test_appendLjava_lang_String() { 343 StringBuilder sb = new StringBuilder(); 344 assertSame(sb, sb.append("ab")); 345 assertEquals("ab", sb.toString()); 346 sb.setLength(0); 347 assertSame(sb, sb.append("cd")); 348 assertEquals("cd", sb.toString()); 349 sb.setLength(0); 350 assertSame(sb, sb.append((String) null)); 351 assertEquals("null", sb.toString()); 352 } 353 354 /** 355 * @tests java.lang.StringBuilder.append(StringBuffer) 356 */ 357 public void test_appendLjava_lang_StringBuffer() { 358 StringBuilder sb = new StringBuilder(); 359 assertSame(sb, sb.append(new StringBuffer("ab"))); 360 assertEquals("ab", sb.toString()); 361 sb.setLength(0); 362 assertSame(sb, sb.append(new StringBuffer("cd"))); 363 assertEquals("cd", sb.toString()); 364 sb.setLength(0); 365 assertSame(sb, sb.append((StringBuffer) null)); 366 assertEquals("null", sb.toString()); 367 } 368 369 /** 370 * @tests java.lang.StringBuilder.appendCodePoint(int)' 371 */ 372 public void test_appendCodePointI() { 373 StringBuilder sb = new StringBuilder(); 374 sb.appendCodePoint(0x10000); 375 assertEquals("\uD800\uDC00", sb.toString()); 376 sb.append("fixture"); 377 assertEquals("\uD800\uDC00fixture", sb.toString()); 378 sb.appendCodePoint(0x00010FFFF); 379 assertEquals("\uD800\uDC00fixture\uDBFF\uDFFF", sb.toString()); 380 } 381 382 /** 383 * @tests java.lang.StringBuilder.capacity()' 384 */ 385 public void test_capacity() { 386 StringBuilder sb = new StringBuilder(); 387 assertEquals(16, sb.capacity()); 388 sb.append("0123456789ABCDEF0123456789ABCDEF"); 389 assertTrue(sb.capacity() > 16); 390 } 391 392 /** 393 * @tests java.lang.StringBuilder.charAt(int)' 394 */ 395 public void test_charAtI() { 396 final String fixture = "0123456789"; 397 StringBuilder sb = new StringBuilder(fixture); 398 for (int i = 0; i < fixture.length(); i++) { 399 assertEquals((char) ('0' + i), sb.charAt(i)); 400 } 401 402 try { 403 sb.charAt(-1); 404 fail("no IOOBE, negative index"); 405 } catch (IndexOutOfBoundsException e) { 406 // Expected 407 } 408 409 try { 410 sb.charAt(fixture.length()); 411 fail("no IOOBE, equal to length"); 412 } catch (IndexOutOfBoundsException e) { 413 } 414 415 try { 416 sb.charAt(fixture.length() + 1); 417 fail("no IOOBE, greater than length"); 418 } catch (IndexOutOfBoundsException e) { 419 } 420 } 421 422 /** 423 * @tests java.lang.StringBuilder.codePointAt(int) 424 */ 425 public void test_codePointAtI() { 426 StringBuilder sb = new StringBuilder("abc"); 427 assertEquals('a', sb.codePointAt(0)); 428 assertEquals('b', sb.codePointAt(1)); 429 assertEquals('c', sb.codePointAt(2)); 430 431 sb = new StringBuilder("\uD800\uDC00"); 432 assertEquals(0x10000, sb.codePointAt(0)); 433 assertEquals('\uDC00', sb.codePointAt(1)); 434 435 sb = new StringBuilder(); 436 sb.append("abc"); 437 try { 438 sb.codePointAt(-1); 439 fail("No IOOBE on negative index."); 440 } catch (IndexOutOfBoundsException e) { 441 442 } 443 444 try { 445 sb.codePointAt(sb.length()); 446 fail("No IOOBE on index equal to length."); 447 } catch (IndexOutOfBoundsException e) { 448 449 } 450 451 try { 452 sb.codePointAt(sb.length() + 1); 453 fail("No IOOBE on index greater than length."); 454 } catch (IndexOutOfBoundsException e) { 455 456 } 457 } 458 459 /** 460 * @tests java.lang.StringBuilder.codePointBefore(int) 461 */ 462 public void test_codePointBeforeI() { 463 StringBuilder sb = new StringBuilder("abc"); 464 assertEquals('a', sb.codePointBefore(1)); 465 assertEquals('b', sb.codePointBefore(2)); 466 assertEquals('c', sb.codePointBefore(3)); 467 468 sb = new StringBuilder("\uD800\uDC00"); 469 assertEquals(0x10000, sb.codePointBefore(2)); 470 assertEquals('\uD800', sb.codePointBefore(1)); 471 472 sb = new StringBuilder(); 473 sb.append("abc"); 474 475 try { 476 sb.codePointBefore(0); 477 fail("No IOOBE on zero index."); 478 } catch (IndexOutOfBoundsException e) { 479 480 } 481 482 try { 483 sb.codePointBefore(-1); 484 fail("No IOOBE on negative index."); 485 } catch (IndexOutOfBoundsException e) { 486 487 } 488 489 try { 490 sb.codePointBefore(sb.length() + 1); 491 fail("No IOOBE on index greater than length."); 492 } catch (IndexOutOfBoundsException e) { 493 494 } 495 } 496 497 /** 498 * @tests java.lang.StringBuilder.codePointCount(int, int) 499 */ 500 public void test_codePointCountII() { 501 assertEquals(1, new StringBuilder("\uD800\uDC00").codePointCount(0, 2)); 502 assertEquals(1, new StringBuilder("\uD800\uDC01").codePointCount(0, 2)); 503 assertEquals(1, new StringBuilder("\uD801\uDC01").codePointCount(0, 2)); 504 assertEquals(1, new StringBuilder("\uDBFF\uDFFF").codePointCount(0, 2)); 505 506 assertEquals(3, new StringBuilder("a\uD800\uDC00b").codePointCount(0, 4)); 507 assertEquals(4, new StringBuilder("a\uD800\uDC00b\uD800").codePointCount(0, 5)); 508 509 StringBuilder sb = new StringBuilder(); 510 sb.append("abc"); 511 try { 512 sb.codePointCount(-1, 2); 513 fail("No IOOBE for negative begin index."); 514 } catch (IndexOutOfBoundsException e) { 515 516 } 517 518 try { 519 sb.codePointCount(0, 4); 520 fail("No IOOBE for end index that's too large."); 521 } catch (IndexOutOfBoundsException e) { 522 523 } 524 525 try { 526 sb.codePointCount(3, 2); 527 fail("No IOOBE for begin index larger than end index."); 528 } catch (IndexOutOfBoundsException e) { 529 530 } 531 } 532 533 /** 534 * @tests java.lang.StringBuilder.delete(int, int) 535 */ 536 public void test_deleteII() { 537 final String fixture = "0123456789"; 538 StringBuilder sb = new StringBuilder(fixture); 539 assertSame(sb, sb.delete(0, 0)); 540 assertEquals(fixture, sb.toString()); 541 assertSame(sb, sb.delete(5, 5)); 542 assertEquals(fixture, sb.toString()); 543 assertSame(sb, sb.delete(0, 1)); 544 assertEquals("123456789", sb.toString()); 545 assertEquals(9, sb.length()); 546 assertSame(sb, sb.delete(0, sb.length())); 547 assertEquals("", sb.toString()); 548 assertEquals(0, sb.length()); 549 550 sb = new StringBuilder(fixture); 551 assertSame(sb, sb.delete(0, 11)); 552 assertEquals("", sb.toString()); 553 assertEquals(0, sb.length()); 554 555 try { 556 new StringBuilder(fixture).delete(-1, 2); 557 fail("no SIOOBE, negative start"); 558 } catch (StringIndexOutOfBoundsException e) { 559 // Expected 560 } 561 562 try { 563 new StringBuilder(fixture).delete(11, 12); 564 fail("no SIOOBE, start too far"); 565 } catch (StringIndexOutOfBoundsException e) { 566 // Expected 567 } 568 569 try { 570 new StringBuilder(fixture).delete(13, 12); 571 fail("no SIOOBE, start larger than end"); 572 } catch (StringIndexOutOfBoundsException e) { 573 // Expected 574 } 575 576 // HARMONY 6212 577 sb = new StringBuilder(); 578 sb.append("abcde"); 579 String str = sb.toString(); 580 sb.delete(0, sb.length()); 581 sb.append("YY"); 582 assertEquals("abcde", str); 583 assertEquals("YY", sb.toString()); 584 } 585 586 /** 587 * @tests java.lang.StringBuilder.deleteCharAt(int) 588 */ 589 public void test_deleteCharAtI() { 590 final String fixture = "0123456789"; 591 StringBuilder sb = new StringBuilder(fixture); 592 assertSame(sb, sb.deleteCharAt(0)); 593 assertEquals("123456789", sb.toString()); 594 assertEquals(9, sb.length()); 595 sb = new StringBuilder(fixture); 596 assertSame(sb, sb.deleteCharAt(5)); 597 assertEquals("012346789", sb.toString()); 598 assertEquals(9, sb.length()); 599 sb = new StringBuilder(fixture); 600 assertSame(sb, sb.deleteCharAt(9)); 601 assertEquals("012345678", sb.toString()); 602 assertEquals(9, sb.length()); 603 604 try { 605 new StringBuilder(fixture).deleteCharAt(-1); 606 fail("no SIOOBE, negative index"); 607 } catch (StringIndexOutOfBoundsException e) { 608 // Expected 609 } 610 611 try { 612 new StringBuilder(fixture).deleteCharAt(fixture.length()); 613 fail("no SIOOBE, index equals length"); 614 } catch (StringIndexOutOfBoundsException e) { 615 // Expected 616 } 617 618 try { 619 new StringBuilder(fixture).deleteCharAt(fixture.length() + 1); 620 fail("no SIOOBE, index exceeds length"); 621 } catch (StringIndexOutOfBoundsException e) { 622 // Expected 623 } 624 } 625 626 /** 627 * @tests java.lang.StringBuilder.ensureCapacity(int)' 628 */ 629 public void test_ensureCapacityI() { 630 StringBuilder sb = new StringBuilder(5); 631 assertEquals(5, sb.capacity()); 632 sb.ensureCapacity(10); 633 assertEquals(12, sb.capacity()); 634 sb.ensureCapacity(26); 635 assertEquals(26, sb.capacity()); 636 sb.ensureCapacity(55); 637 assertEquals(55, sb.capacity()); 638 } 639 640 /** 641 * @tests java.lang.StringBuilder.getChars(int, int, char[], int)' 642 */ 643 public void test_getCharsII$CI() { 644 final String fixture = "0123456789"; 645 StringBuilder sb = new StringBuilder(fixture); 646 char[] dst = new char[10]; 647 sb.getChars(0, 10, dst, 0); 648 assertTrue(Arrays.equals(fixture.toCharArray(), dst)); 649 650 Arrays.fill(dst, '\0'); 651 sb.getChars(0, 5, dst, 0); 652 char[] fixtureChars = new char[10]; 653 fixture.getChars(0, 5, fixtureChars, 0); 654 assertTrue(Arrays.equals(fixtureChars, dst)); 655 656 Arrays.fill(dst, '\0'); 657 Arrays.fill(fixtureChars, '\0'); 658 sb.getChars(0, 5, dst, 5); 659 fixture.getChars(0, 5, fixtureChars, 5); 660 assertTrue(Arrays.equals(fixtureChars, dst)); 661 662 Arrays.fill(dst, '\0'); 663 Arrays.fill(fixtureChars, '\0'); 664 sb.getChars(5, 10, dst, 1); 665 fixture.getChars(5, 10, fixtureChars, 1); 666 assertTrue(Arrays.equals(fixtureChars, dst)); 667 668 try { 669 sb.getChars(0, 10, null, 0); 670 fail("no NPE"); 671 } catch (NullPointerException e) { 672 // Expected 673 } 674 675 try { 676 sb.getChars(-1, 10, dst, 0); 677 fail("no IOOBE, srcBegin negative"); 678 } catch (IndexOutOfBoundsException e) { 679 // Expected 680 } 681 682 try { 683 sb.getChars(0, 10, dst, -1); 684 fail("no IOOBE, dstBegin negative"); 685 } catch (IndexOutOfBoundsException e) { 686 // Expected 687 } 688 689 try { 690 sb.getChars(5, 4, dst, 0); 691 fail("no IOOBE, srcBegin > srcEnd"); 692 } catch (IndexOutOfBoundsException e) { 693 // Expected 694 } 695 696 try { 697 sb.getChars(0, 11, dst, 0); 698 fail("no IOOBE, srcEnd > length"); 699 } catch (IndexOutOfBoundsException e) { 700 // Expected 701 } 702 703 try { 704 sb.getChars(0, 10, dst, 5); 705 fail("no IOOBE, dstBegin and src size too large for what's left in dst"); 706 } catch (IndexOutOfBoundsException e) { 707 // Expected 708 } 709 } 710 711 /** 712 * @tests java.lang.StringBuilder.indexOf(String) 713 */ 714 public void test_indexOfLjava_lang_String() { 715 final String fixture = "0123456789"; 716 StringBuilder sb = new StringBuilder(fixture); 717 assertEquals(0, sb.indexOf("0")); 718 assertEquals(0, sb.indexOf("012")); 719 assertEquals(-1, sb.indexOf("02")); 720 assertEquals(8, sb.indexOf("89")); 721 722 try { 723 sb.indexOf(null); 724 fail("no NPE"); 725 } catch (NullPointerException e) { 726 // Expected 727 } 728 } 729 730 /** 731 * @tests java.lang.StringBuilder.indexOf(String, int) 732 */ 733 public void test_IndexOfStringInt() { 734 final String fixture = "0123456789"; 735 StringBuilder sb = new StringBuilder(fixture); 736 assertEquals(0, sb.indexOf("0")); 737 assertEquals(0, sb.indexOf("012")); 738 assertEquals(-1, sb.indexOf("02")); 739 assertEquals(8, sb.indexOf("89")); 740 741 assertEquals(0, sb.indexOf("0"), 0); 742 assertEquals(0, sb.indexOf("012"), 0); 743 assertEquals(-1, sb.indexOf("02"), 0); 744 assertEquals(8, sb.indexOf("89"), 0); 745 746 assertEquals(-1, sb.indexOf("0"), 5); 747 assertEquals(-1, sb.indexOf("012"), 5); 748 assertEquals(-1, sb.indexOf("02"), 0); 749 assertEquals(8, sb.indexOf("89"), 5); 750 751 try { 752 sb.indexOf(null, 0); 753 fail("no NPE"); 754 } catch (NullPointerException e) { 755 // Expected 756 } 757 } 758 759 /** 760 * @tests java.lang.StringBuilder.insert(int, boolean) 761 */ 762 public void test_insertIZ() { 763 final String fixture = "0000"; 764 StringBuilder sb = new StringBuilder(fixture); 765 assertSame(sb, sb.insert(0, true)); 766 assertEquals("true0000", sb.toString()); 767 assertEquals(8, sb.length()); 768 769 sb = new StringBuilder(fixture); 770 assertSame(sb, sb.insert(0, false)); 771 assertEquals("false0000", sb.toString()); 772 assertEquals(9, sb.length()); 773 774 sb = new StringBuilder(fixture); 775 assertSame(sb, sb.insert(2, false)); 776 assertEquals("00false00", sb.toString()); 777 assertEquals(9, sb.length()); 778 779 sb = new StringBuilder(fixture); 780 assertSame(sb, sb.insert(4, false)); 781 assertEquals("0000false", sb.toString()); 782 assertEquals(9, sb.length()); 783 784 try { 785 sb = new StringBuilder(fixture); 786 sb.insert(-1, false); 787 fail("no SIOOBE, negative index"); 788 } catch (StringIndexOutOfBoundsException e) { 789 // Expected 790 } 791 792 try { 793 sb = new StringBuilder(fixture); 794 sb.insert(5, false); 795 fail("no SIOOBE, index too large index"); 796 } catch (StringIndexOutOfBoundsException e) { 797 // Expected 798 } 799 } 800 801 /** 802 * @tests java.lang.StringBuilder.insert(int, char) 803 */ 804 public void test_insertIC() { 805 final String fixture = "0000"; 806 StringBuilder sb = new StringBuilder(fixture); 807 assertSame(sb, sb.insert(0, 'a')); 808 assertEquals("a0000", sb.toString()); 809 assertEquals(5, sb.length()); 810 811 sb = new StringBuilder(fixture); 812 assertSame(sb, sb.insert(0, 'b')); 813 assertEquals("b0000", sb.toString()); 814 assertEquals(5, sb.length()); 815 816 sb = new StringBuilder(fixture); 817 assertSame(sb, sb.insert(2, 'b')); 818 assertEquals("00b00", sb.toString()); 819 assertEquals(5, sb.length()); 820 821 sb = new StringBuilder(fixture); 822 assertSame(sb, sb.insert(4, 'b')); 823 assertEquals("0000b", sb.toString()); 824 assertEquals(5, sb.length()); 825 826 // FIXME this fails on Sun JRE 5.0_5 827 // try { 828 // sb = new StringBuilder(fixture); 829 // sb.insert(-1, 'a'); 830 // fail("no SIOOBE, negative index"); 831 // } catch (StringIndexOutOfBoundsException e) { 832 // // Expected 833 // } 834 835 /* 836 * FIXME This fails on Sun JRE 5.0_5, but that seems like a bug, since 837 * the 'insert(int, char[]) behaves this way. 838 */ 839 // try { 840 // sb = new StringBuilder(fixture); 841 // sb.insert(5, 'a'); 842 // fail("no SIOOBE, index too large index"); 843 // } catch (StringIndexOutOfBoundsException e) { 844 // // Expected 845 // } 846 } 847 848 /** 849 * @tests java.lang.StringBuilder.insert(int, char) 850 */ 851 public void test_insertIC_2() { 852 StringBuilder obj = new StringBuilder(); 853 try { 854 obj.insert(-1, '?'); 855 fail("ArrayIndexOutOfBoundsException expected"); 856 } catch (ArrayIndexOutOfBoundsException e) { 857 // expected 858 } 859 } 860 861 /** 862 * @tests java.lang.StringBuilder.insert(int, char[])' 863 */ 864 public void test_insertI$C() { 865 final String fixture = "0000"; 866 StringBuilder sb = new StringBuilder(fixture); 867 assertSame(sb, sb.insert(0, new char[] { 'a', 'b' })); 868 assertEquals("ab0000", sb.toString()); 869 assertEquals(6, sb.length()); 870 871 sb = new StringBuilder(fixture); 872 assertSame(sb, sb.insert(2, new char[] { 'a', 'b' })); 873 assertEquals("00ab00", sb.toString()); 874 assertEquals(6, sb.length()); 875 876 sb = new StringBuilder(fixture); 877 assertSame(sb, sb.insert(4, new char[] { 'a', 'b' })); 878 assertEquals("0000ab", sb.toString()); 879 assertEquals(6, sb.length()); 880 881 /* 882 * TODO This NPE is the behavior on Sun's JRE 5.0_5, but it's 883 * undocumented. The assumption is that this method behaves like 884 * String.valueOf(char[]), which does throw a NPE too, but that is also 885 * undocumented. 886 */ 887 888 try { 889 sb.insert(0, (char[]) null); 890 fail("no NPE"); 891 } catch (NullPointerException e) { 892 // Expected 893 } 894 895 try { 896 sb = new StringBuilder(fixture); 897 sb.insert(-1, new char[] { 'a', 'b' }); 898 fail("no SIOOBE, negative index"); 899 } catch (StringIndexOutOfBoundsException e) { 900 // Expected 901 } 902 903 try { 904 sb = new StringBuilder(fixture); 905 sb.insert(5, new char[] { 'a', 'b' }); 906 fail("no SIOOBE, index too large index"); 907 } catch (StringIndexOutOfBoundsException e) { 908 // Expected 909 } 910 } 911 912 /** 913 * @tests java.lang.StringBuilder.insert(int, char[], int, int) 914 */ 915 public void test_insertI$CII() { 916 final String fixture = "0000"; 917 StringBuilder sb = new StringBuilder(fixture); 918 assertSame(sb, sb.insert(0, new char[] { 'a', 'b' }, 0, 2)); 919 assertEquals("ab0000", sb.toString()); 920 assertEquals(6, sb.length()); 921 922 sb = new StringBuilder(fixture); 923 assertSame(sb, sb.insert(0, new char[] { 'a', 'b' }, 0, 1)); 924 assertEquals("a0000", sb.toString()); 925 assertEquals(5, sb.length()); 926 927 sb = new StringBuilder(fixture); 928 assertSame(sb, sb.insert(2, new char[] { 'a', 'b' }, 0, 2)); 929 assertEquals("00ab00", sb.toString()); 930 assertEquals(6, sb.length()); 931 932 sb = new StringBuilder(fixture); 933 assertSame(sb, sb.insert(2, new char[] { 'a', 'b' }, 0, 1)); 934 assertEquals("00a00", sb.toString()); 935 assertEquals(5, sb.length()); 936 937 sb = new StringBuilder(fixture); 938 assertSame(sb, sb.insert(4, new char[] { 'a', 'b' }, 0, 2)); 939 assertEquals("0000ab", sb.toString()); 940 assertEquals(6, sb.length()); 941 942 sb = new StringBuilder(fixture); 943 assertSame(sb, sb.insert(4, new char[] { 'a', 'b' }, 0, 1)); 944 assertEquals("0000a", sb.toString()); 945 assertEquals(5, sb.length()); 946 947 /* 948 * TODO This NPE is the behavior on Sun's JRE 5.0_5, but it's 949 * undocumented. The assumption is that this method behaves like 950 * String.valueOf(char[]), which does throw a NPE too, but that is also 951 * undocumented. 952 */ 953 954 try { 955 sb.insert(0, (char[]) null, 0, 2); 956 fail("no NPE"); 957 } catch (NullPointerException e) { 958 // Expected 959 } 960 961 try { 962 sb = new StringBuilder(fixture); 963 sb.insert(-1, new char[] { 'a', 'b' }, 0, 2); 964 fail("no SIOOBE, negative index"); 965 } catch (StringIndexOutOfBoundsException e) { 966 // Expected 967 } 968 969 try { 970 sb = new StringBuilder(fixture); 971 sb.insert(5, new char[] { 'a', 'b' }, 0, 2); 972 fail("no SIOOBE, index too large index"); 973 } catch (StringIndexOutOfBoundsException e) { 974 // Expected 975 } 976 977 try { 978 sb = new StringBuilder(fixture); 979 sb.insert(5, new char[] { 'a', 'b' }, -1, 2); 980 fail("no SIOOBE, negative offset"); 981 } catch (StringIndexOutOfBoundsException e) { 982 // Expected 983 } 984 985 try { 986 sb = new StringBuilder(fixture); 987 sb.insert(5, new char[] { 'a', 'b' }, 0, -1); 988 fail("no SIOOBE, negative length"); 989 } catch (StringIndexOutOfBoundsException e) { 990 // Expected 991 } 992 993 try { 994 sb = new StringBuilder(fixture); 995 sb.insert(5, new char[] { 'a', 'b' }, 0, 3); 996 fail("no SIOOBE, too long"); 997 } catch (StringIndexOutOfBoundsException e) { 998 // Expected 999 } 1000 } 1001 1002 /** 1003 * @tests java.lang.StringBuilder.insert(int, CharSequence) 1004 */ 1005 public void test_insertILjava_lang_CharSequence() { 1006 final String fixture = "0000"; 1007 StringBuilder sb = new StringBuilder(fixture); 1008 assertSame(sb, sb.insert(0, (CharSequence) "ab")); 1009 assertEquals("ab0000", sb.toString()); 1010 assertEquals(6, sb.length()); 1011 1012 sb = new StringBuilder(fixture); 1013 assertSame(sb, sb.insert(2, (CharSequence) "ab")); 1014 assertEquals("00ab00", sb.toString()); 1015 assertEquals(6, sb.length()); 1016 1017 sb = new StringBuilder(fixture); 1018 assertSame(sb, sb.insert(4, (CharSequence) "ab")); 1019 assertEquals("0000ab", sb.toString()); 1020 assertEquals(6, sb.length()); 1021 1022 sb = new StringBuilder(fixture); 1023 assertSame(sb, sb.insert(4, (CharSequence) null)); 1024 assertEquals("0000null", sb.toString()); 1025 assertEquals(8, sb.length()); 1026 1027 try { 1028 sb = new StringBuilder(fixture); 1029 sb.insert(-1, (CharSequence) "ab"); 1030 fail("no IOOBE, negative index"); 1031 } catch (IndexOutOfBoundsException e) { 1032 // Expected 1033 } 1034 1035 try { 1036 sb = new StringBuilder(fixture); 1037 sb.insert(5, (CharSequence) "ab"); 1038 fail("no IOOBE, index too large index"); 1039 } catch (IndexOutOfBoundsException e) { 1040 // Expected 1041 } 1042 } 1043 1044 /** 1045 * @tests java.lang.StringBuilder.insert(int, CharSequence, int, int) 1046 */ 1047 @SuppressWarnings("cast") 1048 public void test_insertILjava_lang_CharSequenceII() { 1049 final String fixture = "0000"; 1050 StringBuilder sb = new StringBuilder(fixture); 1051 assertSame(sb, sb.insert(0, (CharSequence) "ab", 0, 2)); 1052 assertEquals("ab0000", sb.toString()); 1053 assertEquals(6, sb.length()); 1054 1055 sb = new StringBuilder(fixture); 1056 assertSame(sb, sb.insert(0, (CharSequence) "ab", 0, 1)); 1057 assertEquals("a0000", sb.toString()); 1058 assertEquals(5, sb.length()); 1059 1060 sb = new StringBuilder(fixture); 1061 assertSame(sb, sb.insert(2, (CharSequence) "ab", 0, 2)); 1062 assertEquals("00ab00", sb.toString()); 1063 assertEquals(6, sb.length()); 1064 1065 sb = new StringBuilder(fixture); 1066 assertSame(sb, sb.insert(2, (CharSequence) "ab", 0, 1)); 1067 assertEquals("00a00", sb.toString()); 1068 assertEquals(5, sb.length()); 1069 1070 sb = new StringBuilder(fixture); 1071 assertSame(sb, sb.insert(4, (CharSequence) "ab", 0, 2)); 1072 assertEquals("0000ab", sb.toString()); 1073 assertEquals(6, sb.length()); 1074 1075 sb = new StringBuilder(fixture); 1076 assertSame(sb, sb.insert(4, (CharSequence) "ab", 0, 1)); 1077 assertEquals("0000a", sb.toString()); 1078 assertEquals(5, sb.length()); 1079 1080 sb = new StringBuilder(fixture); 1081 assertSame(sb, sb.insert(4, (CharSequence) null, 0, 2)); 1082 assertEquals("0000nu", sb.toString()); 1083 assertEquals(6, sb.length()); 1084 1085 try { 1086 sb = new StringBuilder(fixture); 1087 sb.insert(-1, (CharSequence) "ab", 0, 2); 1088 fail("no IOOBE, negative index"); 1089 } catch (IndexOutOfBoundsException e) { 1090 // Expected 1091 } 1092 1093 try { 1094 sb = new StringBuilder(fixture); 1095 sb.insert(5, (CharSequence) "ab", 0, 2); 1096 fail("no IOOBE, index too large index"); 1097 } catch (IndexOutOfBoundsException e) { 1098 // Expected 1099 } 1100 1101 try { 1102 sb = new StringBuilder(fixture); 1103 sb.insert(5, (CharSequence) "ab", -1, 2); 1104 fail("no IOOBE, negative offset"); 1105 } catch (IndexOutOfBoundsException e) { 1106 // Expected 1107 } 1108 1109 try { 1110 sb = new StringBuilder(fixture); 1111 sb.insert(5, new char[] { 'a', 'b' }, 0, -1); 1112 fail("no IOOBE, negative length"); 1113 } catch (IndexOutOfBoundsException e) { 1114 // Expected 1115 } 1116 1117 try { 1118 sb = new StringBuilder(fixture); 1119 sb.insert(5, new char[] { 'a', 'b' }, 0, 3); 1120 fail("no IOOBE, too long"); 1121 } catch (IndexOutOfBoundsException e) { 1122 // Expected 1123 } 1124 } 1125 1126 /** 1127 * @tests java.lang.StringBuilder.insert(int, double) 1128 */ 1129 public void test_insertID() { 1130 final String fixture = "0000"; 1131 StringBuilder sb = new StringBuilder(fixture); 1132 assertSame(sb, sb.insert(0, -1D)); 1133 assertEquals("-1.00000", sb.toString()); 1134 assertEquals(8, sb.length()); 1135 1136 sb = new StringBuilder(fixture); 1137 assertSame(sb, sb.insert(0, 0D)); 1138 assertEquals("0.00000", sb.toString()); 1139 assertEquals(7, sb.length()); 1140 1141 sb = new StringBuilder(fixture); 1142 assertSame(sb, sb.insert(2, 1D)); 1143 assertEquals("001.000", sb.toString()); 1144 assertEquals(7, sb.length()); 1145 1146 sb = new StringBuilder(fixture); 1147 assertSame(sb, sb.insert(4, 2D)); 1148 assertEquals("00002.0", sb.toString()); 1149 assertEquals(7, sb.length()); 1150 1151 try { 1152 sb = new StringBuilder(fixture); 1153 sb.insert(-1, 1D); 1154 fail("no IOOBE, negative index"); 1155 } catch (IndexOutOfBoundsException e) { 1156 // Expected 1157 } 1158 1159 try { 1160 sb = new StringBuilder(fixture); 1161 sb.insert(5, 1D); 1162 fail("no IOOBE, index too large index"); 1163 } catch (IndexOutOfBoundsException e) { 1164 // Expected 1165 } 1166 } 1167 1168 /** 1169 * @tests java.lang.StringBuilder.insert(int, float) 1170 */ 1171 public void test_insertIF() { 1172 final String fixture = "0000"; 1173 StringBuilder sb = new StringBuilder(fixture); 1174 assertSame(sb, sb.insert(0, -1F)); 1175 assertEquals("-1.00000", sb.toString()); 1176 assertEquals(8, sb.length()); 1177 1178 sb = new StringBuilder(fixture); 1179 assertSame(sb, sb.insert(0, 0F)); 1180 assertEquals("0.00000", sb.toString()); 1181 assertEquals(7, sb.length()); 1182 1183 sb = new StringBuilder(fixture); 1184 assertSame(sb, sb.insert(2, 1F)); 1185 assertEquals("001.000", sb.toString()); 1186 assertEquals(7, sb.length()); 1187 1188 sb = new StringBuilder(fixture); 1189 assertSame(sb, sb.insert(4, 2F)); 1190 assertEquals("00002.0", sb.toString()); 1191 assertEquals(7, sb.length()); 1192 1193 try { 1194 sb = new StringBuilder(fixture); 1195 sb.insert(-1, 1F); 1196 fail("no IOOBE, negative index"); 1197 } catch (IndexOutOfBoundsException e) { 1198 // Expected 1199 } 1200 1201 try { 1202 sb = new StringBuilder(fixture); 1203 sb.insert(5, 1F); 1204 fail("no IOOBE, index too large index"); 1205 } catch (IndexOutOfBoundsException e) { 1206 // Expected 1207 } 1208 } 1209 1210 /** 1211 * @tests java.lang.StringBuilder.insert(int, int) 1212 */ 1213 public void test_insertII() { 1214 final String fixture = "0000"; 1215 StringBuilder sb = new StringBuilder(fixture); 1216 assertSame(sb, sb.insert(0, -1)); 1217 assertEquals("-10000", sb.toString()); 1218 assertEquals(6, sb.length()); 1219 1220 sb = new StringBuilder(fixture); 1221 assertSame(sb, sb.insert(0, 0)); 1222 assertEquals("00000", sb.toString()); 1223 assertEquals(5, sb.length()); 1224 1225 sb = new StringBuilder(fixture); 1226 assertSame(sb, sb.insert(2, 1)); 1227 assertEquals("00100", sb.toString()); 1228 assertEquals(5, sb.length()); 1229 1230 sb = new StringBuilder(fixture); 1231 assertSame(sb, sb.insert(4, 2)); 1232 assertEquals("00002", sb.toString()); 1233 assertEquals(5, sb.length()); 1234 1235 try { 1236 sb = new StringBuilder(fixture); 1237 sb.insert(-1, 1); 1238 fail("no IOOBE, negative index"); 1239 } catch (IndexOutOfBoundsException e) { 1240 // Expected 1241 } 1242 1243 try { 1244 sb = new StringBuilder(fixture); 1245 sb.insert(5, 1); 1246 fail("no IOOBE, index too large index"); 1247 } catch (IndexOutOfBoundsException e) { 1248 // Expected 1249 } 1250 } 1251 1252 /** 1253 * @tests java.lang.StringBuilder.insert(int, long) 1254 */ 1255 public void test_insertIJ() { 1256 final String fixture = "0000"; 1257 StringBuilder sb = new StringBuilder(fixture); 1258 assertSame(sb, sb.insert(0, -1L)); 1259 assertEquals("-10000", sb.toString()); 1260 assertEquals(6, sb.length()); 1261 1262 sb = new StringBuilder(fixture); 1263 assertSame(sb, sb.insert(0, 0L)); 1264 assertEquals("00000", sb.toString()); 1265 assertEquals(5, sb.length()); 1266 1267 sb = new StringBuilder(fixture); 1268 assertSame(sb, sb.insert(2, 1L)); 1269 assertEquals("00100", sb.toString()); 1270 assertEquals(5, sb.length()); 1271 1272 sb = new StringBuilder(fixture); 1273 assertSame(sb, sb.insert(4, 2L)); 1274 assertEquals("00002", sb.toString()); 1275 assertEquals(5, sb.length()); 1276 1277 try { 1278 sb = new StringBuilder(fixture); 1279 sb.insert(-1, 1L); 1280 fail("no IOOBE, negative index"); 1281 } catch (IndexOutOfBoundsException e) { 1282 // Expected 1283 } 1284 1285 try { 1286 sb = new StringBuilder(fixture); 1287 sb.insert(5, 1L); 1288 fail("no IOOBE, index too large index"); 1289 } catch (IndexOutOfBoundsException e) { 1290 // Expected 1291 } 1292 } 1293 1294 /** 1295 * @tests java.lang.StringBuilder.insert(int, Object) 1296 */ 1297 public void test_insertILjava_lang_Object() { 1298 final String fixture = "0000"; 1299 StringBuilder sb = new StringBuilder(fixture); 1300 assertSame(sb, sb.insert(0, Fixture.INSTANCE)); 1301 assertEquals("fixture0000", sb.toString()); 1302 assertEquals(11, sb.length()); 1303 1304 sb = new StringBuilder(fixture); 1305 assertSame(sb, sb.insert(2, Fixture.INSTANCE)); 1306 assertEquals("00fixture00", sb.toString()); 1307 assertEquals(11, sb.length()); 1308 1309 sb = new StringBuilder(fixture); 1310 assertSame(sb, sb.insert(4, Fixture.INSTANCE)); 1311 assertEquals("0000fixture", sb.toString()); 1312 assertEquals(11, sb.length()); 1313 1314 sb = new StringBuilder(fixture); 1315 assertSame(sb, sb.insert(4, (Object) null)); 1316 assertEquals("0000null", sb.toString()); 1317 assertEquals(8, sb.length()); 1318 1319 try { 1320 sb = new StringBuilder(fixture); 1321 sb.insert(-1, Fixture.INSTANCE); 1322 fail("no IOOBE, negative index"); 1323 } catch (IndexOutOfBoundsException e) { 1324 // Expected 1325 } 1326 1327 try { 1328 sb = new StringBuilder(fixture); 1329 sb.insert(5, Fixture.INSTANCE); 1330 fail("no IOOBE, index too large index"); 1331 } catch (IndexOutOfBoundsException e) { 1332 // Expected 1333 } 1334 } 1335 1336 /** 1337 * @tests java.lang.StringBuilder.insert(int, String) 1338 */ 1339 public void test_insertILjava_lang_String() { 1340 final String fixture = "0000"; 1341 StringBuilder sb = new StringBuilder(fixture); 1342 assertSame(sb, sb.insert(0, "fixture")); 1343 assertEquals("fixture0000", sb.toString()); 1344 assertEquals(11, sb.length()); 1345 1346 sb = new StringBuilder(fixture); 1347 assertSame(sb, sb.insert(2, "fixture")); 1348 assertEquals("00fixture00", sb.toString()); 1349 assertEquals(11, sb.length()); 1350 1351 sb = new StringBuilder(fixture); 1352 assertSame(sb, sb.insert(4, "fixture")); 1353 assertEquals("0000fixture", sb.toString()); 1354 assertEquals(11, sb.length()); 1355 1356 sb = new StringBuilder(fixture); 1357 assertSame(sb, sb.insert(4, (Object) null)); 1358 assertEquals("0000null", sb.toString()); 1359 assertEquals(8, sb.length()); 1360 1361 try { 1362 sb = new StringBuilder(fixture); 1363 sb.insert(-1, "fixture"); 1364 fail("no IOOBE, negative index"); 1365 } catch (IndexOutOfBoundsException e) { 1366 // Expected 1367 } 1368 1369 try { 1370 sb = new StringBuilder(fixture); 1371 sb.insert(5, "fixture"); 1372 fail("no IOOBE, index too large index"); 1373 } catch (IndexOutOfBoundsException e) { 1374 // Expected 1375 } 1376 } 1377 1378 /** 1379 * @tests java.lang.StringBuilder.lastIndexOf(String) 1380 */ 1381 public void test_lastIndexOfLjava_lang_String() { 1382 final String fixture = "0123456789"; 1383 StringBuilder sb = new StringBuilder(fixture); 1384 assertEquals(0, sb.lastIndexOf("0")); 1385 assertEquals(0, sb.lastIndexOf("012")); 1386 assertEquals(-1, sb.lastIndexOf("02")); 1387 assertEquals(8, sb.lastIndexOf("89")); 1388 1389 try { 1390 sb.lastIndexOf(null); 1391 fail("no NPE"); 1392 } catch (NullPointerException e) { 1393 // Expected 1394 } 1395 } 1396 1397 /** 1398 * @tests java.lang.StringBuilder.lastIndexOf(String, int) 1399 */ 1400 public void test_lastIndexOfLjava_lang_StringI() { 1401 final String fixture = "0123456789"; 1402 StringBuilder sb = new StringBuilder(fixture); 1403 assertEquals(0, sb.lastIndexOf("0")); 1404 assertEquals(0, sb.lastIndexOf("012")); 1405 assertEquals(-1, sb.lastIndexOf("02")); 1406 assertEquals(8, sb.lastIndexOf("89")); 1407 1408 assertEquals(0, sb.lastIndexOf("0"), 0); 1409 assertEquals(0, sb.lastIndexOf("012"), 0); 1410 assertEquals(-1, sb.lastIndexOf("02"), 0); 1411 assertEquals(8, sb.lastIndexOf("89"), 0); 1412 1413 assertEquals(-1, sb.lastIndexOf("0"), 5); 1414 assertEquals(-1, sb.lastIndexOf("012"), 5); 1415 assertEquals(-1, sb.lastIndexOf("02"), 0); 1416 assertEquals(8, sb.lastIndexOf("89"), 5); 1417 1418 try { 1419 sb.lastIndexOf(null, 0); 1420 fail("no NPE"); 1421 } catch (NullPointerException e) { 1422 // Expected 1423 } 1424 } 1425 1426 /** 1427 * @tests java.lang.StringBuilder.length() 1428 */ 1429 public void test_length() { 1430 StringBuilder sb = new StringBuilder(); 1431 assertEquals(0, sb.length()); 1432 sb.append("0000"); 1433 assertEquals(4, sb.length()); 1434 } 1435 1436 /** 1437 * @tests java.lang.StringBuilder.offsetByCodePoints(int, int)' 1438 */ 1439 public void test_offsetByCodePointsII() { 1440 int result = new StringBuilder("a\uD800\uDC00b").offsetByCodePoints(0, 2); 1441 assertEquals(3, result); 1442 1443 result = new StringBuilder("abcd").offsetByCodePoints(3, -1); 1444 assertEquals(2, result); 1445 1446 result = new StringBuilder("a\uD800\uDC00b").offsetByCodePoints(0, 3); 1447 assertEquals(4, result); 1448 1449 result = new StringBuilder("a\uD800\uDC00b").offsetByCodePoints(3, -1); 1450 assertEquals(1, result); 1451 1452 result = new StringBuilder("a\uD800\uDC00b").offsetByCodePoints(3, 0); 1453 assertEquals(3, result); 1454 1455 result = new StringBuilder("\uD800\uDC00bc").offsetByCodePoints(3, 0); 1456 assertEquals(3, result); 1457 1458 result = new StringBuilder("a\uDC00bc").offsetByCodePoints(3, -1); 1459 assertEquals(2, result); 1460 1461 result = new StringBuilder("a\uD800bc").offsetByCodePoints(3, -1); 1462 assertEquals(2, result); 1463 1464 StringBuilder sb = new StringBuilder(); 1465 sb.append("abc"); 1466 try { 1467 sb.offsetByCodePoints(-1, 1); 1468 fail("No IOOBE for negative index."); 1469 } catch (IndexOutOfBoundsException e) { 1470 1471 } 1472 1473 try { 1474 sb.offsetByCodePoints(0, 4); 1475 fail("No IOOBE for offset that's too large."); 1476 } catch (IndexOutOfBoundsException e) { 1477 1478 } 1479 1480 try { 1481 sb.offsetByCodePoints(3, -4); 1482 fail("No IOOBE for offset that's too small."); 1483 } catch (IndexOutOfBoundsException e) { 1484 1485 } 1486 1487 try { 1488 sb.offsetByCodePoints(3, 1); 1489 fail("No IOOBE for index that's too large."); 1490 } catch (IndexOutOfBoundsException e) { 1491 1492 } 1493 1494 try { 1495 sb.offsetByCodePoints(4, -1); 1496 fail("No IOOBE for index that's too large."); 1497 } catch (IndexOutOfBoundsException e) { 1498 1499 } 1500 } 1501 1502 /** 1503 * @tests java.lang.StringBuilder.replace(int, int, String)' 1504 */ 1505 public void test_replaceIILjava_lang_String() { 1506 final String fixture = "0000"; 1507 StringBuilder sb = new StringBuilder(fixture); 1508 assertSame(sb, sb.replace(1, 3, "11")); 1509 assertEquals("0110", sb.toString()); 1510 assertEquals(4, sb.length()); 1511 1512 sb = new StringBuilder(fixture); 1513 assertSame(sb, sb.replace(1, 2, "11")); 1514 assertEquals("01100", sb.toString()); 1515 assertEquals(5, sb.length()); 1516 1517 sb = new StringBuilder(fixture); 1518 assertSame(sb, sb.replace(4, 5, "11")); 1519 assertEquals("000011", sb.toString()); 1520 assertEquals(6, sb.length()); 1521 1522 sb = new StringBuilder(fixture); 1523 assertSame(sb, sb.replace(4, 6, "11")); 1524 assertEquals("000011", sb.toString()); 1525 assertEquals(6, sb.length()); 1526 1527 // FIXME Undocumented NPE in Sun's JRE 5.0_5 1528 try { 1529 sb.replace(1, 2, null); 1530 fail("No NPE"); 1531 } catch (NullPointerException e) { 1532 // Expected 1533 } 1534 1535 try { 1536 sb = new StringBuilder(fixture); 1537 sb.replace(-1, 2, "11"); 1538 fail("No SIOOBE, negative start"); 1539 } catch (StringIndexOutOfBoundsException e) { 1540 // Expected 1541 } 1542 1543 try { 1544 sb = new StringBuilder(fixture); 1545 sb.replace(5, 2, "11"); 1546 fail("No SIOOBE, start > length"); 1547 } catch (StringIndexOutOfBoundsException e) { 1548 // Expected 1549 } 1550 1551 try { 1552 sb = new StringBuilder(fixture); 1553 sb.replace(3, 2, "11"); 1554 fail("No SIOOBE, start > end"); 1555 } catch (StringIndexOutOfBoundsException e) { 1556 // Expected 1557 } 1558 1559 // Regression for HARMONY-348 1560 StringBuilder buffer = new StringBuilder("1234567"); 1561 buffer.replace(2, 6, "XXX"); 1562 assertEquals("12XXX7",buffer.toString()); 1563 } 1564 1565 private void reverseTest(String org, String rev, String back) { 1566 // create non-shared StringBuilder 1567 StringBuilder sb = new StringBuilder(org); 1568 sb.reverse(); 1569 String reversed = sb.toString(); 1570 assertEquals(rev, reversed); 1571 // create non-shared StringBuilder 1572 sb = new StringBuilder(reversed); 1573 sb.reverse(); 1574 reversed = sb.toString(); 1575 assertEquals(back, reversed); 1576 1577 // test algorithm when StringBuilder is shared 1578 sb = new StringBuilder(org); 1579 String copy = sb.toString(); 1580 assertEquals(org, copy); 1581 sb.reverse(); 1582 reversed = sb.toString(); 1583 assertEquals(rev, reversed); 1584 sb = new StringBuilder(reversed); 1585 copy = sb.toString(); 1586 assertEquals(rev, copy); 1587 sb.reverse(); 1588 reversed = sb.toString(); 1589 assertEquals(back, reversed); 1590 } 1591 1592 /** 1593 * @tests java.lang.StringBuilder.reverse() 1594 */ 1595 public void test_reverse() { 1596 final String fixture = "0123456789"; 1597 StringBuilder sb = new StringBuilder(fixture); 1598 assertSame(sb, sb.reverse()); 1599 assertEquals("9876543210", sb.toString()); 1600 1601 sb = new StringBuilder("012345678"); 1602 assertSame(sb, sb.reverse()); 1603 assertEquals("876543210", sb.toString()); 1604 1605 sb.setLength(1); 1606 assertSame(sb, sb.reverse()); 1607 assertEquals("8", sb.toString()); 1608 1609 sb.setLength(0); 1610 assertSame(sb, sb.reverse()); 1611 assertEquals("", sb.toString()); 1612 1613 String str; 1614 str = "a"; 1615 reverseTest(str, str, str); 1616 1617 str = "ab"; 1618 reverseTest(str, "ba", str); 1619 1620 str = "abcdef"; 1621 reverseTest(str, "fedcba", str); 1622 1623 str = "abcdefg"; 1624 reverseTest(str, "gfedcba", str); 1625 1626 str = "\ud800\udc00"; 1627 reverseTest(str, str, str); 1628 1629 str = "\udc00\ud800"; 1630 reverseTest(str, "\ud800\udc00", "\ud800\udc00"); 1631 1632 str = "a\ud800\udc00"; 1633 reverseTest(str, "\ud800\udc00a", str); 1634 1635 str = "ab\ud800\udc00"; 1636 reverseTest(str, "\ud800\udc00ba", str); 1637 1638 str = "abc\ud800\udc00"; 1639 reverseTest(str, "\ud800\udc00cba", str); 1640 1641 str = "\ud800\udc00\udc01\ud801\ud802\udc02"; 1642 reverseTest(str, "\ud802\udc02\ud801\udc01\ud800\udc00", 1643 "\ud800\udc00\ud801\udc01\ud802\udc02"); 1644 1645 str = "\ud800\udc00\ud801\udc01\ud802\udc02"; 1646 reverseTest(str, "\ud802\udc02\ud801\udc01\ud800\udc00", str); 1647 1648 str = "\ud800\udc00\udc01\ud801a"; 1649 reverseTest(str, "a\ud801\udc01\ud800\udc00", 1650 "\ud800\udc00\ud801\udc01a"); 1651 1652 str = "a\ud800\udc00\ud801\udc01"; 1653 reverseTest(str, "\ud801\udc01\ud800\udc00a", str); 1654 1655 str = "\ud800\udc00\udc01\ud801ab"; 1656 reverseTest(str, "ba\ud801\udc01\ud800\udc00", 1657 "\ud800\udc00\ud801\udc01ab"); 1658 1659 str = "ab\ud800\udc00\ud801\udc01"; 1660 reverseTest(str, "\ud801\udc01\ud800\udc00ba", str); 1661 1662 str = "\ud800\udc00\ud801\udc01"; 1663 reverseTest(str, "\ud801\udc01\ud800\udc00", str); 1664 1665 str = "a\ud800\udc00z\ud801\udc01"; 1666 reverseTest(str, "\ud801\udc01z\ud800\udc00a", str); 1667 1668 str = "a\ud800\udc00bz\ud801\udc01"; 1669 reverseTest(str, "\ud801\udc01zb\ud800\udc00a", str); 1670 1671 str = "abc\ud802\udc02\ud801\udc01\ud800\udc00"; 1672 reverseTest(str, "\ud800\udc00\ud801\udc01\ud802\udc02cba", str); 1673 1674 str = "abcd\ud802\udc02\ud801\udc01\ud800\udc00"; 1675 reverseTest(str, "\ud800\udc00\ud801\udc01\ud802\udc02dcba", str); 1676 } 1677 1678 /** 1679 * @tests java.lang.StringBuilder.setCharAt(int, char) 1680 */ 1681 public void test_setCharAtIC() { 1682 final String fixture = "0000"; 1683 StringBuilder sb = new StringBuilder(fixture); 1684 sb.setCharAt(0, 'A'); 1685 assertEquals("A000", sb.toString()); 1686 sb.setCharAt(1, 'B'); 1687 assertEquals("AB00", sb.toString()); 1688 sb.setCharAt(2, 'C'); 1689 assertEquals("ABC0", sb.toString()); 1690 sb.setCharAt(3, 'D'); 1691 assertEquals("ABCD", sb.toString()); 1692 1693 try { 1694 sb.setCharAt(-1, 'A'); 1695 fail("No IOOBE, negative index"); 1696 } catch (IndexOutOfBoundsException e) { 1697 // Expected 1698 } 1699 1700 try { 1701 sb.setCharAt(4, 'A'); 1702 fail("No IOOBE, index == length"); 1703 } catch (IndexOutOfBoundsException e) { 1704 // Expected 1705 } 1706 1707 try { 1708 sb.setCharAt(5, 'A'); 1709 fail("No IOOBE, index > length"); 1710 } catch (IndexOutOfBoundsException e) { 1711 // Expected 1712 } 1713 } 1714 1715 /** 1716 * @tests java.lang.StringBuilder.setLength(int)' 1717 */ 1718 public void test_setLengthI() { 1719 final String fixture = "0123456789"; 1720 StringBuilder sb = new StringBuilder(fixture); 1721 sb.setLength(5); 1722 assertEquals(5, sb.length()); 1723 assertEquals("01234", sb.toString()); 1724 sb.setLength(6); 1725 assertEquals(6, sb.length()); 1726 assertEquals("01234\0", sb.toString()); 1727 sb.setLength(0); 1728 assertEquals(0, sb.length()); 1729 assertEquals("", sb.toString()); 1730 1731 try { 1732 sb.setLength(-1); 1733 fail("No IOOBE, negative length."); 1734 } catch (IndexOutOfBoundsException e) { 1735 // Expected 1736 } 1737 1738 sb = new StringBuilder("abcde"); 1739 assertEquals("abcde", sb.toString()); 1740 sb.setLength(1); 1741 sb.append('g'); 1742 assertEquals("ag", sb.toString()); 1743 1744 sb = new StringBuilder("abcde"); 1745 sb.setLength(3); 1746 sb.append('g'); 1747 assertEquals("abcg", sb.toString()); 1748 1749 sb = new StringBuilder("abcde"); 1750 sb.setLength(2); 1751 try { 1752 sb.charAt(3); 1753 fail("should throw IndexOutOfBoundsException"); 1754 } catch (IndexOutOfBoundsException e) { 1755 // Expected 1756 } 1757 1758 sb = new StringBuilder(); 1759 sb.append("abcdefg"); 1760 sb.setLength(2); 1761 sb.setLength(5); 1762 for (int i = 2; i < 5; i++) { 1763 assertEquals(0, sb.charAt(i)); 1764 } 1765 1766 sb = new StringBuilder(); 1767 sb.append("abcdefg"); 1768 sb.delete(2, 4); 1769 sb.setLength(7); 1770 assertEquals('a', sb.charAt(0)); 1771 assertEquals('b', sb.charAt(1)); 1772 assertEquals('e', sb.charAt(2)); 1773 assertEquals('f', sb.charAt(3)); 1774 assertEquals('g', sb.charAt(4)); 1775 for (int i = 5; i < 7; i++) { 1776 assertEquals(0, sb.charAt(i)); 1777 } 1778 1779 sb = new StringBuilder(); 1780 sb.append("abcdefg"); 1781 sb.replace(2, 5, "z"); 1782 sb.setLength(7); 1783 for (int i = 5; i < 7; i++) { 1784 assertEquals(0, sb.charAt(i)); 1785 } 1786 } 1787 1788 /** 1789 * @tests java.lang.StringBuilder.subSequence(int, int) 1790 */ 1791 public void test_subSequenceII() { 1792 final String fixture = "0123456789"; 1793 StringBuilder sb = new StringBuilder(fixture); 1794 CharSequence ss = sb.subSequence(0, 5); 1795 assertEquals("01234", ss.toString()); 1796 1797 ss = sb.subSequence(0, 0); 1798 assertEquals("", ss.toString()); 1799 1800 try { 1801 sb.subSequence(-1, 1); 1802 fail("No IOOBE, negative start."); 1803 } catch (IndexOutOfBoundsException e) { 1804 // Expected 1805 } 1806 1807 try { 1808 sb.subSequence(0, -1); 1809 fail("No IOOBE, negative end."); 1810 } catch (IndexOutOfBoundsException e) { 1811 // Expected 1812 } 1813 1814 try { 1815 sb.subSequence(0, fixture.length() + 1); 1816 fail("No IOOBE, end > length."); 1817 } catch (IndexOutOfBoundsException e) { 1818 // Expected 1819 } 1820 1821 try { 1822 sb.subSequence(3, 2); 1823 fail("No IOOBE, start > end."); 1824 } catch (IndexOutOfBoundsException e) { 1825 // Expected 1826 } 1827 } 1828 1829 /** 1830 * @tests java.lang.StringBuilder.substring(int) 1831 */ 1832 public void test_substringI() { 1833 final String fixture = "0123456789"; 1834 StringBuilder sb = new StringBuilder(fixture); 1835 String ss = sb.substring(0); 1836 assertEquals(fixture, ss); 1837 1838 ss = sb.substring(10); 1839 assertEquals("", ss); 1840 1841 try { 1842 sb.substring(-1); 1843 fail("No SIOOBE, negative start."); 1844 } catch (StringIndexOutOfBoundsException e) { 1845 // Expected 1846 } 1847 1848 try { 1849 sb.substring(0, -1); 1850 fail("No SIOOBE, negative end."); 1851 } catch (StringIndexOutOfBoundsException e) { 1852 // Expected 1853 } 1854 1855 try { 1856 sb.substring(fixture.length() + 1); 1857 fail("No SIOOBE, start > length."); 1858 } catch (StringIndexOutOfBoundsException e) { 1859 // Expected 1860 } 1861 } 1862 1863 /** 1864 * @tests java.lang.StringBuilder.substring(int, int) 1865 */ 1866 public void test_substringII() { 1867 final String fixture = "0123456789"; 1868 StringBuilder sb = new StringBuilder(fixture); 1869 String ss = sb.substring(0, 5); 1870 assertEquals("01234", ss); 1871 1872 ss = sb.substring(0, 0); 1873 assertEquals("", ss); 1874 1875 try { 1876 sb.substring(-1, 1); 1877 fail("No SIOOBE, negative start."); 1878 } catch (StringIndexOutOfBoundsException e) { 1879 // Expected 1880 } 1881 1882 try { 1883 sb.substring(0, -1); 1884 fail("No SIOOBE, negative end."); 1885 } catch (StringIndexOutOfBoundsException e) { 1886 // Expected 1887 } 1888 1889 try { 1890 sb.substring(0, fixture.length() + 1); 1891 fail("No SIOOBE, end > length."); 1892 } catch (StringIndexOutOfBoundsException e) { 1893 // Expected 1894 } 1895 1896 try { 1897 sb.substring(3, 2); 1898 fail("No SIOOBE, start > end."); 1899 } catch (StringIndexOutOfBoundsException e) { 1900 // Expected 1901 } 1902 } 1903 1904 /** 1905 * @tests java.lang.StringBuilder.toString()' 1906 */ 1907 public void test_toString() throws Exception { 1908 final String fixture = "0123456789"; 1909 StringBuilder sb = new StringBuilder(fixture); 1910 assertEquals(fixture, sb.toString()); 1911 1912 sb.setLength(0); 1913 sb.append("abcde"); 1914 assertEquals("abcde", sb.toString()); 1915 sb.setLength(1000); 1916 byte[] bytes = sb.toString().getBytes("GB18030"); 1917 for (int i = 5; i < bytes.length; i++) { 1918 assertEquals(0, bytes[i]); 1919 } 1920 1921 sb.setLength(5); 1922 sb.append("fghij"); 1923 assertEquals("abcdefghij", sb.toString()); 1924 } 1925 1926 /** 1927 * @tests java.lang.StringBuilder.trimToSize()' 1928 */ 1929 public void test_trimToSize() { 1930 final String fixture = "0123456789"; 1931 StringBuilder sb = new StringBuilder(fixture); 1932 assertTrue(sb.capacity() > fixture.length()); 1933 assertEquals(fixture.length(), sb.length()); 1934 assertEquals(fixture, sb.toString()); 1935 int prevCapacity = sb.capacity(); 1936 sb.trimToSize(); 1937 assertTrue(prevCapacity > sb.capacity()); 1938 assertEquals(fixture.length(), sb.length()); 1939 assertEquals(fixture, sb.toString()); 1940 } 1941 1942 // comparator for StringBuilder objects 1943 private static final SerializableAssert STRING_BILDER_COMPARATOR = new SerializableAssert() { 1944 public void assertDeserialized(Serializable initial, 1945 Serializable deserialized) { 1946 1947 StringBuilder init = (StringBuilder) initial; 1948 StringBuilder desr = (StringBuilder) deserialized; 1949 1950 assertEquals("toString", init.toString(), desr.toString()); 1951 } 1952 }; 1953 1954 /** 1955 * @tests serialization/deserialization. 1956 */ 1957 public void testSerializationSelf() throws Exception { 1958 1959 SerializationTest.verifySelf(new StringBuilder("0123456789"), 1960 STRING_BILDER_COMPARATOR); 1961 } 1962 1963 /** 1964 * @tests serialization/deserialization compatibility with RI. 1965 */ 1966 public void testSerializationCompatibility() throws Exception { 1967 1968 SerializationTest.verifyGolden(this, new StringBuilder("0123456789"), 1969 STRING_BILDER_COMPARATOR); 1970 } 1971 1972 private static final class Fixture { 1973 static final Fixture INSTANCE = new Fixture(); 1974 1975 private Fixture() { 1976 super(); 1977 } 1978 1979 @Override 1980 public String toString() { 1981 return "fixture"; 1982 } 1983 } 1984 } 1985