Fix for String.replace.

Issue: #4180
Patch by: jat
Review by: me


git-svn-id: https://google-web-toolkit.googlecode.com/svn/trunk@2146 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 5ab0153..195df8d 100644
--- a/user/super/com/google/gwt/emul/java/lang/String.java
+++ b/user/super/com/google/gwt/emul/java/lang/String.java
@@ -322,8 +322,9 @@
   }-*/;
 
   public native String replace(char from, char to) /*-{
-    var code = @java.lang.Long::toHexString(J)(from);
-    return this.replace(RegExp("\\x" + code, "g"), String.fromCharCode(to));
+    var code = @java.lang.Integer::toHexString(I)(from);
+    code = "0000".substring(code.length) + code;
+    return this.replace(RegExp("\\u" + code, "g"), String.fromCharCode(to));
   }-*/;
 
   /**
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 67d874d..46430af 100644
--- a/user/test/com/google/gwt/emultest/java/lang/StringTest.java
+++ b/user/test/com/google/gwt/emultest/java/lang/StringTest.java
@@ -199,6 +199,10 @@
       char from = (char) (to + 5);
       assertEquals(toS(to), toS(from).replace(from, to));
     }
+    // issue 1480
+    assertEquals("example xd", "example xd".replace('\r', ' ').replace('\n', ' '));
+    assertEquals("dog food", "dog\u0120food".replace('\u0120', ' '));
+    assertEquals("ABABAB", "\u1111B\u1111B\u1111B".replace('\u1111', 'A'));
   }
 
   public void testReplaceAll() {