diff --git a/include/boost/ut.hpp b/include/boost/ut.hpp index 5c020635..8869d9fb 100644 --- a/include/boost/ut.hpp +++ b/include/boost/ut.hpp @@ -2240,9 +2240,17 @@ struct test_location { struct test { std::string_view type{}; + std::optional backingName; std::string_view name{}; std::vector tag{}; + test(std::string_view t, std::string_view sv) : type(t), name(sv) {} + test(std::string_view t, const std::string& s) : type(t), name(s) {} + test(std::string_view t, const char* s) : type(t), name(s) {} + template + test(std::string_view t, const char (&s)[N]) : type(t), name(s) {} + test(std::string_view t, std::string&& s) : type(t), backingName(std::move(s)), name(*backingName) {} + template constexpr auto operator=(test_location _test) { on(events::test{.type = type, @@ -3078,11 +3086,11 @@ struct suite { [[maybe_unused]] inline auto log = detail::log{}; [[maybe_unused]] inline auto that = detail::that_{}; -[[maybe_unused]] constexpr auto test = [](const auto name) { - return detail::test{"test", name}; +[[maybe_unused]] constexpr auto test = [](auto&& name) { + return detail::test{"test", std::forward(name)}; }; [[maybe_unused]] constexpr auto should = test; -[[maybe_unused]] inline auto tag = [](const auto name) { +[[maybe_unused]] inline auto tag = [](const auto& name) { return detail::tag{{name}}; }; [[maybe_unused]] inline auto skip = tag("skip"); @@ -3139,20 +3147,20 @@ template } namespace bdd { -[[maybe_unused]] constexpr auto feature = [](const auto name) { - return detail::test{"feature", name}; +[[maybe_unused]] constexpr auto feature = [](auto&& name) { + return detail::test{"feature", std::forward(name)}; }; -[[maybe_unused]] constexpr auto scenario = [](const auto name) { - return detail::test{"scenario", name}; +[[maybe_unused]] constexpr auto scenario = [](auto&& name) { + return detail::test{"scenario", std::forward(name)}; }; -[[maybe_unused]] constexpr auto given = [](const auto name) { - return detail::test{"given", name}; +[[maybe_unused]] constexpr auto given = [](auto&& name) { + return detail::test{"given", std::forward(name)}; }; -[[maybe_unused]] constexpr auto when = [](const auto name) { - return detail::test{"when", name}; +[[maybe_unused]] constexpr auto when = [](auto&& name) { + return detail::test{"when", std::forward(name)}; }; -[[maybe_unused]] constexpr auto then = [](const auto name) { - return detail::test{"then", name}; +[[maybe_unused]] constexpr auto then = [](auto&& name) { + return detail::test{"then", std::forward(name)}; }; namespace gherkin { @@ -3283,11 +3291,11 @@ class steps { } // namespace bdd namespace spec { -[[maybe_unused]] constexpr auto describe = [](const auto name) { - return detail::test{"describe", name}; +[[maybe_unused]] constexpr auto describe = [](auto&& name) { + return detail::test{"describe", std::forward(name)}; }; -[[maybe_unused]] constexpr auto it = [](const auto name) { - return detail::test{"it", name}; +[[maybe_unused]] constexpr auto it = [](auto&& name) { + return detail::test{"it", std::forward(name)}; }; } // namespace spec