summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorsmckay@chromium.org <smckay@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2012-08-27 22:58:36 +0000
committersmckay@chromium.org <smckay@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2012-08-27 22:58:36 +0000
commita58f56cd71045e13fef41ac1faf61070dbf882a4 (patch)
tree3656a4dd25e2268746a51c537ef52918b1023644
parent6cafe35a10c46e205a56dfe7208c1e40781dcdb8 (diff)
downloadchromium_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.cc17
-rw-r--r--base/string_util.h8
-rw-r--r--base/string_util_unittest.cc38
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));