Alexandre Julliard : kernel32: Add some test cases for profile file sharing modes.

Alexandre Julliard julliard at winehq.org
Wed May 21 16:31:52 CDT 2008


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

Author: Alexandre Julliard <julliard at winehq.org>
Date:   Wed May 21 14:23:44 2008 +0200

kernel32: Add some test cases for profile file sharing modes.

Based on a patch by Louis Lenders.

---

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

diff --git a/dlls/kernel32/tests/profile.c b/dlls/kernel32/tests/profile.c
index 8611c11..54ad6da 100644
--- a/dlls/kernel32/tests/profile.c
+++ b/dlls/kernel32/tests/profile.c
@@ -29,6 +29,7 @@
 #define SECTION  "Test"
 #define TESTFILE ".\\testwine.ini"
 #define TESTFILE2 ".\\testwine2.ini"
+#define TESTFILE3 ".\\testwine3.ini"
 
 struct _profileInt { 
     LPCSTR section;
@@ -266,10 +267,63 @@ static void test_profile_sections_names(void)
     ok( bufW[1] != 0, "returned buffer terminated with double-null\n" );
 }
 
+/* If the ini-file has already been opened with CreateFile, WritePrivateProfileString failed in wine with an error ERROR_SHARING_VIOLATION,  some testing here */
+static void test_profile_existing(void)
+{
+    static const struct {
+        DWORD dwDesiredAccess;
+        DWORD dwShareMode;
+        DWORD error;
+    } pe[] = {
+        {GENERIC_READ,  FILE_SHARE_READ,  ERROR_SHARING_VIOLATION},
+        {GENERIC_READ,  FILE_SHARE_WRITE, ERROR_SHARING_VIOLATION},
+        {GENERIC_WRITE, FILE_SHARE_READ,  ERROR_SHARING_VIOLATION},
+        {GENERIC_WRITE, FILE_SHARE_WRITE, ERROR_SHARING_VIOLATION},
+        {GENERIC_READ|GENERIC_WRITE, FILE_SHARE_READ,  ERROR_SHARING_VIOLATION},
+        {GENERIC_READ|GENERIC_WRITE, FILE_SHARE_WRITE, ERROR_SHARING_VIOLATION},
+        {GENERIC_READ,  FILE_SHARE_READ|FILE_SHARE_WRITE, 0},
+        {GENERIC_WRITE, FILE_SHARE_READ|FILE_SHARE_WRITE, 0},
+        /*Thief demo (bug 5024) opens .ini file like this*/
+        {GENERIC_READ|GENERIC_WRITE, FILE_SHARE_READ|FILE_SHARE_WRITE, 0},
+    };
+
+    int i;
+    BOOL ret;
+    DWORD size;
+    HANDLE h = 0;
+    char buffer[MAX_PATH];
+
+    for (i=0; i < sizeof(pe)/sizeof(pe[0]); i++)
+    {
+        h = CreateFile(TESTFILE3, pe[i].dwDesiredAccess, pe[i].dwShareMode, NULL, CREATE_ALWAYS, FILE_ATTRIBUTE_NORMAL, NULL);
+        ok(INVALID_HANDLE_VALUE != h, "%d: CreateFile failed\n",i);
+        SetLastError(0xdeadbeef);
+        ret = WritePrivateProfileString(SECTION, KEY, "12345", TESTFILE3);
+        if (!pe[i].error)
+        {
+            ok( ret, "%d: WritePrivateProfileString failed with error %u\n", i, GetLastError() );
+            CloseHandle(h);
+            size = GetPrivateProfileString(SECTION, KEY, 0, buffer, MAX_PATH, TESTFILE3);
+            ok( size == 5, "%d: test failed, number of characters copied: %d instead of 5\n", i, size );
+        }
+        else
+        {
+            DWORD err = GetLastError();
+            ok( !ret, "%d: WritePrivateProfileString succeeded\n", i );
+            if (!ret) ok( err == pe[i].error, "%d: WritePrivateProfileString failed with error %u/%u\n", i, err, pe[i].error );
+            CloseHandle(h);
+            size = GetPrivateProfileString(SECTION, KEY, 0, buffer, MAX_PATH, TESTFILE3);
+            ok( !size, "%d: test failed, number of characters copied: %d instead of 0\n", i, size );
+        }
+        ok( DeleteFile(TESTFILE3), "delete failed\n" );
+    }
+}
+
 START_TEST(profile)
 {
     test_profile_int();
     test_profile_string();
     test_profile_sections();
     test_profile_sections_names();
+    test_profile_existing();
 }




More information about the wine-cvs mailing list