string_split_unittest.cc revision 731df977c0511bca2206b5f333555b1205ff1f43
154ce6cb5d13f732a3e71aa3555cd3709d5bf3cf5Jesse Wilson// Copyright (c) 2010 The Chromium Authors. All rights reserved.
254ce6cb5d13f732a3e71aa3555cd3709d5bf3cf5Jesse Wilson// Use of this source code is governed by a BSD-style license that can be
354ce6cb5d13f732a3e71aa3555cd3709d5bf3cf5Jesse Wilson// found in the LICENSE file.
454ce6cb5d13f732a3e71aa3555cd3709d5bf3cf5Jesse Wilson
554ce6cb5d13f732a3e71aa3555cd3709d5bf3cf5Jesse Wilson#include "base/string_split.h"
654ce6cb5d13f732a3e71aa3555cd3709d5bf3cf5Jesse Wilson#include "testing/gmock/include/gmock/gmock.h"
754ce6cb5d13f732a3e71aa3555cd3709d5bf3cf5Jesse Wilson#include "testing/gtest/include/gtest/gtest.h"
854ce6cb5d13f732a3e71aa3555cd3709d5bf3cf5Jesse Wilson
954ce6cb5d13f732a3e71aa3555cd3709d5bf3cf5Jesse Wilsonusing ::testing::ElementsAre;
1054ce6cb5d13f732a3e71aa3555cd3709d5bf3cf5Jesse Wilson
1154ce6cb5d13f732a3e71aa3555cd3709d5bf3cf5Jesse Wilsonnamespace base {
1254ce6cb5d13f732a3e71aa3555cd3709d5bf3cf5Jesse Wilson
1354ce6cb5d13f732a3e71aa3555cd3709d5bf3cf5Jesse Wilsonclass SplitStringIntoKeyValuesTest : public testing::Test {
1454ce6cb5d13f732a3e71aa3555cd3709d5bf3cf5Jesse Wilson protected:
1554ce6cb5d13f732a3e71aa3555cd3709d5bf3cf5Jesse Wilson  std::string key;
1654ce6cb5d13f732a3e71aa3555cd3709d5bf3cf5Jesse Wilson  std::vector<std::string> values;
1754ce6cb5d13f732a3e71aa3555cd3709d5bf3cf5Jesse Wilson};
1854ce6cb5d13f732a3e71aa3555cd3709d5bf3cf5Jesse Wilson
1954ce6cb5d13f732a3e71aa3555cd3709d5bf3cf5Jesse WilsonTEST_F(SplitStringIntoKeyValuesTest, EmptyInputMultipleValues) {
2054ce6cb5d13f732a3e71aa3555cd3709d5bf3cf5Jesse Wilson  EXPECT_FALSE(SplitStringIntoKeyValues("",     // Empty input
2154ce6cb5d13f732a3e71aa3555cd3709d5bf3cf5Jesse Wilson                                        '\t',   // Key separators
2254ce6cb5d13f732a3e71aa3555cd3709d5bf3cf5Jesse Wilson                                        &key, &values));
2354ce6cb5d13f732a3e71aa3555cd3709d5bf3cf5Jesse Wilson  EXPECT_TRUE(key.empty());
243b406d4de9b5f0f1caa990f079075eb0bfc5220aJeff Sharkey  EXPECT_TRUE(values.empty());
2554ce6cb5d13f732a3e71aa3555cd3709d5bf3cf5Jesse Wilson}
2654ce6cb5d13f732a3e71aa3555cd3709d5bf3cf5Jesse Wilson
2754ce6cb5d13f732a3e71aa3555cd3709d5bf3cf5Jesse WilsonTEST_F(SplitStringIntoKeyValuesTest, EmptyValueInputMultipleValues) {
2854ce6cb5d13f732a3e71aa3555cd3709d5bf3cf5Jesse Wilson  EXPECT_FALSE(SplitStringIntoKeyValues("key_with_no_value\t",
2954ce6cb5d13f732a3e71aa3555cd3709d5bf3cf5Jesse Wilson                                        '\t',  // Key separators
3054ce6cb5d13f732a3e71aa3555cd3709d5bf3cf5Jesse Wilson                                        &key, &values));
3154ce6cb5d13f732a3e71aa3555cd3709d5bf3cf5Jesse Wilson  EXPECT_EQ("key_with_no_value", key);
3254ce6cb5d13f732a3e71aa3555cd3709d5bf3cf5Jesse Wilson  EXPECT_TRUE(values.empty());
3354ce6cb5d13f732a3e71aa3555cd3709d5bf3cf5Jesse Wilson}
3454ce6cb5d13f732a3e71aa3555cd3709d5bf3cf5Jesse Wilson
3554ce6cb5d13f732a3e71aa3555cd3709d5bf3cf5Jesse WilsonTEST_F(SplitStringIntoKeyValuesTest, EmptyKeyInputMultipleValues) {
3654ce6cb5d13f732a3e71aa3555cd3709d5bf3cf5Jesse Wilson  EXPECT_TRUE(SplitStringIntoKeyValues("\tvalue for empty key",
3754ce6cb5d13f732a3e71aa3555cd3709d5bf3cf5Jesse Wilson                                       '\t',  // Key separators
383b406d4de9b5f0f1caa990f079075eb0bfc5220aJeff Sharkey                                       &key, &values));
3954ce6cb5d13f732a3e71aa3555cd3709d5bf3cf5Jesse Wilson  EXPECT_TRUE(key.empty());
4054ce6cb5d13f732a3e71aa3555cd3709d5bf3cf5Jesse Wilson  ASSERT_EQ(1U, values.size());
4154ce6cb5d13f732a3e71aa3555cd3709d5bf3cf5Jesse Wilson}
4254ce6cb5d13f732a3e71aa3555cd3709d5bf3cf5Jesse Wilson
4354ce6cb5d13f732a3e71aa3555cd3709d5bf3cf5Jesse WilsonTEST_F(SplitStringIntoKeyValuesTest, KeyWithMultipleValues) {
4454ce6cb5d13f732a3e71aa3555cd3709d5bf3cf5Jesse Wilson  EXPECT_TRUE(SplitStringIntoKeyValues("key1\tvalue1,   value2   value3",
4554ce6cb5d13f732a3e71aa3555cd3709d5bf3cf5Jesse Wilson                                       '\t',  // Key separators
4654ce6cb5d13f732a3e71aa3555cd3709d5bf3cf5Jesse Wilson                                       &key, &values));
4754ce6cb5d13f732a3e71aa3555cd3709d5bf3cf5Jesse Wilson  EXPECT_EQ("key1", key);
4854ce6cb5d13f732a3e71aa3555cd3709d5bf3cf5Jesse Wilson  ASSERT_EQ(1U, values.size());
4954ce6cb5d13f732a3e71aa3555cd3709d5bf3cf5Jesse Wilson  EXPECT_EQ("value1,   value2   value3", values[0]);
5054ce6cb5d13f732a3e71aa3555cd3709d5bf3cf5Jesse Wilson}
5154ce6cb5d13f732a3e71aa3555cd3709d5bf3cf5Jesse Wilson
5254ce6cb5d13f732a3e71aa3555cd3709d5bf3cf5Jesse WilsonTEST_F(SplitStringIntoKeyValuesTest, EmptyInputSingleValue) {
5354ce6cb5d13f732a3e71aa3555cd3709d5bf3cf5Jesse Wilson  EXPECT_FALSE(SplitStringIntoKeyValues("",     // Empty input
5454ce6cb5d13f732a3e71aa3555cd3709d5bf3cf5Jesse Wilson                                        '\t',   // Key separators
5554ce6cb5d13f732a3e71aa3555cd3709d5bf3cf5Jesse Wilson                                        &key, &values));
5654ce6cb5d13f732a3e71aa3555cd3709d5bf3cf5Jesse Wilson  EXPECT_TRUE(key.empty());
5754ce6cb5d13f732a3e71aa3555cd3709d5bf3cf5Jesse Wilson  EXPECT_TRUE(values.empty());
5854ce6cb5d13f732a3e71aa3555cd3709d5bf3cf5Jesse Wilson}
5954ce6cb5d13f732a3e71aa3555cd3709d5bf3cf5Jesse Wilson
6054ce6cb5d13f732a3e71aa3555cd3709d5bf3cf5Jesse WilsonTEST_F(SplitStringIntoKeyValuesTest, EmptyValueInputSingleValue) {
6154ce6cb5d13f732a3e71aa3555cd3709d5bf3cf5Jesse Wilson  EXPECT_FALSE(SplitStringIntoKeyValues("key_with_no_value\t",
6254ce6cb5d13f732a3e71aa3555cd3709d5bf3cf5Jesse Wilson                                        '\t',  // Key separators
6354ce6cb5d13f732a3e71aa3555cd3709d5bf3cf5Jesse Wilson                                        &key, &values));
6454ce6cb5d13f732a3e71aa3555cd3709d5bf3cf5Jesse Wilson  EXPECT_EQ("key_with_no_value", key);
6554ce6cb5d13f732a3e71aa3555cd3709d5bf3cf5Jesse Wilson  EXPECT_TRUE(values.empty());
6654ce6cb5d13f732a3e71aa3555cd3709d5bf3cf5Jesse Wilson}
6754ce6cb5d13f732a3e71aa3555cd3709d5bf3cf5Jesse Wilson
6854ce6cb5d13f732a3e71aa3555cd3709d5bf3cf5Jesse WilsonTEST_F(SplitStringIntoKeyValuesTest, EmptyKeyInputSingleValue) {
6954ce6cb5d13f732a3e71aa3555cd3709d5bf3cf5Jesse Wilson  EXPECT_TRUE(SplitStringIntoKeyValues("\tvalue for empty key",
7054ce6cb5d13f732a3e71aa3555cd3709d5bf3cf5Jesse Wilson                                       '\t',  // Key separators
7154ce6cb5d13f732a3e71aa3555cd3709d5bf3cf5Jesse Wilson                                       &key, &values));
7254ce6cb5d13f732a3e71aa3555cd3709d5bf3cf5Jesse Wilson  EXPECT_TRUE(key.empty());
7354ce6cb5d13f732a3e71aa3555cd3709d5bf3cf5Jesse Wilson  ASSERT_EQ(1U, values.size());
7454ce6cb5d13f732a3e71aa3555cd3709d5bf3cf5Jesse Wilson  EXPECT_EQ("value for empty key", values[0]);
7554ce6cb5d13f732a3e71aa3555cd3709d5bf3cf5Jesse Wilson}
7654ce6cb5d13f732a3e71aa3555cd3709d5bf3cf5Jesse Wilson
7754ce6cb5d13f732a3e71aa3555cd3709d5bf3cf5Jesse WilsonTEST_F(SplitStringIntoKeyValuesTest, KeyWithSingleValue) {
7854ce6cb5d13f732a3e71aa3555cd3709d5bf3cf5Jesse Wilson  EXPECT_TRUE(SplitStringIntoKeyValues("key1\tvalue1,   value2   value3",
7954ce6cb5d13f732a3e71aa3555cd3709d5bf3cf5Jesse Wilson                                       '\t',  // Key separators
8054ce6cb5d13f732a3e71aa3555cd3709d5bf3cf5Jesse Wilson                                       &key, &values));
8154ce6cb5d13f732a3e71aa3555cd3709d5bf3cf5Jesse Wilson  EXPECT_EQ("key1", key);
8254ce6cb5d13f732a3e71aa3555cd3709d5bf3cf5Jesse Wilson  ASSERT_EQ(1U, values.size());
8354ce6cb5d13f732a3e71aa3555cd3709d5bf3cf5Jesse Wilson  EXPECT_EQ("value1,   value2   value3", values[0]);
8454ce6cb5d13f732a3e71aa3555cd3709d5bf3cf5Jesse Wilson}
8554ce6cb5d13f732a3e71aa3555cd3709d5bf3cf5Jesse Wilson
8654ce6cb5d13f732a3e71aa3555cd3709d5bf3cf5Jesse Wilsonclass SplitStringIntoKeyValuePairsTest : public testing::Test {
8754ce6cb5d13f732a3e71aa3555cd3709d5bf3cf5Jesse Wilson protected:
8854ce6cb5d13f732a3e71aa3555cd3709d5bf3cf5Jesse Wilson  std::vector<std::pair<std::string, std::string> > kv_pairs;
893b406d4de9b5f0f1caa990f079075eb0bfc5220aJeff Sharkey};
903b406d4de9b5f0f1caa990f079075eb0bfc5220aJeff Sharkey
913b406d4de9b5f0f1caa990f079075eb0bfc5220aJeff SharkeyTEST_F(SplitStringIntoKeyValuePairsTest, EmptyString) {
923b406d4de9b5f0f1caa990f079075eb0bfc5220aJeff Sharkey  EXPECT_TRUE(SplitStringIntoKeyValuePairs("",
933b406d4de9b5f0f1caa990f079075eb0bfc5220aJeff Sharkey                                           ':',   // Key-value delimiters
943b406d4de9b5f0f1caa990f079075eb0bfc5220aJeff Sharkey                                           ',',   // Key-value pair delims
953b406d4de9b5f0f1caa990f079075eb0bfc5220aJeff Sharkey                                           &kv_pairs));
963b406d4de9b5f0f1caa990f079075eb0bfc5220aJeff Sharkey  EXPECT_TRUE(kv_pairs.empty());
973b406d4de9b5f0f1caa990f079075eb0bfc5220aJeff Sharkey}
983b406d4de9b5f0f1caa990f079075eb0bfc5220aJeff Sharkey
993b406d4de9b5f0f1caa990f079075eb0bfc5220aJeff SharkeyTEST_F(SplitStringIntoKeyValuePairsTest, EmptySecondPair) {
1003b406d4de9b5f0f1caa990f079075eb0bfc5220aJeff Sharkey  EXPECT_TRUE(SplitStringIntoKeyValuePairs("key1:value1,,key3:value3",
1013b406d4de9b5f0f1caa990f079075eb0bfc5220aJeff Sharkey                                           ':',   // Key-value delimiters
1023b406d4de9b5f0f1caa990f079075eb0bfc5220aJeff Sharkey                                           ',',   // Key-value pair delims
1033b406d4de9b5f0f1caa990f079075eb0bfc5220aJeff Sharkey                                           &kv_pairs));
1043b406d4de9b5f0f1caa990f079075eb0bfc5220aJeff Sharkey  ASSERT_EQ(2U, kv_pairs.size());
1053b406d4de9b5f0f1caa990f079075eb0bfc5220aJeff Sharkey  EXPECT_EQ("key1", kv_pairs[0].first);
1063b406d4de9b5f0f1caa990f079075eb0bfc5220aJeff Sharkey  EXPECT_EQ("value1", kv_pairs[0].second);
1073b406d4de9b5f0f1caa990f079075eb0bfc5220aJeff Sharkey  EXPECT_EQ("key3", kv_pairs[1].first);
1083b406d4de9b5f0f1caa990f079075eb0bfc5220aJeff Sharkey  EXPECT_EQ("value3", kv_pairs[1].second);
10954ce6cb5d13f732a3e71aa3555cd3709d5bf3cf5Jesse Wilson}
11054ce6cb5d13f732a3e71aa3555cd3709d5bf3cf5Jesse Wilson
11154ce6cb5d13f732a3e71aa3555cd3709d5bf3cf5Jesse WilsonTEST_F(SplitStringIntoKeyValuePairsTest, EmptySecondValue) {
11254ce6cb5d13f732a3e71aa3555cd3709d5bf3cf5Jesse Wilson  EXPECT_FALSE(SplitStringIntoKeyValuePairs("key1:value1 , key2:",
11354ce6cb5d13f732a3e71aa3555cd3709d5bf3cf5Jesse Wilson                                            ':',   // Key-value delimiters
11454ce6cb5d13f732a3e71aa3555cd3709d5bf3cf5Jesse Wilson                                            ',',   // Key-value pair delims
11554ce6cb5d13f732a3e71aa3555cd3709d5bf3cf5Jesse Wilson                                            &kv_pairs));
11654ce6cb5d13f732a3e71aa3555cd3709d5bf3cf5Jesse Wilson  ASSERT_EQ(2U, kv_pairs.size());
11754ce6cb5d13f732a3e71aa3555cd3709d5bf3cf5Jesse Wilson  EXPECT_EQ("key1", kv_pairs[0].first);
11854ce6cb5d13f732a3e71aa3555cd3709d5bf3cf5Jesse Wilson  EXPECT_EQ("value1", kv_pairs[0].second);
11954ce6cb5d13f732a3e71aa3555cd3709d5bf3cf5Jesse Wilson  EXPECT_EQ("key2", kv_pairs[1].first);
12054ce6cb5d13f732a3e71aa3555cd3709d5bf3cf5Jesse Wilson  EXPECT_EQ("", kv_pairs[1].second);
12154ce6cb5d13f732a3e71aa3555cd3709d5bf3cf5Jesse Wilson}
12254ce6cb5d13f732a3e71aa3555cd3709d5bf3cf5Jesse Wilson
12354ce6cb5d13f732a3e71aa3555cd3709d5bf3cf5Jesse WilsonTEST_F(SplitStringIntoKeyValuePairsTest, DelimiterInValue) {
12454ce6cb5d13f732a3e71aa3555cd3709d5bf3cf5Jesse Wilson  EXPECT_TRUE(SplitStringIntoKeyValuePairs("key1:va:ue1 , key2:value2",
12554ce6cb5d13f732a3e71aa3555cd3709d5bf3cf5Jesse Wilson                                           ':',   // Key-value delimiters
12654ce6cb5d13f732a3e71aa3555cd3709d5bf3cf5Jesse Wilson                                           ',',   // Key-value pair delims
12754ce6cb5d13f732a3e71aa3555cd3709d5bf3cf5Jesse Wilson                                           &kv_pairs));
12854ce6cb5d13f732a3e71aa3555cd3709d5bf3cf5Jesse Wilson  ASSERT_EQ(2U, kv_pairs.size());
12954ce6cb5d13f732a3e71aa3555cd3709d5bf3cf5Jesse Wilson  EXPECT_EQ("key1", kv_pairs[0].first);
13054ce6cb5d13f732a3e71aa3555cd3709d5bf3cf5Jesse Wilson  EXPECT_EQ("va:ue1", kv_pairs[0].second);
13154ce6cb5d13f732a3e71aa3555cd3709d5bf3cf5Jesse Wilson  EXPECT_EQ("key2", kv_pairs[1].first);
13254ce6cb5d13f732a3e71aa3555cd3709d5bf3cf5Jesse Wilson  EXPECT_EQ("value2", kv_pairs[1].second);
13354ce6cb5d13f732a3e71aa3555cd3709d5bf3cf5Jesse Wilson}
13454ce6cb5d13f732a3e71aa3555cd3709d5bf3cf5Jesse Wilson
13554ce6cb5d13f732a3e71aa3555cd3709d5bf3cf5Jesse WilsonTEST(SplitStringUsingSubstrTest, EmptyString) {
13654ce6cb5d13f732a3e71aa3555cd3709d5bf3cf5Jesse Wilson  std::vector<std::string> results;
13754ce6cb5d13f732a3e71aa3555cd3709d5bf3cf5Jesse Wilson  SplitStringUsingSubstr("", "DELIMITER", &results);
13854ce6cb5d13f732a3e71aa3555cd3709d5bf3cf5Jesse Wilson  ASSERT_EQ(1u, results.size());
13954ce6cb5d13f732a3e71aa3555cd3709d5bf3cf5Jesse Wilson  EXPECT_THAT(results, ElementsAre(""));
14054ce6cb5d13f732a3e71aa3555cd3709d5bf3cf5Jesse Wilson}
14154ce6cb5d13f732a3e71aa3555cd3709d5bf3cf5Jesse Wilson
14254ce6cb5d13f732a3e71aa3555cd3709d5bf3cf5Jesse Wilson// Test for SplitString
14354ce6cb5d13f732a3e71aa3555cd3709d5bf3cf5Jesse WilsonTEST(StringUtilTest, SplitString) {
14454ce6cb5d13f732a3e71aa3555cd3709d5bf3cf5Jesse Wilson  std::vector<std::wstring> r;
14554ce6cb5d13f732a3e71aa3555cd3709d5bf3cf5Jesse Wilson
14654ce6cb5d13f732a3e71aa3555cd3709d5bf3cf5Jesse Wilson  SplitString(L"", L',', &r);
14754ce6cb5d13f732a3e71aa3555cd3709d5bf3cf5Jesse Wilson  ASSERT_EQ(1U, r.size());
14854ce6cb5d13f732a3e71aa3555cd3709d5bf3cf5Jesse Wilson  EXPECT_EQ(r[0], L"");
14954ce6cb5d13f732a3e71aa3555cd3709d5bf3cf5Jesse Wilson  r.clear();
15054ce6cb5d13f732a3e71aa3555cd3709d5bf3cf5Jesse Wilson
15154ce6cb5d13f732a3e71aa3555cd3709d5bf3cf5Jesse Wilson  SplitString(L"a,b,c", L',', &r);
15254ce6cb5d13f732a3e71aa3555cd3709d5bf3cf5Jesse Wilson  ASSERT_EQ(3U, r.size());
15354ce6cb5d13f732a3e71aa3555cd3709d5bf3cf5Jesse Wilson  EXPECT_EQ(r[0], L"a");
15454ce6cb5d13f732a3e71aa3555cd3709d5bf3cf5Jesse Wilson  EXPECT_EQ(r[1], L"b");
15554ce6cb5d13f732a3e71aa3555cd3709d5bf3cf5Jesse Wilson  EXPECT_EQ(r[2], L"c");
15654ce6cb5d13f732a3e71aa3555cd3709d5bf3cf5Jesse Wilson  r.clear();
15754ce6cb5d13f732a3e71aa3555cd3709d5bf3cf5Jesse Wilson
15854ce6cb5d13f732a3e71aa3555cd3709d5bf3cf5Jesse Wilson  SplitString(L"a, b, c", L',', &r);
15954ce6cb5d13f732a3e71aa3555cd3709d5bf3cf5Jesse Wilson  ASSERT_EQ(3U, r.size());
16054ce6cb5d13f732a3e71aa3555cd3709d5bf3cf5Jesse Wilson  EXPECT_EQ(r[0], L"a");
16154ce6cb5d13f732a3e71aa3555cd3709d5bf3cf5Jesse Wilson  EXPECT_EQ(r[1], L"b");
16254ce6cb5d13f732a3e71aa3555cd3709d5bf3cf5Jesse Wilson  EXPECT_EQ(r[2], L"c");
16354ce6cb5d13f732a3e71aa3555cd3709d5bf3cf5Jesse Wilson  r.clear();
16454ce6cb5d13f732a3e71aa3555cd3709d5bf3cf5Jesse Wilson
1653b406d4de9b5f0f1caa990f079075eb0bfc5220aJeff Sharkey  SplitString(L"a,,c", L',', &r);
1663b406d4de9b5f0f1caa990f079075eb0bfc5220aJeff Sharkey  ASSERT_EQ(3U, r.size());
1673b406d4de9b5f0f1caa990f079075eb0bfc5220aJeff Sharkey  EXPECT_EQ(r[0], L"a");
1683b406d4de9b5f0f1caa990f079075eb0bfc5220aJeff Sharkey  EXPECT_EQ(r[1], L"");
1693b406d4de9b5f0f1caa990f079075eb0bfc5220aJeff Sharkey  EXPECT_EQ(r[2], L"c");
1703b406d4de9b5f0f1caa990f079075eb0bfc5220aJeff Sharkey  r.clear();
1713b406d4de9b5f0f1caa990f079075eb0bfc5220aJeff Sharkey
1723b406d4de9b5f0f1caa990f079075eb0bfc5220aJeff Sharkey  SplitString(L"", L'*', &r);
1733b406d4de9b5f0f1caa990f079075eb0bfc5220aJeff Sharkey  ASSERT_EQ(1U, r.size());
1743b406d4de9b5f0f1caa990f079075eb0bfc5220aJeff Sharkey  EXPECT_EQ(r[0], L"");
1753b406d4de9b5f0f1caa990f079075eb0bfc5220aJeff Sharkey  r.clear();
1763b406d4de9b5f0f1caa990f079075eb0bfc5220aJeff Sharkey
17754ce6cb5d13f732a3e71aa3555cd3709d5bf3cf5Jesse Wilson  SplitString(L"foo", L'*', &r);
17854ce6cb5d13f732a3e71aa3555cd3709d5bf3cf5Jesse Wilson  ASSERT_EQ(1U, r.size());
17954ce6cb5d13f732a3e71aa3555cd3709d5bf3cf5Jesse Wilson  EXPECT_EQ(r[0], L"foo");
18054ce6cb5d13f732a3e71aa3555cd3709d5bf3cf5Jesse Wilson  r.clear();
181
182  SplitString(L"foo ,", L',', &r);
183  ASSERT_EQ(2U, r.size());
184  EXPECT_EQ(r[0], L"foo");
185  EXPECT_EQ(r[1], L"");
186  r.clear();
187
188  SplitString(L",", L',', &r);
189  ASSERT_EQ(2U, r.size());
190  EXPECT_EQ(r[0], L"");
191  EXPECT_EQ(r[1], L"");
192  r.clear();
193
194  SplitString(L"\t\ta\t", L'\t', &r);
195  ASSERT_EQ(4U, r.size());
196  EXPECT_EQ(r[0], L"");
197  EXPECT_EQ(r[1], L"");
198  EXPECT_EQ(r[2], L"a");
199  EXPECT_EQ(r[3], L"");
200  r.clear();
201
202  SplitString(L"\ta\t\nb\tcc", L'\n', &r);
203  ASSERT_EQ(2U, r.size());
204  EXPECT_EQ(r[0], L"a");
205  EXPECT_EQ(r[1], L"b\tcc");
206  r.clear();
207}
208
209TEST(SplitStringUsingSubstrTest, StringWithNoDelimiter) {
210  std::vector<std::string> results;
211  SplitStringUsingSubstr("alongwordwithnodelimiter", "DELIMITER", &results);
212  ASSERT_EQ(1u, results.size());
213  EXPECT_THAT(results, ElementsAre("alongwordwithnodelimiter"));
214}
215
216TEST(SplitStringUsingSubstrTest, LeadingDelimitersSkipped) {
217  std::vector<std::string> results;
218  SplitStringUsingSubstr(
219      "DELIMITERDELIMITERDELIMITERoneDELIMITERtwoDELIMITERthree",
220      "DELIMITER",
221      &results);
222  ASSERT_EQ(6u, results.size());
223  EXPECT_THAT(results, ElementsAre("", "", "", "one", "two", "three"));
224}
225
226TEST(SplitStringUsingSubstrTest, ConsecutiveDelimitersSkipped) {
227  std::vector<std::string> results;
228  SplitStringUsingSubstr(
229      "unoDELIMITERDELIMITERDELIMITERdosDELIMITERtresDELIMITERDELIMITERcuatro",
230      "DELIMITER",
231      &results);
232  ASSERT_EQ(7u, results.size());
233  EXPECT_THAT(results, ElementsAre("uno", "", "", "dos", "tres", "", "cuatro"));
234}
235
236TEST(SplitStringUsingSubstrTest, TrailingDelimitersSkipped) {
237  std::vector<std::string> results;
238  SplitStringUsingSubstr(
239      "unDELIMITERdeuxDELIMITERtroisDELIMITERquatreDELIMITERDELIMITERDELIMITER",
240      "DELIMITER",
241      &results);
242  ASSERT_EQ(7u, results.size());
243  EXPECT_THAT(
244      results, ElementsAre("un", "deux", "trois", "quatre", "", "", ""));
245}
246
247TEST(StringSplitTest, StringSplitDontTrim) {
248  std::vector<std::string> r;
249
250  SplitStringDontTrim("\t\ta\t", '\t', &r);
251  ASSERT_EQ(4U, r.size());
252  EXPECT_EQ(r[0], "");
253  EXPECT_EQ(r[1], "");
254  EXPECT_EQ(r[2], "a");
255  EXPECT_EQ(r[3], "");
256  r.clear();
257
258  SplitStringDontTrim("\ta\t\nb\tcc", '\n', &r);
259  ASSERT_EQ(2U, r.size());
260  EXPECT_EQ(r[0], "\ta\t");
261  EXPECT_EQ(r[1], "b\tcc");
262  r.clear();
263}
264
265}  // namespace base
266