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