iutest  1.17.99.14
iutest_progress_printer.hpp
[詳解]
1 //======================================================================
2 //-----------------------------------------------------------------------
13 //-----------------------------------------------------------------------
14 //======================================================================
15 #ifndef INCG_IRIS_IUTEST_PROGRESS_PRINTER_HPP_D31CE626_EA82_4265_B2B6_50EC5C63CFB6_
16 #define INCG_IRIS_IUTEST_PROGRESS_PRINTER_HPP_D31CE626_EA82_4265_B2B6_50EC5C63CFB6_
17 
18 //======================================================================
19 // include
20 #include "../iutest_core.hpp"
21 
22 namespace iutest
23 {
24 
25 //======================================================================
26 // class
30 class ProgressPrintListener : public EmptyTestEventListener
31 {
32 public:
33  ProgressPrintListener() : m_should_run_num(0), m_ran_num(0) {}
34 public:
35  virtual void OnTestProgramStart(const UnitTest& test) IUTEST_CXX_OVERRIDE;
36  virtual void OnTestIterationStart(const UnitTest& test
37  , int iteration) IUTEST_CXX_OVERRIDE;
38  virtual void OnTestEnd(const TestInfo& test_info) IUTEST_CXX_OVERRIDE;
39 
40 private:
41  int m_should_run_num;
42  int m_ran_num;
43 
44 public:
48  static TestEventListener* SetUp()
49  {
51  delete listeners.Release(listeners.default_result_printer());
53  listeners.Append(p);
54  return p;
55  }
56 };
57 
58 inline void ProgressPrintListener::OnTestProgramStart(const UnitTest& test)
59 {
60  IUTEST_UNUSED_VAR(test);
61 
62  detail::iuConsole::output("0%% 10 20 30 40 50 60 70 80 90 100%%\n");
63  detail::iuConsole::output("|----|----|----|----|----|----|----|----|----|----| \n");
64 }
66  , int iteration)
67 {
68  IUTEST_UNUSED_VAR(iteration);
69 
70  m_should_run_num = test.test_to_run_count();
71  m_ran_num = 0;
72 }
73 inline void ProgressPrintListener::OnTestEnd(const TestInfo& test_info)
74 {
75  IUTEST_UNUSED_VAR(test_info);
76 
77  ++m_ran_num;
78  const int star_count = 51;
79  const int n = (m_ran_num * star_count) / m_should_run_num;
80  char progress[star_count + 2] = { 0 };
81  for( int i=0; i < n; ++i )
82  {
83  progress[i] = '*';
84  }
85  progress[n] = m_ran_num == m_should_run_num ? '\n' : '\r';
86  progress[n + 1] = '\0';
87  detail::iuConsole::output("%s", progress);
88 }
89 
90 } // end of namespace iutest
91 
92 #endif // INCG_IRIS_IUTEST_PROGRESS_PRINTER_HPP_D31CE626_EA82_4265_B2B6_50EC5C63CFB6_
プログレス出力イベントリスナー
Definition: iutest_progress_printer.hpp:32
virtual void OnTestProgramStart(const UnitTest &test) IUTEST_CXX_OVERRIDE
テストプログラム開始時に呼ばれます
Definition: iutest_progress_printer.hpp:59
virtual void OnTestEnd(const TestInfo &test_info) IUTEST_CXX_OVERRIDE
テスト終了時にに呼ばれます
Definition: iutest_progress_printer.hpp:74
virtual void OnTestIterationStart(const UnitTest &test, int iteration) IUTEST_CXX_OVERRIDE
単体テスト開始時に毎回呼ばれます
Definition: iutest_progress_printer.hpp:66
static TestEventListener * SetUp()
ProgressPrintListener に切り替え
Definition: iutest_progress_printer.hpp:49
イベントリスナー
Definition: iutest_listener.hpp:64
イベントリスナーの管理クラス
Definition: iutest_listener.hpp:169
TestEventListener * Release(TestEventListener *listener)
リスナーの解放
Definition: iutest_listener.hpp:184
void Append(TestEventListener *listener)
リスナーの追加
Definition: iutest_listener.hpp:179
TestEventListener * default_result_printer() const IUTEST_CXX_NOEXCEPT_SPEC
デフォルト出力リスナーの取得
Definition: iutest_listener.hpp:201
テスト情報クラス
Definition: iutest_info.hpp:38
テスト全体の管理者
Definition: iutest_core.hpp:36
static UnitTest * GetInstance()
UnitTest インスタンスの取得
Definition: iutest_core.hpp:43
TestEventListeners & listeners() const
Definition: iutest_core.hpp:123
#define IUTEST_CXX_OVERRIDE
override definition
Definition: iutest_compiler.hpp:747
iutest root namespace
Definition: iutest_charcode.hpp:33