Converting MultiWordSuggestOracle to use SafeHtml to escape suggestions, and fixing fixing broken tests.

Review at http://gwt-code-reviews.appspot.com/938801


git-svn-id: https://google-web-toolkit.googlecode.com/svn/trunk@8910 8db76d5a-ed1c-0410-87a9-c151d255dfc7
diff --git a/user/src/com/google/gwt/user/client/ui/MultiWordSuggestOracle.java b/user/src/com/google/gwt/user/client/ui/MultiWordSuggestOracle.java
index 8dac9dd..ea960ce 100644
--- a/user/src/com/google/gwt/user/client/ui/MultiWordSuggestOracle.java
+++ b/user/src/com/google/gwt/user/client/ui/MultiWordSuggestOracle.java
@@ -15,7 +15,7 @@
  */
 package com.google.gwt.user.client.ui;
 
-import com.google.gwt.core.client.GWT;
+import com.google.gwt.safehtml.shared.SafeHtmlBuilder;
 import com.google.gwt.user.client.rpc.IsSerializable;
 
 import java.util.ArrayList;
@@ -119,10 +119,6 @@
       }
       return comparison;
     }
-    
-    public int length() {
-      return endIndex - startIndex;
-    }
   }
   
   private static final char WHITESPACE_CHAR = ' ';
@@ -133,8 +129,6 @@
    */
   private static final String NORMALIZE_TO_SINGLE_WHITE_SPACE = "\\s+";
 
-  private static HTML convertMe = GWT.isClient() ? new HTML() : null;
-
   /**
    * Associates substrings with words.
    */
@@ -309,12 +303,6 @@
     return new MultiWordSuggestion(replacementString, displayString);
   }
 
-  String escapeText(String escapeMe) {
-    convertMe.setText(escapeMe);
-    String escaped = convertMe.getHTML();
-    return escaped;
-  }
-
   /**
    * Returns real suggestions with the given query in <code>strong</code> html
    * font.
@@ -335,7 +323,7 @@
       String formattedSuggestion = toRealSuggestions.get(candidate);
 
       // Create strong search string.
-      StringBuffer accum = new StringBuffer();
+      SafeHtmlBuilder accum = new SafeHtmlBuilder();
       
       String[] searchWords = query.split(WHITESPACE_STRING);
       while (true) {
@@ -345,12 +333,14 @@
         }
         if (wordBounds.startIndex == 0 || 
             WHITESPACE_CHAR == candidate.charAt(wordBounds.startIndex - 1)) {
-          String part1 = escapeText(formattedSuggestion.substring(cursor, wordBounds.startIndex));
-          String part2 = escapeText(formattedSuggestion.substring(wordBounds.startIndex,
-              wordBounds.endIndex));
+          String part1 = formattedSuggestion.substring(cursor, wordBounds.startIndex);
+          String part2 = formattedSuggestion.substring(wordBounds.startIndex,
+              wordBounds.endIndex);
           cursor = wordBounds.endIndex;
-          accum.append(part1).append("<strong>").append(part2).append(
-              "</strong>");
+          accum.appendEscaped(part1);
+          accum.appendHtmlConstant("<strong>");
+          accum.appendEscaped(part2);
+          accum.appendHtmlConstant("</strong>");
         }
         index = wordBounds.endIndex;
       }
@@ -360,10 +350,9 @@
         continue;
       }
       
-      String end = escapeText(formattedSuggestion.substring(cursor));
-      accum.append(end);
+      accum.appendEscaped(formattedSuggestion.substring(cursor));
       MultiWordSuggestion suggestion = createSuggestion(formattedSuggestion,
-          accum.toString());
+          accum.toSafeHtml().asString());
       suggestions.add(suggestion);
     }
     return suggestions;
diff --git a/user/test/com/google/gwt/user/client/ui/SuggestBoxTest.java b/user/test/com/google/gwt/user/client/ui/SuggestBoxTest.java
index ade23ac..7d2f02a 100644
--- a/user/test/com/google/gwt/user/client/ui/SuggestBoxTest.java
+++ b/user/test/com/google/gwt/user/client/ui/SuggestBoxTest.java
@@ -138,10 +138,10 @@
     box.showSuggestionList();
     assertTrue(display.isSuggestionListShowing());
     assertEquals(1, display.getSuggestionCount());
-    assertEquals("<strong>he</strong>'ll <strong>help</strong> me wont <strong>he</strong>",
-        display.getSuggestion(0).getDisplayString().toLowerCase());
+    assertEquals("<strong>He</strong>&#39;ll <strong>help</strong> me wont <strong>he</strong>",
+        display.getSuggestion(0).getDisplayString());
   }
-  
+
   public void testMultipleWordMatchesShow() {
     MultiWordSuggestOracle oracle = new MultiWordSuggestOracle(",! ");
     oracle.add("Hark, Shark and Herald");
@@ -156,14 +156,14 @@
     box.showSuggestionList();
     assertTrue(display.isSuggestionListShowing());
     assertEquals(3, display.getSuggestionCount());
-    assertEquals("<strong>hark</strong>, shark and <strong>herald</strong>", 
-        display.getSuggestion(0).getDisplayString().toLowerCase());
-    assertEquals("<strong>hark</strong>! the <strong>herald</strong> angels sing",
-        display.getSuggestion(1).getDisplayString().toLowerCase());
-    assertEquals("<strong>herald</strong>ings and <strong>hark</strong>ings",
-        display.getSuggestion(2).getDisplayString().toLowerCase());
+    assertEquals("<strong>Hark</strong>, Shark and <strong>Herald</strong>", 
+        display.getSuggestion(0).getDisplayString());
+    assertEquals("<strong>Hark</strong>! The <strong>Herald</strong> Angels Sing",
+        display.getSuggestion(1).getDisplayString());
+    assertEquals("<strong>Herald</strong>ings and <strong>Hark</strong>ings",
+        display.getSuggestion(2).getDisplayString());
   }
-  
+
   @SuppressWarnings("deprecation")
   public void testShowAndHide() {
     SuggestBox box = createSuggestBox();