wininet/tests: Add test for FtpFindFirstFile.
authorMike Ruprecht <cmaiku@gmail.com>
Mon, 22 Dec 2008 10:38:46 +0000 (04:38 -0600)
committerAlexandre Julliard <julliard@winehq.org>
Mon, 22 Dec 2008 13:02:38 +0000 (14:02 +0100)
dlls/wininet/tests/ftp.c

index f7dc9c9f86f16ccba5ba14466b4476b09da4a3fd..a785fa983f4fded6a6983e129505537c14d51ac2 100644 (file)
@@ -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);