KERNEL32: tests for SignalObjectAndWait
Mike McCormack
mike at codeweavers.com
Mon Apr 18 11:39:12 CDT 2005
ChangeLog:
* tests for SignalObjectAndWait
-------------- next part --------------
Index: dlls/kernel/tests/.cvsignore
===================================================================
RCS file: /home/wine/wine/dlls/kernel/tests/.cvsignore,v
retrieving revision 1.27
diff -u -p -r1.27 .cvsignore
--- dlls/kernel/tests/.cvsignore 7 Sep 2004 23:28:32 -0000 1.27
+++ dlls/kernel/tests/.cvsignore 18 Apr 2005 16:39:05 -0000
@@ -19,6 +19,7 @@ path.ok
pipe.ok
process.ok
profile.ok
+sync.ok
testlist.c
thread.ok
time.ok
Index: dlls/kernel/tests/Makefile.in
===================================================================
RCS file: /home/wine/wine/dlls/kernel/tests/Makefile.in,v
retrieving revision 1.17
diff -u -p -r1.17 Makefile.in
--- dlls/kernel/tests/Makefile.in 7 Sep 2004 23:28:32 -0000 1.17
+++ dlls/kernel/tests/Makefile.in 18 Apr 2005 16:39:05 -0000
@@ -26,6 +26,7 @@ CTESTS = \
pipe.c \
process.c \
profile.c \
+ sync.c \
thread.c \
time.c \
timer.c \
--- /dev/null 2005-04-04 08:07:08.000000000 +0900
+++ dlls/kernel/tests/sync.c 2005-04-19 01:36:09.000000000 +0900
@@ -0,0 +1,117 @@
+/*
+ * Synchronization tests
+ *
+ * Copyright 2005 Mike McCormack for CodeWeavers
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation; either
+ * version 2.1 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+ */
+
+#include <stdarg.h>
+#include <stdlib.h>
+#include <stdio.h>
+#include <windef.h>
+#include <winbase.h>
+
+#include "wine/test.h"
+
+void test_signalandwait(void)
+{
+ DWORD (WINAPI *pSignalObjectAndWait)(HANDLE, HANDLE, DWORD, BOOL);
+ HMODULE kernel32;
+ DWORD r;
+ HANDLE event[2], semaphore[2], file;
+
+ kernel32 = GetModuleHandle("kernel32");
+ pSignalObjectAndWait = (void*) GetProcAddress(kernel32, "SignalObjectAndWait");
+
+ if (!pSignalObjectAndWait)
+ return;
+
+ /* events */
+ event[0] = CreateEvent(NULL, 0, 0, NULL);
+ event[1] = CreateEvent(NULL, 1, 1, NULL);
+
+ ok( event[0] && event[1], "failed to create event flags\n");
+
+ /* invalid parameters */
+ r = pSignalObjectAndWait(NULL, NULL, 0, 0);
+ ok( r == WAIT_FAILED, "should fail\n");
+
+ r = pSignalObjectAndWait(event[0], NULL, 0, FALSE);
+ ok( r == WAIT_FAILED, "should fail\n");
+
+ r = pSignalObjectAndWait(NULL, event[0], 0, FALSE);
+ ok( r == WAIT_FAILED, "should fail\n");
+
+
+ /* valid parameters */
+ r = pSignalObjectAndWait(event[0], event[1], 0, FALSE);
+ ok( r == WAIT_OBJECT_0, "should succeed\n");
+
+ /* event[0] is now signalled */
+ r = pSignalObjectAndWait(event[0], event[0], 0, FALSE);
+ ok( r == WAIT_OBJECT_0, "should succeed\n");
+
+ /* event[0] is not signalled */
+ r = WaitForSingleObject(event[0], 0);
+ ok( r == WAIT_TIMEOUT, "event was signalled\n");
+
+ r = pSignalObjectAndWait(event[0], event[0], 0, FALSE);
+ ok( r == WAIT_OBJECT_0, "should succeed\n");
+
+ /* clear event[1] and check for a timeout */
+ ok(ResetEvent(event[1]), "failed to clear event[1]\n");
+ r = pSignalObjectAndWait(event[0], event[1], 0, FALSE);
+ ok( r == WAIT_TIMEOUT, "should timeout\n");
+
+ CloseHandle(event[0]);
+ CloseHandle(event[1]);
+
+
+ /* semaphores */
+ semaphore[0] = CreateSemaphore( NULL, 0, 1, NULL );
+ semaphore[1] = CreateSemaphore( NULL, 1, 1, NULL );
+ ok( semaphore[0] && semaphore[1], "failed to create semaphore\n");
+
+ r = pSignalObjectAndWait(semaphore[0], semaphore[1], 0, FALSE);
+ ok( r == WAIT_OBJECT_0, "should succeed\n");
+
+ r = pSignalObjectAndWait(semaphore[0], semaphore[1], 0, FALSE);
+ ok( r == WAIT_FAILED, "should fail\n");
+
+ r = ReleaseSemaphore(semaphore[0],1,NULL);
+ ok( r == FALSE, "should fail\n");
+
+ r = ReleaseSemaphore(semaphore[1],1,NULL);
+ ok( r == TRUE, "should succeed\n");
+
+ CloseHandle(semaphore[0]);
+ CloseHandle(semaphore[1]);
+
+ /* try a registry key */
+ file = CreateFile("x", GENERIC_READ|GENERIC_WRITE, 0, NULL, CREATE_ALWAYS,
+ FILE_ATTRIBUTE_NORMAL | FILE_FLAG_DELETE_ON_CLOSE, NULL);
+ r = pSignalObjectAndWait(file, file, 0, FALSE);
+ ok( r == WAIT_FAILED, "should fail\n");
+ todo_wine {
+ ok( ERROR_INVALID_HANDLE == GetLastError(), "should return invalid handle error\n");
+ }
+ CloseHandle(file);
+}
+
+START_TEST(sync)
+{
+ test_signalandwait();
+}
More information about the wine-patches
mailing list