12using namespace Microsoft::VisualStudio::CppUnitTestFramework;
19 TEST_CLASS_INITIALIZE (ClassInitialize)
21 Logger::WriteMessage (
"UtilityTest class initialize.\n");
24 TEST_CLASS_CLEANUP (ClassCleanup)
26 Logger::WriteMessage (
"UtilityTest class cleanup.\n");
29 TEST_METHOD_INITIALIZE (MethodInitialize)
31 Logger::WriteMessage (
"UtilityTest method initialize.\n");
34 TEST_METHOD_CLEANUP (MethodCleanup)
36 Logger::WriteMessage (
"UtilityTest method cleanup.\n");
39 TEST_METHOD (CreateGUIDTest)
41 for (
int i = 0; i < 10; i++)
44 Logger::WriteMessage (guid.Ctr ());
45 Logger::WriteMessage (_T (
"\n"));
49 TEST_METHOD (GetSystemTimeAndLocalTimeTest)
55 message.
Format (_T (
"SystemTime:%04d/%02d/%02dT%02d:%02d:%02d.%03d %d\n"),
56 t1.wYear, t1.wMonth, t1.wDay,
57 t1.wHour, t1.wMinute, t1.wSecond,
58 t1.wMilliseconds, t1.wDayOfWeek);
59 Logger::WriteMessage (message.
Ctr ());
61 message.
Format (_T (
" LocalTime:%04d/%02d/%02dT%02d:%02d:%02d.%03d %d\n"),
62 t2.wYear, t2.wMonth, t2.wDay,
63 t2.wHour, t2.wMinute, t2.wSecond,
64 t2.wMilliseconds, t2.wDayOfWeek);
65 Logger::WriteMessage (message.
Ctr ());
68 TEST_METHOD (GetFormatTimeTest)
73 TEST_METHOD (GetLocalTimeQuadTest)
77 res2.
Format (_T (
"%lld"), res.QuadPart);
78 Logger::WriteMessage (res2.
Ctr ());
81 TEST_METHOD (GetTimeByFileTimeTest1)
85 t2.dwLowDateTime = t.LowPart;
86 t2.dwHighDateTime = t.HighPart;
90 Logger::WriteMessage (t4.Ctr ());
93 TEST_METHOD (GetTimeByFileTimeTest2)
97 ::SystemTimeToFileTime (&t, &ft);
101 Logger::WriteMessage (t4.Ctr ());
104 TEST_METHOD (GetSystemInfoTest)
110 message.
Format (_T (
"dwPageSize:%d\n"), si.dwPageSize);
111 Logger::WriteMessage (message.
Ctr ());
113 message.
Format (_T (
"lpMinimumApplicationAddress:%p\n"), si.lpMinimumApplicationAddress);
114 Logger::WriteMessage (message.
Ctr ());
116 message.
Format (_T (
"lpMaximumApplicationAddress:%p\n"), si.lpMaximumApplicationAddress);
117 Logger::WriteMessage (message.
Ctr ());
119 message.
Format (_T (
"dwActiveProcessorMask:%d\n"), si.dwActiveProcessorMask);
120 Logger::WriteMessage (message.
Ctr ());
122 message.
Format (_T (
"dwNumberOfProcessors:%d\n"), si.dwNumberOfProcessors);
123 Logger::WriteMessage (message.
Ctr ());
125 message.
Format (_T (
"dwProcessorType:%d\n"), si.dwProcessorType);
126 Logger::WriteMessage (message.
Ctr ());
128 message.
Format (_T (
"dwAllocationGranularity:%d\n"), si.dwAllocationGranularity);
129 Logger::WriteMessage (message.
Ctr ());
131 message.
Format (_T (
"wProcessorLevel:%d\n"), si.wProcessorLevel);
132 Logger::WriteMessage (message.
Ctr ());
134 message.
Format (_T (
"wProcessorRevision:%d\n"), si.wProcessorRevision);
135 Logger::WriteMessage (message.
Ctr ());
138 TEST_METHOD (Base64EncodeAndDecodeTest1)
140 BYTE byBinary[] = { 0, 1, 2, 3, 4, 5, 6, 7, 8, 9,
'A',
'B',
'C',
'D' };
144 Assert::IsTrue (ret);
146 Logger::WriteMessage (response.
Ctr ());
150 Assert::IsTrue (ret);
152 LPBYTE lpbyBuffer =
new BYTE[dwBuffer *
sizeof (TCHAR)];
154 Assert::IsTrue (ret);
155 for (
int i = 0; i <
sizeof (byBinary); i++)
157 Assert::AreEqual<BYTE> (byBinary[i], lpbyBuffer[i]);
162 TEST_METHOD (Base64EncodeAndDecodeTest2)
167 ret = binFile.
Create (_T (
"C:\\Windows\\Notepad.exe"), GENERIC_READ, 0, OPEN_EXISTING);
168 Assert::IsTrue (ret);
170 DWORD dwSize = (DWORD)binFile.
GetSize ();
171 LPBYTE lpbyBinary =
new BYTE[dwSize];
173 DWORD dwReadSize = binFile.
Read (lpbyBinary, dwSize);
174 Assert::AreEqual<DWORD> (dwReadSize, dwSize);
178 Assert::IsTrue (ret);
179 Logger::WriteMessage (response.
Ctr ());
183 Assert::IsTrue (ret);
185 LPBYTE lpbyBuffer =
new BYTE[dwBuffer];
187 Assert::IsTrue (ret);
188 for (DWORD i = 0; i < dwSize; i++)
190 Assert::AreEqual<BYTE> (lpbyBinary[i], lpbyBuffer[i]);
197 TEST_METHOD (GetEnvironmentsTest)
200 for (
auto item : ret)
202 Logger::WriteMessage (item.Ctr ());
203 Logger::WriteMessage (_T (
"\n"));
207 TEST_METHOD (GetEnvTest)
211 for (
auto item : ret2)
213 Logger::WriteMessage (item.Ctr ());
214 Logger::WriteMessage (_T (
"\n"));
218 Assert::IsTrue (ret3.Len () == 0);
221 TEST_METHOD (IniFileIOTest1)
224 LPCTSTR lpctszIniFile = _T (
".\\UtilityTest.ini");
225 LPCTSTR lpctszSection = _T (
"Section");
226 LPCTSTR lpctszKeyword = _T (
"Keyword");
234 lpctszIniFile, lpctszSection, lpctszKeyword, response1);
235 Assert::IsTrue (ret, _T (
"Utility::WriteIniFile() write error.\n"));
238 lpctszIniFile, lpctszSection, lpctszKeyword, response2);
239 Assert::IsTrue (ret, _T (
"Utility::ReadIniFile() read error.\n"));
241 response1 == response2,
242 _T (
"Utility::Read/WriteIniFile() value mismatched.\n"));
245 TEST_METHOD (IniFileIOTest2)
248 LPCTSTR lpctszIniFile = _T (
".\\UtilityTest.ini");
249 LPCTSTR lpctszSection = _T (
"Section");
250 LPCTSTR lpctszKeyword = _T (
"Keyword");
258 lpctszIniFile, lpctszSection, lpctszKeyword, iValue1);
259 Assert::IsTrue (ret, _T (
"Utility::WriteIniFile() write error.\n"));
262 lpctszIniFile, lpctszSection, lpctszKeyword, -1);
263 Assert::AreNotEqual (-1, ret, _T (
"Utility::ReadIniFile() read error.\n"));
266 _T (
"Utility::Read/WriteIniFile() value mismatched.\n"));
269 TEST_METHOD (IniFileIOTest3)
272 LPCTSTR lpctszIniFile = _T (
".\\UtilityTest.ini");
273 LPCTSTR lpctszSection = _T (
"Section");
279 int values[]{ -12345, -1234, -123, -12, -1, 0, 1, 22, 333, 4444, 55555, 666666 };
280 int loop =
sizeof (values) /
sizeof (
int);
282 for (
int i = 0; i <
loop; i++)
284 keyword.
Format (_T (
"keyword_%02d"), i);
286 response << values[i];
288 Assert::IsTrue (ret, _T (
"Utility::WriteIniFile() write error.\n"));
291 for (
int i = 0; i <
loop; i++)
293 keyword.
Format (_T (
"keyword_%02d"), i);
296 Assert::IsTrue (ret, _T (
"Utility::WriteIniFile() write error.\n"));
297 Assert::AreEqual<int> (values[i], response.
ParseInt ());
301 TEST_METHOD (CreateMD5Test1)
303 LPCSTR lpcszString =
"abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ";
305 LPSTR lpszResponse =
"2AD372C377013BAA4EE32AB6649D2449";
307 Assert::IsTrue (
alt::Utility::CreateMD5 ((LPBYTE)lpcszString, lstrlenA (lpcszString), byMD5), _T (
"CreateMD5() failed.\n"));
308 Assert::IsTrue (_memicmp (lpszResponse, byMD5, 32) == 0);
311 TEST_METHOD (CreateMD5Test2)
313 LPCSTR lpcszResponse =
"BA929713DC6AAEBFEDE06D7C6C96E54C";
314 LPCTSTR lpctszFileName = _T (
".\\MD5_Check.txt");
318 Assert::IsTrue (testFile.
Create (lpctszFileName, GENERIC_WRITE, 0, CREATE_ALWAYS), _T (
"Test file create failed.\n"));
319 for (
int i = 0; i < 1024; i++)
321 message.
Format (_T (
"This line is No.%d\n"), i + 1);
322 Assert::IsTrue (-1 != testFile.
Write (message.
Ctr (), message.
Byte ()), _T (
"Test file write failed.\n"));
324 Assert::IsTrue (testFile.
Close (), _T (
"Test file close failed.\n"));
327 Assert::IsTrue (_memicmp (lpcszResponse, byMD5, 32) == 0, _T (
"MD5 response invalid.\n"));
332 TEST_METHOD (QuickSortTest1)
334 const INT count = 1000;
338 for (
int i = 0; i < count; i++)
343 alt::Utility::QuickSort<SHORT> (asRand, 0, count - 1);
345 for (
int i = 0; i < count - 1; i++)
347 Assert::IsTrue (asRand[i] <= asRand[i + 1]);
356 Container (LPCTSTR lpctszKey, LPCTSTR lpctszValue, WORD wPrice) { Set (lpctszKey, lpctszValue, wPrice); };
358 Container (
const Container& base) { _key = base._key; _value = base._value; _wPrice = base._wPrice; };
360 void Set (LPCTSTR lpctszKey, LPCTSTR lpctszValue, WORD wPrice)
363 _value = lpctszValue;
374 bool operator < (
const Container& base)
const
380 if (_value < base._value) ret =
true;
389 _value = base._value;
390 _wPrice = base._wPrice;
399 TEST_METHOD (QuickSortTest2)
401 const INT count = 10;
402 Container container0 (_T (
"Strawberry"), _T (
"イチゴ"), 350);
403 Container container1 (_T (
"Pineapple"), _T (
"パイナップル"), 280);
404 Container container2 (_T (
"Orange"), _T (
"オレンジ"), 120);
405 Container container3 (_T (
"Melon"), _T (
"メロン"), 1350);
406 Container container4 (_T (
"Mango"), _T (
"マンゴー"), 720);
407 Container container5 (_T (
"Lemon"), _T (
"レモン"), 130);
408 Container container6 (_T (
"Kiwifruit"), _T (
"キウイフルーツ"),60);
409 Container container7 (_T (
"Cherry"), _T (
"サクランボ"), 20);
410 Container container8 (_T (
"Banana"), _T (
"バナナ"), 70);
411 Container container9 (_T (
"Apple"), _T (
"リンゴ"), 130);
414 container0, container1, container2, container3,
415 container4,container5,container6,container7,container8,
418 for (
auto item : fruits)
425 item.Get (key, value, wPrice);
426 message.
Format (_T (
"%s\t%s\t%d\n"), key.
Ctr(), value.
Ctr(), wPrice);
427 Logger::WriteMessage (message.
Ctr());
429 Logger::WriteMessage (
"--------------------------------------------\n");
431 alt::Utility::QuickSort<Container> (fruits, 0, count - 1);
433 for (
auto item : fruits)
440 item.Get (key, value, wPrice);
441 message.
Format (_T (
"%s\t%s\t%d\n"), key.
Ctr(), value.
Ctr(), wPrice);
442 Logger::WriteMessage (message.
Ctr());
ファイルIOに関するWindowsAPIを集約したクラス
ファイルハンドルを伴わないファイルIOに関するWindowsAPIを集約した クラス
struct _container Container
ファイルIOに関するWindowsAPIを集約したクラス
BOOL APIENTRY Create(LPCTSTR lpctszFileName, DWORD dwDesiredAccess, DWORD dwShareMode, DWORD dwCreationDisposition)
ファイルを作成、オープンします。
LONGLONG APIENTRY GetSize() const
ファイルサイズを取得します。
static BOOL APIENTRY IsExist(LPCTSTR name)
ディレクトリ・ファイルの存在確認
static BOOL APIENTRY Delete(LPCTSTR name)
ファイルの削除
BOOL APIENTRY Close()
使用しなくなったハンドルはこれでクローズします。
DWORD APIENTRY Read(LPVOID lpvBuffer, DWORD dwSize) const
HANDLEを使ってデータを読み込みます。
DWORD APIENTRY Write(LPCVOID lpcvBuffer, DWORD dwSize) const
HANDLEを使ってデータを書き込みます。
文字列に関するWindowsAPIを集約したクラス
TString &APIENTRY Format(LPCTSTR format,...)
フォーマットに従ってパラメータを文字列化します。
INT APIENTRY Byte() const
内部で確保している文字列(バイト数)を取得します。
LPCTSTR APIENTRY Ctr() const
内部で確保している文字列ポインタを取得します。
int APIENTRY ParseInt() const
文字列の数値化
static BOOL APIENTRY Base64Decode(TString &source, LPBYTE lpbyBuffer, DWORD &dwBuffer)
BASE64データをデコード
static const TString APIENTRY MakeGUID()
GUIDの作成
static skeleton::Array< TString > APIENTRY GetEnvironments()
環境変数の取得
static ULARGE_INTEGER APIENTRY GetLocalTimeQuad()
ローカル時間を64ビット値で取得
static BOOL APIENTRY CreateMD5(LPBYTE lpbyData, DWORD dwSize, LPBYTE lpbyMD5)
データからMD5を計算
static BOOL APIENTRY ReadIniFile(LPCTSTR lpctszIniFile, LPCTSTR lpctszSection, LPCTSTR lpctszKeyword, TString &response)
設定フィルの読み込み
static TString APIENTRY GetEnv(LPCTSTR lpctszKeyword)
環境変数の取得
static BOOL APIENTRY Base64Encode(LPBYTE lpbyString, DWORD dwLength, TString &response)
BASE64でデータをエンコード
static SYSTEMTIME APIENTRY GetLocalTime()
ローカル時間の取得
static VOID APIENTRY GetSystemInfo(SYSTEM_INFO &systemInfo)
システム情報を取得します。
static TString APIENTRY GetFormatTime(const SYSTEMTIME &systemTime)
SYSTEMTIME構造体の値を文字列化
static SYSTEMTIME APIENTRY GetTimeByFileTime(const FILETIME &fileTime)
FILETIME型からSYSTEMTIMEを取得
static BOOL APIENTRY WriteIniFile(LPCTSTR lpctszIniFile, LPCTSTR lpctszSection, LPCTSTR lpctszKeyword, TString &strValue)
設定フィルの書き込み
static SYSTEMTIME APIENTRY GetSystemTime()
システム時間の取得