From 2b03aa6a6dc8310ffb395a20761010dd48ed91fa Mon Sep 17 00:00:00 2001
From: Francois Gouget <fgouget@codeweavers.com>
Date: Thu, 30 Jun 2005 18:08:44 +0000
Subject: [PATCH] Test the behavior of CreateDirectory() when it has one or two
 trailing dots or spaces. Tweak the previous CreateDirectory() tests so we get
 more information in case of a failure.

---
 dlls/kernel/tests/directory.c | 141 ++++++++++++++++++++++++++++++----
 1 file changed, 124 insertions(+), 17 deletions(-)

diff --git a/dlls/kernel/tests/directory.c b/dlls/kernel/tests/directory.c
index ccebad98698..8a3dbf56528 100644
--- a/dlls/kernel/tests/directory.c
+++ b/dlls/kernel/tests/directory.c
@@ -156,12 +156,12 @@ static void test_CreateDirectoryA(void)
     ret = CreateDirectoryA(NULL, NULL);
     ok(ret == FALSE && (GetLastError() == ERROR_PATH_NOT_FOUND ||
                         GetLastError() == ERROR_INVALID_PARAMETER),
-       "CreateDirectoryA(NULL,NULL): ret=%d error=%ld\n",ret,GetLastError());
+       "CreateDirectoryA(NULL): ret=%d err=%ld\n", ret, GetLastError());
 
     ret = CreateDirectoryA("", NULL);
     ok(ret == FALSE && (GetLastError() == ERROR_BAD_PATHNAME ||
                         GetLastError() == ERROR_PATH_NOT_FOUND),
-       "CreateDirectoryA(\"\",NULL): ret=%d error=%ld\n",ret,GetLastError());
+       "CreateDirectoryA(%s): ret=%d err=%ld\n", tmpdir, ret, GetLastError());
 
     ret = GetSystemDirectoryA(tmpdir, MAX_PATH);
     ok(ret < MAX_PATH, "System directory should fit into MAX_PATH\n");
@@ -170,52 +170,159 @@ static void test_CreateDirectoryA(void)
     ok(ret == TRUE, "could not chdir to the System directory\n");
 
     ret = CreateDirectoryA(".", NULL);
-    ok(ret == FALSE && GetLastError() == ERROR_ALREADY_EXISTS, "should not create existing path\n");
+    ok(ret == FALSE && GetLastError() == ERROR_ALREADY_EXISTS,
+       "CreateDirectoryA(%s): ret=%d err=%ld\n", tmpdir, ret, GetLastError());
+
 
     ret = CreateDirectoryA("..", NULL);
-    ok(ret == FALSE && GetLastError() == ERROR_ALREADY_EXISTS, "should not create existing path\n");
+    ok(ret == FALSE && GetLastError() == ERROR_ALREADY_EXISTS,
+       "CreateDirectoryA(%s): ret=%d err=%ld\n", tmpdir, ret, GetLastError());
 
     GetTempPathA(MAX_PATH, tmpdir);
     tmpdir[3] = 0; /* truncate the path */
     ret = CreateDirectoryA(tmpdir, NULL);
     ok(ret == FALSE && (GetLastError() == ERROR_ALREADY_EXISTS ||
                         GetLastError() == ERROR_ACCESS_DENIED),
-       "CreateDirectoryA(drive_root): ret=%d error=%ld\n",ret,GetLastError());
+       "CreateDirectoryA(%s): ret=%d err=%ld\n", tmpdir, ret, GetLastError());
 
     GetTempPathA(MAX_PATH, tmpdir);
     lstrcatA(tmpdir, "Please Remove Me");
     ret = CreateDirectoryA(tmpdir, NULL);
-    ok(ret == TRUE, "CreateDirectoryA should always succeed\n");
+    ok(ret == TRUE,       "CreateDirectoryA(%s) failed err=%ld\n", tmpdir, GetLastError());
 
     ret = CreateDirectoryA(tmpdir, NULL);
