Paul Vriens : kernel32/tests: Add some tests for GetLongPathNameW.
Alexandre Julliard
julliard at winehq.org
Thu Dec 17 10:37:12 CST 2009
Module: wine
Branch: master
Commit: 17eb00409c915c5906b6780a951fb2e21fbab16b
URL: http://source.winehq.org/git/wine.git/?a=commit;h=17eb00409c915c5906b6780a951fb2e21fbab16b
Author: Paul Vriens <Paul.Vriens.Wine at gmail.com>
Date: Thu Dec 17 10:44:38 2009 +0100
kernel32/tests: Add some tests for GetLongPathNameW.
---
dlls/kernel32/tests/path.c | 82 +++++++++++++++++++++++++++++++++++++++++--
1 files changed, 78 insertions(+), 4 deletions(-)
diff --git a/dlls/kernel32/tests/path.c b/dlls/kernel32/tests/path.c
index 104a48c..1c899c8 100644
--- a/dlls/kernel32/tests/path.c
+++ b/dlls/kernel32/tests/path.c
@@ -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)
More information about the wine-cvs
mailing list