tunit - Reference Guide  1.0.0
Modern c++17 unit testing framework on Windows, macOS, Linux, iOS and android.
ostream_event_listener.h
Go to the documentation of this file.
1 #pragma once
4 #include "__console_color.h"
5 #include "event_listener.h"
6 #include <ostream>
7 
9 namespace tunit {
17  public:
20  ostream_event_listener(std::ostream& os) noexcept : os_(os) {}
21 
24  void on_test_aborted(const tunit::test_event_args& e) const override {
26  this->os_ << __foreground_color(__console_color::magenta);
27  this->os_ << " ABORTED ";
28  this->os_ << __reset_color();
29  this->os_ << e.test_class().name() << "." << e.test().name();
30  if (tunit::settings::default_settings().show_duration())
31  this->os_ << " (" << e.test().elapsed_time().count() << " ms total)";
32  this->os_ << std::endl;
33  if (e.test().message() != "")
34  this->os_ << " " << e.test().message() << std::endl;
35  if (e.test().expect() != "")
36  this->os_ << " Expected: " << e.test().expect() << std::endl;
37  if (e.test().actual() != "")
38  this->os_ << " But was: " << e.test().actual() << std::endl;
39  if ((e.test().expect() != "" || e.test().actual() != "") && e.test().line_info() != tunit::line_info::empty()) {
40  this->os_ << " Stack Trace: in " << e.test().line_info().file_path();
41  if (e.test().line_info().line_number() != 0) this->os_ << ":" << e.test().line_info().line_number();
42  }
43  this->os_ << std::endl;
44  }
45 
48  void on_test_failed(const tunit::test_event_args& e) const override {
50  this->os_ << __foreground_color(__console_color::red);
51  this->os_ << " FAILED ";
52  this->os_ << __reset_color();
53  this->os_ << e.test_class().name() << "." << e.test().name();
54  if (tunit::settings::default_settings().show_duration())
55  this->os_ << " (" << e.test().elapsed_time().count() << " ms total)";
56  this->os_ << std::endl;
57  if (e.test().message() != "")
58  this->os_ << " " << e.test().message() << std::endl;
59  if (e.test().expect() != "")
60  this->os_ << " Expected: " << e.test().expect() << std::endl;
61  if (e.test().actual() != "")
62  this->os_ << " But was: " << e.test().actual() << std::endl;
63  if (e.test().line_info() != tunit::line_info::empty()) {
64  this->os_ << " Stack Trace: in " << e.test().line_info().file_path();
65  if (e.test().line_info().line_number() != 0) this->os_ << ":" << e.test().line_info().line_number();
66  }
67  this->os_ << std::endl;
68  }
69 
72  void on_test_ignored(const tunit::test_event_args& e) const override {
74  this->os_ << __foreground_color(__console_color::yellow);
75  this->os_ << " IGNORED ";
76  this->os_ << __reset_color();
77  this->os_ << e.test_class().name() << "." << e.test().name();
78  if (tunit::settings::default_settings().show_duration())
79  this->os_ << " (" << e.test().elapsed_time().count() << " ms total)";
80  this->os_ << std::endl;
81  if (e.test().message() != "")
82  this->os_ << " " << e.test().message() << std::endl;
83  }
84 
87  void on_test_succeed(const tunit::test_event_args& e) const override {
89  this->os_ << __foreground_color(__console_color::green);
90  this->os_ << " SUCCEED ";
91  this->os_ << __reset_color();
92  this->os_ << e.test_class().name() << "." << e.test().name();
93  if (tunit::settings::default_settings().show_duration())
94  this->os_ << " (" << e.test().elapsed_time().count() << " ms total)";
95  this->os_ << std::endl;
96  if (e.test().message() != "")
97  this->os_ << " " << e.test().message() << std::endl;
98  }
99 
102  void on_unit_test_end(const tunit::tunit_event_args& e) const override {
104  this->os_ << std::endl;
105  this->os_ << "Test results:" << std::endl;
106  if (e.unit_test().succeed_test_count()) {
107  this->os_ << __foreground_color(__console_color::green);
108  this->os_ << " SUCCEED ";
109  this->os_ << __reset_color();
110  this->os_ << e.unit_test().succeed_test_count() << " test" << (e.unit_test().succeed_test_count() < 2 ? "" : "s") << "." << std::endl;
111  }
112  if (e.unit_test().aborted_test_count()) {
113  this->os_ << __foreground_color(__console_color::magenta);
114  this->os_ << " ABORTED ";
115  this->os_ << __reset_color();
116  this->os_ << e.unit_test().aborted_test_count() << " test" << (e.unit_test().aborted_test_count() < 2 ? "" : "s") << "." << std::endl;
117  }
118  if (e.unit_test().failed_test_count()) {
119  this->os_ << __foreground_color(__console_color::red);
120  this->os_ << " FAILED ";
121  this->os_ << __reset_color();
122  this->os_ << e.unit_test().failed_test_count() << " test" << (e.unit_test().failed_test_count() < 2 ? "" : "s") << "." << std::endl;
123  }
124  if (e.unit_test().ignored_test_count()) {
125  this->os_ << __foreground_color(__console_color::yellow);
126  this->os_ << " IGNORED ";
127  this->os_ << __reset_color();
128  this->os_ << e.unit_test().ignored_test_count() << " test" << (e.unit_test().ignored_test_count() < 2 ? "" : "s") << "." << std::endl;
129  }
130 
131  this->os_ << "End " << e.unit_test().test_count() << " test" << (e.unit_test().test_count() < 2 ? "" : "s") << " from " << e.unit_test().test_cases_count() << " test case" << (e.unit_test().test_cases_count() < 2 ? "" : "s") << " ran.";
133  this->os_ << " (" << e.unit_test().elapsed_time().count() << " ms total)";
134  this->os_ << std::endl << std::endl;
135  }
136 
139  void on_unit_test_start(const tunit::tunit_event_args& e) const override {
140  if (e.unit_test().repeat_tests()) {
141  this->os_ << __foreground_color(__console_color::cyan);
142  this->os_ << "Repeating all tests (iteration " << e.unit_test().repeat_iteration() << ") . . ." << std::endl << std::endl;
143  this->os_ << __reset_color();
144  }
145  this->os_ << "Start " << e.unit_test().test_count() << " test" << (e.unit_test().test_count() < 2 ? "" : "s") << " from " << e.unit_test().test_cases_count() << " test case" << (e.unit_test().test_cases_count() < 2 ? "" : "s") << std::endl;
146  this->os_ << "Run tests:" << std::endl;
148  }
149 
150  private:
151  std::ostream& os_;
152  };
153 }
virtual void on_test_ignored(const tunit::test_event_args &e) const
Occurs when test is ignored.
Definition: event_listener.h:71
void on_test_aborted(const tunit::test_event_args &e) const override
Occurs when test is aborted.
Definition: ostream_event_listener.h:24
Provides data for the tunit::test events.
Definition: test_event_args.h:11
unsigned int line_number() const noexcept
Gets the line number.
Definition: line_info.h:50
static tunit::settings & default_settings() noexcept
Get default settings intance.
Definition: settings.h:23
const tunit::test_class & test_class() const noexcept
Gets current class test.
Definition: test_event_args.h:24
void on_test_ignored(const tunit::test_event_args &e) const override
Occurs when test is ignored.
Definition: ostream_event_listener.h:72
const tunit::unit_test & unit_test() const
Gets current unit test.
Definition: tunit_event_args.h:23
void on_test_succeed(const tunit::test_event_args &e) const override
Occurs when test is succeed.
Definition: ostream_event_listener.h:87
void on_unit_test_end(const tunit::tunit_event_args &e) const override
Occurs when unit test is ended.
Definition: ostream_event_listener.h:102
virtual void on_unit_test_end(const tunit::tunit_event_args &e) const
Occurs when unit test is ended.
Definition: event_listener.h:95
static tunit::line_info empty()
Return an empty line info.
Definition: line_info.h:31
void on_unit_test_start(const tunit::tunit_event_args &e) const override
Occurs when unit test cleanup is started.
Definition: ostream_event_listener.h:139
virtual void on_test_aborted(const tunit::test_event_args &e) const
Occurs when test is aborted.
Definition: event_listener.h:63
ostream_event_listener(std::ostream &os) noexcept
Creates new instance ostream event lister with ostream specified.
Definition: ostream_event_listener.h:20
tunit_event_args is the base class for classes containing event data.
Definition: tunit_event_args.h:12
The ostream_unit_test class is a specialisation of event_listener class for writing events in std::os...
Definition: ostream_event_listener.h:16
Represent the event listener class.
Definition: event_listener.h:15
void on_test_failed(const tunit::test_event_args &e) const override
Occurs when test is failed.
Definition: ostream_event_listener.h:48
The tunit namespace contains a unit test library.
Definition: abort_error.h:8
Contains tunit::event_listener class.
virtual void on_unit_test_start(const tunit::tunit_event_args &e) const
Occurs when unit test cleanup is started.
Definition: event_listener.h:107
bool show_duration() const noexcept
Gets if show duration for each test.
Definition: settings.h:126
const tunit::test & test() const noexcept
Gets current test.
Definition: test_event_args.h:20
virtual void on_test_failed(const tunit::test_event_args &e) const
Occurs when test is failed.
Definition: event_listener.h:75
virtual void on_test_succeed(const tunit::test_event_args &e) const
Occurs when test is succeed.
Definition: event_listener.h:83
const std::string & file_path() const noexcept
Gets the file path.
Definition: line_info.h:46