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