diff options
author | asvitkine@chromium.org <asvitkine@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2011-11-10 15:08:41 +0000 |
---|---|---|
committer | asvitkine@chromium.org <asvitkine@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2011-11-10 15:08:41 +0000 |
commit | 531e034c4256147c7edd37f5404eaaeb8fe3b0cd (patch) | |
tree | 71ea8a6f2b5d71bc00a104b176a2917a8335fe13 /base/string_util_unittest.cc | |
parent | 23efbcbf7bc712ea22ad731aaa852c1a4763a0ea (diff) | |
download | chromium_src-531e034c4256147c7edd37f5404eaaeb8fe3b0cd.zip chromium_src-531e034c4256147c7edd37f5404eaaeb8fe3b0cd.tar.gz chromium_src-531e034c4256147c7edd37f5404eaaeb8fe3b0cd.tar.bz2 |
Fix AutocompleteMatch DCHECK() triggered by |RenderViewContextMenu::AppendSearchProvider()|.
Makes |AppendSearchProvider()| sanitize the text by replacing unwanted whitespace
characters with spaces. Do this instead of calling |AutocompleteMatch::SanitizeString()|,
since we want to preserve the whitespace between words separated by newlines here, rather
than appending such words together.
Added |ReplaceChars()| to base/string_util to support replacing any occurence of the
given characters with a replacement string.
BUG=103338
TEST=Right click on multiline text in a text area in a Debug build. A DCHECK() shouldn't trigger.
Review URL: http://codereview.chromium.org/8502027
git-svn-id: svn://svn.chromium.org/chrome/trunk/src@109430 0039d316-1c4b-4281-b951-d872f2087c98
Diffstat (limited to 'base/string_util_unittest.cc')
-rw-r--r-- | base/string_util_unittest.cc | 33 |
1 files changed, 33 insertions, 0 deletions
diff --git a/base/string_util_unittest.cc b/base/string_util_unittest.cc index f354a99..ecdb84f 100644 --- a/base/string_util_unittest.cc +++ b/base/string_util_unittest.cc @@ -1066,6 +1066,39 @@ TEST(StringUtilTest, RemoveChars) { EXPECT_EQ(std::string(), input); } +TEST(StringUtilTest, ReplaceChars) { + struct TestData { + const char* input; + const char* replace_chars; + const char* replace_with; + const char* output; + bool result; + } cases[] = { + { "", "", "", "", false }, + { "test", "", "", "test", false }, + { "test", "", "!", "test", false }, + { "test", "z", "!", "test", false }, + { "test", "e", "!", "t!st", true }, + { "test", "e", "!?", "t!?st", true }, + { "test", "ez", "!", "t!st", true }, + { "test", "zed", "!?", "t!?st", true }, + { "test", "t", "!?", "!?es!?", true }, + { "test", "et", "!>", "!>!>s!>", true }, + { "test", "zest", "!", "!!!!", true }, + { "test", "szt", "!", "!e!!", true }, + }; + + for (size_t i = 0; i < ARRAYSIZE_UNSAFE(cases); ++i) { + std::string output; + bool result = ReplaceChars(cases[i].input, + cases[i].replace_chars, + cases[i].replace_with, + &output); + EXPECT_EQ(cases[i].result, result); + EXPECT_EQ(cases[i].output, output); + } +} + TEST(StringUtilTest, ContainsOnlyChars) { // Providing an empty list of characters should return false but for the empty // string. |