xtd - Reference Guide  0.1.1
Modern c++17/20 framework to create console, GUI and unit test applications on Windows, macOS, Linux, iOS and android.
ostream_unit_test.h
Go to the documentation of this file.
1 #pragma once
6 #include "unit_test.h"
7 #include <ostream>
8 
10 namespace xtd {
12  namespace tunit {
21  public:
24  explicit ostream_unit_test(std::ostream& os) noexcept : xtd::tunit::unit_test(std::make_unique<xtd::tunit::ostream_event_listener>(os)), os_(os) {}
25 
30  ostream_unit_test(std::ostream& os, int argc, char* argv[]) : xtd::tunit::unit_test(std::make_unique<xtd::tunit::ostream_event_listener>(os), argc, argv), os_(os) {}
31 
35  std::ostream& ostream() {return os_;}
36 
37  int list_tests(const std::vector<std::string>& tests) override {
38  for (auto name : tests)
39  os_ << name << std::endl;
40  return unit_test::list_tests(tests);
41  }
42 
43  bool parse_arguments(const std::vector<std::string>& args) override {
44  for (auto arg : args)
45  if (arg == "--help") {
46  write_help();
47  return true;
48  }
49  return unit_test::parse_arguments(args);
50  }
51 
52  void write_help() {
53  os_ << "This program contains tests written using xtd::tunit. You can use the" << std::endl;
54  os_ << "following command line flags to control its behavior:" << std::endl;
55  os_ << std::endl;
56  os_ << "Test selection:" << std::endl;
57  os_ << __foreground_color(__console_color::green);
58  os_ << " --list_tests" << std::endl;
59  os_ << __reset_color();
60  os_ << " List the names of all tests instead of running them." << std::endl;
61  os_ << __foreground_color(__console_color::green);
62  os_ << " --filter_tests=";
63  os_ << __reset_color();
64  os_ << __foreground_color(__console_color::yellow);
65  os_ << "[PATTERN]" << std::endl;
66  os_ << __reset_color();
67  os_ << " Run only the tests whose name matches one of the pattern." << std::endl;
68  os_ << " '?' matches any single character; '*' matches any substring." << std::endl;
69  os_ << __foreground_color(__console_color::green);
70  os_ << " --also_run_ignored_tests" << std::endl;
71  os_ << __reset_color();
72  os_ << " Run all ignored tests too." << std::endl;
73  os_ << std::endl;
74  os_ << "Test execution:" << std::endl;
75  os_ << __foreground_color(__console_color::green);
76  os_ << " --repeat_tests=";
77  os_ << __reset_color();
78  os_ << __foreground_color(__console_color::yellow);
79  os_ << "[COUNT]" << std::endl;
80  os_ << __reset_color();
81  os_ << " Run the tests repeatedly; use a negative count to repeat forever." << std::endl;
82  os_ << __foreground_color(__console_color::green);
83  os_ << " --shuffle_tests" << std::endl;
84  os_ << __reset_color();
85  os_ << " Randomize tests' orders on every iteration." << std::endl;
86  os_ << __foreground_color(__console_color::green);
87  os_ << " --random_seed=";
88  os_ << __reset_color();
89  os_ << __foreground_color(__console_color::yellow);
90  os_ << "[NUMBER]" << std::endl;
91  os_ << __reset_color();
92  os_ << " Random number seed to use for shuffling test order. (any number" << std::endl;
93  os_ << " or 0 to use a seed based on the current time)." << std::endl;
94  os_ << std::endl;
95  os_ << "Test output:" << std::endl;
96  os_ << __foreground_color(__console_color::green);
97  os_ << " --output_color=";
98  os_ << __reset_color();
99  os_ << __foreground_color(__console_color::yellow);
100  os_ << "(true|false)" << std::endl;
101  os_ << __reset_color();
102  os_ << " Enable/disable colored output." << std::endl;
103  os_ << __foreground_color(__console_color::green);
104  os_ << " --show_duration=";
105  os_ << __reset_color();
106  os_ << __foreground_color(__console_color::yellow);
107  os_ << "(true|false)" << std::endl;
108  os_ << __reset_color();
109  os_ << " Enable/disable the elapsed time of each test display." << std::endl;
110  os_ << __foreground_color(__console_color::green);
111  os_ << " --output_xml=xml";
112  os_ << __reset_color();
113  os_ << __foreground_color(__console_color::yellow);
114  os_ << "[=PATH]" << std::endl;
115  os_ << __reset_color();
116  os_ << " Generate an xml report in the given directory or with the given file" << std::endl;
117  os_ << " name. PATH defaults to tests.xml." << std::endl;
118  os_ << std::endl;
119  }
120 
121  private:
122  std::ostream& os_;
123  };
124  }
125 }
The ostream_unit_test class is a specialisation of event_listener class for writing events in std::os...
Definition: ostream_event_listener.h:24
The ostream_unit_test class is ostream unit test interface.
Definition: ostream_unit_test.h:20
std::ostream & ostream()
Gets the ostream used by this instance.
Definition: ostream_unit_test.h:35
ostream_unit_test(std::ostream &os) noexcept
Create a new console unit test with ostream specified.
Definition: ostream_unit_test.h:24
ostream_unit_test(std::ostream &os, int argc, char *argv[])
Create a new console unit test with ostream specified, argv specified and argc specified.
Definition: ostream_unit_test.h:30
The template class.
Definition: unit_test.h:32
The xtd namespace contains all fundamental classes to access Hardware, Os, System,...
Definition: system_report.h:17
Contains xtd::tunit::ostream_event_listener class.
Contains xtd::tunit::unit_test class.