-    ok(ret == FALSE && GetLastError() == ERROR_ALREADY_EXISTS, "should not create existing path\n");
+    ok(ret == FALSE && GetLastError() == ERROR_ALREADY_EXISTS,
+       "CreateDirectoryA(%s): ret=%d err=%ld\n", tmpdir, ret, GetLastError());
 
     ret = RemoveDirectoryA(tmpdir);
-    ok(ret == TRUE, "RemoveDirectoryA should always succeed\n");
+    ok(ret == TRUE,
+       "RemoveDirectoryA(%s) failed err=%ld\n", tmpdir, GetLastError());
+
 
     lstrcatA(tmpdir, "?");
     ret = CreateDirectoryA(tmpdir, NULL);
     ok(ret == FALSE && (GetLastError() == ERROR_INVALID_NAME ||
 			GetLastError() == ERROR_PATH_NOT_FOUND),
-       "CreateDirectoryA with ? wildcard name should fail, ret=%s error=%ld\n",
-       ret ? " True" : "False", GetLastError());
-    ret = RemoveDirectoryA(tmpdir);
+       "CreateDirectoryA(%s): ret=%d err=%ld\n", tmpdir, ret, GetLastError());
+    RemoveDirectoryA(tmpdir);
 
     tmpdir[lstrlenA(tmpdir) - 1] = '*';
     ret = CreateDirectoryA(tmpdir, NULL);
     ok(ret == FALSE && (GetLastError() == ERROR_INVALID_NAME ||
 			GetLastError() == ERROR_PATH_NOT_FOUND),
-       "CreateDirectoryA with * wildcard name should fail, ret=%s error=%ld\n",
-       ret ? " True" : "False", GetLastError());
-    ret = RemoveDirectoryA(tmpdir);
-    
+       "CreateDirectoryA(%s): ret=%d err=%ld\n", tmpdir, ret, GetLastError());
+    RemoveDirectoryA(tmpdir);
+
     GetTempPathA(MAX_PATH, tmpdir);
     lstrcatA(tmpdir, "Please Remove Me/Please Remove Me");
     ret = CreateDirectoryA(tmpdir, NULL);
     ok(ret == FALSE && GetLastError() == ERROR_PATH_NOT_FOUND, 
-      "CreateDirectoryA with multiple nonexistent directories in path should fail\n");
+       "CreateDirectoryA(%s): ret=%d err=%ld\n", tmpdir, ret, GetLastError());
+    RemoveDirectoryA(tmpdir);
+
+    /* Test behavior with a trailing dot.
+     * The directory should be created without the dot.
+     */
+    GetTempPathA(MAX_PATH, tmpdir);
+    lstrcatA(tmpdir, "Please Remove Me.");
+    ret = CreateDirectoryA(tmpdir, NULL);
+    ok(ret == TRUE,
+       "CreateDirectoryA(%s) failed err=%ld\n", tmpdir, GetLastError());
+
+    lstrcatA(tmpdir, "/Please Remove Me");
+    ret = CreateDirectoryA(tmpdir, NULL);
+    ok(ret == TRUE,
+       "CreateDirectoryA(%s) failed err=%ld\n", tmpdir, GetLastError());
     ret = RemoveDirectoryA(tmpdir);
