|
8 | 8 |
|
9 | 9 | #include "macro/CPPA.h" |
10 | 10 |
|
| 11 | +#include "doc/CEditDoc.h" |
| 12 | +#include "env/CShareData.h" |
| 13 | +#include "macro/CSMacroMgr.h" |
| 14 | +#include "view/CEditView.h" |
| 15 | + |
| 16 | +#include "eval_outputs.hpp" |
| 17 | + |
11 | 18 | /*! |
12 | 19 | CPPA::GetDllNameImpのテスト |
13 | 20 | */ |
@@ -76,3 +83,73 @@ TEST(CPPA, GetDeclarations) |
76 | 83 | cPpa.GetDeclarations(funcInfo8, buffer.data()); |
77 | 84 | EXPECT_STREQ("function S_Func4(i0: Integer; s1: string; i2: Integer; s3: string; i4: Integer; s5: string; i6: Integer; s7: string): string; index 8;", buffer.data()); |
78 | 85 | } |
| 86 | + |
| 87 | +/*! |
| 88 | + * CPPAエラー情報コールバックのテスト |
| 89 | + * |
| 90 | + * 実装が想定するメッセージを出力できるかチェックする |
| 91 | + * 本来は確認ケースを分割すべきだが、初期化に手間がかかるため1つにまとめている |
| 92 | + */ |
| 93 | +TEST(CPPA, ppaErrorProc) |
| 94 | +{ |
| 95 | + // 共有メモリのインスタンスを生成する |
| 96 | + const auto pcShareData = std::make_unique<CShareData>(); |
| 97 | + |
| 98 | + // 共有メモリを初期化する |
| 99 | + pcShareData->InitShareData(); |
| 100 | + |
| 101 | + // ドキュメントの初期化前に文字幅キャッシュの生成が必要 |
| 102 | + SelectCharWidthCache(CWM_FONT_EDIT, CWM_CACHE_SHARE); |
| 103 | + InitCharWidthCache(GetDllShareData().m_Common.m_sView.m_lf); |
| 104 | + |
| 105 | + // CEditViewをインスタンス化するにはドキュメントのインスタンスが必要 |
| 106 | + const auto pcEditDoc = std::make_unique<CEditDoc>(nullptr); |
| 107 | + |
| 108 | + // CEditViewを用意する |
| 109 | + const auto pcEditView = std::make_unique<CEditView>(); |
| 110 | + |
| 111 | + // SMacroMgrを用意する |
| 112 | + const auto pcSMacroMgr = std::make_unique<CSMacroMgr>(); |
| 113 | + |
| 114 | + // PPA実行情報を用意する |
| 115 | + CPPA::PpaExecInfo info{}; |
| 116 | + info.m_pShareData = &GetDllShareData(); |
| 117 | + info.m_pcEditView = pcEditView.get(); |
| 118 | + |
| 119 | + // 既にエラーフラグが立っていたらメッセージは出さない |
| 120 | + info.m_bError = true; |
| 121 | + CPPA::CallErrorProc(info, int(F_FILENEW) + 1, nullptr); |
| 122 | + |
| 123 | + // コマンドエラー |
| 124 | + info.m_bError = false; |
| 125 | + EXPECT_ERROUT(CPPA::CallErrorProc(info, int(F_FILENEW) + 1, nullptr), L"関数の実行エラー\nprocedure S_FileNew; index 30101;"); |
| 126 | + |
| 127 | + // 関数エラー |
| 128 | + info.m_bError = false; |
| 129 | + EXPECT_ERROUT(CPPA::CallErrorProc(info, int(F_GETFILENAME) + 1, nullptr), L"関数の実行エラー\nfunction S_GetFilename: string; index 40001;"); |
| 130 | + |
| 131 | + // 不明な関数エラー |
| 132 | + info.m_bError = false; |
| 133 | + EXPECT_ERROUT(CPPA::CallErrorProc(info, 1 + 1, nullptr), L"不明な関数の実行エラー(バグです)\nFunc_ID=1"); |
| 134 | + |
| 135 | + // エラー情報が不正 |
| 136 | + info.m_bError = false; |
| 137 | + EXPECT_ERROUT(CPPA::CallErrorProc(info, 0, nullptr), L"エラー情報が不正"); |
| 138 | + |
| 139 | + // 詳細不明のPPAエラー |
| 140 | + info.m_bError = false; |
| 141 | + EXPECT_ERROUT(CPPA::CallErrorProc(info, 0, ""), L"詳細不明のエラー"); |
| 142 | + |
| 143 | + // 詳細ありのPPAエラー |
| 144 | + info.m_bError = false; |
| 145 | + EXPECT_ERROUT(CPPA::CallErrorProc(info, 0, "test"), L"test"); |
| 146 | + |
| 147 | + // 未定義のエラー |
| 148 | + info.m_bError = false; |
| 149 | + EXPECT_ERROUT(CPPA::CallErrorProc(info, -1, "test"), L"未定義のエラー\nError_CD=-1\ntest"); |
| 150 | + |
| 151 | + // デバッグ情報付きのエラー |
| 152 | + info.m_cMemDebug = "debug"; |
| 153 | + info.m_bError = false; |
| 154 | + EXPECT_ERROUT(CPPA::CallErrorProc(info, 0, nullptr), L"エラー情報が不正\ndebug"); |
| 155 | +} |
0 commit comments