Fixed implementation of String.trim
Issue 1794
Patch by:ecc
Review by:robertvawter
git-svn-id: https://google-web-toolkit.googlecode.com/svn/trunk@1486 8db76d5a-ed1c-0410-87a9-c151d255dfc7
diff --git a/user/super/com/google/gwt/emul/java/lang/String.java b/user/super/com/google/gwt/emul/java/lang/String.java
index 97f59aa..bb6fcb6 100644
--- a/user/super/com/google/gwt/emul/java/lang/String.java
+++ b/user/super/com/google/gwt/emul/java/lang/String.java
@@ -457,6 +457,9 @@
}-*/;
public native String trim() /*-{
+ if(this.length == 0 || (this[0] > '\u0020' && this[this.length-1] > '\u0020')) {
+ return this;
+ }
var r1 = this.replace(/^(\s*)/, '');
var r2 = r1.replace(/\s*$/, '');
return r2;
diff --git a/user/test/com/google/gwt/emultest/java/lang/StringTest.java b/user/test/com/google/gwt/emultest/java/lang/StringTest.java
index 770f601..7f11081 100644
--- a/user/test/com/google/gwt/emultest/java/lang/StringTest.java
+++ b/user/test/com/google/gwt/emultest/java/lang/StringTest.java
@@ -176,7 +176,7 @@
String a = returnNull() + returnNull();
assertEquals("nullnull", a);
}
-
+
/** tests replace */
public void testReplace() {
assertEquals("axax".replace('x', 'a'), "aaaa");
@@ -252,10 +252,29 @@
/** tests trim */
public void testTrim() {
- assertEquals("abc", " \t abc \n ".trim());
- assertEquals("abc", "abc".trim());
- assertEquals("", "".trim());
- assertEquals("", " \t ".trim());
+ trimRightAssertEquals("abc", " \t abc \n ");
+ trimRightAssertEquals("abc", "abc".trim());
+ trimRightAssertSame("abc", "abc");
+ String s = '\23' + "hi";
+ trimRightAssertSame(s, s);
+ trimRightAssertEquals("abc", " abc".trim());
+ trimRightAssertEquals("abc", "abc ".trim());
+ trimRightAssertEquals("", "".trim());
+ trimRightAssertEquals("", " \t ".trim());
+ }
+
+ /**
+ * Helper method for testTrim to avoid compiler optimizations.
+ */
+ public void trimRightAssertSame(String left, String right) {
+ assertSame(left, right.trim());
+ }
+
+ /**
+ * Helper method for testTrim to avoid compiler optimizations.
+ */
+ public void trimRightAssertEquals(String left, String right) {
+ assertEquals(left, right.trim());
}
/** tests toUpperCase */
@@ -288,7 +307,7 @@
private String returnNull() {
return null;
}
-
+
private String toS(char from) {
return Character.toString(from);
}