xtd - Reference Guide  0.1.0
Modern c++17/20 framework to create console, GUI and unit test applications on Windows, macOS, Linux, iOS and android.
All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Modules Pages
test.h
Go to the documentation of this file.
1
4#pragma once
5
6#include "../tunit_export.h"
7#include "assert.h"
8#include "assert_error.h"
10#include <functional>
11#include <chrono>
12#include <string>
13
15namespace xtd {
17 namespace tunit {
19 class test_class;
20 class unit_test;
21 class valid;
23
24 class tunit_export_ test final {
25 enum class test_status {
26 not_started,
27 ignored,
28 succeed,
29 aborted,
30 failed
31 };
32
33 public:
34 test() = default;
35 test(const std::string& name, const std::function<void()>& method, const xtd::diagnostics::stack_frame& caller) noexcept : test(name, method, false, caller) {}
36 test(const std::string& name, const std::function<void()>& method, bool ignore, const xtd::diagnostics::stack_frame& stack_frame) noexcept : stack_frame_(stack_frame), method_(method), name_(name), status_(ignore ? test_status::ignored : test_status::not_started) {}
37
38 bool aborted() const noexcept {return status_ == test_status::aborted;}
39
40 const std::string& actual() const noexcept {return actual_;}
41
42 const std::string& expect() const noexcept {return expect_;}
43
44 bool failed() const noexcept {return status_ == test_status::failed;}
45
46 bool ignored() const noexcept {return status_ == test_status::ignored;}
47
48 bool not_started() const noexcept {return status_ == test_status::not_started;}
49
50 bool succeed() const noexcept {return status_ == test_status::succeed;}
51
52 const xtd::diagnostics::stack_frame stack_frame() const noexcept {return stack_frame_;}
53
54 std::function<void()> method() const noexcept {return method_;}
55
56 const std::string& message() const noexcept {return message_;}
57
58 const std::string& name() const noexcept {return name_;}
59
60 const std::string& user_message() const noexcept {return user_message_;}
61
62 std::chrono::milliseconds elapsed_time() const noexcept {
63 using namespace std::chrono_literals;
64 if (start_time_point.time_since_epoch() == 0ms && end_time_point.time_since_epoch() == 0ms) return 0ms;
65 if (end_time_point.time_since_epoch() == 0ms) return std::chrono::duration_cast<std::chrono::milliseconds>(std::chrono::high_resolution_clock::now() - start_time_point);
66 return std::chrono::duration_cast<std::chrono::milliseconds>(end_time_point - start_time_point);
67 }
68
70 static intptr_t __internal_tunit_unit_tests_mode__;
72
73 private:
74 friend class xtd::tunit::assert;
75 friend class xtd::tunit::base_assert;
76 friend class xtd::tunit::test_class;
77 friend class xtd::tunit::valid;
78 static test& current_test() {return *current_test_;}
79 static const test_class& current_test_class() {return *current_test_class_;}
80 static const unit_test& current_unit_test() {return *current_unit_test_;}
81
83
84 std::chrono::high_resolution_clock::time_point end_time_point;
85 static test* current_test_;
86 static const test_class* current_test_class_;
87 static const unit_test* current_unit_test_;
88 std::string actual_;
89 std::string expect_;
91 std::string message_;
92 std::function<void()> method_;
93 std::string name_;
94 std::chrono::high_resolution_clock::time_point start_time_point;
95 test_status status_ = test_status::not_started;
96 std::string user_message_;
97 };
98 }
99}
Contains xtd::tunit::assert class.
Contains xtd::tunit::assert_error exception.
Provides information about a xtd::diagnostics::stack_frame, which represents a function call on the c...
Definition: stack_frame.h:29
static stack_frame empty() noexcept
Return an empty stack frame.
The assert class contains a collection of static methods that implement the most common assertions us...
Definition: assert.h:34
The base class for assert.
Definition: base_assert.h:25
Definition: test_class.h:25
Definition: test.h:24
The template class.
Definition: unit_test.h:32
The valid class contains a collection of static methods that implement the most common assertions use...
Definition: valid.h:20
#define tunit_export_
Define shared library export.
Definition: tunit_export.h:13
@ ignored
Test is ignored.
The xtd namespace contains all fundamental classes to access Hardware, Os, System,...
Definition: system_report.h:17
Contains xtd::diagnostics::stack_frame class.