summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--base/string_split.cc11
-rw-r--r--base/string_split_unittest.cc14
-rw-r--r--base/string_util_unittest.cc5
3 files changed, 26 insertions, 4 deletions
diff --git a/base/string_split.cc b/base/string_split.cc
index 4494d25..2b4deb5 100644
--- a/base/string_split.cc
+++ b/base/string_split.cc
@@ -15,7 +15,7 @@ bool SplitStringIntoKeyValues(
key->clear();
values->clear();
- // find the key string
+ // Find the key string.
size_t end_key_pos = line.find_first_of(key_value_delimiter);
if (end_key_pos == std::string::npos) {
DLOG(INFO) << "cannot parse key from line: " << line;
@@ -23,7 +23,7 @@ bool SplitStringIntoKeyValues(
}
key->assign(line, 0, end_key_pos);
- // find the values string
+ // Find the values string.
std::string remains(line, end_key_pos, line.size() - end_key_pos);
size_t begin_values_pos = remains.find_first_not_of(key_value_delimiter);
if (begin_values_pos == std::string::npos) {
@@ -33,7 +33,7 @@ bool SplitStringIntoKeyValues(
std::string values_string(remains, begin_values_pos,
remains.size() - begin_values_pos);
- // construct the values vector
+ // Construct the values vector.
values->push_back(values_string);
return true;
}
@@ -50,6 +50,11 @@ bool SplitStringIntoKeyValuePairs(
bool success = true;
for (size_t i = 0; i < pairs.size(); ++i) {
+ // Empty pair. SplitStringIntoKeyValues is more strict about an empty pair
+ // line, so continue with the next pair.
+ if (pairs[i].empty())
+ continue;
+
std::string key;
std::vector<std::string> value;
if (!SplitStringIntoKeyValues(pairs[i],
diff --git a/base/string_split_unittest.cc b/base/string_split_unittest.cc
index 984e6e8..820f74b 100644
--- a/base/string_split_unittest.cc
+++ b/base/string_split_unittest.cc
@@ -85,7 +85,7 @@ class SplitStringIntoKeyValuePairsTest : public testing::Test {
std::vector<std::pair<std::string, std::string> > kv_pairs;
};
-TEST_F(SplitStringIntoKeyValuePairsTest, DISABLED_EmptyString) {
+TEST_F(SplitStringIntoKeyValuePairsTest, EmptyString) {
EXPECT_TRUE(SplitStringIntoKeyValuePairs("",
':', // Key-value delimiters
',', // Key-value pair delims
@@ -93,6 +93,18 @@ TEST_F(SplitStringIntoKeyValuePairsTest, DISABLED_EmptyString) {
EXPECT_TRUE(kv_pairs.empty());
}
+TEST_F(SplitStringIntoKeyValuePairsTest, EmptySecondPair) {
+ EXPECT_TRUE(SplitStringIntoKeyValuePairs("key1:value1,,key3:value3",
+ ':', // Key-value delimiters
+ ',', // Key-value pair delims
+ &kv_pairs));
+ ASSERT_EQ(2U, kv_pairs.size());
+ EXPECT_EQ("key1", kv_pairs[0].first);
+ EXPECT_EQ("value1", kv_pairs[0].second);
+ EXPECT_EQ("key3", kv_pairs[1].first);
+ EXPECT_EQ("value3", kv_pairs[1].second);
+}
+
TEST_F(SplitStringIntoKeyValuePairsTest, EmptySecondValue) {
EXPECT_FALSE(SplitStringIntoKeyValuePairs("key1:value1 , key2:",
':', // Key-value delimiters
diff --git a/base/string_util_unittest.cc b/base/string_util_unittest.cc
index 4602344..5d41cb0 100644
--- a/base/string_util_unittest.cc
+++ b/base/string_util_unittest.cc
@@ -998,6 +998,11 @@ TEST(StringUtilTest, Invalid) {
TEST(StringUtilTest, SplitString) {
std::vector<std::wstring> r;
+ SplitString(L"", L',', &r);
+ ASSERT_EQ(1U, r.size());
+ EXPECT_EQ(r[0], L"");
+ r.clear();
+
SplitString(L"a,b,c", L',', &r);
ASSERT_EQ(3U, r.size());
EXPECT_EQ(r[0], L"a");