77
88#include " opentelemetry/nostd/string_view.h"
99
10- using namespace opentelemetry ;
11- //
12- // struct SplitStringTestData
13- // {
14- // opentelemetry::nostd::string_view input;
15- // char separator;
16- // size_t max_count;
17- // std::vector<opentelemetry::nostd::string_view> splits;
18- // size_t expected_number_strings;
19- // };
20- //
21- // const SplitStringTestData split_string_test_cases[] = {
22- // {"foo,bar,baz", ',', 4, std::vector<opentelemetry::nostd::string_view>{"foo", "bar", "baz"},
23- // 3},
24- // {"foo,bar,baz,foobar", ',', 4,
25- // std::vector<opentelemetry::nostd::string_view>{"foo", "bar", "baz", "foobar"}, 4},
26- // {"foo,bar,baz,foobar", '.', 4,
27- // std::vector<opentelemetry::nostd::string_view>{"foo,bar,baz,foobar"}, 1},
28- // {"foo,bar,baz,", ',', 4,
29- // std::vector<opentelemetry::nostd::string_view>{"foo", "bar", "baz", ""}, 4},
30- // {"foo,bar,baz,", ',', 2, std::vector<opentelemetry::nostd::string_view>{"foo", "bar"}, 2},
31- // {"foo ,bar, baz ", ',', 4,
32- // std::vector<opentelemetry::nostd::string_view>{"foo ", "bar", " baz "}, 3},
33- // {"foo ,bar, baz ", ',', 4,
34- // std::vector<opentelemetry::nostd::string_view>{"foo ", "bar", " baz "}, 3},
35- // {"00-0af7651916cd43dd8448eb211c80319c-00f067aa0ba902b7-01", '-', 4,
36- // std::vector<opentelemetry::nostd::string_view>{"00", "0af7651916cd43dd8448eb211c80319c",
37- // "00f067aa0ba902b7", "01"},
38- // 4},
39- // };
40-
41- TEST (StringTest, SplitStringTest)
10+ struct SplitStringTestData
4211{
43- struct
44- {
45- opentelemetry::nostd::string_view input;
46- char separator;
47- size_t max_count;
48- std::vector<opentelemetry::nostd::string_view> splits;
49- size_t expected_number_strings;
50- } test_cases[] = {
51- {" foo,bar,baz" , ' ,' , 4 , std::vector<opentelemetry::nostd::string_view>{" foo" , " bar" , " baz" },
52- 3 },
53- // {"foo,bar,baz,foobar", ',', 4,
54- // std::vector<opentelemetry::nostd::string_view>{"foo", "bar", "baz", "foobar"}, 4},
55- // {"foo,bar,baz,foobar", '.', 4,
56- // std::vector<opentelemetry::nostd::string_view>{"foo,bar,baz,foobar"}, 1},
57- // {"foo,bar,baz,", ',', 4,
58- // std::vector<opentelemetry::nostd::string_view>{"foo", "bar", "baz", ""}, 4},
59- // {"foo,bar,baz,", ',', 2, std::vector<opentelemetry::nostd::string_view>{"foo", "bar"}, 2},
60- // {"foo ,bar, baz ", ',', 4,
61- // std::vector<opentelemetry::nostd::string_view>{"foo ", "bar", " baz "}, 3},
62- // {"foo ,bar, baz ", ',', 4,
63- // std::vector<opentelemetry::nostd::string_view>{"foo ", "bar", " baz "}, 3},
64- // {"00-0af7651916cd43dd8448eb211c80319c-00f067aa0ba902b7-01", '-', 4,
65- // std::vector<opentelemetry::nostd::string_view>{"00", "0af7651916cd43dd8448eb211c80319c",
66- // "00f067aa0ba902b7", "01"},4}
67- };
68- for (auto &test_param : test_cases)
69- {
70- std::vector<opentelemetry::nostd::string_view> fields{};
71- fields.reserve (test_param.expected_number_strings );
72- size_t got_splits_num = opentelemetry::trace::propagation::detail::SplitString (
73- test_param.input , test_param.separator , fields.data (), test_param.max_count );
12+ opentelemetry::nostd::string_view input;
13+ char separator;
14+ size_t max_count;
15+ std::vector<opentelemetry::nostd::string_view> splits;
16+ size_t expected_number_strings;
7417
75- // Assert on the output
76- EXPECT_EQ (got_splits_num, test_param.expected_number_strings );
77- for (size_t i = 0 ; i < got_splits_num; i++)
78- {
79- // Checks for resulting strings in-order
80- EXPECT_EQ (fields[i], test_param.splits [i]);
18+ SplitStringTestData (const opentelemetry::nostd::string_view &input,
19+ char separator,
20+ size_t maxCount,
21+ const std::vector<opentelemetry::nostd::string_view> &splits,
22+ size_t expectedNumberStrings)
23+ : input(input),
24+ separator (separator),
25+ max_count(maxCount),
26+ splits(splits),
27+ expected_number_strings(expectedNumberStrings)
28+ {}
29+
30+ // When googletest registers parameterized tests, it uses this method to format the parameters.
31+ // The default implementation prints hex dump of all bytes in the object. If there is any padding
32+ // in these bytes, valgrind reports this as a warning - "Use of uninitialized bytes".
33+ // See https://github.com/google/googletest/issues/3805.
34+ friend void PrintTo (const SplitStringTestData& data, std::ostream* os) {
35+ std::stringstream ss;
36+ for (auto it = data.splits .begin (); it != data.splits .end (); it++) {
37+ if (it != data.splits .begin ()) {
38+ ss << " ," ;
39+ }
40+ ss << *it;
8141 }
42+ *os << " (" << data.input << " ," << data.separator << " ," << data.max_count << " ," << ss.str () << " ," << data.expected_number_strings << " )" ;
8243 }
83- }
44+ };
45+
46+ static const SplitStringTestData* split_string_test_cases[2 ] = {
47+ new SplitStringTestData (" foo,bar,baz" , ' ,' , 4 , std::vector<opentelemetry::nostd::string_view>{" foo" , " bar" , " baz" }, 3 ),
48+ new SplitStringTestData (" foo,bar,baz,foobar" , ' ,' , 4 ,
49+ std::vector<opentelemetry::nostd::string_view>{" foo" , " bar" , " baz" , " foobar" }, 4 ),
50+ // {"foo,bar,baz,foobar", '.', 4,
51+ // std::vector<opentelemetry::nostd::string_view>{"foo,bar,baz,foobar"}, 1},
52+ // {"foo,bar,baz,", ',', 4,
53+ // std::vector<opentelemetry::nostd::string_view>{"foo", "bar", "baz", ""}, 4},
54+ // {"foo,bar,baz,", ',', 2, std::vector<opentelemetry::nostd::string_view>{"foo", "bar"}, 2},
55+ // {"foo ,bar, baz ", ',', 4,
56+ // std::vector<opentelemetry::nostd::string_view>{"foo ", "bar", " baz "}, 3},
57+ // {"foo ,bar, baz ", ',', 4,
58+ // std::vector<opentelemetry::nostd::string_view>{"foo ", "bar", " baz "}, 3},
59+ // {"00-0af7651916cd43dd8448eb211c80319c-00f067aa0ba902b7-01", '-', 4,
60+ // std::vector<opentelemetry::nostd::string_view>{"00", "0af7651916cd43dd8448eb211c80319c",
61+ // "00f067aa0ba902b7", "01"},
62+ // 4},
63+ };
8464
85- TEST (StringTest, SimpleTest)
65+ // Test fixture
66+ class SplitStringTestFixture : public ::testing::TestWithParam<const SplitStringTestData*>
67+ {};
68+
69+ TEST_P (SplitStringTestFixture, SplitsAsExpected)
8670{
87- nostd::string_view input = " foo,bar,baz" ;
88- std::array<nostd::string_view, 4 > fields{};
89- size_t got_splits = ::trace::propagation::detail::SplitString (input, ' ,' , fields.data (), 4 );
90- EXPECT_EQ (3 , got_splits);
71+ const SplitStringTestData* test_param = GetParam ();
72+ std::vector<opentelemetry::nostd::string_view> fields{};
73+ size_t got_splits_num = opentelemetry::trace::propagation::detail::SplitString (
74+ test_param->input , test_param->separator , fields.data (), test_param->max_count );
75+
76+ // Assert on the output
77+ EXPECT_EQ (got_splits_num, test_param->expected_number_strings );
78+ for (size_t i = 0 ; i < got_splits_num; i++)
79+ {
80+ // Checks for resulting strings in-order
81+ EXPECT_EQ (fields[i], test_param->splits [i]);
82+ }
9183}
84+
85+ INSTANTIATE_TEST_SUITE_P (SplitStringTestCases,
86+ SplitStringTestFixture,
87+ ::testing::ValuesIn (split_string_test_cases));
0 commit comments