1 | #ifndef BANDIT_CRASH_REPORTER_H |
---|---|
2 | #define BANDIT_CRASH_REPORTER_H |
3 | |
4 | #include <iostream> |
5 | #include <vector> |
6 | #include <bandit/reporters/progress_reporter.h> |
7 | |
8 | namespace bandit { |
9 | namespace detail { |
10 | struct crash_reporter : public progress_reporter { |
11 | crash_reporter(std::ostream& stm, const failure_formatter& failure_formatter) |
12 | : progress_reporter(failure_formatter), stm_(stm) {} |
13 | |
14 | crash_reporter(const failure_formatter& failure_formatter) |
15 | : crash_reporter(std::cout, failure_formatter) {} |
16 | |
17 | crash_reporter& operator=(const crash_reporter&) { |
18 | return *this; |
19 | } |
20 | |
21 | void test_run_complete() override { |
22 | progress_reporter::test_run_complete(); |
23 | for (auto failure : failures_) { |
24 | stm_ << std::endl |
25 | << "# FAILED "<< failure; |
26 | } |
27 | for (auto error : test_run_errors_) { |
28 | stm_ << std::endl |
29 | << "# ERROR "<< error; |
30 | } |
31 | stm_.flush(); |
32 | } |
33 | |
34 | void test_run_error(const std::string& desc, const struct test_run_error& err) override { |
35 | progress_reporter::test_run_error(desc, err); |
36 | std::stringstream ss; |
37 | ss << current_context_name() << ": "<< desc << ": "<< err.what() << std::endl; |
38 | test_run_errors_.push_back(ss.str()); |
39 | } |
40 | |
41 | void it_skip(const std::string& desc) override { |
42 | progress_reporter::it_skip(desc); |
43 | } |
44 | |
45 | void it_starting(const std::string& desc) override { |
46 | progress_reporter::it_starting(desc); |
47 | for (auto context : contexts_) { |
48 | stm_ << context << " | "; |
49 | } |
50 | stm_ << desc << std::endl; |
51 | } |
52 | |
53 | void it_succeeded(const std::string& desc) override { |
54 | progress_reporter::it_succeeded(desc); |
55 | } |
56 | |
57 | void it_failed(const std::string& desc, const assertion_exception& ex) override { |
58 | ++specs_failed_; |
59 | |
60 | std::stringstream ss; |
61 | ss << current_context_name() << " "<< desc << ":"<< std::endl |
62 | << failure_formatter_.format(ex); |
63 | failures_.push_back(ss.str()); |
64 | |
65 | stm_ << "FAILED"<< std::endl; |
66 | } |
67 | |
68 | void it_unknown_error(const std::string& desc) override { |
69 | ++specs_failed_; |
70 | |
71 | std::stringstream ss; |
72 | ss << current_context_name() << " "<< desc << ": Unknown exception"<< std::endl; |
73 | failures_.push_back(ss.str()); |
74 | |
75 | stm_ << "UNKNOWN EXCEPTION"<< std::endl; |
76 | } |
77 | |
78 | private: |
79 | std::ostream& stm_; |
80 | }; |
81 | } |
82 | } |
83 | #endif |
84 |