14using namespace Microsoft::VisualStudio::CppUnitTestFramework;
16#define TEST_FILE _T(".\\CreateTest.txt")
17#define TEST_MUTEX _T("TEST_MUTEX")
18#define TEST_EVENT _T("TEST_EVENT")
25 TEST_CLASS_INITIALIZE (ClassInitialize)
27 Logger::WriteMessage (
"FileTest class initialize.\n");
30 TEST_CLASS_CLEANUP (ClassCleanup)
32 Logger::WriteMessage (
"FileTest class cleanup.\n");
35 TEST_METHOD_INITIALIZE (MethodInitialize)
37 Logger::WriteMessage (
"FileTest method initialize.\n");
41 TEST_METHOD_CLEANUP (MethodCleanup)
43 Logger::WriteMessage (
"FileTest method cleanup.\n");
47 TEST_METHOD (CreateFileTest)
52 ret = pFile->
Create (
TEST_FILE, GENERIC_ALL, FILE_SHARE_READ, CREATE_NEW);
53 Assert::IsTrue (ret, _T (
"File::Create() failed.\n"));
56 LPCTSTR lpctszString1 = _T (
"TEST TEST TEST");
57 DWORD dwLen = pFile->
Write (lpctszString1,
static_cast<DWORD
>(_tcslen (lpctszString1) *
sizeof (TCHAR)));
58 Assert::AreEqual<DWORD> (
static_cast<DWORD
>(_tcslen (lpctszString1) *
sizeof (TCHAR)), dwLen, _T (
"File::Write() failed.\n"));
60 ret = pFile->
Flush ();
61 Assert::IsTrue (ret, _T (
"File::Flush() failed.\n"));
64 Assert::IsTrue (ret, _T (
"File::SetPointer(FILE_BEGIN) failed.\n"));
66 TCHAR tszBuf[256] = { 0 };
67 DWORD dwSize = pFile->
Read (tszBuf,
sizeof (tszBuf));
68 Assert::IsTrue (ret, _T (
"File::Read() failed.\n"));
69 tszBuf[dwSize /
sizeof (TCHAR)] =
'\0';
70 Assert::AreEqual<int> (0, _tcscmp (lpctszString1, tszBuf), _T(
"File::Read() invalid contents.\n"));
72 ret = pFile->
Close ();
73 Assert::IsTrue (ret, _T(
"File::Close() failed.\n"));
80 TEST_METHOD (OpenFileTest)
84 ret = testFile->
Create (
TEST_FILE, GENERIC_ALL, FILE_SHARE_READ, CREATE_NEW);
85 Assert::IsTrue (ret, _T(
"File::Create() failed.\n"));
88 FillMemory (byBuffer, 1000,
'*');
89 DWORD dwResult = testFile->
Write (byBuffer, 1000);
90 Assert::AreEqual<DWORD> (1000, dwResult, _T (
"File::Write() invalid write size.\n"));
91 ret = testFile->
Flush ();
92 Assert::AreEqual<BOOL> (TRUE, ret, _T (
"File::Flush() failed.\n"));
93 ret = testFile->
Close ();
94 Assert::AreEqual<BOOL> (TRUE, ret, _T (
"File::Close() failed.\n"));
98 Assert::IsFalse (file.
IsOpen (), _T(
"File::IsOpen() failed.\n"));
100 ret = file.
Create (
TEST_FILE, GENERIC_ALL, FILE_SHARE_READ, OPEN_EXISTING);
101 Assert::IsTrue (ret, _T (
"File::Create() failed.\n"));
103 Assert::IsTrue (file.
IsOpen (), _T(
"File::IsOpen() failed.\n"));
105 LONGLONG fileSize = file.
GetSize ();
106 Assert::AreEqual<SIZE_T> (1000, fileSize, _T (
"File::GetSize() invalid file size.\n"));
108 DWORD dwFileType = file.
GetType ();
109 Assert::AreEqual<DWORD> (FILE_TYPE_DISK, dwFileType, _T (
"File::GetType() invalid file type.\n"));
112 Assert::IsTrue (ret, _T (
"File::SetPointer(FILE_BEGIN) failed.\n"));
115 Assert::IsTrue (ret, _T (
"File::SetPointer(FILE_END) failed."));
117 LARGE_INTEGER liDistance = { 0 };
118 liDistance.QuadPart = -500;
119 ret = file.
SetPointer (FILE_CURRENT, liDistance);
120 Assert::IsTrue (ret, _T (
"File::SetPointer(FILE_CURRENT, -500) failed.\n"));
123 Assert::IsTrue (ret, _T (
"File::SetEOF() failed.\n"));
126 Assert::AreEqual<SIZE_T> (500, fileSize, _T(
"File::GetSize() invalid file size.\n"));
131 TEST_METHOD (SharedFileTest)
133 const int loopCount = 20;
135 auto writeFunction = [](LPVOID lpvParam)->DWORD
137 int loopCount = *(
int*)lpvParam;
141 Assert::IsTrue(event.
Create (
TEST_EVENT, TRUE, FALSE), _T(
"Event::Create() failed.\n"));
142 Assert::IsTrue(mutex.
Create (
TEST_MUTEX), _T (
"Mutex::Create() failed.\n"));
143 Assert::IsTrue (file.
Create (
TEST_FILE, GENERIC_WRITE, FILE_SHARE_READ, CREATE_ALWAYS), _T(
"File::Create() failed.\n"));
146 Assert::IsTrue(event.
Set (), _T(
"Event::Set() failed.\n"));
148 for (
int i = 0; i < loopCount; i++)
150 Assert::AreEqual<DWORD> (WAIT_OBJECT_0, mutex.
Wait (), _T(
"Mutex::Wait() failed.\n"));
154 DWORD dwRet = file.
Write (message.
Ctr (), message.
Byte ());
155 Assert::AreEqual<DWORD> (message.
Byte (), dwRet, _T(
"File::Write() return value is invalid.\n"));
156 message.
Format (_T (
"W:%02d->\n"), dwRet);
157 Logger::WriteMessage (message.
Ctr());
159 Assert::IsTrue (mutex.
Release (), _T(
"Mutex::Release() failed.\n"));
166 auto readFunction = [](LPVOID lpvParam)->DWORD
168 int loopCount = *(
int*)lpvParam;
172 Assert::IsTrue (event.
Open (
TEST_EVENT), _T (
"Event::Open() failed.\n"));
173 Assert::IsTrue (mutex.
Open (
TEST_MUTEX), _T (
"Mutex::Open() failed.\n"));
174 Assert::IsTrue (file.
Create (
TEST_FILE, GENERIC_READ, FILE_SHARE_READ | FILE_SHARE_WRITE, OPEN_EXISTING), _T(
"File::Create() failed.\n"));
176 Assert::AreEqual<DWORD>(WAIT_OBJECT_0, event.
Wait (), _T(
"Event::Wait() failed.\n"));
178 for (
int i = 0; i < loopCount; i++)
180 Assert::AreEqual<DWORD> (WAIT_OBJECT_0, mutex.
Wait (), _T(
"Mutex::Wait() failed.\n"));
183 DWORD dwRet = file.
Read (message.
Ptr (), 52);
185 out.
Format (_T (
"R:%02d->%s\n"), dwRet, message.
Ctr ());
186 Logger::WriteMessage (out.
Ctr());
188 Assert::IsTrue (mutex.
Release (), _T(
"Mutex::Release() failed.\n"));
198 Assert::IsTrue(writeThread.
Create (writeFunction, (LPVOID) & loopCount));
200 Assert::IsTrue(readThread.
Create (readFunction, (LPVOID) & loopCount));
202 Assert::AreEqual<DWORD>(WAIT_OBJECT_0, writeThread.
Wait (), _T(
"writeThread.Wait() failed."));
203 Assert::AreEqual<DWORD>(WAIT_OBJECT_0, readThread.
Wait (), _T(
"readThread.Wait() failed."));
イベントに関するWindowsAPIを集約したクラス
ファイルIOに関するWindowsAPIを集約したクラス
ファイルハンドルを伴わないファイルIOに関するWindowsAPIを集約した クラス
ミューテックスに関するWindowsAPIを集約したクラス
スレッドに関するWindowsAPIを集約したクラス
イベントに関するWindowsAPIを集約したクラス
BOOL APIENTRY Create(LPCTSTR lpctszName, BOOL bManualReset, BOOL bInitialState)
イベントを作成します。
BOOL APIENTRY Open(LPCTSTR lpctszName)
イベントをオープンします。
BOOL APIENTRY Set() const
イベントをセット(シグナル状態に)します。
ファイルIOに関するWindowsAPIを集約したクラス
DWORD APIENTRY GetType() const
ファイルの種類を取得します。
BOOL APIENTRY Create(LPCTSTR lpctszFileName, DWORD dwDesiredAccess, DWORD dwShareMode, DWORD dwCreationDisposition)
ファイルを作成、オープンします。
BOOL APIENTRY IsOpen() const
ファイルがすでに操作可能か否か。
BOOL APIENTRY SetEOF() const
今のファイル読み込み位置でファイルを終端します。
LONGLONG APIENTRY GetSize() const
ファイルサイズを取得します。
BOOL APIENTRY SetPointer(DWORD dwMoveMethod, LARGE_INTEGER liDistanceToMove={ 0 }) const
ファイルポインタを移動します。
static BOOL APIENTRY IsExist(LPCTSTR name)
ディレクトリ・ファイルの存在確認
static BOOL APIENTRY Delete(LPCTSTR name)
ファイルの削除
BOOL APIENTRY Close()
使用しなくなったハンドルはこれでクローズします。
ミューテックスに関するWindowsAPIを集約したクラス
BOOL APIENTRY Release() const
ミューテックスを解放します。
BOOL APIENTRY Open(LPCTSTR lpctszName)
ミューテックスをオープンします。
BOOL APIENTRY Create(LPCTSTR lpctszName)
ミューテックスを作成します。
BOOL APIENTRY Flush() const
まだデバイスに出力されていないデータを吐き出させます。
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
内部で確保している文字列ポインタを取得します。
LPTSTR APIENTRY Ptr() const
内部で確保している文字列ポインタを取得します。
スレッドに関するWindowsAPIを集約したクラス
BOOL APIENTRY Create(PTHREAD_START_ROUTINE function=NULL, LPVOID lpvParam=NULL, DWORD dwCreationFlag=0)
スレッドを作成します。
static SYSTEMTIME APIENTRY GetLocalTime()
ローカル時間の取得
static TString APIENTRY GetFormatTime(const SYSTEMTIME &systemTime)
SYSTEMTIME構造体の値を文字列化
DWORD APIENTRY Wait(DWORD dwWaitTime=INFINITE) const
シグナル状態になるとブロックを解除します。