|
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