Fixes and better unit test code coverage from Nathan Beyer [nbeyer@kc.rr.com].

git-svn-id: https://svn.apache.org/repos/asf/jakarta/commons/proper/lang/trunk@227149 13f79535-47bb-0310-9956-ffa450edef68
This commit is contained in:
Gary D. Gregory 2005-08-03 02:50:53 +00:00
parent ee5b770b08
commit 097438b3b1
2 changed files with 101 additions and 2 deletions

View File

@ -1058,12 +1058,15 @@ public StrBuilder replace(int startIndex, int endIndex, String str) {
public StrBuilder replace(int startIndex, int endIndex, StrBuilder builder) { public StrBuilder replace(int startIndex, int endIndex, StrBuilder builder) {
endIndex = validateRange(startIndex, endIndex); endIndex = validateRange(startIndex, endIndex);
int insertLen = builder.length(); int insertLen = builder.length();
int removeLen = endIndex = startIndex; int removeLen = endIndex - startIndex;
if (insertLen > removeLen) { if (insertLen > removeLen) {
ensureCapacity(size - removeLen + insertLen); ensureCapacity(size - removeLen + insertLen);
} }
if (insertLen != removeLen) { if (insertLen != removeLen) {
//shift the current characters to the right
System.arraycopy(buf, endIndex, buf, startIndex + insertLen, size - endIndex); System.arraycopy(buf, endIndex, buf, startIndex + insertLen, size - endIndex);
//adjust the size accordingly
size += (insertLen - removeLen);
} }
builder.getChars(0, insertLen, buf, startIndex); builder.getChars(0, insertLen, buf, startIndex);
return this; return this;
@ -1233,7 +1236,7 @@ public String rightString(int length) {
} else if (length >= size) { } else if (length >= size) {
return new String(buf, 0, size); return new String(buf, 0, size);
} else { } else {
return new String(buf, size - length, size); return new String(buf, size - length, length);
} }
} }

View File

@ -375,6 +375,8 @@ public void testReplaceCharChar() {
assertEquals("ddbbcc", sb.toString()); assertEquals("ddbbcc", sb.toString());
sb.replace('a', 'd'); sb.replace('a', 'd');
assertEquals("ddbbcc", sb.toString()); assertEquals("ddbbcc", sb.toString());
sb.replace('d', 'd');
assertEquals("ddbbcc", sb.toString());
} }
/** /**
@ -394,6 +396,18 @@ public void testReplaceStringString() {
assertEquals("ddbbcc", sb.toString()); assertEquals("ddbbcc", sb.toString());
} }
public void testReplaceIntIntStrBuilder() {
StrBuilder sb = new StrBuilder("abc");
sb.replace(0, 1, new StrBuilder ("d"));
assertEquals("dbc", sb.toString());
sb.replace(0, 1, new StrBuilder ("aaa"));
assertEquals("aaabc", sb.toString());
sb = new StrBuilder("aabbcc");
sb.replace(0, 2, new StrBuilder("d"));
assertEquals("dbbcc", sb.toString());
}
public void testSetCharAt() { public void testSetCharAt() {
StrBuilder sb = new StrBuilder(); StrBuilder sb = new StrBuilder();
try { try {
@ -435,6 +449,7 @@ void testStartsWith(StrBuilder sb ) {
assertTrue(sb.startsWith("a")); assertTrue(sb.startsWith("a"));
assertTrue(sb.startsWith("ab")); assertTrue(sb.startsWith("ab"));
assertTrue(sb.startsWith("abc")); assertTrue(sb.startsWith("abc"));
assertFalse(sb.startsWith("cba"));
} }
public void testEndsWith() { public void testEndsWith() {
@ -452,6 +467,7 @@ void testEndsWith(StrBuilder sb) {
assertTrue(sb.endsWith("c")); assertTrue(sb.endsWith("c"));
assertTrue(sb.endsWith("bc")); assertTrue(sb.endsWith("bc"));
assertTrue(sb.endsWith("abc")); assertTrue(sb.endsWith("abc"));
assertFalse(sb.endsWith("cba"));
assertFalse(sb.endsWith("abcd")); assertFalse(sb.endsWith("abcd"));
assertFalse(sb.endsWith(" abc")); assertFalse(sb.endsWith(" abc"));
assertFalse(sb.endsWith("abc ")); assertFalse(sb.endsWith("abc "));
@ -1493,4 +1509,84 @@ public void testLastIndexOfStringInt() {
assertEquals (2, sb.lastIndexOf("za", sb.length())); assertEquals (2, sb.lastIndexOf("za", sb.length()));
assertEquals (-1, sb.lastIndexOf("za", 1)); assertEquals (-1, sb.lastIndexOf("za", 1));
} }
public void testContainsChar() {
StrBuilder sb = new StrBuilder("abcdefghijklmnopqrstuvwxyz");
assertTrue (sb.contains('a'));
assertTrue (sb.contains('o'));
assertTrue (sb.contains('z'));
assertFalse (sb.contains('1'));
}
public void testContainsString() {
StrBuilder sb = new StrBuilder("abcdefghijklmnopqrstuvwxyz");
assertTrue (sb.contains("a"));
assertTrue (sb.contains("pq"));
assertTrue (sb.contains("z"));
assertFalse (sb.contains("zyx"));
}
public void testMidString() {
StrBuilder sb = new StrBuilder("hello goodbye hello");
assertEquals ("goodbye", sb.midString(6, 7));
assertEquals ("hello", sb.midString(0, 5));
assertEquals ("hello", sb.midString(-5, 5));
assertEquals ("", sb.midString(0, -1));
assertEquals ("", sb.midString(20, 2));
}
public void testRightString() {
StrBuilder sb = new StrBuilder("left right");
assertEquals ("right", sb.rightString(5));
assertEquals ("", sb.rightString(0));
assertEquals ("", sb.rightString(-5));
assertEquals ("left right", sb.rightString(15));
}
public void testLeftString() {
StrBuilder sb = new StrBuilder("left right");
assertEquals ("left", sb.leftString(4));
assertEquals ("", sb.leftString(0));
assertEquals ("", sb.leftString(-5));
assertEquals ("left right", sb.leftString(15));
}
public void testSubstringInt() {
StrBuilder sb = new StrBuilder ("hello goodbye");
assertEquals ("goodbye", sb.substring(6));
assertEquals ("hello goodbye".substring(6), sb.substring(6));
assertEquals ("hello goodbye", sb.substring(0));
assertEquals ("hello goodbye".substring(0), sb.substring(0));
try {
sb.substring(-1);
fail ();
} catch (StringIndexOutOfBoundsException e) {}
try {
sb.substring(15);
fail ();
} catch (StringIndexOutOfBoundsException e) {}
}
public void testSubstringIntInt() {
StrBuilder sb = new StrBuilder ("hello goodbye");
assertEquals ("hello", sb.substring(0, 5));
assertEquals ("hello goodbye".substring(0, 6), sb.substring(0, 6));
assertEquals ("goodbye", sb.substring(6, 13));
assertEquals ("hello goodbye".substring(6,13), sb.substring(6, 13));
assertEquals ("goodbye", sb.substring(6, 20));
try {
sb.substring(-1, 5);
fail();
} catch (StringIndexOutOfBoundsException e) {}
try {
sb.substring(15, 20);
fail();
} catch (StringIndexOutOfBoundsException e) {}
}
} }