iutest  1.17.1.0
iutest_info.hpp
[詳解]
1 //======================================================================
2 //-----------------------------------------------------------------------
13 //-----------------------------------------------------------------------
14 //======================================================================
15 #ifndef INCG_IRIS_IUTEST_INFO_HPP_764A79A8_E822_4C0F_8CB7_82C635BA28BA_
16 #define INCG_IRIS_IUTEST_INFO_HPP_764A79A8_E822_4C0F_8CB7_82C635BA28BA_
17 
18 //======================================================================
19 // include
20 #include "iutest_body.hpp"
22 
23 namespace iutest
24 {
25 
26 //======================================================================
27 // class
31 class TestInfo
33  : public detail::iu_list_node<TestInfo>
34 #endif
35 {
36 public:
43  TestInfo(detail::iuITestCaseMediator* testcase, const ::std::string& name, detail::iuFactoryBase* factory)
44  : m_testname(name)
45  , m_factory(factory)
46  , m_testcase(testcase)
47  , m_should_run(true)
48  , m_ran(false)
49  , m_disable(detail::IsDisableTestName(name))
50  , m_skip(false)
51  , m_matches_filter(true)
52  {
53  m_mediator.SetPointer(this);
54  }
55 
56 public:
58  const char* test_case_name() const { return m_testcase->test_case_name(); }
60  const char* name() const { return m_testname.c_str(); }
62  bool should_run() const IUTEST_CXX_NOEXCEPT_SPEC { return m_should_run; }
64  bool is_ran() const IUTEST_CXX_NOEXCEPT_SPEC { return m_ran; }
66  bool is_disabled_test() const IUTEST_CXX_NOEXCEPT_SPEC { return m_disable; }
68  bool is_skipped() const IUTEST_CXX_NOEXCEPT_SPEC { return m_skip || m_test_result.Skipped(); }
70  bool is_reportable() const IUTEST_CXX_NOEXCEPT_SPEC { return m_matches_filter; }
72  TimeInMillisec elapsed_time() const { return m_test_result.elapsed_time(); }
74  const TestResult* result() const IUTEST_CXX_NOEXCEPT_SPEC { return &m_test_result; }
75 
77  const char* value_param() const { return m_value_param.empty() ? NULL : m_value_param.c_str(); }
79  const char* type_param() const { return m_testcase->type_param(); }
80 
82  ::std::string testcase_name_with_default_package_name() const
83  {
85  }
86 public:
91  bool HasFatalFailure() const
92  {
93  return m_test_result.HasFatalFailure();
94  }
95 
100  bool HasNonfatalFailure() const
101  {
102  return m_test_result.HasNonfatalFailure();
103  }
104 
109  bool HasFailure() const
110  {
111  return m_test_result.Failed();
112  }
113 
118  bool HasWarning() const
119  {
120  return m_test_result.HasWarning();
121  }
122 
127  bool Passed() const
128  {
129  if( is_skipped() )
130  {
131  return false;
132  }
133  return m_test_result.Passed();
134  }
135 
136 public:
138  ::std::string test_full_name() const
139  {
140  ::std::string fullname = test_case_name();
141  fullname += ".";
142  fullname += name();
143  return fullname;
144  }
145 
147  ::std::string test_name_with_where() const
148  {
149  ::std::string str = m_testname;
150  if( value_param() != NULL )
151  {
152  str += ", where GetParam() = ";
153  str += m_value_param;
154  }
155  return str;
156  }
157 
158 public:
165  static bool ValidateTestPropertyName(const ::std::string& name)
166  {
167  const char* ban[] = { "name", "status", "time", "classname", "type_param", "value_param" };
168 #if !defined(IUTEST_NO_FUNCTION_TEMPLATE_ORDERING)
169  return TestProperty::ValidateName(name, ban);
170 #else
171  return TestProperty::ValidateName(name, ban, ban+IUTEST_PP_COUNTOF(ban));
172 #endif
173  }
174 public:
176  void set_value_param(const char* str) { m_value_param = str; }
177 
178 private:
182  bool Run();
183 
184 private:
185  void RunImpl();
186 
187 #if IUTEST_HAS_SEH && IUTEST_HAS_EXCEPTIONS
188 #if IUTEST_HAS_MINIDUMP
189  void MiniDump(_EXCEPTION_POINTERS* ep);
190 #endif
191  void RunOnMSC(Test* test);
192 #endif
193 
194 private:
198  void clear();
199 
200  /*
201  * @brief テストのフィルタリング
202  * @return 実行する場合は真
203  */
204  bool filter();
205 
209  void skip() { m_skip = true; }
210 
211 private:
212  class Mediator IUTEST_CXX_FINAL : public detail::iuITestInfoMediator
213  {
214  public:
215  explicit Mediator(TestInfo* p=NULL) IUTEST_CXX_NOEXCEPT_SPEC : iuITestInfoMediator(p) {}
216  public:
217  virtual bool HasFatalFailure() const IUTEST_CXX_OVERRIDE
218  {
219  return ptr()->HasFatalFailure();
220  }
221  virtual bool HasNonfatalFailure() const IUTEST_CXX_OVERRIDE
222  {
223  return ptr()->HasNonfatalFailure();
224  }
225  virtual bool HasFailure() const IUTEST_CXX_OVERRIDE
226  {
227  return ptr()->HasFailure();
228  }
229  virtual bool IsSkipped() const IUTEST_CXX_OVERRIDE
230  {
231  return ptr()->is_skipped();
232  }
233  public:
234  void SetPointer(TestInfo* p) { m_test_info = p; }
235  };
236 private:
237  friend class UnitTestImpl;
238  friend class UnitTest;
239  friend class TestCase;
240 
241  ::std::string m_testname;
242  ::std::string m_value_param;
243  TestResult m_test_result;
244  Mediator m_mediator;
245  detail::iuFactoryBase* m_factory;
246  detail::iuITestCaseMediator* m_testcase;
247  bool m_should_run;
248  bool m_ran;
249  bool m_disable;
250  bool m_skip;
251  bool m_matches_filter;
252 
254 };
255 
256 } // end of namespace iutest
257 
258 #if !IUTEST_HAS_LIB
259 # include "impl/iutest_info.ipp"
260 #endif
261 
262 #endif // INCG_IRIS_IUTEST_INFO_HPP_764A79A8_E822_4C0F_8CB7_82C635BA28BA_
iutest::TestResult
テスト結果を示すクラス
Definition: iutest_result.hpp:213
iutest_factory.hpp
iris unit test テストファクトリー ファイル
iutest::TestInfo::testcase_name_with_default_package_name
::std::string testcase_name_with_default_package_name() const
Definition: iutest_info.hpp:83
iutest::TestEnv::AddDefaultPackageName
::std::string AddDefaultPackageName(const char *testcase_name)
default package name を追加
iutest_body.hpp
iris unit test テスト単体クラス ファイル
iutest::TestInfo::is_reportable
bool is_reportable() const IUTEST_CXX_NOEXCEPT_SPEC
Definition: iutest_info.hpp:71
iutest::TestInfo::test_case_name
const char * test_case_name() const
Definition: iutest_info.hpp:59
iutest::TestResult::HasNonfatalFailure
bool HasNonfatalFailure() const
致命的でないエラーがあるかどうか
Definition: iutest_result.hpp:269
iutest::TestResult::elapsed_time
TimeInMillisec elapsed_time() const IUTEST_CXX_NOEXCEPT_SPEC
テストの実行時間の取得
Definition: iutest_result.hpp:287
iutest::TestInfo
テスト情報クラス
Definition: iutest_info.hpp:32
iutest::TestInfo::HasWarning
bool HasWarning() const
警告があるかどうか
Definition: iutest_info.hpp:119
iutest_config.hpp
iris unit test config
IUTEST_USE_OWN_LIST
#define IUTEST_USE_OWN_LIST
テストの所持を独自リストクラスで行う
Definition: iutest_config.hpp:700
IUTEST_CXX_NOEXCEPT_SPEC
#define IUTEST_CXX_NOEXCEPT_SPEC
noexcept specification definition
Definition: iutest_compiler.hpp:734
iutest::TestInfo::is_disabled_test
bool is_disabled_test() const IUTEST_CXX_NOEXCEPT_SPEC
Definition: iutest_info.hpp:67
iutest
iutest root namespace
Definition: iutest_charcode.hpp:31
iutest::TestInfo::should_run
bool should_run() const IUTEST_CXX_NOEXCEPT_SPEC
Definition: iutest_info.hpp:63
iutest::TestInfo::result
const TestResult * result() const IUTEST_CXX_NOEXCEPT_SPEC
Definition: iutest_info.hpp:75
IUTEST_CXX_FINAL
#define IUTEST_CXX_FINAL
final definition
Definition: iutest_compiler.hpp:679
iutest::TestResult::HasWarning
bool HasWarning() const
警告があるかどうか
Definition: iutest_result.hpp:281
iutest::TestInfo::is_ran
bool is_ran() const IUTEST_CXX_NOEXCEPT_SPEC
Definition: iutest_info.hpp:65
iutest::TestInfo::ValidateTestPropertyName
static bool ValidateTestPropertyName(const ::std::string &name)
有効なプロパティ名かどうかチェック
Definition: iutest_info.hpp:166
iutest::TestResult::Failed
bool Failed() const
失敗したかどうか
Definition: iutest_result.hpp:230
iutest::TestInfo::HasFailure
bool HasFailure() const
エラーが出たかどうか
Definition: iutest_info.hpp:110
IUTEST_CXX_OVERRIDE
#define IUTEST_CXX_OVERRIDE
override definition
Definition: iutest_compiler.hpp:670
iutest::TestInfo::value_param
const char * value_param() const
Definition: iutest_info.hpp:78
iutest::TestInfo::elapsed_time
TimeInMillisec elapsed_time() const
Definition: iutest_info.hpp:73
IUTEST_PP_DISALLOW_COPY_AND_ASSIGN
#define IUTEST_PP_DISALLOW_COPY_AND_ASSIGN(TypeName)
コピー禁止定義
Definition: iutest_pp.hpp:25
iutest::TimeInMillisec
detail::type_least_t< 8 >::UInt TimeInMillisec
ミリ秒単位を扱う型
Definition: iutest_defs.hpp:445
iutest::TestResult::HasFatalFailure
bool HasFatalFailure() const
致命的なエラーがあるかどうか
Definition: iutest_result.hpp:263
iutest::TestInfo::test_name_with_where
::std::string test_name_with_where() const
Definition: iutest_info.hpp:148
iutest::TestInfo::HasFatalFailure
bool HasFatalFailure() const
致命的なエラーが出たかどうか
Definition: iutest_info.hpp:92
iutest::TestProperty::ValidateName
static bool ValidateName(const ::std::string &name, Ite begin, Ite end)
有効なキーかどうかチェック
Definition: iutest_result.hpp:191
iutest::TestInfo::is_skipped
bool is_skipped() const IUTEST_CXX_NOEXCEPT_SPEC
Definition: iutest_info.hpp:69
iutest::TestInfo::TestInfo
TestInfo(detail::iuITestCaseMediator *testcase, const ::std::string &name, detail::iuFactoryBase *factory)
コンストラクタ
Definition: iutest_info.hpp:44
iutest::TestResult::Skipped
bool Skipped() const
スキップしたかどうか
Definition: iutest_result.hpp:246
iutest::TestInfo::type_param
const char * type_param() const
Definition: iutest_info.hpp:80
iutest::TestInfo::name
const char * name() const
Definition: iutest_info.hpp:61
iutest::TestInfo::test_full_name
::std::string test_full_name() const
Definition: iutest_info.hpp:139
iutest::TestInfo::HasNonfatalFailure
bool HasNonfatalFailure() const
致命的ではないエラーが出たかどうか
Definition: iutest_info.hpp:101
iutest::TestInfo::Passed
bool Passed() const
成功したかどうか
Definition: iutest_info.hpp:128
iutest::TestResult::Passed
bool Passed() const
成功したかどうか
Definition: iutest_result.hpp:225