35 std::ostream& out_stream;
40 explicit BaseFormatter(std::ostream& out_stream = std::cout,
bool color = is_terminal())
41 : out_stream(out_stream), color_output(color) {}
42 BaseFormatter(
const BaseFormatter&) =
default;
43 BaseFormatter(
const BaseFormatter& copy, std::ostream& out_stream)
44 : out_stream(out_stream), test_counter(copy.test_counter), color_output(copy.color_output) {}
46 virtual ~BaseFormatter() =
default;
48 void format(
const Runnable& runnable) {
49 if (
const auto* description =
dynamic_cast<const Description*
>(&runnable)) {
51 }
else if (
const auto* it =
dynamic_cast<const ItBase*
>(&runnable)) {
54 format_children(runnable);
57 void format_children(
const Runnable& runnable) {
58 for (
const auto& child : runnable.get_children()) {
59 if (
const auto* runnable =
dynamic_cast<const Runnable*
>(child.get())) {
60 this->format(*runnable);
66 virtual void format(
const ItBase& ) {}
67 virtual void cleanup() {}
69 BaseFormatter& set_color_output(
bool value);
71 int get_and_increment_test_counter() {
return test_counter++; }
72 void reset_test_counter() { test_counter = 1; }
74 const char* set_color(
const char* color) {
81 const char* status_color(Result::Status status) {
86 case Result::Status::Success:
88 case Result::Status::Failure:
90 case Result::Status::Error:
92 case Result::Status::Skipped:
98 const char* reset_color() {
return color_output ? RESET :
""; }