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>'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();