blob: e92c17716090def9133533495643a688f25d8740 [file] [log] [blame]
/*
* Copyright 2008 Google Inc.
*
* Licensed under the Apache License, Version 2.0 (the "License"); you may not
* use this file except in compliance with the License. You may obtain a copy of
* the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
* WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
* License for the specific language governing permissions and limitations under
* the License.
*/
package com.google.gwt.emultest.java.lang;
import com.google.gwt.junit.client.GWTTestCase;
/**
* This class tests classes StringBuffer and StringBuilder.
*/
public class StringBufferTest extends GWTTestCase {
/**
* This method gets the module name.
*
* @return the module name.
* @see com.google.gwt.junit.client.GWTTestCase#getModuleName()
*/
@Override
public String getModuleName() {
return "com.google.gwt.emultest.EmulSuite";
}
/**
* This method tests <code>append</code>.
*/
public void testAppend() {
StringBuffer x = new StringBuffer();
x.append(C.FLOAT_VALUE);
assertTrue(x.toString().startsWith(C.FLOAT_STRING));
x = new StringBuffer();
x.append(C.INT_VALUE);
assertEquals(C.INT_STRING, x.toString());
x = new StringBuffer();
x.append(C.LONG_VALUE);
assertTrue(x.toString().startsWith(C.LONG_STRING));
x = new StringBuffer();
x.append(C.DOUBLE_VALUE);
assertTrue(x.toString().startsWith(C.DOUBLE_STRING));
x = new StringBuffer();
x.append(C.CHAR_VALUE);
assertEquals(C.CHAR_STRING, x.toString());
x = new StringBuffer();
x.append(C.CHAR_ARRAY_VALUE);
assertEquals(C.CHAR_ARRAY_STRING, x.toString());
x = new StringBuffer();
x.append(C.CHAR_ARRAY_VALUE, 1, 4);
assertEquals(C.CHAR_ARRAY_STRING.substring(1, 5), x.toString());
x = new StringBuffer();
x.append(C.FALSE_VALUE);
assertEquals(C.FALSE_STRING, x.toString());
x = new StringBuffer();
x.append(C.TRUE_VALUE);
assertEquals(C.TRUE_STRING, x.toString());
x = new StringBuffer();
x.append((String) null);
assertEquals("null", x.toString());
x = new StringBuffer();
x.append((CharSequence) "abc");
assertEquals("abc", x.toString());
x = new StringBuffer();
x.append("abcde", 2, 3);
assertEquals("c", x.toString());
}
/**
* Check that capacity methods are present, even though they do nothing.
*/
public void testCapacity() {
StringBuffer buf = new StringBuffer();
buf.ensureCapacity(100);
assertTrue(buf.capacity() >= 0);
buf.trimToSize();
}
/**
* This method tests <code>charAt</code>.
*/
public void testCharAt() {
assertEquals(new StringBuffer("abc").charAt(1), 'b');
}
/**
* This method tests string creation and equality.
*/
public void testContructor() {
String constant = "abcdef";
assertEquals(new StringBuffer(constant).toString(), constant);
assertEquals(new StringBuffer().toString(), "");
assertEquals(new StringBuffer((CharSequence) constant).toString(), constant);
}
/**
* This method tests <code>delete</code>.
*/
public void testDelete() {
StringBuffer haystack = new StringBuffer("abcdefghi");
haystack.delete(2, 4);
assertEquals(haystack.toString(), "abefghi");
haystack.deleteCharAt(0);
assertEquals(haystack.toString(), "befghi");
haystack.deleteCharAt(1);
assertEquals(haystack.toString(), "bfghi");
}
/**
* Tests toCharArray.
*/
public void testGetChars() {
StringBuffer x = new StringBuffer("ABCDEFGHIJ");
char[] a1 = "abcdefghij".toCharArray();
char[] desired = "abcDEFghij".toCharArray();
x.getChars(3, 6, a1, 3);
for (int i = 0; i < a1.length; i++) {
assertEquals(a1[i], desired[i]);
}
}
/**
* This method tests <code>indexOf</code>.
*/
public void testIndexOf() {
String haystack = "abcdefghi";
assertEquals(haystack.indexOf("q"), -1);
assertEquals(haystack.indexOf('q'), -1);
assertEquals(haystack.indexOf("a"), 0);
assertEquals(haystack.indexOf('a'), 0);
assertEquals(haystack.indexOf('a', 1), -1);
assertEquals(haystack.indexOf("bc"), 1);
assertEquals(haystack.indexOf(""), 0);
}
/**
* This method tests <code>insert</code>.
*/
public void testInsert() {
StringBuffer x = new StringBuffer("!");
x.insert(1, C.FLOAT_VALUE);
assertTrue(x.toString().startsWith("!" + C.FLOAT_STRING));
x = new StringBuffer("!");
x.insert(1, C.INT_VALUE);
assertEquals("!" + C.INT_STRING, x.toString());
x = new StringBuffer("!");
x.insert(1, C.LONG_VALUE);
assertEquals("!" + C.LONG_STRING, x.toString());
x = new StringBuffer("!");
x.insert(1, C.DOUBLE_VALUE);
assertTrue(x.toString().startsWith("!" + C.DOUBLE_STRING));
x = new StringBuffer("!");
x.insert(1, C.CHAR_VALUE);
assertEquals("!" + C.CHAR_STRING, x.toString());
x = new StringBuffer("!");
x.insert(1, C.CHAR_ARRAY_VALUE);
assertEquals("!" + C.CHAR_ARRAY_STRING, x.toString());
x = new StringBuffer("!");
x.insert(1, C.CHAR_ARRAY_VALUE, 1, 4);
assertEquals("!" + C.CHAR_ARRAY_STRING.substring(1, 5), x.toString());
x = new StringBuffer("01234");
x.insert(2, (CharSequence) "abcde");
assertEquals("01abcde234", x.toString());
x = new StringBuffer("01234");
x.insert(2, "abcde", 2, 4);
assertEquals("01cd234", x.toString());
x = new StringBuffer("!");
x.insert(1, C.FALSE_VALUE);
assertEquals("!" + C.FALSE_STRING, x.toString());
x = new StringBuffer("!");
x.insert(1, C.TRUE_VALUE);
assertEquals("!" + C.TRUE_STRING, x.toString());
}
/**
* This method does interleaved inserts and deletes.
*/
public void testInterleavedInsertAndDelete() {
StringBuffer x = new StringBuffer();
for (int i = 0; i < 9; i++) {
x.append("1234567890");
}
for (int i = 0; i < 10; i++) {
x.delete(5, 15);
}
assertEquals(x.toString(), "12345");
}
/**
* This method tests <code>lastIndexOf</code>.
*/
public void testLastIndexOf() {
StringBuffer x = new StringBuffer("abcdeabcdef");
assertEquals(9, x.lastIndexOf("e"));
assertEquals(10, x.lastIndexOf("f"));
assertEquals(-1, x.lastIndexOf("f", 1));
}
/**
* This method tests <code>length</code>, and tests moderately long
* StringBuffers.
*/
public void testLength() {
assertEquals(3, new StringBuffer("abc").length());
StringBuffer str = new StringBuffer("x");
for (int i = 0; i < 16; i++) {
str.append(str);
}
assertEquals(1 << 16, str.length());
}
/**
* This method tests <code>toLowerCase</code>.
*/
public void testLowerCase() {
assertEquals("abc", "AbC".toLowerCase());
assertEquals("abc", "abc".toLowerCase());
assertEquals("", "".toLowerCase());
}
/**
* Tests correctness under repeated insertion and append.
*/
public void testRepeatedAppendsAndInserts() {
StringBuffer x = new StringBuffer();
final int size = 1000;
for (int i = 0; i < size; i++) {
x.append("" + i % 10);
}
assertTrue("endwith1", x.toString().endsWith("0123456789"));
assertTrue("startswith1", x.toString().startsWith("0123456789"));
assertEquals(x.length(), size);
x = new StringBuffer();
for (int i = 0; i < size * 4; i++) {
x.append("" + i % 10);
}
assertTrue("endswith2", x.toString().endsWith("0123456789"));
assertTrue("startswith2", x.toString().startsWith("0123456789"));
assertEquals("length2", x.length(), size * 4);
x = new StringBuffer();
for (int i = 0; i < size; i++) {
x.insert(0, "" + i % 10);
}
assertTrue("endswith3", x.toString().endsWith("9876543210"));
assertTrue("startswith3", x.toString().startsWith("9876543210"));
assertEquals("length3", x.length(), size);
x = new StringBuffer();
for (int i = 0; i < size * 4; i++) {
x.insert(0, "" + i % 10);
}
assertTrue("endswith4", x.toString().endsWith("9876543210"));
assertTrue("startswith4", x.toString().startsWith("9876543210"));
assertEquals("size4", x.length(), size * 4);
}
/**
* This method tests <code>replace</code>.
*/
public void testReplace() {
StringBuffer x = new StringBuffer("xxyyxx");
x.replace(2, 4, "YY");
assertEquals("xxYYxx", x.toString());
}
/**
* This method tests <code>setLength</code>.
*/
public void testSetLength() {
StringBuffer x = new StringBuffer("abcdefghi");
x.setLength(20);
assertEquals(x.length(), 20);
assertEquals(x.toString(), x.toString(), "abcdefghi\0\0\0\0\0\0\0\0\0\0\0");
x.setLength(5);
assertEquals(x.length(), 5);
assertEquals(x.toString(), "abcde");
}
/**
* This method tests <code>startsWith</code>.
*/
public void testStartsWith() {
String haystack = "abcdefghi";
assertTrue(haystack.startsWith("abc"));
assertTrue(haystack.startsWith("bc", 1));
assertTrue(haystack.startsWith(haystack));
assertFalse(haystack.startsWith(haystack + "j"));
}
/**
* A smoke test that StringBuilder's methods are available and basically work.
* The implementation is currently shared with StringBuffer, so all the tricky
* test cases are not repeated.
*/
public void testStringBuilder() {
StringBuilder bld = new StringBuilder();
bld = new StringBuilder(100);
bld = new StringBuilder("abc");
assertEquals("abc", bld.toString());
bld = new StringBuilder((CharSequence) "abc");
assertEquals("abc", bld.toString());
bld = new StringBuilder();
bld.append(true);
assertEquals("true", bld.toString());
bld = new StringBuilder();
bld.append('a');
assertEquals("a", bld.toString());
bld = new StringBuilder();
char[] abcde = {'a', 'b', 'c', 'd', 'e'};
bld.append(abcde);
assertEquals("abcde", bld.toString());
bld = new StringBuilder();
bld.append(abcde, 1, 3);
assertEquals("bcd", bld.toString());
bld = new StringBuilder();
bld.append((CharSequence) "abcde");
assertEquals("abcde", bld.toString());
bld = new StringBuilder();
bld.append("abcde", 2, 4);
assertEquals("cd", bld.toString());
bld = new StringBuilder();
bld.append(1.5);
assertEquals("1.5", bld.toString());
bld = new StringBuilder();
bld.append(1.5F);
assertEquals("1.5", bld.toString());
bld = new StringBuilder();
bld.append(5);
assertEquals("5", bld.toString());
bld = new StringBuilder();
bld.append(5L);
assertEquals("5", bld.toString());
bld = new StringBuilder();
bld.append(new Object() {
@Override
public String toString() {
return "obj";
}
});
assertEquals("obj", bld.toString());
bld = new StringBuilder();
bld.append("abc");
assertEquals("abc", bld.toString());
bld = new StringBuilder();
bld.append(new StringBuffer("abc"));
assertEquals("abc", bld.toString());
bld = new StringBuilder();
bld.append("abcde");
assertEquals('c', bld.charAt(2));
bld = new StringBuilder();
bld.append("abcde");
bld.delete(1, 2);
assertEquals("acde", bld.toString());
bld = new StringBuilder();
bld.append("abcde");
bld.deleteCharAt(2);
assertEquals("abde", bld.toString());
// check that capacity methods are present
bld = new StringBuilder();
assertTrue(bld.capacity() >= 0);
bld.ensureCapacity(100);
bld.trimToSize();
bld = new StringBuilder();
bld.append("abcde");
char[] chars = {'0', '0', '0', '0', '0'};
bld.getChars(2, 4, chars, 2);
assertEquals('0', chars[0]);
assertEquals('0', chars[1]);
assertEquals('c', chars[2]);
assertEquals('d', chars[3]);
assertEquals('0', chars[4]);
bld = new StringBuilder("01234");
assertEquals(2, bld.indexOf("23"));
bld = new StringBuilder();
bld.append("0123401234");
assertEquals(5, bld.indexOf("0123", 1));
bld = new StringBuilder("01234");
bld.insert(2, true);
assertEquals("01true234", bld.toString());
bld = new StringBuilder("01234");
bld.insert(2, 'X');
assertEquals("01X234", bld.toString());
bld = new StringBuilder("01234");
char[] chars2 = {'a', 'b', 'c', 'd', 'e'};
bld.insert(2, chars2, 3, 2);
assertEquals("01de234", bld.toString());
bld = new StringBuilder("01234");
bld.insert(2, (CharSequence) "abcde");
assertEquals("01abcde234", bld.toString());
bld = new StringBuilder("01234");
bld.insert(2, "abcde", 2, 4);
assertEquals("01cd234", bld.toString());
bld = new StringBuilder("01234");
bld.insert(2, 1.5);
assertEquals("011.5234", bld.toString());
bld = new StringBuilder("01234");
bld.insert(2, 1.5F);
assertEquals("011.5234", bld.toString());
bld = new StringBuilder("01234");
bld.insert(2, 99);
assertEquals("0199234", bld.toString());
bld = new StringBuilder("01234");
bld.insert(2, 99L);
assertEquals("0199234", bld.toString());
bld = new StringBuilder("01234");
bld.insert(2, new Object() {
@Override
public String toString() {
return "obj";
}
});
assertEquals("01obj234", bld.toString());
bld = new StringBuilder("01234");
bld.insert(2, "XX");
assertEquals("01XX234", bld.toString());
bld = new StringBuilder("0123401234");
assertEquals(5, bld.lastIndexOf("0123"));
bld = new StringBuilder("0123401234");
assertEquals(0, bld.lastIndexOf("0123", 4));
bld = new StringBuilder("01234");
assertEquals(5, bld.length());
bld = new StringBuilder("01234");
bld.replace(2, 3, "XYZ");
assertEquals("01XYZ34", bld.toString());
bld = new StringBuilder("01234");
bld.setCharAt(2, 'X');
assertEquals("01X34", bld.toString());
bld = new StringBuilder("01234");
bld.setLength(2);
assertEquals("01", bld.toString());
bld = new StringBuilder("01234");
assertEquals("23", bld.subSequence(2, 4));
bld = new StringBuilder("01234");
assertEquals("234", bld.substring(2));
bld = new StringBuilder("01234");
assertEquals("23", bld.substring(2, 4));
}
/**
* This method tests <code>substring</code>.
*/
public void testSubstring() {
StringBuffer haystack = new StringBuffer("abcdefghi");
assertEquals("cd", haystack.substring(2, 4));
assertEquals("bc", "abcdef".substring(1, 3));
assertEquals("bcdef", "abcdef".substring(1));
}
}