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; |