mirror of
https://github.com/reactos/wine.git
synced 2025-02-28 08:46:31 +00:00
kernel32/tests: Add some tests for GetLongPathNameW.
This commit is contained in:
parent
d58bd680b1
commit
17eb00409c
@ -1065,12 +1065,20 @@ static void test_GetLongPathNameA(void)
|
||||
|
||||
static void test_GetLongPathNameW(void)
|
||||
{
|
||||
DWORD length;
|
||||
DWORD length, expanded;
|
||||
BOOL ret;
|
||||
HANDLE file;
|
||||
WCHAR empty[MAX_PATH];
|
||||
WCHAR tempdir[MAX_PATH], name[200];
|
||||
WCHAR dirpath[4 + MAX_PATH + 200]; /* To ease removal */
|
||||
WCHAR shortpath[4 + MAX_PATH + 200 + 1 + 200];
|
||||
static const WCHAR prefix[] = { '\\','\\','?','\\', 0};
|
||||
static const WCHAR backslash[] = { '\\', 0};
|
||||
static const WCHAR letterX[] = { 'X', 0};
|
||||
|
||||
if (!pGetLongPathNameW)
|
||||
return;
|
||||
|
||||
/* Not present in all windows versions */
|
||||
if(pGetLongPathNameW)
|
||||
{
|
||||
SetLastError(0xdeadbeef);
|
||||
length = pGetLongPathNameW(NULL,NULL,0);
|
||||
if (GetLastError() == ERROR_CALL_NOT_IMPLEMENTED)
|
||||
@ -1086,7 +1094,73 @@ static void test_GetLongPathNameW(void)
|
||||
length = pGetLongPathNameW(empty,NULL,0);
|
||||
ok(0==length,"GetLongPathNameW returned %d but expected 0\n",length);
|
||||
ok(GetLastError()==ERROR_PATH_NOT_FOUND,"GetLastError returned %d but expected ERROR_PATH_NOT_FOUND\n",GetLastError());
|
||||
|
||||
/* Create a long path name. The path needs to exist for these tests to
|
||||
* succeed so we need the "\\?\" prefix when creating directories and
|
||||
* files.
|
||||
*/
|
||||
name[0] = 0;
|
||||
while (lstrlenW(name) < (sizeof(name)/sizeof(WCHAR) - 1))
|
||||
lstrcatW(name, letterX);
|
||||
|
||||
GetTempPathW(MAX_PATH, tempdir);
|
||||
|
||||
lstrcpyW(shortpath, prefix);
|
||||
lstrcatW(shortpath, tempdir);
|
||||
lstrcatW(shortpath, name);
|
||||
lstrcpyW(dirpath, shortpath);
|
||||
ret = CreateDirectoryW(shortpath, NULL);
|
||||
ok(ret, "Could not create the temporary directory : %d\n", GetLastError());
|
||||
lstrcatW(shortpath, backslash);
|
||||
lstrcatW(shortpath, name);
|
||||
|
||||
/* Path does not exist yet and we know it overruns MAX_PATH */
|
||||
|
||||
/* No prefix */
|
||||
SetLastError(0xdeadbeef);
|
||||
length = pGetLongPathNameW(shortpath + 4, NULL, 0);
|
||||
ok(length == 0, "Expected 0, got %d\n", length);
|
||||
todo_wine
|
||||
ok(GetLastError() == ERROR_PATH_NOT_FOUND,
|
||||
"Expected ERROR_PATH_NOT_FOUND, got %d\n", GetLastError());
|
||||
/* With prefix */
|
||||
SetLastError(0xdeadbeef);
|
||||
length = pGetLongPathNameW(shortpath, NULL, 0);
|
||||
todo_wine
|
||||
{
|
||||
ok(length == 0, "Expected 0, got %d\n", length);
|
||||
ok(GetLastError() == ERROR_FILE_NOT_FOUND,
|
||||
"Expected ERROR_PATH_NOT_FOUND, got %d\n", GetLastError());
|
||||
}
|
||||
|
||||
file = CreateFileW(shortpath, GENERIC_READ|GENERIC_WRITE, 0, NULL,
|
||||
CREATE_ALWAYS, FILE_ATTRIBUTE_NORMAL, NULL);
|
||||
ok(file != INVALID_HANDLE_VALUE,
|
||||
"Could not create the temporary file : %d.\n", GetLastError());
|
||||
CloseHandle(file);
|
||||
|
||||
/* Path exists */
|
||||
|
||||
/* No prefix */
|
||||
SetLastError(0xdeadbeef);
|
||||
length = pGetLongPathNameW(shortpath + 4, NULL, 0);
|
||||
todo_wine
|
||||
{
|
||||
ok(length == 0, "Expected 0, got %d\n", length);
|
||||
ok(GetLastError() == ERROR_PATH_NOT_FOUND, "Expected ERROR_PATH_NOT_FOUND, got %d\n", GetLastError());
|
||||
}
|
||||
/* With prefix */
|
||||
expanded = 4 + (pGetLongPathNameW(tempdir, NULL, 0) - 1) + lstrlenW(name) + 1 + lstrlenW(name) + 1;
|
||||
SetLastError(0xdeadbeef);
|
||||
length = pGetLongPathNameW(shortpath, NULL, 0);
|
||||
ok(length == expanded, "Expected %d, got %d\n", expanded, length);
|
||||
|
||||
/* NULL buffer with length crashes on Windows */
|
||||
if (0)
|
||||
length = pGetLongPathNameW(shortpath, NULL, 20);
|
||||
|
||||
ok(DeleteFileW(shortpath), "Could not delete temporary file\n");
|
||||
ok(RemoveDirectoryW(dirpath), "Could not delete temporary directory\n");
|
||||
}
|
||||
|
||||
static void test_GetShortPathNameW(void)
|
||||
|
Loading…
x
Reference in New Issue
Block a user