diff options
-rw-r--r-- | base/string_split.cc | 11 | ||||
-rw-r--r-- | base/string_split_unittest.cc | 14 | ||||
-rw-r--r-- | base/string_util_unittest.cc | 5 |
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"); |