diff options
author | smckay@chromium.org <smckay@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2012-08-27 22:58:36 +0000 |
---|---|---|
committer | smckay@chromium.org <smckay@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2012-08-27 22:58:36 +0000 |
commit | a58f56cd71045e13fef41ac1faf61070dbf882a4 (patch) | |
tree | 3656a4dd25e2268746a51c537ef52918b1023644 | |
parent | 6cafe35a10c46e205a56dfe7208c1e40781dcdb8 (diff) | |
download | chromium_src-a58f56cd71045e13fef41ac1faf61070dbf882a4.zip chromium_src-a58f56cd71045e13fef41ac1faf61070dbf882a4.tar.gz chromium_src-a58f56cd71045e13fef41ac1faf61070dbf882a4.tar.bz2 |
Add support for joining strings on strings rather than just chars.
BUG=
Review URL: https://chromiumcodereview.appspot.com/10828217
git-svn-id: svn://svn.chromium.org/chrome/trunk/src@153568 0039d316-1c4b-4281-b951-d872f2087c98
-rw-r--r-- | base/string_util.cc | 17 | ||||
-rw-r--r-- | base/string_util.h | 8 | ||||
-rw-r--r-- | base/string_util_unittest.cc | 38 |
3 files changed, 59 insertions, 4 deletions
diff --git a/base/string_util.cc b/base/string_util.cc index 2eecb79..9e3422d 100644 --- a/base/string_util.cc +++ b/base/string_util.cc @@ -750,8 +750,7 @@ size_t Tokenize(const base::StringPiece& str, } template<typename STR> -static STR JoinStringT(const std::vector<STR>& parts, - typename STR::value_type sep) { +static STR JoinStringT(const std::vector<STR>& parts, const STR& sep) { if (parts.empty()) return STR(); @@ -768,11 +767,21 @@ static STR JoinStringT(const std::vector<STR>& parts, } std::string JoinString(const std::vector<std::string>& parts, char sep) { - return JoinStringT(parts, sep); + return JoinStringT(parts, std::string(1, sep)); } string16 JoinString(const std::vector<string16>& parts, char16 sep) { - return JoinStringT(parts, sep); + return JoinStringT(parts, string16(1, sep)); +} + +std::string JoinString(const std::vector<std::string>& parts, + const std::string& separator) { + return JoinStringT(parts, separator); +} + +string16 JoinString(const std::vector<string16>& parts, + const string16& separator) { + return JoinStringT(parts, separator); } template<class FormatStringType, class OutStringType> diff --git a/base/string_util.h b/base/string_util.h index 428550b..367eaa8 100644 --- a/base/string_util.h +++ b/base/string_util.h @@ -508,6 +508,14 @@ BASE_EXPORT string16 JoinString(const std::vector<string16>& parts, char16 s); BASE_EXPORT std::string JoinString( const std::vector<std::string>& parts, char s); +// Join |parts| using |separator|. +BASE_EXPORT std::string JoinString( + const std::vector<std::string>& parts, + const std::string& separator); +BASE_EXPORT string16 JoinString( + const std::vector<string16>& parts, + const string16& separator); + // Replace $1-$2-$3..$9 in the format string with |a|-|b|-|c|..|i| respectively. // Additionally, any number of consecutive '$' characters is replaced by that // number less one. Eg $$->$, $$$->$$, etc. The offsets parameter here can be diff --git a/base/string_util_unittest.cc b/base/string_util_unittest.cc index 5c51c2a..d36b955 100644 --- a/base/string_util_unittest.cc +++ b/base/string_util_unittest.cc @@ -767,6 +767,44 @@ TEST(StringUtilTest, JoinString) { EXPECT_EQ("a|b|c|| ", JoinString(in, '|')); } +// Test for JoinString overloaded with std::string separator +TEST(StringUtilTest, JoinStringWithString) { + std::string separator(", "); + std::vector<std::string> parts; + EXPECT_EQ(std::string(), JoinString(parts, separator)); + + parts.push_back("a"); + EXPECT_EQ("a", JoinString(parts, separator)); + + parts.push_back("b"); + parts.push_back("c"); + EXPECT_EQ("a, b, c", JoinString(parts, separator)); + + parts.push_back(""); + EXPECT_EQ("a, b, c, ", JoinString(parts, separator)); + parts.push_back(" "); + EXPECT_EQ("a|b|c|| ", JoinString(parts, "|")); +} + +// Test for JoinString overloaded with string16 separator +TEST(StringUtilTest, JoinStringWithString16) { + string16 separator = ASCIIToUTF16(", "); + std::vector<string16> parts; + EXPECT_EQ(string16(), JoinString(parts, separator)); + + parts.push_back(ASCIIToUTF16("a")); + EXPECT_EQ(ASCIIToUTF16("a"), JoinString(parts, separator)); + + parts.push_back(ASCIIToUTF16("b")); + parts.push_back(ASCIIToUTF16("c")); + EXPECT_EQ(ASCIIToUTF16("a, b, c"), JoinString(parts, separator)); + + parts.push_back(ASCIIToUTF16("")); + EXPECT_EQ(ASCIIToUTF16("a, b, c, "), JoinString(parts, separator)); + parts.push_back(ASCIIToUTF16(" ")); + EXPECT_EQ(ASCIIToUTF16("a|b|c|| "), JoinString(parts, ASCIIToUTF16("|"))); +} + TEST(StringUtilTest, StartsWith) { EXPECT_TRUE(StartsWithASCII("javascript:url", "javascript", true)); EXPECT_FALSE(StartsWithASCII("JavaScript:url", "javascript", true)); |