Solution46
CAppTestMenuConsole.cpp
[詳解]
1 //=============================================================================
2 /// @file
3 /// テストアプリケーションコンソールメニュー実装ファイル
4 ///
5 /// テストアプリケーションコンソールメニュー実装ファイルです。
6 ///
7 /// $Id: CAppTestMenuConsole.cpp 245 2019-03-20 15:03:41Z admin $
8 /// $Date: 2019-03-21 00:03:41 +0900 (2019/03/21 (木)) $
9 /// $Author: admin $
10 ///
11 /// @attention なし
12 
13 #pragma managed( push, off )
14 
15 //=============================================================================
16 // インクルードファイル
17 #include <CAppTestMenuConsole.h>
18 #include <CConsole.h>
19 #include <CProcess.h>
20 #include <AppTest.h>
21 #include <LibCommon.h>
22 #include <LibUtility.h>
23 #include <LibLogOut.h>
24 #include <LibNewDel.h>
25 #include <LibJson.h>
26 #include <LibWindow.h>
27 
28 //=============================================================================
29 // テストアプリケーション名前空間
30 namespace AppTest {
31  //=========================================================================
32  // テストアプリケーションコンソールメニュークラス
33  //=========================================================================
34  // 構築子と解体子
35  //-------------------------------------------------------------------------
36  // コンストラクタ
38  // 基底クラスコンストラクタ
39  : CAppTestMenuBase( &s_sMenuInfo )
40  {}
41 
42  //=========================================================================
43  // 公開関数
44  //-------------------------------------------------------------------------
45  // メニューコールバック関数
46  bool CAppTestMenuConsole::MenuCallBackProc( bool bPreCallBack ) noexcept {
47  // 処理ブロック
48  bool result = false;
49  do {
50  // インデックスを調べる
51  switch ( static_cast< EMenuItem >( m_nMenuIndex ) ) {
52  case EMenuItem::ShowProjectInfo: result = ShowProjectInfo ( bPreCallBack ); break; // プロジェクト情報表示
53  case EMenuItem::EnableNewDel: result = EnableNewDelLog ( bPreCallBack ); break; // 生成消滅ログ許可
54  case EMenuItem::DisableNewDel: result = DisableNewDelLog ( bPreCallBack ); break; // 生成消滅ログ禁止
55  case EMenuItem::FlushLog: result = FlushLog ( bPreCallBack ); break; // ログ出力フラッシュ
56  case EMenuItem::GenerateFatalError: result = GenerateFatalError( bPreCallBack ); break; // 致命的エラー発生
57  case EMenuItem::TestInputString: result = TestInputString ( bPreCallBack ); break; // 文字列入力テスト
58  }
59  } while ( false );
60 
61  // 実行結果を返す
62  return result;
63  }
64 
65  //-------------------------------------------------------------------------
66  // プロジェクト情報表示関数
67  bool CAppTestMenuConsole::ShowProjectInfo( bool bPreCallBack ) noexcept {
68  LogOutHeader();
69 
70  // 処理ブロック
71  bool result = false;
72  do {
73  // 事前コールバックフラグを調べる
74  if ( bPreCallBack ) {
75  // 継続!
76  result = true;
77  break;
78  }
79 
80  // プロジェクト情報を表示する
81  ConsoleLine( L"■共通ライブラリ" );
82  ConsoleLine( L" プロジェクト種別:%s", CLibCommon::GetProjectType() );
83  ConsoleLine( L" モジュールパス :%s", GetModuleName( CLibCommon::GetInstanceHandle() ) );
85 
86  ConsoleLine( L"■ログ出力ライブラリ" );
87  ConsoleLine( L" プロジェクト種別:%s", CLibLogOut::GetProjectType() );
88  ConsoleLine( L" モジュールパス :%s", GetModuleName( CLibLogOut::GetInstanceHandle() ) );
90 
91  ConsoleLine( L"■生成消滅演算子ライブラリ" );
92  ConsoleLine( L" プロジェクト種別:%s", CLibNewDel::GetProjectType() );
93  ConsoleLine( L" モジュールパス :%s", GetModuleName( CLibNewDel::GetInstanceHandle() ) );
95 
96  ConsoleLine( L"■JSONライブラリ" );
97  ConsoleLine( L" プロジェクト種別:%s", CLibJson::GetProjectType() );
98  ConsoleLine( L" モジュールパス :%s", GetModuleName( CLibJson::GetInstanceHandle() ) );
100 
101  ConsoleLine( L"■ウィンドウライブラリ" );
102  ConsoleLine( L" プロジェクト種別:%s", CLibWindow::GetProjectType() );
103  ConsoleLine( L" モジュールパス :%s", GetModuleName( CLibWindow::GetInstanceHandle() ) );
104  ConsoleNewLine();
105 
106  ConsoleLine( L"プロジェクト情報を表示しました。" );
107  ConsoleNewLine();
108  } while ( false );
109 
110  // 実行結果を返す
111  LogOutFooter();
112  return result;
113  }
114 
115  //-------------------------------------------------------------------------
116  // 生成消滅ログ許可関数
117  bool CAppTestMenuConsole::EnableNewDelLog( bool bPreCallBack ) noexcept {
118  LogOutHeader();
119 
120  // 処理ブロック
121  bool result = false;
122  do {
123  // 事前コールバックフラグを調べる
124  if ( bPreCallBack ) {
125  // 継続!
126  result = true;
127  break;
128  }
129 
130  // 生成消滅ログ出力を許可する
131  NewDelLogOut() = true;
132 
133  // 生成消滅演算子ログ出力のテスト
134  LogOutLine( L"これはテストです。" );
135  int* pnInt = new int;
136  delete pnInt;
137 
138  // 終了!
139  ConsoleLine( L"生成消滅ログ出力を許可しました。" );
140  ConsoleNewLine();
141  } while ( false );
142 
143  // 実行結果を返す
144  LogOutFooter();
145  return result;
146  }
147 
148  //-------------------------------------------------------------------------
149  // 生成消滅ログ禁止関数
150  bool CAppTestMenuConsole::DisableNewDelLog( bool bPreCallBack ) noexcept {
151  LogOutHeader();
152 
153  // 処理ブロック
154  bool result = false;
155  do {
156  // 事前コールバックフラグを調べる
157  if ( bPreCallBack ) {
158  // 継続!
159  result = true;
160  break;
161  }
162 
163  // 生成消滅ログ出力を禁止する
164  NewDelLogOut() = false;
165 
166  // ログをフラッシュする
167  LogOutFlush();
168 
169  // 終了!
170  ConsoleLine( L"生成消滅ログ出力を禁止しました。" );
171  ConsoleNewLine();
172  } while ( false );
173 
174  // 実行結果を返す
175  LogOutFooter();
176  return result;
177  }
178 
179  //-------------------------------------------------------------------------
180  // ログ出力フラッシュ関数
181  bool CAppTestMenuConsole::FlushLog( bool bPreCallBack ) noexcept {
182  LogOutHeader();
183 
184  // 処理ブロック
185  bool result = false;
186  do {
187  // 事前コールバックフラグを調べる
188  if ( bPreCallBack ) {
189  // ログ出力バッファカウントを調べる
190  if ( 0 >= LogOutBufferCount() ) {
191  // 失敗!
192  ConsoleLine( L"まだログが溜まっていませんでした。" );
193  ConsoleNewLine();
194  result = false;
195  break;
196  }
197 
198  // 継続!
199  result = true;
200  break;
201  }
202 
203  // コンソールデバイスのログ出力プロセスを設定する
204  LogOutDevice( LogOutConsole, ::GetCurrentProcessId() );
205 
206  // ログ出力をフラッシュする
207  LogOutFlush();
208  ConsoleNewLine();
209 
210  // 終了!
211  ConsoleLine( L"ログ出力をフラッシュしました。" );
212  ConsoleNewLine();
213  } while ( false );
214 
215  // 実行結果を返す
216  LogOutFooter();
217  return result;
218  }
219 
220  //-------------------------------------------------------------------------
221  // 致命的エラー発生関数
222  bool CAppTestMenuConsole::GenerateFatalError( bool bPreCallBack ) noexcept {
223  LogOutHeader();
224 
225  // 処理ブロック
226  bool result = false;
227  do {
228  // 事前コールバックフラグを調べる
229  if ( bPreCallBack ) {
230  // 致命的エラー!
232 
233  // 終了!
234  ConsoleLine( L"致命的エラー発生による強制終了をキャンセルしました。" );
235  ConsoleNewLine();
236  break;
237  }
238  } while ( false );
239 
240  // 実行結果を返す
241  LogOutFooter();
242  return result;
243  }
244 
245  //-------------------------------------------------------------------------
246  // 文字列入力テスト関数
247  bool CAppTestMenuConsole::TestInputString( bool bPreCallBack ) noexcept {
248  LogOutHeader();
249 
250  // 処理ブロック
251  bool result = false;
252  do {
253  // 事前コールバックフラグを調べる
254  if ( bPreCallBack ) {
255  // 継続!
256  result = true;
257  break;
258  }
259 
260  // 文字列を入力する
261  ConsoleString( L" 入力:" );
262  wchar_t szBuffer[ MAX_PATH ];
263  size_t uCount = ConsoleInput( szBuffer, MAX_PATH, L"こんにちわ、世界!" );
264  ConsoleNewLine();
265  if ( 0 < uCount ) {
266  ConsoleLine( L" 結果:%s", szBuffer );
267  }
268  else {
269  ConsoleLine( L" 中止しました。" );
270  }
271  ConsoleNewLine();
272 
273  // 終了!
274  ConsoleLine( L"文字列を入力しました。" );
275  ConsoleNewLine();
276  } while ( false );
277 
278  // 実行結果を返す
279  LogOutFooter();
280  return result;
281  }
282 
283  //=========================================================================
284  // 静的限定公開定数
285  //-------------------------------------------------------------------------
286  // メニュー定義情報構造体
288  L"コンソールメニュー", // メニュー名称
289  static_cast< int >( EMenuItem::Size ), // メニュー項目数
290  s_sItemInfo, // メニュー項目情報配列
291  };
292 
293  //-------------------------------------------------------------------------
294  // メニュー項目情報配列
296  { L"プロジェクト情報表示" }, // ShowProjectInfo
297  { L"生成消滅ログ許可" }, // EnableNewDel
298  { L"生成消滅ログ禁止" }, // DisableNewDel
299  { L"ログ出力フラッシュ" }, // FlushLog
300  { L"致命的エラー発生" }, // GenerateFatalError
301  { L"文字列入力テスト" }, // TestInputString
302  };
303 }
304 
305 #pragma managed( pop )
テストアプリケーション名前空間
Definition: AppTest.h:25
#define LogOutHeader()
関数ヘッダマクロ
Definition: LibLogOut.h:47
static wchar_t const * GetProjectType() noexcept
プロジェクト種別取得関数
Definition: LibLogOut.cpp:755
#define LogOutDevice(...)
出力デバイスプロセス設定マクロ
Definition: LibLogOut.h:52
#define NotifyFatalError()
致命的エラー発生通知マクロ
Definition: LibUtility.h:22
ウィンドウ子ライブラリヘッダファイル
#define LogOutLine(...)
ヘッダインデントなし書式設定文字列行出力マクロ
Definition: LibLogOut.h:40
#define LogOutBufferCount()
バッファカウント取得マクロ
Definition: LibLogOut.h:49
メニュー定義情報構造体
Definition: CConsoleMenu.h:55
static wchar_t const * GetProjectType() noexcept
プロジェクト種別取得関数
Definition: LibWindow.cpp:33
#define LogOutFooter()
関数フッタマクロ
Definition: LibLogOut.h:50
static HINSTANCE GetInstanceHandle() noexcept
インスタンスハンドル取得関数
Definition: LibLogOut.cpp:762
static HINSTANCE GetInstanceHandle() noexcept
インスタンスハンドル取得関数
Definition: LibNewDel.cpp:323
virtual bool EnableNewDelLog(bool bPreCallBack) noexcept
virtual bool MenuCallBackProc(bool bPreCallBack) noexcept override
メニューコールバック関数
プロセスクラスヘッダファイル
#define ConsoleNewLine()
改行出力マクロ
Definition: CConsole.h:29
テストアプリケーションコンソールメニュークラスヘッダファイル
JSONライブラリヘッダファイル
#define LogOutFlush()
フラッシュマクロ
Definition: LibLogOut.h:51
static wchar_t const * GetProjectType() noexcept
プロジェクト種別取得関数
Definition: LibNewDel.cpp:316
virtual bool TestInputString(bool bPreCallBack) noexcept
static HINSTANCE GetInstanceHandle() noexcept
インスタンスハンドル取得関数
Definition: LibWindow.cpp:40
int m_nMenuIndex
メニュー項目インデックス
Definition: CConsoleMenu.h:230
コンソール入出力クラスヘッダコンソール
#define ConsoleString(...)
文字列出力マクロ
Definition: CConsole.h:27
CAppTestMenuConsole() noexcept
コンストラクタ
static HINSTANCE GetInstanceHandle() noexcept
インスタンスハンドル取得関数
Definition: LibJson.cpp:40
virtual bool FlushLog(bool bPreCallBack) noexcept
static wchar_t const * GetProjectType() noexcept
プロジェクト種別取得関数
Definition: LibJson.cpp:33
LIB_COMMON_API wchar_t const * GetModuleName(HINSTANCE hInstance, wchar_t *pszBuffer=nullptr, size_t uSize=0) noexcept
モジュール名取得関数
Definition: LibUtility.cpp:366
テストアプリケーションメニュー基底クラス
static HINSTANCE GetInstanceHandle() noexcept
インスタンスハンドル取得関数
Definition: LibCommon.cpp:42
#define ConsoleLine(...)
ヘッダインデントなし書式設定文字列行出力マクロ
Definition: CConsole.h:34
virtual bool GenerateFatalError(bool bPreCallBack) noexcept
#define ConsoleInput(...)
文字列入力マクロ
Definition: CConsole.h:61
メニュー項目情報構造体
Definition: CConsoleMenu.h:43
#define NewDelLogOut()
ログ出力許可フラグ取得マクロ
Definition: LibNewDel.h:26
生成消滅演算子ライブラリヘッダファイル
static SMenuInfo const s_sMenuInfo
メニュー定義情報構造体
共通ライブラリヘッダファイル
virtual bool DisableNewDelLog(bool bPreCallBack) noexcept
virtual bool ShowProjectInfo(bool bPreCallBack) noexcept
メニュー項目関数
static SMenuItemInfo const s_sItemInfo[static_cast< int >(EMenuItem::Size)]
メニュー項目情報配列
テストアプリケーションヘッダファイル
static wchar_t const * GetProjectType() noexcept
プロジェクト種別取得関数
Definition: LibCommon.cpp:35
ユーティリティライブラリヘッダファイル
#define LogOutConsole
コンソール出力デバイスマクロ
Definition: LibLogOut.h:28
ログ出力ライブラリヘッダファイル