Zac Brown : wininet: Add test for FtpGetCurrentDirectoryA in wininet/tests/ ftp.c.

Alexandre Julliard julliard at winehq.org
Mon Dec 3 09:18:00 CST 2007


Module: wine
Branch: master
Commit: 6ad1ef7a283906dcb0903baac014202e9000ee95
URL:    http://source.winehq.org/git/wine.git/?a=commit;h=6ad1ef7a283906dcb0903baac014202e9000ee95

Author: Zac Brown <zac at zacbrown.org>
Date:   Sat Dec  1 17:25:58 2007 -0500

wininet: Add test for FtpGetCurrentDirectoryA in wininet/tests/ftp.c.

---

 dlls/wininet/tests/ftp.c |   84 ++++++++++++++++++++++++++++++++++++++++++++++
 1 files changed, 84 insertions(+), 0 deletions(-)

diff --git a/dlls/wininet/tests/ftp.c b/dlls/wininet/tests/ftp.c
index 6d03fb8..1f63752 100644
--- a/dlls/wininet/tests/ftp.c
+++ b/dlls/wininet/tests/ftp.c
@@ -691,6 +691,89 @@ static void test_command(HINTERNET hFtp, HINTERNET hConnect)
     }
 }
 
+static void test_get_current_dir(HINTERNET hFtp, HINTERNET hConnect)
+{
+    BOOL    bRet;
+    DWORD   dwCurrentDirectoryLen = MAX_PATH;
+    CHAR    lpszCurrentDirectory[MAX_PATH];
+
+    /* change directories to get a more interesting pwd */
+    bRet = FtpCommandA(hFtp, FALSE, FTP_TRANSFER_TYPE_ASCII, "CWD pub/", 0, NULL);
+    if(bRet == FALSE)
+    {
+        skip("Failed to change directories in test_get_current_dir(HINTERNET hFtp).\n");
+        return;
+    }
+
+    /* test with all NULL arguments */
+    SetLastError(0xdeadbeef);
+    bRet = FtpGetCurrentDirectoryA( NULL, NULL, 0 );
+    ok ( bRet == FALSE, "Expected FtpGetCurrentDirectoryA to fail\n" );
+    ok ( GetLastError() == ERROR_INVALID_HANDLE, "Expected ERROR_INVALID_HANDLE, got: %d\n", GetLastError());
+
+    /* test with NULL parameters instead of expected LPSTR/LPDWORD */
+    SetLastError(0xdeadbeef);
+    bRet = FtpGetCurrentDirectoryA( hFtp, NULL, 0 );
+    ok ( bRet == FALSE, "Expected FtpGetCurrentDirectoryA to fail\n" );
+    ok ( GetLastError() == ERROR_INVALID_PARAMETER, "Expected ERROR_INVALID_PARAMETER, got: %d\n", GetLastError());
+
+    /* test with no valid handle and valid parameters */
+    SetLastError(0xdeadbeef);
+    bRet = FtpGetCurrentDirectoryA( NULL, lpszCurrentDirectory, &dwCurrentDirectoryLen );
+    ok ( bRet == FALSE, "Expected FtpGetCurrentDirectoryA to fail\n" );
+    ok ( GetLastError() == ERROR_INVALID_HANDLE, "Expected ERROR_INVALID_HANDLE, got: %d\n", GetLastError());
+
+    /* test with invalid dwCurrentDirectory and all other parameters correct */
+    SetLastError(0xdeadbeef);
+    bRet = FtpGetCurrentDirectoryA( hFtp, lpszCurrentDirectory, 0 );
+    ok ( bRet == FALSE, "Expected FtpGetCurrentDirectoryA to fail\n" );
+    ok ( GetLastError() == ERROR_INVALID_PARAMETER, "Expected ERROR_INVALID_PARAMETER, got: %d\n", GetLastError());
+
+    /* test with invalid lpszCurrentDirectory and all other parameters correct */
+    SetLastError(0xdeadbeef);
+    bRet = FtpGetCurrentDirectoryA( hFtp, NULL, &dwCurrentDirectoryLen );
+    ok ( bRet == FALSE, "Expected FtpGetCurrentDirectoryA to fail\n" );
+    ok ( GetLastError() == ERROR_INSUFFICIENT_BUFFER, "Expected ERROR_INSUFFICIENT_BUFFER, got: %d\n", GetLastError());
+
+    /* test to show it checks the handle type */
+    SetLastError(0xdeadbeef);
+    bRet = FtpGetCurrentDirectoryA( hConnect, lpszCurrentDirectory, &dwCurrentDirectoryLen );
+    ok ( bRet == FALSE, "Expected FtpGetCurrentDirectoryA to fail\n" );
+    ok ( GetLastError() == ERROR_INTERNET_INCORRECT_HANDLE_TYPE,
+    "Expected ERROR_INTERNET_INCORRECT_HANDLE_TYPE, got: %d\n", GetLastError());
+
+    /* test for the current directory with legitimate values */
+    SetLastError(0xdeadbeef);
+    bRet = FtpGetCurrentDirectoryA( hFtp, lpszCurrentDirectory, &dwCurrentDirectoryLen );
+    ok ( bRet == TRUE, "Expected FtpGetCurrentDirectoryA to pass\n" );
+todo_wine
+    ok ( lstrcmp(lpszCurrentDirectory, "/pub") == 0, "Expected returned value \"%s\" to match \"%s\" \n", (char*)lpszCurrentDirectory, "/pub");
+    ok ( GetLastError() == ERROR_SUCCESS, "Expected ERROR_SUCCESS, got: %d\n", GetLastError());
+
+
+    /* test for the current directory with a size only large enough to
+     * fit the string and not the null terminating character */
+    SetLastError(0xdeadbeef);
+    dwCurrentDirectoryLen = 4;
+    lpszCurrentDirectory[4] = 'a'; /* set position 4 of the array to something else to make sure a leftover \0 isn't fooling the test */
+    bRet = FtpGetCurrentDirectoryA( hFtp, lpszCurrentDirectory, &dwCurrentDirectoryLen );
+todo_wine
+    ok ( bRet == FALSE, "Expected FtpGetCurrentDirectoryA to fail\n");
+    ok ( lstrcmp(lpszCurrentDirectory, "/pub") != 0, "Expected returned value \"%s\" to not match \"%s\" \n", (char*)lpszCurrentDirectory, "/pub");
+todo_wine
+    ok ( GetLastError() == ERROR_INSUFFICIENT_BUFFER, "Expected ERROR_INSUFFICIENT_BUFFER, got: %d\n", GetLastError());
+
+    /* test for the current directory with a size large enough to store
+     * the expected string as well as the null terminating character */
+    SetLastError(0xdeadbeef);
+    dwCurrentDirectoryLen = 5;
+    bRet = FtpGetCurrentDirectoryA( hFtp, lpszCurrentDirectory, &dwCurrentDirectoryLen );
+    ok ( bRet == TRUE, "Expected FtpGetCurrentDirectoryA to pass\n");
+todo_wine
+    ok ( lstrcmp(lpszCurrentDirectory, "/pub") == 0, "Expected returned value \"%s\" to match \"%s\" \n", (char*)lpszCurrentDirectory, "/pub");
+    ok ( GetLastError() == ERROR_SUCCESS, "Expected ERROR_SUCCESS, got: %d\n", GetLastError());
+}
+
 START_TEST(ftp)
 {
     HANDLE hInternet, hFtp, hHttp;
@@ -733,6 +816,7 @@ START_TEST(ftp)
     test_removedir(hFtp, hHttp);
     test_renamefile(hFtp, hHttp);
     test_command(hFtp, hHttp);
+    test_get_current_dir(hFtp, hHttp);
 
     InternetCloseHandle(hHttp);
     InternetCloseHandle(hFtp);




More information about the wine-cvs mailing list