|
8 | 8 | #include "opentelemetry/nostd/string_view.h" |
9 | 9 |
|
10 | 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 | 11 |
|
41 | | -TEST(StringTest, SplitStringTest) |
| 12 | +namespace |
42 | 13 | { |
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); |
74 | 14 |
|
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]); |
81 | | - } |
| 15 | +struct SplitStringTestData |
| 16 | +{ |
| 17 | + opentelemetry::nostd::string_view input; |
| 18 | + char separator; |
| 19 | + size_t max_count; |
| 20 | + size_t expected_number_strings; |
| 21 | + |
| 22 | + // When googletest registers parameterized tests, it uses this method to format the parameters. |
| 23 | + // The default implementation prints hex dump of all bytes in the object. If there is any padding |
| 24 | + // in these bytes, valgrind reports this as a warning - "Use of uninitialized bytes". |
| 25 | + // See https://github.com/google/googletest/issues/3805. |
| 26 | + friend void PrintTo(const SplitStringTestData &data, std::ostream *os) |
| 27 | + { |
| 28 | + std::stringstream ss; |
| 29 | + *os << "(" << data.input << "," << data.separator << "," << data.max_count << "," |
| 30 | + << data.expected_number_strings << ")"; |
82 | 31 | } |
83 | | -} |
| 32 | +}; |
| 33 | + |
| 34 | +const SplitStringTestData split_string_test_cases[] = { |
| 35 | + {"foo,bar,baz", ',', 4, 3}, |
| 36 | + {"foo,bar,baz,foobar", ',', 4, 4}, |
| 37 | + {"foo,bar,baz,foobar", '.', 4, 1}, |
| 38 | + {"foo,bar,baz,", ',', 4, 4}, |
| 39 | + {"foo,bar,baz,", ',', 2, 2}, |
| 40 | + {"foo ,bar, baz ", ',', 4, 3}, |
| 41 | + {"foo ,bar, baz ", ',', 4, 3}, |
| 42 | + {"00-0af7651916cd43dd8448eb211c80319c-00f067aa0ba902b7-01", '-', 4, 4}, |
| 43 | +}; |
| 44 | +} // namespace |
| 45 | + |
| 46 | +// Test fixture |
| 47 | +class SplitStringTestFixture : public ::testing::TestWithParam<SplitStringTestData> |
| 48 | +{}; |
84 | 49 |
|
85 | | -TEST(StringTest, SimpleTest) |
| 50 | +TEST_P(SplitStringTestFixture, SplitsAsExpected) |
86 | 51 | { |
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); |
| 52 | + const SplitStringTestData test_param = GetParam(); |
| 53 | + std::vector<opentelemetry::nostd::string_view> fields{}; |
| 54 | + fields.reserve(test_param.expected_number_strings); |
| 55 | + size_t got_splits_num = opentelemetry::trace::propagation::detail::SplitString( |
| 56 | + test_param.input, test_param.separator, fields.data(), test_param.max_count); |
| 57 | + |
| 58 | + // Assert on the output |
| 59 | + EXPECT_EQ(got_splits_num, test_param.expected_number_strings); |
91 | 60 | } |
| 61 | + |
| 62 | +INSTANTIATE_TEST_SUITE_P(SplitStringTestCases, |
| 63 | + SplitStringTestFixture, |
| 64 | + ::testing::ValuesIn(split_string_test_cases)); |
0 commit comments