iutest  1.17.99.14
iutest_util_tests.hpp
[詳解]
1 //======================================================================
2 //-----------------------------------------------------------------------
13 //-----------------------------------------------------------------------
14 //======================================================================
15 #ifndef INCG_IRIS_IUTEST_UTIL_TESTS_HPP_4095FF9B_D6B8_4CD3_BF86_43DFED1760EA_
16 #define INCG_IRIS_IUTEST_UTIL_TESTS_HPP_4095FF9B_D6B8_4CD3_BF86_43DFED1760EA_
17 
18 //======================================================================
19 // define
20 #if IUTEST_HAS_TESTSUITE
21 # define IUTEST_CLASS_INITIALIZE(methodName) static void SetUpTestSuite() { methodName(); } static void methodName()
22 # define IUTEST_CLASS_CLEANUP(methodName) static void TearDownTestSuite() { methodName(); } static void methodName()
23 #else
24 # define IUTEST_CLASS_INITIALIZE(methodName) static void SetUpTestCase() { methodName(); } static void methodName()
25 # define IUTEST_CLASS_CLEANUP(methodName) static void TearDownTestCase() { methodName(); } static void methodName()
26 #endif
27 
28 #define IUTEST_METHOD_INITIALIZE(methodName) virtual void SetUp() IUTEST_CXX_OVERRIDE { methodName(); } void methodName()
29 #define IUTEST_METHOD_CLEANUP(methodName) virtual void TearDown() IUTEST_CXX_OVERRIDE { methodName(); } void methodName()
30 
31 namespace iuutil
32 {
33 
34 //======================================================================
35 // class
36 
38 namespace backward
39 {
40 
41 template<typename T>
42 class Test : public ::iutest::Test
43 {
44 public:
45 #if IUTEST_HAS_TESTSUITE
46 #if defined(IUTEST_REMOVE_LEGACY_TEST_CASEAPI_)
47  static void SetUpTestSuite() { T::SetUpTestCase(); }
48  static void TearDownTestSuite() { T::TearDownTestCase(); }
49  static void SetUpTestCase() {}
50  static void TearDownTestCase() {}
51 #endif
52 #else
53  static void SetUpTestCase() { T::SetUpTestSuite(); }
54  static void TearDownTestCase() { T::TearDownTestSuite(); }
55  static void SetUpTestSuite() {}
56  static void TearDownTestSuite() {}
57 #endif
58 };
59 
61 {
62 #if IUTEST_HAS_TESTSUITE
63 #if defined(IUTEST_REMOVE_LEGACY_TEST_CASEAPI_)
64  virtual void OnTestSuiteStart(const ::iutest::TestSuite& test_suite) IUTEST_CXX_OVERRIDE { OnTestCaseStart(test_suite); }
65  virtual void OnTestCaseStart(const ::iutest::TestSuite& /*test_suite*/) {}
66  virtual void OnTestSuiteEnd(const ::iutest::TestSuite& test_suite) IUTEST_CXX_OVERRIDE { OnTestCaseEnd(test_suite); }
67  virtual void OnTestCaseEnd(const ::iutest::TestSuite& /*test_suite*/) {}
68 #endif
69 #else
70  virtual void OnTestSuiteStart(const ::iutest::TestCase& /*test_case*/) {}
71  virtual void OnTestCaseStart(const ::iutest::TestCase& test_case) IUTEST_CXX_OVERRIDE { OnTestSuiteStart(test_case); }
72  virtual void OnTestSuiteEnd(const ::iutest::TestCase& /*test_case*/) {}
73  virtual void OnTestCaseEnd(const ::iutest::TestCase& test_case) IUTEST_CXX_OVERRIDE { OnTestSuiteEnd(test_case); }
74 #endif
75 };
76 
77 } // end of namespace backward
78 
79 //======================================================================
80 // function
81 
86 inline const ::iutest::TestSuite* GetTestSuite(int index)
87 {
88 #if IUTEST_HAS_TESTSUITE
89  return ::iutest::UnitTest::GetInstance()->GetTestSuite(index);
90 #else
91  return ::iutest::UnitTest::GetInstance()->GetTestCase(index);
92 #endif
93 }
94 
98 inline const ::iutest::TestSuite* GetCurrentTestSuite()
99 {
100 #if IUTEST_HAS_TESTSUITE
101  return ::iutest::UnitTest::GetInstance()->current_test_suite();
102 #else
103  return ::iutest::UnitTest::GetInstance()->current_test_case();
104 #endif
105 }
106 
110 inline const ::iutest::TestSuite* GetCurrentTestSuite(const ::iutest::UnitTest* unit_test)
111 {
112 #if IUTEST_HAS_TESTSUITE
113  return unit_test->current_test_suite();
114 #else
115  return unit_test->current_test_case();
116 #endif
117 }
118 
123 inline const ::std::string GetTestSuiteName(const ::iutest::TestInfo* test_info)
124 {
125 #if IUTEST_HAS_TESTSUITE
126  return test_info->test_suite_name();
127 #else
128  return test_info->test_case_name();
129 #endif
130 }
131 
135 inline int GetTotalTestSuiteCount()
136 {
137 #if IUTEST_HAS_TESTSUITE
138  return ::iutest::UnitTest::GetInstance()->total_test_suite_count();
139 #else
140  return ::iutest::UnitTest::GetInstance()->total_test_case_count();
141 #endif
142 }
143 
147 inline int GetSuccessfulTestSuiteCount()
148 {
149 #if IUTEST_HAS_TESTSUITE
150  return ::iutest::UnitTest::GetInstance()->successful_test_suite_count();
151 #else
152  return ::iutest::UnitTest::GetInstance()->successful_test_case_count();
153 #endif
154 }
155 
160 inline ::std::string TestFullName(const ::iutest::TestInfo* test_info)
161 {
162  ::std::string fullname = GetTestSuiteName(test_info);
163  fullname += ".";
164  fullname += test_info->name();
165  return fullname;
166 }
167 
172 inline ::std::string TestNameRemoveIndexName(const char* name)
173 {
174  const char* const p = strrchr(name, '/');
175  if( p == NULL )
176  {
177  return name;
178  }
179  return ::std::string(name, p);
180 }
181 
186 inline ::std::string TestSuiteNameRemoveIndexName(const char* name)
187 {
188  return TestNameRemoveIndexName(name);
189 }
190 
195 inline ::std::string TestSuiteNameRemoveInstantiateAndIndexName(const char* name)
196 {
197  // パッケージ名があれば取得
198  const char* const pkg = strrchr(name, '.');
199  // 先頭にインスタンス名がある
200  const char* const p1 = strchr(name, '/');
201  if( p1 == NULL )
202  {
203  return name;
204  }
205  if( pkg == NULL )
206  {
207  return TestSuiteNameRemoveIndexName(p1 + 1);
208  }
209  else
210  {
211  return ::std::string(name, pkg + 1) + TestSuiteNameRemoveIndexName(p1 + 1);
212  }
213 }
214 
219 inline const ::iutest::TestSuite* FindTestSuite(const char* testsuite_name)
220 {
221  if( testsuite_name == NULL )
222  {
223  return NULL;
224  }
225  const int testsuite_count = ::iuutil::GetTotalTestSuiteCount();
226  for( int i=0; i < testsuite_count; ++i )
227  {
228  const ::iutest::TestSuite* testsuite = ::iuutil::GetTestSuite(i);
229  if( strcmp(testsuite->name(), testsuite_name) == 0 )
230  {
231  return testsuite;
232  }
233  }
234  return NULL;
235 }
236 
242 inline const ::iutest::TestSuite* FindParamTestSuite(const char* testsuite_name, const ::iutest::TestSuite* begin=NULL)
243 {
244  if( testsuite_name == NULL )
245  {
246  return NULL;
247  }
248  const int testsuite_count = ::iuutil::GetTotalTestSuiteCount();
249  int i=0;
250  if( begin != NULL )
251  {
252  for( ; i < testsuite_count; ++i )
253  {
254  const ::iutest::TestSuite* testsuite = ::iuutil::GetTestSuite(i);
255  if( testsuite == begin )
256  {
257  break;
258  }
259  }
260  ++i;
261  }
262  for( ; i < testsuite_count; ++i )
263  {
264  const ::iutest::TestSuite* testsuite = ::iuutil::GetTestSuite(i);
265  const char* testsuite_origin_name = strchr(testsuite->name(), '/');
266  if( testsuite_origin_name != NULL )
267  {
268  if( strcmp(testsuite_origin_name+1, testsuite_name) == 0 )
269  {
270  return testsuite;
271  }
272  }
273  }
274  return NULL;
275 }
276 
282 inline const ::iutest::TestSuite* FindTypedTestSuite(const char* testsuite_name, const ::iutest::TestSuite* begin=NULL)
283 {
284  if( testsuite_name == NULL )
285  {
286  return NULL;
287  }
288  const int testsuite_count = ::iuutil::GetTotalTestSuiteCount();
289  int i=0;
290  if( begin != NULL )
291  {
292  for( ; i < testsuite_count; ++i )
293  {
294  const ::iutest::TestSuite* testsuite = ::iuutil::GetTestSuite(i);
295  if( testsuite == begin )
296  {
297  break;
298  }
299  }
300  ++i;
301  }
302  for( ; i < testsuite_count; ++i )
303  {
304  const ::iutest::TestSuite* testsuite = ::iuutil::GetTestSuite(i);
305  if( testsuite != NULL )
306  {
307  const char* name = testsuite->name();
308  if( name != NULL
309  && strstr(name, testsuite_name) == name
310  && name[strlen(testsuite_name)] == '/' )
311  {
312  return testsuite;
313  }
314  }
315  }
316  return NULL;
317 }
318 
324 inline const ::iutest::TestSuite* FindParamTypedTestSuite(const char* testsuite_name, const ::iutest::TestSuite* begin=NULL)
325 {
326  if( testsuite_name == NULL )
327  {
328  return NULL;
329  }
330  const int testsuite_count = ::iuutil::GetTotalTestSuiteCount();
331  int i=0;
332  if( begin != NULL )
333  {
334  for( ; i < testsuite_count; ++i )
335  {
336  const ::iutest::TestSuite* testsuite = ::iuutil::GetTestSuite(i);
337  if( testsuite == begin )
338  {
339  break;
340  }
341  }
342  ++i;
343  }
344  for( ; i < testsuite_count; ++i )
345  {
346  const ::iutest::TestSuite* testsuite = ::iuutil::GetTestSuite(i);
347  const char* name = strchr(testsuite->name(), '/');
348  if( name != NULL )
349  {
350  ++name;
351  if( strstr(name, testsuite_name) == name
352  && name[strlen(testsuite_name)] == '/' )
353  {
354  return testsuite;
355  }
356  }
357  }
358  return NULL;
359 }
360 
364 inline const ::iutest::TestInfo* FindTestInfo(const ::iutest::TestSuite* testsuite, const char* testinfo_name)
365 {
366  if( testsuite == NULL || testinfo_name == NULL )
367  {
368  return NULL;
369  }
370 
371  const int testinfo_count = testsuite->total_test_count();
372  for( int i=0; i < testinfo_count; ++i )
373  {
374  const ::iutest::TestInfo* testinfo = testsuite->GetTestInfo(i);
375  if( strcmp(testinfo->name(), testinfo_name) == 0 )
376  {
377  return testinfo;
378  }
379  }
380  return NULL;
381 }
382 
386 inline const ::iutest::TestInfo* FindTestInfo(const char* testsuite_name, const char* testinfo_name)
387 {
388  if( testsuite_name == NULL || testinfo_name == NULL )
389  {
390  return NULL;
391  }
392  const ::iutest::TestSuite* testsuite = FindTestSuite(testsuite_name);
393  return FindTestInfo(testsuite, testinfo_name);
394 }
395 
399 inline const ::iutest::TestInfo* FindParamTestInfo(const ::iutest::TestSuite* testsuite, const char* testinfo_name
400  , const ::iutest::TestInfo* begin=NULL)
401 {
402  if( testsuite == NULL || testinfo_name == NULL )
403  {
404  return NULL;
405  }
406 
407  const int testinfo_count = testsuite->total_test_count();
408  int i=0;
409  if( begin != NULL )
410  {
411  for( ; i < testinfo_count; ++i )
412  {
413  const ::iutest::TestInfo* testinfo = testsuite->GetTestInfo(i);
414  if( testinfo == begin )
415  {
416  break;
417  }
418  }
419  ++i;
420  }
421 
422  for( ; i < testinfo_count; ++i )
423  {
424  const ::iutest::TestInfo* testinfo = testsuite->GetTestInfo(i);
425  if( testinfo != NULL )
426  {
427  const char* name = testinfo->name();
428  if( name != NULL
429  && strstr(name, testinfo_name) == name
430  && name[strlen(testinfo_name)] == '/' )
431  {
432  return testinfo;
433  }
434  }
435  }
436  return NULL;
437 }
438 
442 inline const ::iutest::TestResult* TestResultPointer(const ::iutest::TestResult* result)
443 {
444  return result;
445 }
449 inline const ::iutest::TestResult* TestResultPointer(const ::iutest::TestResult& result)
450 {
451  return &result;
452 }
453 
457 inline const ::iutest::TestResult* GetAdHocTestResult()
458 {
459 #if !defined(IUTEST_NO_UNITEST_AD_HOC_TEST_RESULT_ACCESSOR)
460  return TestResultPointer(::iutest::UnitTest::GetInstance()->ad_hoc_test_result());
461 #else
462  return NULL;
463 #endif
464 }
465 
469 inline const ::iutest::TestResult* GetTestSuiteAdHocResult(const ::iutest::TestSuite* test_suite)
470 {
471 #if !defined(IUTEST_NO_TESTCASE_AD_HOC_TEST_RESULT_ACCESSOR)
472  return TestResultPointer(test_suite->ad_hoc_test_result());
473 #else
474  IUTEST_UNUSED_VAR(test_suite);
475  return GetAdHocTestResult();
476 #endif
477 }
478 
482 inline const ::iutest::TestResult* GetCurrentTestSuiteAdHocResult()
483 {
485 }
486 
490 inline const ::iutest::TestResult* GetTestResult(const ::iutest::TestInfo* test_info)
491 {
492  return TestResultPointer(test_info->result());
493 }
494 
498 inline const ::iutest::TestResult* GetCurrentTestResult()
499 {
500  return GetTestResult(::iutest::UnitTest::GetInstance()->current_test_info());
501 }
502 
503 #if IUTEST_HAS_TESTCASE
504 
505 inline const ::iutest::TestCase* GetTestCase(int index) { return GetTestSuite(index); }
506 inline const ::iutest::TestCase* GetCurrentTestCase() { return GetCurrentTestSuite(); }
507 inline const ::iutest::TestCase* GetCurrentTestCase(const ::iutest::UnitTest* unit_test) { return GetCurrentTestSuite(unit_test); }
508 inline const ::std::string GetTestCaseName(const ::iutest::TestInfo* test_info) { return GetTestSuiteName(test_info); }
509 inline int GetSuccessfulTestCaseCount() { return GetSuccessfulTestSuiteCount(); }
510 inline int GetTotalTestCaseCount() { return GetTotalTestSuiteCount(); }
511 
512 inline ::std::string TestCaseNameRemoveIndexName(const char* name) { return TestSuiteNameRemoveIndexName(name); }
513 inline ::std::string TestCaseNameRemoveInstantiateAndIndexName(const char* name) { return TestSuiteNameRemoveInstantiateAndIndexName(name); }
514 inline const ::iutest::TestCase* FindTestCase(const char* name) { return FindTestSuite(name); }
515 
516 inline const ::iutest::TestCase* FindParamTestCase(const char* name, const ::iutest::TestCase* begin=NULL)
517 {
518  return FindParamTestSuite(name, begin);
519 }
520 inline const ::iutest::TestCase* FindTypedTestCase(const char* name, const ::iutest::TestCase* begin=NULL)
521 {
522  return FindTypedTestSuite(name, begin);
523 }
524 inline const ::iutest::TestCase* FindParamTypedTestCase(const char* name, const ::iutest::TestCase* begin=NULL)
525 {
526  return FindParamTypedTestSuite(name, begin);
527 }
528 inline const ::iutest::TestResult* GetTestCaseAdHocResult(const ::iutest::TestCase* testcase)
529 {
530  return GetTestSuiteAdHocResult(testcase);
531 }
532 inline const ::iutest::TestResult* GetCurrentTestCaseAdHocResult()
533 {
535 }
536 
537 #endif
538 
539 } // end of namespace iuutil
540 
541 #endif // INCG_IRIS_IUTEST_UTIL_TESTS_HPP_4095FF9B_D6B8_4CD3_BF86_43DFED1760EA_
イベントリスナー
Definition: iutest_listener.hpp:64
テストベース
Definition: iutest_body.hpp:44
static UnitTest * GetInstance()
UnitTest インスタンスの取得
Definition: iutest_core.hpp:43
Definition: iutest_util_tests.hpp:62
Definition: iutest_util_tests.hpp:44
#define IUTEST_CXX_OVERRIDE
override definition
Definition: iutest_compiler.hpp:747
iutest utility namespace
Definition: iutest_util.hpp:36
const ::std::string GetTestSuiteName(const ::iutest::TestInfo *test_info)
Get TestSuite Name
Definition: iutest_util_tests.hpp:124
const ::iutest::TestSuite * GetTestSuite(int index)
Get TestSuite by index
Definition: iutest_util_tests.hpp:87
const ::iutest::TestSuite * FindTypedTestSuite(const char *testsuite_name, const ::iutest::TestSuite *begin=NULL)
Typed Test の TestSuite の検索
Definition: iutest_util_tests.hpp:283
const ::iutest::TestResult * GetTestResult(const ::iutest::TestInfo *test_info)
get test result
Definition: iutest_util_tests.hpp:491
inline ::std::string TestSuiteNameRemoveInstantiateAndIndexName(const char *name)
インスタンス名とインデックスを除いた TestSuite 名を取得
Definition: iutest_util_tests.hpp:196
const ::iutest::TestSuite * FindParamTypedTestSuite(const char *testsuite_name, const ::iutest::TestSuite *begin=NULL)
Type Parameter Test の TestSuite の検索
Definition: iutest_util_tests.hpp:325
const ::iutest::TestSuite * GetCurrentTestSuite()
現在の TestSuite を取得
Definition: iutest_util_tests.hpp:99
const ::iutest::TestResult * GetCurrentTestResult()
get test result
Definition: iutest_util_tests.hpp:499
int GetTotalTestSuiteCount()
Get total TestSuite count
Definition: iutest_util_tests.hpp:136
inline ::std::string TestNameRemoveIndexName(const char *name)
インデックスを除いたテスト名を取得
Definition: iutest_util_tests.hpp:173
const ::iutest::TestSuite * FindParamTestSuite(const char *testsuite_name, const ::iutest::TestSuite *begin=NULL)
TestSuite の検索
Definition: iutest_util_tests.hpp:243
int GetSuccessfulTestSuiteCount()
Get successful TestSuite count
Definition: iutest_util_tests.hpp:148
const ::iutest::TestResult * GetCurrentTestSuiteAdHocResult()
TestSuite の ad_hoc_test_result の取得
Definition: iutest_util_tests.hpp:483
const ::iutest::TestResult * GetAdHocTestResult()
ad_hoc_test_result の取得
Definition: iutest_util_tests.hpp:458
inline ::std::string TestSuiteNameRemoveIndexName(const char *name)
インデックスを除いた TestSuite 名を取得
Definition: iutest_util_tests.hpp:187
const ::iutest::TestInfo * FindParamTestInfo(const ::iutest::TestSuite *testsuite, const char *testinfo_name, const ::iutest::TestInfo *begin=NULL)
TestInfo の検索
Definition: iutest_util_tests.hpp:400
const ::iutest::TestResult * GetTestSuiteAdHocResult(const ::iutest::TestSuite *test_suite)
TestSuite の ad_hoc_test_result の取得
Definition: iutest_util_tests.hpp:470
inline ::std::string TestFullName(const ::iutest::TestInfo *test_info)
Get TestName
Definition: iutest_util_tests.hpp:161
const ::iutest::TestInfo * FindTestInfo(const ::iutest::TestSuite *testsuite, const char *testinfo_name)
TestInfo の検索
Definition: iutest_util_tests.hpp:365
const ::iutest::TestSuite * FindTestSuite(const char *testsuite_name)
TestSuite の検索
Definition: iutest_util_tests.hpp:220