https://git.reactos.org/?p=reactos.git;a=commitdiff;h=3e00e7fb22fe98e32f6d9…
commit 3e00e7fb22fe98e32f6d93c34e1d1cf058146758
Author: Katayama Hirofumi MZ <katayama.hirofumi.mz(a)gmail.com>
AuthorDate: Fri Oct 26 19:56:25 2018 +0900
Commit: GitHub <noreply(a)github.com>
CommitDate: Fri Oct 26 19:56:25 2018 +0900
[APITESTS][USER32] Add testcase for SwitchToThisWindow (#980)
Add an API test program for user32!SwitchToThisWindow function.
JIRA issue: CORE-15165
---
modules/rostests/apitests/user32/CMakeLists.txt | 1 +
.../rostests/apitests/user32/SwitchToThisWindow.c | 214 +++++++++++++++++++++
modules/rostests/apitests/user32/testlist.c | 2 +
3 files changed, 217 insertions(+)
diff --git a/modules/rostests/apitests/user32/CMakeLists.txt
b/modules/rostests/apitests/user32/CMakeLists.txt
index 4d901a4c9d..0a82490574 100644
--- a/modules/rostests/apitests/user32/CMakeLists.txt
+++ b/modules/rostests/apitests/user32/CMakeLists.txt
@@ -36,6 +36,7 @@ list(APPEND SOURCE
SetProp.c
SetScrollInfo.c
SetScrollRange.c
+ SwitchToThisWindow.c
SystemParametersInfo.c
TrackMouseEvent.c
WndProc.c
diff --git a/modules/rostests/apitests/user32/SwitchToThisWindow.c
b/modules/rostests/apitests/user32/SwitchToThisWindow.c
new file mode 100644
index 0000000000..e89bf11c47
--- /dev/null
+++ b/modules/rostests/apitests/user32/SwitchToThisWindow.c
@@ -0,0 +1,214 @@
+/*
+ * PROJECT: ReactOS api tests
+ * LICENSE: GPL - See COPYING in the top level directory
+ * PURPOSE: Test for SwitchToThisWindow
+ * PROGRAMMERS: Katayama Hirofumi MZ <katayama.hirofumi.mz(a)gmail.com>
+ */
+
+#include "precomp.h"
+
+static const WCHAR s_szClassName[] = L"SwitchTest";
+
+static BOOL s_bTracing = FALSE;
+
+static INT s_nWM_SYSCOMMAND_SC_RESTORE = 0;
+static INT s_nWM_SYSCOMMAND_NOT_SC_RESTORE = 0;
+static INT s_nWM_NCACTIVATE = 0;
+static INT s_nWM_WINDOWPOSCHANGING = 0;
+static INT s_nWM_ACTIVATE = 0;
+
+#define TIMER_INTERVAL 200
+
+static void
+DoMessage(HWND hwnd, UINT uMsg, WPARAM wParam, LPARAM lParam)
+{
+ if (uMsg == WM_TIMER || !s_bTracing)
+ return;
+
+ trace("uMsg:0x%04X, wParam:0x%08lX, lParam:0x%08lX\n", uMsg, (LONG)wParam,
(LONG)lParam);
+
+ if (uMsg == WM_SYSCOMMAND)
+ {
+ if (wParam == SC_RESTORE)
+ ++s_nWM_SYSCOMMAND_SC_RESTORE;
+ else
+ ++s_nWM_SYSCOMMAND_NOT_SC_RESTORE;
+ }
+
+ if (uMsg == WM_NCACTIVATE)
+ ++s_nWM_NCACTIVATE;
+
+ if (uMsg == WM_WINDOWPOSCHANGING)
+ ++s_nWM_WINDOWPOSCHANGING;
+
+ if (uMsg == WM_ACTIVATE)
+ ++s_nWM_ACTIVATE;
+}
+
+// WM_TIMER
+static void
+OnTimer(HWND hwnd, UINT id)
+{
+ KillTimer(hwnd, id);
+ switch (id)
+ {
+ //
+ // SwitchToThisWindow(TRUE)
+ //
+ case 0: // minimize
+ SetForegroundWindow(GetDesktopWindow());
+ SetActiveWindow(GetDesktopWindow());
+ ok(GetForegroundWindow() == NULL, "GetForegroundWindow() !=
NULL\n");
+ ok(GetActiveWindow() == NULL, "GetActiveWindow() != NULL\n");
+ ok(GetFocus() == NULL, "GetFocus() != NULL\n");
+ CloseWindow(hwnd); // minimize
+ break;
+ case 1: // start tracing
+ ok(GetForegroundWindow() == NULL, "GetForegroundWindow() !=
NULL\n");
+ ok(GetActiveWindow() == hwnd, "GetActiveWindow() != hwnd\n");
+ ok(GetFocus() == NULL, "GetFocus() != NULL\n");
+ s_nWM_SYSCOMMAND_SC_RESTORE = 0;
+ s_nWM_SYSCOMMAND_NOT_SC_RESTORE = 0;
+ s_nWM_NCACTIVATE = 0;
+ s_nWM_WINDOWPOSCHANGING = 0;
+ s_nWM_ACTIVATE = 0;
+ s_bTracing = TRUE;
+ SwitchToThisWindow(hwnd, TRUE);
+ trace("SwitchToThisWindow(TRUE): tracing...\n");
+ break;
+ case 2: // tracing done
+ s_bTracing = FALSE;
+ trace("SwitchToThisWindow(TRUE): tracing done\n");
+ ok(GetForegroundWindow() == hwnd, "GetForegroundWindow() !=
hwnd\n");
+ ok(GetActiveWindow() == hwnd, "GetActiveWindow() != hwnd\n");
+ ok(GetFocus() == hwnd, "GetFocus() != hwnd\n");
+ ok(s_nWM_SYSCOMMAND_SC_RESTORE == 1, "WM_SYSCOMMAND SC_RESTORE:
%d\n", s_nWM_SYSCOMMAND_SC_RESTORE);
+ ok(!s_nWM_SYSCOMMAND_NOT_SC_RESTORE, "WM_SYSCOMMAND non-SC_RESTORE:
%d\n", s_nWM_SYSCOMMAND_NOT_SC_RESTORE);
+ ok(s_nWM_NCACTIVATE > 0, "WM_NCACTIVATE: not found\n");
+ ok(s_nWM_WINDOWPOSCHANGING > 0, "WM_WINDOWPOSCHANGING: not
found\n");
+ ok(s_nWM_ACTIVATE > 0, "WM_ACTIVATE: not found\n");
+ break;
+ //
+ // SwitchToThisWindow(FALSE)
+ //
+ case 3: // minimize
+ SetForegroundWindow(GetDesktopWindow());
+ SetActiveWindow(GetDesktopWindow());
+ ok(GetForegroundWindow() == NULL, "GetForegroundWindow() !=
NULL\n");
+ ok(GetActiveWindow() == NULL, "GetActiveWindow() != NULL\n");
+ ok(GetFocus() == NULL, "GetFocus() != NULL\n");
+ CloseWindow(hwnd); // minimize
+ break;
+ case 4: // start tracing
+ ok(GetForegroundWindow() == NULL, "GetForegroundWindow() !=
NULL\n");
+ ok(GetActiveWindow() == hwnd, "GetActiveWindow() != hwnd\n");
+ ok(GetFocus() == NULL, "GetFocus() != NULL\n");
+ s_nWM_SYSCOMMAND_SC_RESTORE = 0;
+ s_nWM_SYSCOMMAND_NOT_SC_RESTORE = 0;
+ s_nWM_NCACTIVATE = 0;
+ s_nWM_WINDOWPOSCHANGING = 0;
+ s_nWM_ACTIVATE = 0;
+ s_bTracing = TRUE;
+ SwitchToThisWindow(hwnd, FALSE);
+ trace("SwitchToThisWindow(FALSE): tracing...\n");
+ break;
+ case 5: // tracing done
+ s_bTracing = FALSE;
+ trace("SwitchToThisWindow(FALSE): tracing done\n");
+ ok(GetForegroundWindow() == NULL, "GetForegroundWindow() !=
NULL\n");
+ ok(GetActiveWindow() == hwnd, "GetActiveWindow() != hwnd\n");
+ ok(GetFocus() == NULL, "GetFocus() != NULL\n");
+ ok(!s_nWM_SYSCOMMAND_SC_RESTORE, "WM_SYSCOMMAND SC_RESTORE: %d\n",
s_nWM_SYSCOMMAND_SC_RESTORE);
+ ok(!s_nWM_SYSCOMMAND_NOT_SC_RESTORE, "WM_SYSCOMMAND non-SC_RESTORE:
%d\n", s_nWM_SYSCOMMAND_NOT_SC_RESTORE);
+ ok(!s_nWM_NCACTIVATE, "WM_NCACTIVATE: %d\n", s_nWM_NCACTIVATE);
+ ok(!s_nWM_WINDOWPOSCHANGING, "WM_WINDOWPOSCHANGING: %d\n",
s_nWM_WINDOWPOSCHANGING);
+ ok(!s_nWM_ACTIVATE, "WM_ACTIVATE: %d\n", s_nWM_ACTIVATE);
+ break;
+ default: // finish
+ DestroyWindow(hwnd);
+ return;
+ }
+ SetTimer(hwnd, id + 1, TIMER_INTERVAL, NULL);
+}
+
+static LRESULT CALLBACK
+WindowProc(HWND hwnd, UINT uMsg, WPARAM wParam, LPARAM lParam)
+{
+ DoMessage(hwnd, uMsg, wParam, lParam);
+ switch (uMsg)
+ {
+ case WM_CREATE:
+ SetTimer(hwnd, 0, TIMER_INTERVAL, NULL);
+ break;
+ case WM_TIMER:
+ OnTimer(hwnd, (UINT)wParam);
+ break;
+ case WM_DESTROY:
+ PostQuitMessage(0);
+ break;
+ default:
+ return DefWindowProc(hwnd, uMsg, wParam, lParam);
+ }
+ return 0;
+}
+
+START_TEST(SwitchToThisWindow)
+{
+ WNDCLASSW wc;
+ HICON hIcon;
+ HCURSOR hCursor;
+ ATOM atom;
+ HWND hwnd;
+ MSG msg;
+
+ hIcon = LoadIcon(NULL, IDI_APPLICATION);
+ ok(hIcon != NULL, "hIcon was NULL\n");
+ hCursor = LoadCursor(NULL, IDC_ARROW);
+ ok(hCursor != NULL, "hCursor was NULL\n");
+
+ ZeroMemory(&wc, sizeof(wc));
+ wc.lpfnWndProc = WindowProc;
+ wc.hInstance = GetModuleHandleW(NULL);
+ wc.hIcon = hIcon;
+ wc.hCursor = hCursor;
+ wc.hbrBackground = (HBRUSH)(COLOR_3DFACE + 1);
+ wc.lpszClassName = s_szClassName;
+ atom = RegisterClassW(&wc);
+ ok(atom != 0, "RegisterClassW failed\n");
+
+ if (!atom)
+ {
+ skip("atom is zero\n");
+ DestroyIcon(hIcon);
+ DestroyCursor(hCursor);
+ return;
+ }
+
+ hwnd = CreateWindowW(s_szClassName, L"SwitchToThisWindow",
WS_OVERLAPPEDWINDOW,
+ CW_USEDEFAULT, CW_USEDEFAULT, 100, 100,
+ NULL, NULL, GetModuleHandleW(NULL), NULL);
+ ok(hwnd != NULL, "CreateWindowW failed\n");
+ trace("hwnd: %p\n", hwnd);
+
+ if (!hwnd)
+ {
+ skip("hwnd is NULL\n");
+ UnregisterClassW(s_szClassName, GetModuleHandleW(NULL));
+ DestroyIcon(hIcon);
+ DestroyCursor(hCursor);
+ return;
+ }
+
+ ShowWindow(hwnd, SW_SHOWNORMAL);
+ UpdateWindow(hwnd);
+
+ while (GetMessage(&msg, NULL, 0, 0))
+ {
+ TranslateMessage(&msg);
+ DispatchMessage(&msg);
+ }
+
+ UnregisterClassW(s_szClassName, GetModuleHandleW(NULL));
+ DestroyIcon(hIcon);
+ DestroyCursor(hCursor);
+}
diff --git a/modules/rostests/apitests/user32/testlist.c
b/modules/rostests/apitests/user32/testlist.c
index 86a1bdbc84..1155a39aa8 100644
--- a/modules/rostests/apitests/user32/testlist.c
+++ b/modules/rostests/apitests/user32/testlist.c
@@ -38,6 +38,7 @@ extern void func_SetParent(void);
extern void func_SetProp(void);
extern void func_SetScrollInfo(void);
extern void func_SetScrollRange(void);
+extern void func_SwitchToThisWindow(void);
extern void func_SystemParametersInfo(void);
extern void func_TrackMouseEvent(void);
extern void func_WndProc(void);
@@ -80,6 +81,7 @@ const struct test winetest_testlist[] =
{ "SetProp", func_SetProp },
{ "SetScrollInfo", func_SetScrollInfo },
{ "SetScrollRange", func_SetScrollRange },
+ { "SwitchToThisWindow", func_SwitchToThisWindow },
{ "SystemParametersInfo", func_SystemParametersInfo },
{ "TrackMouseEvent", func_TrackMouseEvent },
{ "WndProc", func_WndProc },