kernel32: Add some CreateFile disposition and access tests.
This commit is contained in:
parent
75209ffdaf
commit
7a9fce25ec
|
@ -3151,6 +3151,92 @@ static void test_ReplaceFileW(void)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static void test_CreatFile(void)
|
||||||
|
{
|
||||||
|
static const struct test_data
|
||||||
|
{
|
||||||
|
DWORD disposition, access, error, clean_up;
|
||||||
|
} td[] =
|
||||||
|
{
|
||||||
|
/* 0 */ { 0, 0, ERROR_INVALID_PARAMETER, 0 },
|
||||||
|
/* 1 */ { 0, GENERIC_READ, ERROR_INVALID_PARAMETER, 0 },
|
||||||
|
/* 2 */ { 0, GENERIC_READ|GENERIC_WRITE, ERROR_INVALID_PARAMETER, 0 },
|
||||||
|
/* 3 */ { CREATE_NEW, 0, ERROR_FILE_EXISTS, 1 },
|
||||||
|
/* 4 */ { CREATE_NEW, 0, 0, 1 },
|
||||||
|
/* 5 */ { CREATE_NEW, GENERIC_READ, 0, 1 },
|
||||||
|
/* 6 */ { CREATE_NEW, GENERIC_WRITE, 0, 1 },
|
||||||
|
/* 7 */ { CREATE_NEW, GENERIC_READ|GENERIC_WRITE, 0, 0 },
|
||||||
|
/* 8 */ { CREATE_ALWAYS, 0, 0, 0 },
|
||||||
|
/* 9 */ { CREATE_ALWAYS, GENERIC_READ, 0, 0 },
|
||||||
|
/* 10*/ { CREATE_ALWAYS, GENERIC_WRITE, 0, 0 },
|
||||||
|
/* 11*/ { CREATE_ALWAYS, GENERIC_READ|GENERIC_WRITE, 0, 1 },
|
||||||
|
/* 12*/ { OPEN_EXISTING, 0, ERROR_FILE_NOT_FOUND, 0 },
|
||||||
|
/* 13*/ { CREATE_ALWAYS, 0, 0, 0 },
|
||||||
|
/* 14*/ { OPEN_EXISTING, 0, 0, 0 },
|
||||||
|
/* 15*/ { OPEN_EXISTING, GENERIC_READ, 0, 0 },
|
||||||
|
/* 16*/ { OPEN_EXISTING, GENERIC_WRITE, 0, 0 },
|
||||||
|
/* 17*/ { OPEN_EXISTING, GENERIC_READ|GENERIC_WRITE, 0, 1 },
|
||||||
|
/* 18*/ { OPEN_ALWAYS, 0, 0, 0 },
|
||||||
|
/* 19*/ { OPEN_ALWAYS, GENERIC_READ, 0, 0 },
|
||||||
|
/* 20*/ { OPEN_ALWAYS, GENERIC_WRITE, 0, 0 },
|
||||||
|
/* 21*/ { OPEN_ALWAYS, GENERIC_READ|GENERIC_WRITE, 0, 0 },
|
||||||
|
/* 22*/ { TRUNCATE_EXISTING, 0, ERROR_INVALID_PARAMETER, 0 },
|
||||||
|
/* 23*/ { TRUNCATE_EXISTING, GENERIC_READ, ERROR_INVALID_PARAMETER, 0 },
|
||||||
|
/* 24*/ { TRUNCATE_EXISTING, GENERIC_WRITE, 0, 0 },
|
||||||
|
/* 25*/ { TRUNCATE_EXISTING, GENERIC_READ|GENERIC_WRITE, 0, 0 }
|
||||||
|
};
|
||||||
|
char temp_path[MAX_PATH];
|
||||||
|
char file_name[MAX_PATH];
|
||||||
|
DWORD i, ret, written;
|
||||||
|
HANDLE hfile;
|
||||||
|
|
||||||
|
GetTempPath(MAX_PATH, temp_path);
|
||||||
|
GetTempFileName(temp_path, "tmp", 0, file_name);
|
||||||
|
|
||||||
|
for (i = 0; i < sizeof(td)/sizeof(td[0]); i++)
|
||||||
|
{
|
||||||
|
SetLastError(0xdeadbeef);
|
||||||
|
hfile = CreateFile(file_name, td[i].access, 0, NULL, td[i].disposition, 0, 0);
|
||||||
|
if (!td[i].error)
|
||||||
|
{
|
||||||
|
ok(hfile != INVALID_HANDLE_VALUE, "%d: CreateFile error %d\n", i, GetLastError());
|
||||||
|
written = 0xdeadbeef;
|
||||||
|
SetLastError(0xdeadbeef);
|
||||||
|
ret = WriteFile(hfile, &td[i].error, sizeof(td[i].error), &written, NULL);
|
||||||
|
if (td[i].access & GENERIC_WRITE)
|
||||||
|
ok(ret, "%d: WriteFile error %d\n", i, GetLastError());
|
||||||
|
else
|
||||||
|
{
|
||||||
|
ok(!ret, "%d: WriteFile should fail\n", i);
|
||||||
|
ok(GetLastError() == ERROR_ACCESS_DENIED, "%d: expected ERROR_ACCESS_DENIED, got %d\n", i, GetLastError());
|
||||||
|
}
|
||||||
|
CloseHandle(hfile);
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
/* FIXME: remove the condition below once Wine is fixed */
|
||||||
|
if (td[i].disposition == TRUNCATE_EXISTING && !(td[i].access & GENERIC_WRITE))
|
||||||
|
{
|
||||||
|
todo_wine
|
||||||
|
{
|
||||||
|
ok(hfile == INVALID_HANDLE_VALUE, "%d: CreateFile should fail\n", i);
|
||||||
|
ok(GetLastError() == td[i].error, "%d: expected %d, got %d\n", i, td[i].error, GetLastError());
|
||||||
|
}
|
||||||
|
CloseHandle(hfile);
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
ok(hfile == INVALID_HANDLE_VALUE, "%d: CreateFile should fail\n", i);
|
||||||
|
ok(GetLastError() == td[i].error, "%d: expected %d, got %d\n", i, td[i].error, GetLastError());
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
if (td[i].clean_up) DeleteFile(file_name);
|
||||||
|
}
|
||||||
|
|
||||||
|
DeleteFile(file_name);
|
||||||
|
}
|
||||||
|
|
||||||
START_TEST(file)
|
START_TEST(file)
|
||||||
{
|
{
|
||||||
InitFunctionPointers();
|
InitFunctionPointers();
|
||||||
|
@ -3166,6 +3252,7 @@ START_TEST(file)
|
||||||
test_GetTempFileNameA();
|
test_GetTempFileNameA();
|
||||||
test_CopyFileA();
|
test_CopyFileA();
|
||||||
test_CopyFileW();
|
test_CopyFileW();
|
||||||
|
test_CreatFile();
|
||||||
test_CreateFileA();
|
test_CreateFileA();
|
||||||
test_CreateFileW();
|
test_CreateFileW();
|
||||||
test_DeleteFileA();
|
test_DeleteFileA();
|
||||||
|
|
Loading…
Reference in New Issue