Chromium Code Reviews| Index: base/strings/string_split_unittest.cc |
| diff --git a/base/strings/string_split_unittest.cc b/base/strings/string_split_unittest.cc |
| index eb69b68fcbd67f7aa9e4b92013c139fce5925eb2..58a5aac86770b0f59f1f9be8b67a2cc271511608 100644 |
| --- a/base/strings/string_split_unittest.cc |
| +++ b/base/strings/string_split_unittest.cc |
| @@ -29,122 +29,131 @@ void SplitString(const std::wstring& str, |
| } // anonymous namespace |
| -class SplitStringIntoKeyValuesTest : public testing::Test { |
|
Mark Mentovai
2014/03/06 17:44:31
This change gets rid of the SplitStringIntoKeyValu
pneubeck (no reviews)
2014/03/06 18:33:21
Done.
|
| +class SplitStringIntoKeyValuePairsTest : public testing::Test { |
| protected: |
| - std::string key; |
| - std::vector<std::string> values; |
| + std::vector<std::pair<std::string, std::string> > kv_pairs; |
| }; |
| -TEST_F(SplitStringIntoKeyValuesTest, EmptyInputMultipleValues) { |
| - EXPECT_FALSE(SplitStringIntoKeyValues(std::string(), // Empty input |
| - '\t', // Key separators |
| - &key, |
| - &values)); |
| - EXPECT_TRUE(key.empty()); |
| - EXPECT_TRUE(values.empty()); |
| -} |
| - |
| -TEST_F(SplitStringIntoKeyValuesTest, EmptyValueInputMultipleValues) { |
| - EXPECT_FALSE(SplitStringIntoKeyValues("key_with_no_value\t", |
| - '\t', // Key separators |
| - &key, &values)); |
| - EXPECT_EQ("key_with_no_value", key); |
| - EXPECT_TRUE(values.empty()); |
| -} |
| - |
| -TEST_F(SplitStringIntoKeyValuesTest, EmptyKeyInputMultipleValues) { |
| - EXPECT_TRUE(SplitStringIntoKeyValues("\tvalue for empty key", |
| - '\t', // Key separators |
| - &key, &values)); |
| - EXPECT_TRUE(key.empty()); |
| - ASSERT_EQ(1U, values.size()); |
| +TEST_F(SplitStringIntoKeyValuePairsTest, EmptyString) { |
| + EXPECT_TRUE(SplitStringIntoKeyValuePairs(std::string(), |
| + ':', // Key-value delimiter |
| + ',', // Key-value pair delimiter |
| + &kv_pairs)); |
| + EXPECT_TRUE(kv_pairs.empty()); |
| } |
| -TEST_F(SplitStringIntoKeyValuesTest, KeyWithMultipleValues) { |
| - EXPECT_TRUE(SplitStringIntoKeyValues("key1\tvalue1, value2 value3", |
| - '\t', // Key separators |
| - &key, &values)); |
| - EXPECT_EQ("key1", key); |
| - ASSERT_EQ(1U, values.size()); |
| - EXPECT_EQ("value1, value2 value3", values[0]); |
| +TEST_F(SplitStringIntoKeyValuePairsTest, MissingKeyValueDelimiter) { |
| + EXPECT_FALSE(SplitStringIntoKeyValuePairs("key1,key2:value2", |
| + ':', // Key-value delimiter |
| + ',', // Key-value pair delimiter |
| + &kv_pairs)); |
| + ASSERT_EQ(2U, kv_pairs.size()); |
|
Mark Mentovai
2014/03/06 17:44:31
EXPECT_FALSE for the overall SplitStringIntoKeyVal
pneubeck (no reviews)
2014/03/06 18:33:21
I think the behavior of this function is terrible.
|
| + EXPECT_TRUE(kv_pairs[0].first.empty()); |
| + EXPECT_TRUE(kv_pairs[0].second.empty()); |
| + EXPECT_EQ("key2", kv_pairs[1].first); |
| + EXPECT_EQ("value2", kv_pairs[1].second); |
| } |
| -TEST_F(SplitStringIntoKeyValuesTest, EmptyInputSingleValue) { |
| - EXPECT_FALSE(SplitStringIntoKeyValues(std::string(), // Empty input |
| - '\t', // Key separators |
| - &key, |
| - &values)); |
| - EXPECT_TRUE(key.empty()); |
| - EXPECT_TRUE(values.empty()); |
| +TEST_F(SplitStringIntoKeyValuePairsTest, EmptyKeyWithKeyValueDelimiter) { |
| + EXPECT_TRUE(SplitStringIntoKeyValuePairs(":value1,key2:value2", |
| + ':', // Key-value delimiter |
| + ',', // Key-value pair delimiter |
| + &kv_pairs)); |
| + ASSERT_EQ(2U, kv_pairs.size()); |
| + EXPECT_TRUE(kv_pairs[0].first.empty()); |
| + EXPECT_EQ("value1", kv_pairs[0].second); |
| + EXPECT_EQ("key2", kv_pairs[1].first); |
| + EXPECT_EQ("value2", kv_pairs[1].second); |
| } |
| -TEST_F(SplitStringIntoKeyValuesTest, EmptyValueInputSingleValue) { |
| - EXPECT_FALSE(SplitStringIntoKeyValues("key_with_no_value\t", |
| - '\t', // Key separators |
| - &key, &values)); |
| - EXPECT_EQ("key_with_no_value", key); |
| - EXPECT_TRUE(values.empty()); |
| +TEST_F(SplitStringIntoKeyValuePairsTest, TrailingAndLeadingPairDelimiter) { |
| + EXPECT_TRUE(SplitStringIntoKeyValuePairs(",key1:value1,key2:value2,", |
|
Mark Mentovai
2014/03/06 17:44:31
The behavior chosen for this and for the next case
|
| + ':', // Key-value delimiter |
| + ',', // Key-value pair delimiter |
| + &kv_pairs)); |
| + ASSERT_EQ(2U, kv_pairs.size()); |
| + EXPECT_EQ("key1", kv_pairs[0].first); |
| + EXPECT_EQ("value1", kv_pairs[0].second); |
| + EXPECT_EQ("key2", kv_pairs[1].first); |
| + EXPECT_EQ("value2", kv_pairs[1].second); |
| } |
| -TEST_F(SplitStringIntoKeyValuesTest, EmptyKeyInputSingleValue) { |
| - EXPECT_TRUE(SplitStringIntoKeyValues("\tvalue for empty key", |
| - '\t', // Key separators |
| - &key, &values)); |
| - EXPECT_TRUE(key.empty()); |
| - ASSERT_EQ(1U, values.size()); |
| - EXPECT_EQ("value for empty key", values[0]); |
| +TEST_F(SplitStringIntoKeyValuePairsTest, EmptyPair) { |
| + EXPECT_TRUE(SplitStringIntoKeyValuePairs("key1:value1,,key3:value3", |
| + ':', // Key-value delimiter |
| + ',', // Key-value pair delimiter |
| + &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(SplitStringIntoKeyValuesTest, KeyWithSingleValue) { |
| - EXPECT_TRUE(SplitStringIntoKeyValues("key1\tvalue1, value2 value3", |
| - '\t', // Key separators |
| - &key, &values)); |
| - EXPECT_EQ("key1", key); |
| - ASSERT_EQ(1U, values.size()); |
| - EXPECT_EQ("value1, value2 value3", values[0]); |
| +TEST_F(SplitStringIntoKeyValuePairsTest, EmptyValue) { |
| + EXPECT_FALSE(SplitStringIntoKeyValuePairs("key1:,key2:value2", |
| + ':', // Key-value delimiter |
| + ',', // Key-value pair delimiter |
| + &kv_pairs)); |
| + ASSERT_EQ(2U, kv_pairs.size()); |
| + EXPECT_EQ("key1", kv_pairs[0].first); |
| + EXPECT_EQ("", kv_pairs[0].second); |
| + EXPECT_EQ("key2", kv_pairs[1].first); |
| + EXPECT_EQ("value2", kv_pairs[1].second); |
| } |
| -class SplitStringIntoKeyValuePairsTest : public testing::Test { |
| - protected: |
| - std::vector<std::pair<std::string, std::string> > kv_pairs; |
| -}; |
| - |
| -TEST_F(SplitStringIntoKeyValuePairsTest, EmptyString) { |
| - EXPECT_TRUE(SplitStringIntoKeyValuePairs(std::string(), |
| - ':', // Key-value delimiters |
| - ',', // Key-value pair delims |
| +TEST_F(SplitStringIntoKeyValuePairsTest, UntrimmedWhitespace) { |
| + EXPECT_TRUE(SplitStringIntoKeyValuePairs("key1 : value1", |
| + ':', // Key-value delimiter |
| + ',', // Key-value pair delimiter |
| &kv_pairs)); |
| - EXPECT_TRUE(kv_pairs.empty()); |
| + ASSERT_EQ(1U, kv_pairs.size()); |
| + EXPECT_EQ("key1 ", kv_pairs[0].first); |
| + EXPECT_EQ(" value1", kv_pairs[0].second); |
| } |
| -TEST_F(SplitStringIntoKeyValuePairsTest, EmptySecondPair) { |
| - EXPECT_TRUE(SplitStringIntoKeyValuePairs("key1:value1,,key3:value3", |
| - ':', // Key-value delimiters |
| - ',', // Key-value pair delims |
| +TEST_F(SplitStringIntoKeyValuePairsTest, TrimmedWhitespace) { |
| + EXPECT_TRUE(SplitStringIntoKeyValuePairs("key1:value1 , key2:value2", |
|
Mark Mentovai
2014/03/06 17:44:31
Again, your trimming behaviors are fine, but you h
pneubeck (no reviews)
2014/03/06 18:33:21
Please see the function comment in the next CL.
|
| + ':', // Key-value delimiter |
| + ',', // Key-value pair delimiter |
| &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); |
| + EXPECT_EQ("key2", kv_pairs[1].first); |
| + EXPECT_EQ("value2", kv_pairs[1].second); |
| } |
| -TEST_F(SplitStringIntoKeyValuePairsTest, EmptySecondValue) { |
| - EXPECT_FALSE(SplitStringIntoKeyValuePairs("key1:value1 , key2:", |
| - ':', // Key-value delimiters |
| - ',', // Key-value pair delims |
| - &kv_pairs)); |
| +TEST_F(SplitStringIntoKeyValuePairsTest, MultipleKeyValueDelimiters) { |
| + EXPECT_TRUE(SplitStringIntoKeyValuePairs("key1:::value1,key2:value2", |
| + ':', // Key-value delimiter |
| + ',', // Key-value pair delimiter |
| + &kv_pairs)); |
| ASSERT_EQ(2U, kv_pairs.size()); |
| EXPECT_EQ("key1", kv_pairs[0].first); |
| EXPECT_EQ("value1", kv_pairs[0].second); |
| EXPECT_EQ("key2", kv_pairs[1].first); |
| - EXPECT_EQ("", kv_pairs[1].second); |
| + EXPECT_EQ("value2", kv_pairs[1].second); |
| } |
| +TEST_F(SplitStringIntoKeyValuePairsTest, OnlySplitAtGivenSeparator) { |
| + std::string a("a ?!@#$%^&*()_+:/{}\\\tb"); |
|
Mark Mentovai
2014/03/06 17:44:31
Maybe you should have a \n in there too.
pneubeck (no reviews)
2014/03/06 18:33:21
Done.
|
| + EXPECT_TRUE(SplitStringIntoKeyValuePairs(a + "X" + a + "Y" + a + "X" + a, |
| + 'X', // Key-value delimiter |
| + 'Y', // Key-value pair delimiter |
| + &kv_pairs)); |
| + ASSERT_EQ(2U, kv_pairs.size()); |
| + EXPECT_EQ(a, kv_pairs[0].first); |
| + EXPECT_EQ(a, kv_pairs[0].second); |
| + EXPECT_EQ(a, kv_pairs[1].first); |
| + EXPECT_EQ(a, kv_pairs[1].second); |
| +} |
| + |
| + |
| TEST_F(SplitStringIntoKeyValuePairsTest, DelimiterInValue) { |
| - EXPECT_TRUE(SplitStringIntoKeyValuePairs("key1:va:ue1 , key2:value2", |
| - ':', // Key-value delimiters |
| - ',', // Key-value pair delims |
| + EXPECT_TRUE(SplitStringIntoKeyValuePairs("key1:va:ue1,key2:value2", |
| + ':', // Key-value delimiter |
| + ',', // Key-value pair delimiter |
| &kv_pairs)); |
| ASSERT_EQ(2U, kv_pairs.size()); |
| EXPECT_EQ("key1", kv_pairs[0].first); |
| @@ -160,7 +169,6 @@ TEST(SplitStringUsingSubstrTest, EmptyString) { |
| EXPECT_THAT(results, ElementsAre("")); |
| } |
| -// Test for SplitString |
| TEST(StringUtilTest, SplitString) { |
| std::vector<std::wstring> r; |