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