11namespace CppSpec::Formatters {
15 std::list<std::string> baked_failure_messages;
17 std::string prep_failure_helper(
const ItBase& it);
21 format_failure_messages();
23 void format(
const ItBase& it)
override;
25 void format_failure_messages();
26 void prep_failure(
const ItBase& it);
28 static char status_char(Result::Status status) {
30 case Result::Status::Success:
32 case Result::Status::Failure:
34 case Result::Status::Error:
36 case Result::Status::Skipped:
44inline std::string Progress::prep_failure_helper(
const ItBase& it) {
46 std::forward_list<std::string> list;
49 std::ostringstream temp_stream;
52 auto push_and_clear = [&]() {
53 list.push_front(temp_stream.str());
59 temp_stream << it.padding() << it.get_description() << std::endl;
64 Verbose helper_formatter = Verbose(*
this, temp_stream);
68 const auto* parent = it.get_parent_as<
Description>();
71 helper_formatter.format(*parent);
73 }
while ((parent =
dynamic_cast<const Description*
>(parent->get_parent())) !=
nullptr);
75 return Util::join(list);
78inline void Progress::prep_failure(
const ItBase& it) {
79 std::list<std::string> raw_failure_messages;
80 std::ranges::transform(it.get_results(), std::back_inserter(raw_failure_messages),
81 [](
const Result& result) { return result.get_message(); });
83 std::ostringstream string_builder;
84 string_builder << set_color(RED);
85 string_builder <<
"Test number " << test_counter <<
" failed:";
86 string_builder << reset_color();
87 string_builder << prep_failure_helper(it);
88 string_builder << set_color(RED);
89 string_builder << Util::join_endl(raw_failure_messages);
90 string_builder << reset_color();
91 string_builder << std::endl;
93 raw_failure_messages.clear();
94 baked_failure_messages.push_back(string_builder.str());
97inline void Progress::format(
const ItBase& it) {
98 out_stream << status_color(it.get_result().status());
99 out_stream << status_char(it.get_result().status());
100 out_stream << reset_color();
101 out_stream << std::flush;
103 if (it.get_result().status() == Result::Status::Failure) {
106 get_and_increment_test_counter();
109inline void Progress::format_failure_messages() {
110 if (baked_failure_messages.empty()) {
111 out_stream << std::endl;
116 for (
const std::string& message : baked_failure_messages) {
117 out_stream << std::endl;
118 out_stream << message;
120 baked_failure_messages.clear();
Definition description.hpp:20
Base class for it expressions.
Definition it_base.hpp:32