Skip to content

Commit 8b13c00

Browse files
committed
Allocate test cases structs on heap
1 parent 4f90c4f commit 8b13c00

File tree

1 file changed

+72
-75
lines changed

1 file changed

+72
-75
lines changed

api/test/trace/propagation/detail/string_test.cc

Lines changed: 72 additions & 75 deletions
Original file line numberDiff line numberDiff line change
@@ -7,85 +7,82 @@
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+
fields.reserve(test_param->expected_number_strings);
74+
size_t got_splits_num = opentelemetry::trace::propagation::detail::SplitString(
75+
test_param->input, test_param->separator, fields.data(), test_param->max_count);
76+
77+
// Assert on the output
78+
EXPECT_EQ(got_splits_num, test_param->expected_number_strings);
79+
for (size_t i = 0; i < got_splits_num; i++)
80+
{
81+
// Checks for resulting strings in-order
82+
EXPECT_EQ(fields[i], test_param->splits[i]);
83+
}
9184
}
85+
86+
INSTANTIATE_TEST_SUITE_P(SplitStringTestCases,
87+
SplitStringTestFixture,
88+
::testing::ValuesIn(split_string_test_cases));

0 commit comments

Comments
 (0)