Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(3024)

Unified Diff: base/strings/string_split_unittest.cc

Issue 184233009: Extend SplitStringIntoKeyValuePairs unit tests. (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Created 6 years, 10 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
« no previous file with comments | « no previous file | no next file » | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
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;
« no previous file with comments | « no previous file | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698