-    
+    ok(ret == TRUE,
+       "RemoveDirectoryA(%s) failed err=%ld\n", tmpdir, GetLastError());
+
+    GetTempPathA(MAX_PATH, tmpdir);
+    lstrcatA(tmpdir, "Please Remove Me");
+    ret = RemoveDirectoryA(tmpdir);
+    ok(ret == TRUE,
+       "RemoveDirectoryA(%s) failed err=%ld\n", tmpdir, GetLastError());
+
+    /* Test behavior with two trailing dots.
+     * The directory should be created without the trailing dots.
+     */
+    GetTempPathA(MAX_PATH, tmpdir);
+    lstrcatA(tmpdir, "Please Remove Me..");
+    ret = CreateDirectoryA(tmpdir, NULL);
+    ok(ret == TRUE,
+       "CreateDirectoryA(%s) failed err=%ld\n", tmpdir, GetLastError());
+
+    lstrcatA(tmpdir, "/Please Remove Me");
+    ret = CreateDirectoryA(tmpdir, NULL);
+    ok(ret == TRUE || /* On Win98 */
+       (ret == FALSE && GetLastError() == ERROR_PATH_NOT_FOUND), /* On NT! */
+       "CreateDirectoryA(%s): ret=%d err=%ld\n", tmpdir, ret, GetLastError());
+    if (ret == TRUE)
+    {
+        ret = RemoveDirectoryA(tmpdir);
+        ok(ret == TRUE,
+           "RemoveDirectoryA(%s) failed err=%ld\n", tmpdir, GetLastError());
+    }
+
+    GetTempPathA(MAX_PATH, tmpdir);
+    lstrcatA(tmpdir, "Please Remove Me");
+    ret = RemoveDirectoryA(tmpdir);
+    ok(ret == TRUE,
+       "RemoveDirectoryA(%s) failed err=%ld\n", tmpdir, GetLastError());
+
+    /* Test behavior with a trailing space.
+     * The directory should be created without the trailing space.
+     */
+    GetTempPathA(MAX_PATH, tmpdir);
+    lstrcatA(tmpdir, "Please Remove Me ");
+    ret = CreateDirectoryA(tmpdir, NULL);
+    ok(ret == TRUE,
+       "CreateDirectoryA(%s) failed err=%ld\n", tmpdir, GetLastError());
+
+    lstrcatA(tmpdir, "/Please Remove Me");
+    ret = CreateDirectoryA(tmpdir, NULL);
+    ok(ret == TRUE || /* On Win98 */
+       (ret == FALSE && GetLastError() == ERROR_PATH_NOT_FOUND), /* On NT! */
+       "CreateDirectoryA(%s): ret=%d err=%ld\n", tmpdir, ret, GetLastError());
+    if (ret == TRUE)
+    {
+        ret = RemoveDirectoryA(tmpdir);
+        ok(ret == TRUE,
+           "RemoveDirectoryA(%s) failed err=%ld\n", tmpdir, GetLastError());
+    }
+
+    GetTempPathA(MAX_PATH, tmpdir);
+    lstrcatA(tmpdir, "Please Remove Me");
+    ret = RemoveDirectoryA(tmpdir);
+    ok(ret == TRUE,
+       "RemoveDirectoryA(%s) failed err=%ld\n", tmpdir, GetLastError());
+
+    /* Test behavior with a trailing space.
+     * The directory should be created without the trailing spaces.
+     */
+    GetTempPathA(MAX_PATH, tmpdir);
+    lstrcatA(tmpdir, "Please Remove Me  ");
+    ret = CreateDirectoryA(tmpdir, NULL);
+    ok(ret == TRUE,
+       "CreateDirectoryA(%s) failed err=%ld\n", tmpdir, GetLastError());
+
+    lstrcatA(tmpdir, "/Please Remove Me");
+    ret = CreateDirectoryA(tmpdir, NULL);
+    ok(ret == TRUE || /* On Win98 */
+       (ret == FALSE && GetLastError() == ERROR_PATH_NOT_FOUND), /* On NT! */
+       "CreateDirectoryA(%s): ret=%d err=%ld\n", tmpdir, ret, GetLastError());
+    if (ret == TRUE)
+    {
+        ret = RemoveDirectoryA(tmpdir);
+        ok(ret == TRUE,
+           "RemoveDirectoryA(%s) failed err=%ld\n", tmpdir, GetLastError());
+    }
+
+    GetTempPathA(MAX_PATH, tmpdir);
+    lstrcatA(tmpdir, "Please Remove Me");
+    ret = RemoveDirectoryA(tmpdir);
+    ok(ret == TRUE,
+       "RemoveDirectoryA(%s) failed err=%ld\n", tmpdir, GetLastError());
 }
 
 static void test_CreateDirectoryW(void)
-- 
GitLab