https://git.reactos.org/?p=reactos.git;a=commitdiff;h=328a4c383473cf0ff61b8…
commit 328a4c383473cf0ff61b8abf335775f5c3f94445
Author: Katayama Hirofumi MZ <katayama.hirofumi.mz(a)gmail.com>
AuthorDate: Tue Oct 30 08:38:03 2018 +0900
Commit: GitHub <noreply(a)github.com>
CommitDate: Tue Oct 30 08:38:03 2018 +0900
[APITESTS] Add CloseWindow testcase (#996)
Add a testcase for user32!CloseWindow function.
---
modules/rostests/apitests/user32/CMakeLists.txt | 1 +
modules/rostests/apitests/user32/CloseWindow.c | 225 ++++++++++++++++++++++++
modules/rostests/apitests/user32/testlist.c | 2 +
3 files changed, 228 insertions(+)
diff --git a/modules/rostests/apitests/user32/CMakeLists.txt
b/modules/rostests/apitests/user32/CMakeLists.txt
index 0a82490574..87a257ec81 100644
--- a/modules/rostests/apitests/user32/CMakeLists.txt
+++ b/modules/rostests/apitests/user32/CMakeLists.txt
@@ -2,6 +2,7 @@
list(APPEND SOURCE
AttachThreadInput.c
../include/msgtrace.c
+ CloseWindow.c
CreateDialog.c
CreateIconFromResourceEx.c
CreateWindowEx.c
diff --git a/modules/rostests/apitests/user32/CloseWindow.c
b/modules/rostests/apitests/user32/CloseWindow.c
new file mode 100644
index 0000000000..ee81056d44
--- /dev/null
+++ b/modules/rostests/apitests/user32/CloseWindow.c
@@ -0,0 +1,225 @@
+/*
+ * PROJECT: ReactOS api tests
+ * LICENSE: GPL - See COPYING in the top level directory
+ * PURPOSE: Test for CloseWindow
+ * PROGRAMMERS: Katayama Hirofumi MZ <katayama.hirofumi.mz(a)gmail.com>
+ */
+
+#include "precomp.h"
+
+static const WCHAR s_szClassName[] = L"CloseWindowTest";
+
+static BOOL s_bTracing = FALSE;
+
+static INT s_nWM_SYSCOMMAND = 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)
+ {
+ ++s_nWM_SYSCOMMAND;
+ }
+
+ 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)
+ {
+ //
+ // SetActiveWindow(GetDesktopWindow());
+ //
+ case 0:
+ SetForegroundWindow(GetDesktopWindow());
+ SetActiveWindow(GetDesktopWindow());
+ ok(GetForegroundWindow() == NULL, "GetForegroundWindow() !=
NULL\n");
+ ok(GetActiveWindow() == NULL, "GetActiveWindow() != NULL\n");
+ ok(GetFocus() == NULL, "GetFocus() != NULL\n");
+ s_nWM_SYSCOMMAND = 0;
+ s_nWM_NCACTIVATE = 0;
+ s_nWM_WINDOWPOSCHANGING = 0;
+ s_nWM_ACTIVATE = 0;
+ s_bTracing = TRUE;
+ trace("CloseWindow(hwnd): tracing...\n");
+ ok(CloseWindow(hwnd), "CloseWindow failed\n");
+ break;
+ case 1:
+ ok(GetForegroundWindow() == NULL, "GetForegroundWindow() !=
NULL\n");
+ ok(GetActiveWindow() == hwnd, "GetActiveWindow() != hwnd\n");
+ ok(GetFocus() == NULL, "GetFocus() != NULL\n");
+ s_bTracing = FALSE;
+ trace("CloseWindow(hwnd): tracing done\n");
+ ok(s_nWM_SYSCOMMAND == 0, "WM_SYSCOMMAND: %d\n",
s_nWM_SYSCOMMAND);
+ ok(s_nWM_NCACTIVATE == 1, "WM_NCACTIVATE: %d\n",
s_nWM_NCACTIVATE);
+ ok(s_nWM_WINDOWPOSCHANGING == 2, "WM_WINDOWPOSCHANGING: %d\n",
s_nWM_WINDOWPOSCHANGING);
+ ok(s_nWM_ACTIVATE == 1, "WM_ACTIVATE: %d\n", s_nWM_ACTIVATE);
+ ShowWindow(hwnd, SW_RESTORE);
+ break;
+ //
+ // SetActiveWindow(hwnd);
+ //
+ case 2:
+ SetForegroundWindow(GetDesktopWindow());
+ SetActiveWindow(hwnd);
+ ok(GetForegroundWindow() == NULL, "GetForegroundWindow() !=
NULL\n");
+ ok(GetActiveWindow() == hwnd, "GetActiveWindow() != hwnd\n");
+ ok(GetFocus() == hwnd, "GetFocus() != hwnd\n");
+ s_nWM_SYSCOMMAND = 0;
+ s_nWM_NCACTIVATE = 0;
+ s_nWM_WINDOWPOSCHANGING = 0;
+ s_nWM_ACTIVATE = 0;
+ s_bTracing = TRUE;
+ trace("CloseWindow(hwnd): tracing...\n");
+ ok(CloseWindow(hwnd), "CloseWindow failed\n");
+ break;
+ case 3:
+ ok(GetForegroundWindow() == NULL, "GetForegroundWindow() !=
NULL\n");
+ ok(GetActiveWindow() == hwnd, "GetActiveWindow() != hwnd\n");
+ ok(GetFocus() == NULL, "GetFocus() != NULL\n");
+ s_bTracing = FALSE;
+ trace("CloseWindow(hwnd): tracing done\n");
+ ok(s_nWM_SYSCOMMAND == 0, "WM_SYSCOMMAND: %d\n",
s_nWM_SYSCOMMAND);
+ ok(s_nWM_NCACTIVATE == 0, "WM_NCACTIVATE: %d\n",
s_nWM_NCACTIVATE);
+ ok(s_nWM_WINDOWPOSCHANGING == 1, "WM_WINDOWPOSCHANGING: %d\n",
s_nWM_WINDOWPOSCHANGING);
+ ok(s_nWM_ACTIVATE == 0, "WM_ACTIVATE: %d\n", s_nWM_ACTIVATE);
+ ShowWindow(hwnd, SW_RESTORE);
+ break;
+ //
+ // SetForegroundWindow(hwnd);
+ //
+ case 4:
+ SetActiveWindow(GetDesktopWindow());
+ SetForegroundWindow(hwnd);
+ ok(GetForegroundWindow() == hwnd, "GetForegroundWindow() !=
hwnd\n");
+ ok(GetActiveWindow() == hwnd, "GetActiveWindow() != hwnd\n");
+ ok(GetFocus() == hwnd, "GetFocus() != hwnd\n");
+ s_nWM_SYSCOMMAND = 0;
+ s_nWM_NCACTIVATE = 0;
+ s_nWM_WINDOWPOSCHANGING = 0;
+ s_nWM_ACTIVATE = 0;
+ s_bTracing = TRUE;
+ trace("CloseWindow(hwnd): tracing...\n");
+ ok(CloseWindow(hwnd), "CloseWindow failed\n");
+ break;
+ case 5:
+ ok(GetForegroundWindow() == hwnd, "GetForegroundWindow() !=
hwnd\n");
+ ok(GetActiveWindow() == hwnd, "GetActiveWindow() != hwnd\n");
+ ok(GetFocus() == NULL, "GetFocus() != NULL\n");
+ s_bTracing = FALSE;
+ trace("CloseWindow(hwnd): tracing done\n");
+ ok(s_nWM_SYSCOMMAND == 0, "WM_SYSCOMMAND: %d\n",
s_nWM_SYSCOMMAND);
+ ok(s_nWM_NCACTIVATE == 0, "WM_NCACTIVATE: %d\n",
s_nWM_NCACTIVATE);
+ ok(s_nWM_WINDOWPOSCHANGING == 1, "WM_WINDOWPOSCHANGING: %d\n",
s_nWM_WINDOWPOSCHANGING);
+ ok(s_nWM_ACTIVATE == 0, "WM_ACTIVATE: %d\n", s_nWM_ACTIVATE);
+ ShowWindow(hwnd, SW_RESTORE);
+ 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(CloseWindow)
+{
+ 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 1155a39aa8..c72a48ff81 100644
--- a/modules/rostests/apitests/user32/testlist.c
+++ b/modules/rostests/apitests/user32/testlist.c
@@ -4,6 +4,7 @@
#include <apitest.h>
extern void func_AttachThreadInput(void);
+extern void func_CloseWindow(void);
extern void func_CreateDialog(void);
extern void func_CreateIconFromResourceEx(void);
extern void func_CreateWindowEx(void);
@@ -47,6 +48,7 @@ extern void func_wsprintf(void);
const struct test winetest_testlist[] =
{
{ "AttachThreadInput", func_AttachThreadInput },
+ { "CloseWindow", func_CloseWindow },
{ "CreateDialog", func_CreateDialog },
{ "CreateIconFromResourceEx", func_CreateIconFromResourceEx },
{ "CreateWindowEx", func_CreateWindowEx },