diff --git a/api/test/trace/propagation/detail/string_test.cc b/api/test/trace/propagation/detail/string_test.cc index 43c81ad93c..96a506cfc9 100644 --- a/api/test/trace/propagation/detail/string_test.cc +++ b/api/test/trace/propagation/detail/string_test.cc @@ -8,84 +8,57 @@ #include "opentelemetry/nostd/string_view.h" using namespace opentelemetry; -// -// struct SplitStringTestData -//{ -// opentelemetry::nostd::string_view input; -// char separator; -// size_t max_count; -// std::vector splits; -// size_t expected_number_strings; -// }; -// -// const SplitStringTestData split_string_test_cases[] = { -// {"foo,bar,baz", ',', 4, std::vector{"foo", "bar", "baz"}, -// 3}, -// {"foo,bar,baz,foobar", ',', 4, -// std::vector{"foo", "bar", "baz", "foobar"}, 4}, -// {"foo,bar,baz,foobar", '.', 4, -// std::vector{"foo,bar,baz,foobar"}, 1}, -// {"foo,bar,baz,", ',', 4, -// std::vector{"foo", "bar", "baz", ""}, 4}, -// {"foo,bar,baz,", ',', 2, std::vector{"foo", "bar"}, 2}, -// {"foo ,bar, baz ", ',', 4, -// std::vector{"foo ", "bar", " baz "}, 3}, -// {"foo ,bar, baz ", ',', 4, -// std::vector{"foo ", "bar", " baz "}, 3}, -// {"00-0af7651916cd43dd8448eb211c80319c-00f067aa0ba902b7-01", '-', 4, -// std::vector{"00", "0af7651916cd43dd8448eb211c80319c", -// "00f067aa0ba902b7", "01"}, -// 4}, -// }; -TEST(StringTest, SplitStringTest) +namespace { - struct - { - opentelemetry::nostd::string_view input; - char separator; - size_t max_count; - std::vector splits; - size_t expected_number_strings; - } test_cases[] = { - {"foo,bar,baz", ',', 4, std::vector{"foo", "bar", "baz"}, - 3}, -// {"foo,bar,baz,foobar", ',', 4, -// std::vector{"foo", "bar", "baz", "foobar"}, 4}, -// {"foo,bar,baz,foobar", '.', 4, -// std::vector{"foo,bar,baz,foobar"}, 1}, -// {"foo,bar,baz,", ',', 4, -// std::vector{"foo", "bar", "baz", ""}, 4}, -// {"foo,bar,baz,", ',', 2, std::vector{"foo", "bar"}, 2}, -// {"foo ,bar, baz ", ',', 4, -// std::vector{"foo ", "bar", " baz "}, 3}, -// {"foo ,bar, baz ", ',', 4, -// std::vector{"foo ", "bar", " baz "}, 3}, -// {"00-0af7651916cd43dd8448eb211c80319c-00f067aa0ba902b7-01", '-', 4, -// std::vector{"00", "0af7651916cd43dd8448eb211c80319c", -// "00f067aa0ba902b7", "01"},4} - }; - for (auto &test_param : test_cases) - { - std::vector fields{}; - fields.reserve(test_param.expected_number_strings); - size_t got_splits_num = opentelemetry::trace::propagation::detail::SplitString( - test_param.input, test_param.separator, fields.data(), test_param.max_count); - // Assert on the output - EXPECT_EQ(got_splits_num, test_param.expected_number_strings); - for (size_t i = 0; i < got_splits_num; i++) - { - // Checks for resulting strings in-order - EXPECT_EQ(fields[i], test_param.splits[i]); - } +struct SplitStringTestData +{ + opentelemetry::nostd::string_view input; + char separator; + size_t max_count; + size_t expected_number_strings; + + // When googletest registers parameterized tests, it uses this method to format the parameters. + // The default implementation prints hex dump of all bytes in the object. If there is any padding + // in these bytes, valgrind reports this as a warning - "Use of uninitialized bytes". + // See https://github.com/google/googletest/issues/3805. + friend void PrintTo(const SplitStringTestData &data, std::ostream *os) + { + std::stringstream ss; + *os << "(" << data.input << "," << data.separator << "," << data.max_count << "," + << data.expected_number_strings << ")"; } -} +}; + +const SplitStringTestData split_string_test_cases[] = { + {"foo,bar,baz", ',', 4, 3}, + {"foo,bar,baz,foobar", ',', 4, 4}, + {"foo,bar,baz,foobar", '.', 4, 1}, + {"foo,bar,baz,", ',', 4, 4}, + {"foo,bar,baz,", ',', 2, 2}, + {"foo ,bar, baz ", ',', 4, 3}, + {"foo ,bar, baz ", ',', 4, 3}, + {"00-0af7651916cd43dd8448eb211c80319c-00f067aa0ba902b7-01", '-', 4, 4}, +}; +} // namespace + +// Test fixture +class SplitStringTestFixture : public ::testing::TestWithParam +{}; -TEST(StringTest, SimpleTest) +TEST_P(SplitStringTestFixture, SplitsAsExpected) { - nostd::string_view input = "foo,bar,baz"; - std::array fields{}; - size_t got_splits = ::trace::propagation::detail::SplitString(input, ',', fields.data(), 4); - EXPECT_EQ(3, got_splits); + const SplitStringTestData test_param = GetParam(); + std::vector fields{}; + fields.reserve(test_param.expected_number_strings); + size_t got_splits_num = opentelemetry::trace::propagation::detail::SplitString( + test_param.input, test_param.separator, fields.data(), test_param.max_count); + + // Assert on the output + EXPECT_EQ(got_splits_num, test_param.expected_number_strings); } + +INSTANTIATE_TEST_SUITE_P(SplitStringTestCases, + SplitStringTestFixture, + ::testing::ValuesIn(split_string_test_cases));