James Hawkins : kernel32: Add tests for WritePrivateProfileString.

Alexandre Julliard julliard at winehq.org
Tue Mar 24 09:01:56 CDT 2009


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

Author: James Hawkins <truiken at gmail.com>
Date:   Sun Mar 22 14:36:54 2009 -0700

kernel32: Add tests for WritePrivateProfileString.

---

 dlls/kernel32/tests/profile.c |  227 +++++++++++++++++++++++++++++++++++++++++
 1 files changed, 227 insertions(+), 0 deletions(-)

diff --git a/dlls/kernel32/tests/profile.c b/dlls/kernel32/tests/profile.c
index 2e5678c..6000ffb 100644
--- a/dlls/kernel32/tests/profile.c
+++ b/dlls/kernel32/tests/profile.c
@@ -802,6 +802,232 @@ static void test_GetPrivateProfileString(const char *content, const char *descri
     DeleteFileA(filename);
 }
 
+static BOOL check_file_data(LPCSTR path, LPCSTR data)
+{
+    HANDLE file;
+    CHAR buf[MAX_PATH];
+    DWORD size;
+    BOOL ret;
+
+    file = CreateFileA(path, GENERIC_READ, FILE_SHARE_READ, NULL, OPEN_EXISTING, 0, 0);
+    if (file == INVALID_HANDLE_VALUE)
+      return FALSE;
+
+    size = GetFileSize(file, NULL);
+    buf[size] = '\0';
+    ret = ReadFile(file, buf, size, &size, NULL);
+    CloseHandle(file);
+    if (!ret)
+      return FALSE;
+
+    if (!*data && size != 0)
+        return FALSE;
+
+    return !lstrcmpA(buf, data);
+}
+
+static void test_WritePrivateProfileString(void)
+{
+    BOOL ret;
+    LPCSTR data;
+    CHAR path[MAX_PATH];
+    CHAR temp[MAX_PATH];
+
+    GetTempPathA(MAX_PATH, temp);
+    GetTempFileNameA(temp, "wine", 0, path);
+    DeleteFileA(path);
+
+    /* path is not created yet */
+
+    /* NULL lpAppName */
+    SetLastError(0xdeadbeef);
+    ret = WritePrivateProfileStringA(NULL, "key", "string", path);
+    ok(ret == FALSE, "Expected FALSE, got %d\n", ret);
+    ok(GetLastError() == ERROR_FILE_NOT_FOUND,
+       "Expected ERROR_FILE_NOT_FOUND, got %d\n", GetLastError());
+    ok(GetFileAttributesA(path) == INVALID_FILE_ATTRIBUTES,
+       "Expected path to not exist\n");
+
+    GetTempFileNameA(temp, "wine", 0, path);
+
+    /* NULL lpAppName, path exists */
+    data = "";
+    SetLastError(0xdeadbeef);
+    ret = WritePrivateProfileStringA(NULL, "key", "string", path);
+    ok(ret == FALSE, "Expected FALSE, got %d\n", ret);
+    todo_wine
+    {
+        ok(GetLastError() == ERROR_FILE_NOT_FOUND,
+           "Expected ERROR_FILE_NOT_FOUND, got %d\n", GetLastError());
+    }
+    ok(check_file_data(path, data), "File doesn't match\n");
+    DeleteFileA(path);
+
+    /* empty lpAppName */
+    data = "[]\r\n"
+           "key=string\r\n";
+    ret = WritePrivateProfileStringA("", "key", "string", path);
+    ok(ret == TRUE, "Expected TRUE, got %d\n", ret);
+    todo_wine
+    {
+        ok(check_file_data(path, data), "File doesn't match\n");
+    }
+    DeleteFileA(path);
+
+    /* NULL lpKeyName */
+    data = "";
+    ret = WritePrivateProfileStringA("App", NULL, "string", path);
+    ok(ret == TRUE, "Expected TRUE, got %d\n", ret);
+    todo_wine
+    {
+        ok(check_file_data(path, data), "File doesn't match\n");
+    }
+    DeleteFileA(path);
+
+    /* empty lpKeyName */
+    data = "[App]\r\n"
+           "=string\r\n";
+    ret = WritePrivateProfileStringA("App", "", "string", path);
+    ok(ret == TRUE, "Expected TRUE, got %d\n", ret);
+    todo_wine
+    {
+        ok(check_file_data(path, data), "File doesn't match\n");
+    }
+    DeleteFileA(path);
+
+    /* NULL lpString */
+    data = "";
+    ret = WritePrivateProfileStringA("App", "key", NULL, path);
+    ok(ret == TRUE, "Expected TRUE, got %d\n", ret);
+    todo_wine
+    {
+        ok(check_file_data(path, data), "File doesn't match\n");
+    }
+    DeleteFileA(path);
+
+    /* empty lpString */
+    data = "[App]\r\n"
+           "key=\r\n";
+    ret = WritePrivateProfileStringA("App", "key", "", path);
+    ok(ret == TRUE, "Expected TRUE, got %d\n", ret);
+    todo_wine
+    {
+        ok(check_file_data(path, data), "File doesn't match\n");
+    }
+    DeleteFileA(path);
+
+    /* empty lpFileName */
+    SetLastError(0xdeadbeef);
+    ret = WritePrivateProfileStringA("App", "key", "string", "");
+    ok(ret == FALSE, "Expected FALSE, got %d\n", ret);
+    ok(GetLastError() == ERROR_ACCESS_DENIED,
+       "Expected ERROR_ACCESS_DENIED, got %d\n", GetLastError());
+
+    /* The resulting file will be  X:\\%WINDIR%\\win1.tmp */
+    GetWindowsDirectoryA(temp, MAX_PATH);
+    GetTempFileNameA(temp, "win", 1, path);
+    DeleteFileA(path);
+
+    /* relative path in lpFileName */
+    data = "[App]\r\n"
+           "key=string\r\n";
+    ret = WritePrivateProfileStringA("App", "key", "string", "win1.tmp");
+    ok(ret == TRUE, "Expected TRUE, got %d\n", ret);
+    todo_wine
+    {
+        ok(check_file_data(path, data), "File doesn't match\n");
+    }
+    DeleteFileA(path);
+
+    GetTempPathA(MAX_PATH, temp);
+    GetTempFileNameA(temp, "wine", 0, path);
+
+    /* build up an INI file */
+    WritePrivateProfileStringA("App1", "key1", "string1", path);
+    WritePrivateProfileStringA("App1", "key2", "string2", path);
+    WritePrivateProfileStringA("App1", "key3", "string3", path);
+    WritePrivateProfileStringA("App2", "key4", "string4", path);
+
+    /* make an addition and verify the INI */
+    data = "[App1]\r\n"
+           "key1=string1\r\n"
+           "key2=string2\r\n"
+           "key3=string3\r\n"
+           "[App2]\r\n"
+           "key4=string4\r\n"
+           "[App3]\r\n"
+           "key5=string5\r\n";
+    ret = WritePrivateProfileStringA("App3", "key5", "string5", path);
+    ok(ret == TRUE, "Expected TRUE, got %d\n", ret);
+    todo_wine
+    {
+        ok(check_file_data(path, data), "File doesn't match\n");
+    }
+
+    /* lpString is NULL, key2 key is deleted */
+    data = "[App1]\r\n"
+           "key1=string1\r\n"
+           "key3=string3\r\n"
+           "[App2]\r\n"
+           "key4=string4\r\n"
+           "[App3]\r\n"
+           "key5=string5\r\n";
+    ret = WritePrivateProfileStringA("App1", "key2", NULL, path);
+    ok(ret == TRUE, "Expected TRUE, got %d\n", ret);
+    todo_wine
+    {
+        ok(check_file_data(path, data), "File doesn't match\n");
+    }
+
+    /* try to delete key2 again */
+    data = "[App1]\r\n"
+           "key1=string1\r\n"
+           "key3=string3\r\n"
+           "[App2]\r\n"
+           "key4=string4\r\n"
+           "[App3]\r\n"
+           "key5=string5\r\n";
+    ret = WritePrivateProfileStringA("App1", "key2", NULL, path);
+    ok(ret == TRUE, "Expected TRUE, got %d\n", ret);
+    todo_wine
+    {
+        ok(check_file_data(path, data), "File doesn't match\n");
+    }
+
+    /* lpKeyName is NULL, App1 section is deleted */
+    data = "[App2]\r\n"
+           "key4=string4\r\n"
+           "[App3]\r\n"
+           "key5=string5\r\n";
+    ret = WritePrivateProfileStringA("App1", NULL, "string1", path);
+    ok(ret == TRUE, "Expected TRUE, got %d\n", ret);
+    todo_wine
+    {
+        ok(check_file_data(path, data), "File doesn't match\n");
+    }
+
+    /* lpString is not needed to delete a section */
+    data = "[App3]\r\n"
+           "key5=string5\r\n";
+    ret = WritePrivateProfileStringA("App2", NULL, NULL, path);
+    ok(ret == TRUE, "Expected TRUE, got %d\n", ret);
+    todo_wine
+    {
+        ok(check_file_data(path, data), "File doesn't match\n");
+    }
+
+    /* leave just the section */
+    data = "[App3]\r\n";
+    ret = WritePrivateProfileStringA("App3", "key5", NULL, path);
+    ok(ret == TRUE, "Expected TRUE, got %d\n", ret);
+    todo_wine
+    {
+        ok(check_file_data(path, data), "File doesn't match\n");
+    }
+
+    DeleteFileA(path);
+}
+
 START_TEST(profile)
 {
     test_profile_int();
@@ -827,4 +1053,5 @@ START_TEST(profile)
         "name4=a\r"
         "[section2]\r",
         "CR only");
+    test_WritePrivateProfileString();
 }




More information about the wine-cvs mailing list