17 std::list<Description*> specs;
18 std::list<std::shared_ptr<Formatters::BaseFormatter>> formatters;
21 template <
typename... Formatters>
22 explicit Runner(Formatters&&... formatters) : formatters{std::forward<Formatters>(formatters)...} {}
24 explicit Runner(std::list<std::shared_ptr<Formatters::BaseFormatter>>&& formatters)
25 : formatters{std::move(formatters)} {}
34 specs.push_back(&spec);
38 template <
typename... Specs>
39 Runner& add_specs(Specs&... specs) {
44 Result run(std::source_location location = std::source_location::current()) {
46 for (Description* spec : specs) {
48 success &= !spec->get_result().is_failure();
50 for (
auto& formatter : formatters) {
51 for (Description* spec : specs) {
52 formatter->format(
static_cast<Runnable&
>(*spec));
55 return success ? Result::success(location) : Result::failure(location);
58 Result exec() {
return run(); }