Author: akhaldi
Date: Sun Jun  4 01:51:25 2017
New Revision: 74885

URL: http://svn.reactos.org/svn/reactos?rev=74885&view=rev
Log:
[SERVICES_WINETEST] Sync with Wine Staging 2.9. CORE-13362

Modified:
    trunk/rostests/winetests/services/CMakeLists.txt
    trunk/rostests/winetests/services/service.c

Modified: trunk/rostests/winetests/services/CMakeLists.txt
URL: 
http://svn.reactos.org/svn/reactos/trunk/rostests/winetests/services/CMakeLists.txt?rev=74885&r1=74884&r2=74885&view=diff
==============================================================================
--- trunk/rostests/winetests/services/CMakeLists.txt    [iso-8859-1] (original)
+++ trunk/rostests/winetests/services/CMakeLists.txt    [iso-8859-1] Sun Jun  4 
01:51:25 2017
@@ -1,5 +1,5 @@
 
 add_executable(services_winetest service.c testlist.c)
 set_module_type(services_winetest win32cui)
-add_importlibs(services_winetest advapi32 msvcrt kernel32)
+add_importlibs(services_winetest user32 advapi32 msvcrt kernel32)
 add_rostests_file(TARGET services_winetest)

Modified: trunk/rostests/winetests/services/service.c
URL: 
http://svn.reactos.org/svn/reactos/trunk/rostests/winetests/services/service.c?rev=74885&r1=74884&r2=74885&view=diff
==============================================================================
--- trunk/rostests/winetests/services/service.c [iso-8859-1] (original)
+++ trunk/rostests/winetests/services/service.c [iso-8859-1] Sun Jun  4 
01:51:25 2017
@@ -16,8 +16,13 @@
  * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA
  */
 
-#include <windows.h>
+#include <stdarg.h>
+
+#include <windef.h>
+#include <winsvc.h>
 #include <stdio.h>
+#include <winbase.h>
+#include <winuser.h>
 
 #include "wine/test.h"
 
@@ -59,6 +64,67 @@
     va_end(valist);
 
     send_msg(cnd ? "OK" : "FAIL", buf);
+}
+
+static void test_winstation(void)
+{
+    HWINSTA winstation;
+    USEROBJECTFLAGS flags;
+    BOOL r;
+
+    winstation = GetProcessWindowStation();
+    service_ok(winstation != NULL, "winstation = NULL\n");
+
+    r = GetUserObjectInformationA(winstation, UOI_FLAGS, &flags, 
sizeof(flags), NULL);
+    service_ok(r, "GetUserObjectInformation(UOI_NAME) failed: %u\n", 
GetLastError());
+    service_ok(!(flags.dwFlags & WSF_VISIBLE), "winstation has flags %x\n", 
flags.dwFlags);
+}
+
+/*
+ * Test creating window in a service process. Although services run in 
non-interactive,
+ * they may create windows that will never be visible.
+ */
+static void test_create_window(void)
+{
+    DWORD style;
+    ATOM class;
+    HWND hwnd;
+    BOOL r;
+
+    static WNDCLASSEXA wndclass = {
+        sizeof(WNDCLASSEXA),
+        0,
+        DefWindowProcA,
+        0, 0, NULL, NULL, NULL, NULL, NULL,
+        "service_test",
+        NULL
+    };
+
+    hwnd = GetDesktopWindow();
+    service_ok(IsWindow(hwnd), "GetDesktopWindow returned invalid window 
%p\n", hwnd);
+
+    class = RegisterClassExA(&wndclass);
+    service_ok(class, "RegisterClassFailed\n");
+
+    hwnd = CreateWindowA("service_test", "service_test",
+            WS_OVERLAPPEDWINDOW, CW_USEDEFAULT, CW_USEDEFAULT,
+            515, 530, NULL, NULL, NULL, NULL);
+    service_ok(hwnd != NULL, "CreateWindow failed: %u\n", GetLastError());
+
+    style = GetWindowLongW(hwnd, GWL_STYLE);
+    service_ok(!(style & WS_VISIBLE), "style = %x, expected invisible\n", 
style);
+
+    r = ShowWindow(hwnd, SW_SHOW);
+    service_ok(!r, "ShowWindow returned %x\n", r);
+
+    style = GetWindowLongW(hwnd, GWL_STYLE);
+    service_ok(style & WS_VISIBLE, "style = %x, expected visible\n", style);
+
+    r = ShowWindow(hwnd, SW_SHOW);
+    service_ok(r, "ShowWindow returned %x\n", r);
+
+    r = DestroyWindow(hwnd);
+    service_ok(r, "DestroyWindow failed: %08x\n", GetLastError());
 }
 
 static DWORD WINAPI service_handler(DWORD ctrl, DWORD event_type, void 
*event_data, void *context)
@@ -83,6 +149,8 @@
         SetEvent(service_stop_event);
         return NO_ERROR;
     case 128:
+        test_winstation();
+        test_create_window();
         service_event("CUSTOM");
         return 0xdeadbeef;
     default:


Reply via email to