11#include <gtest/gtest.h>
13#include <userver/utils/meta_light.hpp>
15USERVER_NAMESPACE_BEGIN
21template <
typename ParamType>
22std::string TestParamToString(
const ParamType& param) {
23 if constexpr (
requires { ParamType::test_name; }) {
24 static_assert(std::is_same_v<std::string,
decltype(param.test_name)>,
"Test name should be a string");
25 return param.test_name;
27 return ::testing::PrintToString(param);
31template <
typename... Args>
32std::string TestTupleParamToString(
const std::tuple<Args...>& params_tuple) {
33 static_assert((
sizeof...(Args) != 0),
"Test parameters should have at least one dimension");
37 [](
const auto& first,
const auto&... rest) {
38 return (TestParamToString(first) + ... + (
"_" + TestParamToString(rest)));
95struct PrintTestName
final {
96 template <
typename ParamType>
97 std::string operator()(
const testing::TestParamInfo<ParamType>& info)
const {
98 if constexpr (
requires { std::tuple_size<ParamType>::value; }) {
99 return impl::TestTupleParamToString(info.param);
101 return impl::TestParamToString(info.param);