wininet/tests: Add test for FtpFindFirstFile.

Mike Ruprecht cmaiku at gmail.com
Mon Dec 22 04:38:46 CST 2008


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

diff --git a/dlls/wininet/tests/ftp.c b/dlls/wininet/tests/ftp.c
index f7dc9c9..a785fa9 100644
--- a/dlls/wininet/tests/ftp.c
+++ b/dlls/wininet/tests/ftp.c
@@ -25,7 +25,6 @@
  * TODO:
  *     Add W-function tests.
  *     Add missing function tests:
- *         FtpFindFirstFile
  *         FtpGetFileSize
  *         FtpSetCurrentDirectory
  */
@@ -723,6 +722,89 @@ static void test_command(HINTERNET hFtp, HINTERNET hConnect)
     }
 }
 
+static void test_find_first_file(HINTERNET hFtp, HINTERNET hConnect)
+{
+    WIN32_FIND_DATA findData;
+    HINTERNET hSearch;
+    HINTERNET hSearch2;
+    HINTERNET hOpenFile;
+
+    /* NULL as the search file ought to return the first file in the directory */
+    SetLastError(0xdeadbeef);
+    hSearch = FtpFindFirstFileA(hFtp, NULL, &findData, 0, 0);
+    ok ( hSearch != NULL, "Expected FtpFindFirstFileA to pass\n" );
+
+    /* This should fail as the previous handle wasn't closed */
+    SetLastError(0xdeadbeef);
+    hSearch2 = FtpFindFirstFileA(hFtp, "welcome.msg", &findData, 0, 0);
+    todo_wine ok ( hSearch2 == NULL, "Expected FtpFindFirstFileA to fail\n" );
+    todo_wine ok ( GetLastError() == ERROR_FTP_TRANSFER_IN_PROGRESS,
+        "Expected ERROR_FTP_TRANSFER_IN_PROGRESS, got %d\n", GetLastError() );
+    InternetCloseHandle(hSearch2); /* Just in case */
+
+    InternetCloseHandle(hSearch);
+
+    /* Try a valid filename in a subdirectory search */
+    SetLastError(0xdeadbeef);
+    hSearch = FtpFindFirstFileA(hFtp, "pub/wine", &findData, 0, 0);
+    todo_wine ok ( hSearch != NULL, "Expected FtpFindFirstFileA to pass\n" );
+    InternetCloseHandle(hSearch);
+
+    /* Try a valid filename in a subdirectory wildcard search */
+    SetLastError(0xdeadbeef);
+    hSearch = FtpFindFirstFileA(hFtp, "pub/w*", &findData, 0, 0);
+    todo_wine ok ( hSearch != NULL, "Expected FtpFindFirstFileA to pass\n" );
+    InternetCloseHandle(hSearch);
+
+    /* Try an invalid wildcard search */
+    SetLastError(0xdeadbeef);
+    hSearch = FtpFindFirstFileA(hFtp, "*/w*", &findData, 0, 0);
+    ok ( hSearch == NULL, "Expected FtpFindFirstFileA to fail\n" );
+    InternetCloseHandle(hSearch); /* Just in case */
+
+    /* Try FindFirstFile between FtpOpenFile and InternetCloseHandle */
+    SetLastError(0xdeadbeef);
+    hOpenFile = FtpOpenFileA(hFtp, "welcome.msg", GENERIC_READ, FTP_TRANSFER_TYPE_ASCII, 0);
+    ok ( hOpenFile != NULL, "Expected FtpOpenFileA to succeed\n" );
+    ok ( GetLastError() == ERROR_SUCCESS ||
+        broken(GetLastError() == ERROR_FILE_NOT_FOUND), /* Win98 */
+        "Expected ERROR_SUCCESS, got %u\n", GetLastError() );
+
+    /* This should fail as the OpenFile handle wasn't closed */
+    SetLastError(0xdeadbeef);
+    hSearch = FtpFindFirstFileA(hFtp, "welcome.msg", &findData, 0, 0);
+    ok ( hSearch == NULL, "Expected FtpFindFirstFileA to fail\n" );
+    ok ( GetLastError() == ERROR_FTP_TRANSFER_IN_PROGRESS,
+        "Expected ERROR_FTP_TRANSFER_IN_PROGRESS, got %d\n", GetLastError() );
+    InternetCloseHandle(hSearch); /* Just in case */
+
+    InternetCloseHandle(hOpenFile);
+
+    /* Test using a nonexistent filename */
+    SetLastError(0xdeadbeef);
+    hSearch = FtpFindFirstFileA(hFtp, "this_file_should_not_exist", &findData, 0, 0);
+    ok ( hSearch == NULL, "Expected FtpFindFirstFileA to fail\n" );
+    todo_wine ok ( GetLastError() == ERROR_INTERNET_EXTENDED_ERROR,
+        "Expected ERROR_INTERNET_EXTENDED_ERROR, got %d\n", GetLastError() );
+    InternetCloseHandle(hSearch); /* Just in case */
+
+    /* Test using a nonexistent filename and a wildcard */
+    SetLastError(0xdeadbeef);
+    hSearch = FtpFindFirstFileA(hFtp, "this_file_should_not_exist*", &findData, 0, 0);
+    ok ( hSearch == NULL, "Expected FtpFindFirstFileA to fail\n" );
+    todo_wine ok ( GetLastError() == ERROR_NO_MORE_FILES,
+        "Expected ERROR_NO_MORE_FILES, got %d\n", GetLastError() );
+    InternetCloseHandle(hSearch); /* Just in case */
+
+    /* Test using an invalid handle type */
+    SetLastError(0xdeadbeef);
+    hSearch = FtpFindFirstFileA(hConnect, "welcome.msg", &findData, 0, 0);
+    ok ( hSearch == NULL, "Expected FtpFindFirstFileA to fail\n" );
+    ok ( GetLastError() == ERROR_INTERNET_INCORRECT_HANDLE_TYPE,
+        "Expected ERROR_INTERNET_INCORRECT_HANDLE_TYPE, got %d\n", GetLastError() );
+    InternetCloseHandle(hSearch); /* Just in case */
+}
+
 static void test_get_current_dir(HINTERNET hFtp, HINTERNET hConnect)
 {
     BOOL    bRet;
@@ -853,6 +935,7 @@ START_TEST(ftp)
     test_removedir(hFtp, hHttp);
     test_renamefile(hFtp, hHttp);
     test_command(hFtp, hHttp);
+    test_find_first_file(hFtp, hHttp);
     test_get_current_dir(hFtp, hHttp);
 
     InternetCloseHandle(hHttp);
-- 
1.5.6.3





More information about the wine-patches mailing list