tunit - Reference Guide  1.0.0
Modern c++17 unit testing framework on Windows, macOS, Linux, iOS and android.
test_class.h
Go to the documentation of this file.
1 #pragma once
6 #include "settings.h"
10 #include <chrono>
11 #include <vector>
12 
14 namespace tunit {
16  class registered_test_class;
17  class test;
18  class unit_test;
20 
21  class test_class {
22  public:
24  test_class() = default;
25  test_class(const test_class&) = default;
26  test_class& operator=(const test_class&) = default;
27  virtual ~test_class() = default;
29 
30  std::chrono::milliseconds elapsed_time() const noexcept {
31  using namespace std::chrono_literals;
32  if (this->start_time_point.time_since_epoch() == 0ms && this->end_time_point.time_since_epoch() == 0ms) return 0ms;
33  if (this->end_time_point.time_since_epoch() == 0ms) return std::chrono::duration_cast<std::chrono::milliseconds>(std::chrono::high_resolution_clock::now() - this->start_time_point);
34  return std::chrono::duration_cast<std::chrono::milliseconds>(this->end_time_point - this->start_time_point);
35  }
36 
37  std::string name() const noexcept {return this->name_;}
38 
39  size_t test_count() const noexcept {
40  size_t count = 0;
41  for (auto method : this->tests_)
42  if (settings::default_settings().is_match_test_name(this->name(), method.name())) count++;
43  return count;
44  }
45 
46  size_t aborted_test_count() const noexcept {
47  size_t count = 0;
48  for (auto method : this->tests_)
49  if (settings::default_settings().is_match_test_name(this->name(), method.name()) && method.aborted()) count++;
50  return count;
51  }
52 
53  size_t failed_test_count() const noexcept {
54  size_t count = 0;
55  for (auto method : this->tests_)
56  if (settings::default_settings().is_match_test_name(this->name(), method.name()) && method.failed()) count++;
57  return count;
58  }
59 
60  size_t ignored_test_count() const noexcept {
61  size_t count = 0;
62  for (auto method : this->tests_)
63  if (settings::default_settings().is_match_test_name(this->name(), method.name()) && method.ignored()) count++;
64  return count;
65  }
66 
67  size_t succeed_test_count() const noexcept {
68  size_t count = 0;
69  for (auto method : this->tests_)
70  if (settings::default_settings().is_match_test_name(this->name(), method.name()) && method.succeed()) count++;
71  return count;
72  }
73 
74  const std::vector<tunit::test>& tests() const noexcept {return this->tests_;}
75 
76  protected:
77  void add_class_cleanup(const tunit::test& class_cleanup) noexcept {this->class_cleanup_ = class_cleanup;}
78 
79  void add_class_initialize(const tunit::test& class_initialize) noexcept {this->class_initialize_ = class_initialize;}
80 
81  void add_test_cleanup(const tunit::test& test_cleanup) noexcept {this->test_cleanup_ = test_cleanup;}
82 
83  void add_test_initialize(const tunit::test& test_initialize) noexcept {this->test_initialize_ = test_initialize;}
84 
85  void add_test_method(const tunit::test& test) noexcept {this->tests_.push_back(test);}
86 
87  private:
88  friend class tunit::test;
89  friend class tunit::unit_test;
91  friend class tunit::class_cleanup_attribute;
92  friend class tunit::registered_test_class;
94  friend class tunit::test_cleanup_attribute;
95  friend class tunit::test_method_attribute;
96 
97  const tunit::test& class_cleanup() const noexcept {return this->class_cleanup_;}
98  const tunit::test& class_initialize() const noexcept {return this->class_initialize_;}
99  const tunit::test& test_cleanup() const noexcept {return this->test_cleanup_;}
100  const tunit::test& test_initialize() const noexcept {return this->test_initialize_;}
101  const std::vector<tunit::test>& test_methods() const noexcept {return this->tests_;}
102 
103  void run(const tunit::unit_test& unit_test);
104 
107  std::chrono::high_resolution_clock::time_point end_time_point;
108  std::string name_;
109  std::chrono::high_resolution_clock::time_point start_time_point;
110  tunit::test test_cleanup_;
111  tunit::test test_initialize_;
112  std::vector<tunit::test> tests_;
113  };
114 }
115 
116 #define test_class_(class_name) \
117  class_name;\
118  tunit::test_class_attribute<class_name> __##class_name##_attribute {#class_name}; \
119  class class_name : public tunit::test_class
120 
121 #define test_class_from_(class_name, from_class_name) \
122  class_name;\
123  tunit::test_class_attribute<class_name> __##class_name##_attribute {#class_name}; \
124  class class_name : public from_class_name
125 
#define class_cleanup_(method_name)
add cleaup class method to class test.
Definition: class_cleanup_attribute.h:31
Definition: test_class.h:21
Contains tunit::test_method_attribute class.
Contains tunit::test_cleanup_attribute class.
static tunit::settings & default_settings() noexcept
Get default settings intance.
Definition: settings.h:23
Definition: test_method_attribute.h:9
Contains tunit::class_initialize_attribute class.
Definition: test_cleanup_attribute.h:8
Definition: test_initialize_attribute.h:8
The template class.
Definition: unit_test.h:23
This attribute is use to add initialize class method to class test attribute.
Definition: class_initialize_attribute.h:9
This attribute is use to add cleaup class method to class test attribute.
Definition: class_cleanup_attribute.h:9
Contains tunit::class_cleanup_attribute class.
The tunit namespace contains a unit test library.
Definition: abort_error.h:8
Contains tunit::settings class.
Definition: registered_test_class.h:10
Definition: test.h:20
#define class_initialize_(method_name)
add initialize class method to class test.
Definition: class_initialize_attribute.h:31
Contains tunit::test_initialize_attribute class.