14615e0d5aa416ab1a8596bde68f71f7ebe431b86Vitaly Buka// Copyright (c) 2014 The Weave Authors. All rights reserved. 224d6fd54e9b10ae13e09ca91c726a994853def0dVitaly Buka// Use of this source code is governed by a BSD-style license that can be 324d6fd54e9b10ae13e09ca91c726a994853def0dVitaly Buka// found in the LICENSE file. 424d6fd54e9b10ae13e09ca91c726a994853def0dVitaly Buka 52d16dfa768282b29f3fd5a905b52e3393a083e0dStefan Sauer#include "src/string_utils.h" 624d6fd54e9b10ae13e09ca91c726a994853def0dVitaly Buka 724d6fd54e9b10ae13e09ca91c726a994853def0dVitaly Buka#include <list> 824d6fd54e9b10ae13e09ca91c726a994853def0dVitaly Buka#include <set> 924d6fd54e9b10ae13e09ca91c726a994853def0dVitaly Buka#include <string> 1024d6fd54e9b10ae13e09ca91c726a994853def0dVitaly Buka#include <vector> 1124d6fd54e9b10ae13e09ca91c726a994853def0dVitaly Buka 1224d6fd54e9b10ae13e09ca91c726a994853def0dVitaly Buka#include <gtest/gtest.h> 1324d6fd54e9b10ae13e09ca91c726a994853def0dVitaly Buka 1424d6fd54e9b10ae13e09ca91c726a994853def0dVitaly Bukanamespace weave { 1524d6fd54e9b10ae13e09ca91c726a994853def0dVitaly Buka 1624d6fd54e9b10ae13e09ca91c726a994853def0dVitaly BukaTEST(StringUtils, Split) { 1724d6fd54e9b10ae13e09ca91c726a994853def0dVitaly Buka std::vector<std::string> parts; 1824d6fd54e9b10ae13e09ca91c726a994853def0dVitaly Buka 1924d6fd54e9b10ae13e09ca91c726a994853def0dVitaly Buka parts = Split("", ",", false, false); 20739e3577ade0580cafd181d647d637fde813de02Alex Vakulenko EXPECT_EQ(1u, parts.size()); 21739e3577ade0580cafd181d647d637fde813de02Alex Vakulenko EXPECT_EQ("", parts[0]); 22739e3577ade0580cafd181d647d637fde813de02Alex Vakulenko 23739e3577ade0580cafd181d647d637fde813de02Alex Vakulenko parts = Split("", ",", false, true); 2452d006a131c61955e3a8a915d7f22941b3a4eee2Vitaly Buka EXPECT_EQ(0u, parts.size()); 2524d6fd54e9b10ae13e09ca91c726a994853def0dVitaly Buka 2624d6fd54e9b10ae13e09ca91c726a994853def0dVitaly Buka parts = Split("abc", ",", false, false); 2752d006a131c61955e3a8a915d7f22941b3a4eee2Vitaly Buka EXPECT_EQ(1u, parts.size()); 2824d6fd54e9b10ae13e09ca91c726a994853def0dVitaly Buka EXPECT_EQ("abc", parts[0]); 2924d6fd54e9b10ae13e09ca91c726a994853def0dVitaly Buka 3024d6fd54e9b10ae13e09ca91c726a994853def0dVitaly Buka parts = Split(",a,bc , d, ,e, ", ",", true, true); 3152d006a131c61955e3a8a915d7f22941b3a4eee2Vitaly Buka EXPECT_EQ(4u, parts.size()); 3224d6fd54e9b10ae13e09ca91c726a994853def0dVitaly Buka EXPECT_EQ("a", parts[0]); 3324d6fd54e9b10ae13e09ca91c726a994853def0dVitaly Buka EXPECT_EQ("bc", parts[1]); 3424d6fd54e9b10ae13e09ca91c726a994853def0dVitaly Buka EXPECT_EQ("d", parts[2]); 3524d6fd54e9b10ae13e09ca91c726a994853def0dVitaly Buka EXPECT_EQ("e", parts[3]); 3624d6fd54e9b10ae13e09ca91c726a994853def0dVitaly Buka 3724d6fd54e9b10ae13e09ca91c726a994853def0dVitaly Buka parts = Split(",a,bc , d, ,e, ", ",", false, true); 3852d006a131c61955e3a8a915d7f22941b3a4eee2Vitaly Buka EXPECT_EQ(6u, parts.size()); 3924d6fd54e9b10ae13e09ca91c726a994853def0dVitaly Buka EXPECT_EQ("a", parts[0]); 4024d6fd54e9b10ae13e09ca91c726a994853def0dVitaly Buka EXPECT_EQ("bc ", parts[1]); 4124d6fd54e9b10ae13e09ca91c726a994853def0dVitaly Buka EXPECT_EQ(" d", parts[2]); 4224d6fd54e9b10ae13e09ca91c726a994853def0dVitaly Buka EXPECT_EQ(" ", parts[3]); 4324d6fd54e9b10ae13e09ca91c726a994853def0dVitaly Buka EXPECT_EQ("e", parts[4]); 4424d6fd54e9b10ae13e09ca91c726a994853def0dVitaly Buka EXPECT_EQ(" ", parts[5]); 4524d6fd54e9b10ae13e09ca91c726a994853def0dVitaly Buka 4624d6fd54e9b10ae13e09ca91c726a994853def0dVitaly Buka parts = Split(",a,bc , d, ,e, ", ",", true, false); 4752d006a131c61955e3a8a915d7f22941b3a4eee2Vitaly Buka EXPECT_EQ(7u, parts.size()); 4824d6fd54e9b10ae13e09ca91c726a994853def0dVitaly Buka EXPECT_EQ("", parts[0]); 4924d6fd54e9b10ae13e09ca91c726a994853def0dVitaly Buka EXPECT_EQ("a", parts[1]); 5024d6fd54e9b10ae13e09ca91c726a994853def0dVitaly Buka EXPECT_EQ("bc", parts[2]); 5124d6fd54e9b10ae13e09ca91c726a994853def0dVitaly Buka EXPECT_EQ("d", parts[3]); 5224d6fd54e9b10ae13e09ca91c726a994853def0dVitaly Buka EXPECT_EQ("", parts[4]); 5324d6fd54e9b10ae13e09ca91c726a994853def0dVitaly Buka EXPECT_EQ("e", parts[5]); 5424d6fd54e9b10ae13e09ca91c726a994853def0dVitaly Buka EXPECT_EQ("", parts[6]); 5524d6fd54e9b10ae13e09ca91c726a994853def0dVitaly Buka 5624d6fd54e9b10ae13e09ca91c726a994853def0dVitaly Buka parts = Split(",a,bc , d, ,e, ", ",", false, false); 5752d006a131c61955e3a8a915d7f22941b3a4eee2Vitaly Buka EXPECT_EQ(7u, parts.size()); 5824d6fd54e9b10ae13e09ca91c726a994853def0dVitaly Buka EXPECT_EQ("", parts[0]); 5924d6fd54e9b10ae13e09ca91c726a994853def0dVitaly Buka EXPECT_EQ("a", parts[1]); 6024d6fd54e9b10ae13e09ca91c726a994853def0dVitaly Buka EXPECT_EQ("bc ", parts[2]); 6124d6fd54e9b10ae13e09ca91c726a994853def0dVitaly Buka EXPECT_EQ(" d", parts[3]); 6224d6fd54e9b10ae13e09ca91c726a994853def0dVitaly Buka EXPECT_EQ(" ", parts[4]); 6324d6fd54e9b10ae13e09ca91c726a994853def0dVitaly Buka EXPECT_EQ("e", parts[5]); 6424d6fd54e9b10ae13e09ca91c726a994853def0dVitaly Buka EXPECT_EQ(" ", parts[6]); 6524d6fd54e9b10ae13e09ca91c726a994853def0dVitaly Buka 6624d6fd54e9b10ae13e09ca91c726a994853def0dVitaly Buka parts = Split("abc:=xyz", ":=", false, false); 6752d006a131c61955e3a8a915d7f22941b3a4eee2Vitaly Buka EXPECT_EQ(2u, parts.size()); 6824d6fd54e9b10ae13e09ca91c726a994853def0dVitaly Buka EXPECT_EQ("abc", parts[0]); 6924d6fd54e9b10ae13e09ca91c726a994853def0dVitaly Buka EXPECT_EQ("xyz", parts[1]); 7024d6fd54e9b10ae13e09ca91c726a994853def0dVitaly Buka 7124d6fd54e9b10ae13e09ca91c726a994853def0dVitaly Buka parts = Split("abc", "", false, false); 7252d006a131c61955e3a8a915d7f22941b3a4eee2Vitaly Buka EXPECT_EQ(3u, parts.size()); 7324d6fd54e9b10ae13e09ca91c726a994853def0dVitaly Buka EXPECT_EQ("a", parts[0]); 7424d6fd54e9b10ae13e09ca91c726a994853def0dVitaly Buka EXPECT_EQ("b", parts[1]); 7524d6fd54e9b10ae13e09ca91c726a994853def0dVitaly Buka EXPECT_EQ("c", parts[2]); 7624d6fd54e9b10ae13e09ca91c726a994853def0dVitaly Buka} 7724d6fd54e9b10ae13e09ca91c726a994853def0dVitaly Buka 7824d6fd54e9b10ae13e09ca91c726a994853def0dVitaly BukaTEST(StringUtils, SplitAtFirst) { 7924d6fd54e9b10ae13e09ca91c726a994853def0dVitaly Buka std::pair<std::string, std::string> pair; 8024d6fd54e9b10ae13e09ca91c726a994853def0dVitaly Buka 8124d6fd54e9b10ae13e09ca91c726a994853def0dVitaly Buka pair = SplitAtFirst(" 123 : 4 : 56 : 789 ", ":", true); 8224d6fd54e9b10ae13e09ca91c726a994853def0dVitaly Buka EXPECT_EQ("123", pair.first); 8324d6fd54e9b10ae13e09ca91c726a994853def0dVitaly Buka EXPECT_EQ("4 : 56 : 789", pair.second); 8424d6fd54e9b10ae13e09ca91c726a994853def0dVitaly Buka 8524d6fd54e9b10ae13e09ca91c726a994853def0dVitaly Buka pair = SplitAtFirst(" 123 : 4 : 56 : 789 ", ":", false); 8624d6fd54e9b10ae13e09ca91c726a994853def0dVitaly Buka EXPECT_EQ(" 123 ", pair.first); 8724d6fd54e9b10ae13e09ca91c726a994853def0dVitaly Buka EXPECT_EQ(" 4 : 56 : 789 ", pair.second); 8824d6fd54e9b10ae13e09ca91c726a994853def0dVitaly Buka 8924d6fd54e9b10ae13e09ca91c726a994853def0dVitaly Buka pair = SplitAtFirst("", "=", true); 9024d6fd54e9b10ae13e09ca91c726a994853def0dVitaly Buka EXPECT_EQ("", pair.first); 9124d6fd54e9b10ae13e09ca91c726a994853def0dVitaly Buka EXPECT_EQ("", pair.second); 9224d6fd54e9b10ae13e09ca91c726a994853def0dVitaly Buka 9324d6fd54e9b10ae13e09ca91c726a994853def0dVitaly Buka pair = SplitAtFirst("=", "=", true); 9424d6fd54e9b10ae13e09ca91c726a994853def0dVitaly Buka EXPECT_EQ("", pair.first); 9524d6fd54e9b10ae13e09ca91c726a994853def0dVitaly Buka EXPECT_EQ("", pair.second); 9624d6fd54e9b10ae13e09ca91c726a994853def0dVitaly Buka 9724d6fd54e9b10ae13e09ca91c726a994853def0dVitaly Buka pair = SplitAtFirst("a=", "=", true); 9824d6fd54e9b10ae13e09ca91c726a994853def0dVitaly Buka EXPECT_EQ("a", pair.first); 9924d6fd54e9b10ae13e09ca91c726a994853def0dVitaly Buka EXPECT_EQ("", pair.second); 10024d6fd54e9b10ae13e09ca91c726a994853def0dVitaly Buka 10124d6fd54e9b10ae13e09ca91c726a994853def0dVitaly Buka pair = SplitAtFirst("abc=", "=", true); 10224d6fd54e9b10ae13e09ca91c726a994853def0dVitaly Buka EXPECT_EQ("abc", pair.first); 10324d6fd54e9b10ae13e09ca91c726a994853def0dVitaly Buka EXPECT_EQ("", pair.second); 10424d6fd54e9b10ae13e09ca91c726a994853def0dVitaly Buka 10524d6fd54e9b10ae13e09ca91c726a994853def0dVitaly Buka pair = SplitAtFirst("=a", "=", true); 10624d6fd54e9b10ae13e09ca91c726a994853def0dVitaly Buka EXPECT_EQ("", pair.first); 10724d6fd54e9b10ae13e09ca91c726a994853def0dVitaly Buka EXPECT_EQ("a", pair.second); 10824d6fd54e9b10ae13e09ca91c726a994853def0dVitaly Buka 10924d6fd54e9b10ae13e09ca91c726a994853def0dVitaly Buka pair = SplitAtFirst("=abc=", "=", true); 11024d6fd54e9b10ae13e09ca91c726a994853def0dVitaly Buka EXPECT_EQ("", pair.first); 11124d6fd54e9b10ae13e09ca91c726a994853def0dVitaly Buka EXPECT_EQ("abc=", pair.second); 11224d6fd54e9b10ae13e09ca91c726a994853def0dVitaly Buka 11324d6fd54e9b10ae13e09ca91c726a994853def0dVitaly Buka pair = SplitAtFirst("abc", "=", true); 11424d6fd54e9b10ae13e09ca91c726a994853def0dVitaly Buka EXPECT_EQ("abc", pair.first); 11524d6fd54e9b10ae13e09ca91c726a994853def0dVitaly Buka EXPECT_EQ("", pair.second); 11624d6fd54e9b10ae13e09ca91c726a994853def0dVitaly Buka 11724d6fd54e9b10ae13e09ca91c726a994853def0dVitaly Buka pair = SplitAtFirst("abc:=xyz", ":=", true); 11824d6fd54e9b10ae13e09ca91c726a994853def0dVitaly Buka EXPECT_EQ("abc", pair.first); 11924d6fd54e9b10ae13e09ca91c726a994853def0dVitaly Buka EXPECT_EQ("xyz", pair.second); 12024d6fd54e9b10ae13e09ca91c726a994853def0dVitaly Buka 12124d6fd54e9b10ae13e09ca91c726a994853def0dVitaly Buka pair = SplitAtFirst("abc", "", true); 12224d6fd54e9b10ae13e09ca91c726a994853def0dVitaly Buka EXPECT_EQ("", pair.first); 12324d6fd54e9b10ae13e09ca91c726a994853def0dVitaly Buka EXPECT_EQ("abc", pair.second); 12424d6fd54e9b10ae13e09ca91c726a994853def0dVitaly Buka} 12524d6fd54e9b10ae13e09ca91c726a994853def0dVitaly Buka 12624d6fd54e9b10ae13e09ca91c726a994853def0dVitaly BukaTEST(StringUtils, Join_String) { 12724d6fd54e9b10ae13e09ca91c726a994853def0dVitaly Buka EXPECT_EQ("", Join(",", std::vector<std::string>{})); 12824d6fd54e9b10ae13e09ca91c726a994853def0dVitaly Buka EXPECT_EQ("abc", Join(",", std::vector<std::string>{"abc"})); 12924d6fd54e9b10ae13e09ca91c726a994853def0dVitaly Buka EXPECT_EQ("abc,,xyz", Join(",", std::vector<std::string>{"abc", "", "xyz"})); 13024d6fd54e9b10ae13e09ca91c726a994853def0dVitaly Buka EXPECT_EQ("abc,defg", Join(",", std::vector<std::string>{"abc", "defg"})); 13124d6fd54e9b10ae13e09ca91c726a994853def0dVitaly Buka EXPECT_EQ("1 : 2 : 3", Join(" : ", std::vector<std::string>{"1", "2", "3"})); 13224d6fd54e9b10ae13e09ca91c726a994853def0dVitaly Buka EXPECT_EQ("1:2", Join(":", std::set<std::string>{"1", "2"})); 13324d6fd54e9b10ae13e09ca91c726a994853def0dVitaly Buka EXPECT_EQ("1:2", Join(":", std::vector<std::string>{"1", "2"})); 13424d6fd54e9b10ae13e09ca91c726a994853def0dVitaly Buka EXPECT_EQ("1:2", Join(":", std::list<std::string>{"1", "2"})); 13524d6fd54e9b10ae13e09ca91c726a994853def0dVitaly Buka EXPECT_EQ("123", Join("", std::vector<std::string>{"1", "2", "3"})); 13624d6fd54e9b10ae13e09ca91c726a994853def0dVitaly Buka} 13724d6fd54e9b10ae13e09ca91c726a994853def0dVitaly Buka 13824d6fd54e9b10ae13e09ca91c726a994853def0dVitaly BukaTEST(StringUtils, Join_Pair) { 13924d6fd54e9b10ae13e09ca91c726a994853def0dVitaly Buka EXPECT_EQ("ab,cd", Join(",", "ab", "cd")); 14024d6fd54e9b10ae13e09ca91c726a994853def0dVitaly Buka EXPECT_EQ("key = value", Join(" = ", "key", "value")); 14124d6fd54e9b10ae13e09ca91c726a994853def0dVitaly Buka} 14224d6fd54e9b10ae13e09ca91c726a994853def0dVitaly Buka 14324d6fd54e9b10ae13e09ca91c726a994853def0dVitaly Buka} // namespace weave 144