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