[v7 3/6] user32: Add tests for windows when first shown if they have children

Fabian Maurer dark.shadow4 at web.de
Mon Feb 13 09:58:27 CST 2017


v4: Fixed tests on some machines
v5: Mark tests as todo as long as they don't pass
v6: Fixed random test failures on test machines

Signed-off-by: Fabian Maurer <dark.shadow4 at web.de>
---
 dlls/user32/tests/msg.c | 43 +++++++++++++++++++++++++++++++++++++++++++
 1 file changed, 43 insertions(+)

diff --git a/dlls/user32/tests/msg.c b/dlls/user32/tests/msg.c
index 3a69035c9b..d60b93ed69 100644
--- a/dlls/user32/tests/msg.c
+++ b/dlls/user32/tests/msg.c
@@ -1120,6 +1120,17 @@ static const struct message WmFirstDrawSetWindowPosSeq5[] = {
     { WM_WINDOWPOSCHANGED, sent },
     { 0 }
 };
+static const struct message WmFirstDrawChildSeq1[] = {
+    { 0 }
+};
+static const struct message WmFirstDrawChildSeq2[] = {
+    { WM_NCPAINT, sent|wparam, 1 },
+    { WM_ERASEBKGND, sent },
+    /* ocasionally received on test machines */
+    { WM_NCPAINT, sent|optional },
+    { WM_ERASEBKGND, sent|optional },
+    { 0 }
+};
 /* CreateWindow (for child window, not initially visible) */
 static const struct message WmCreateChildSeq[] = {
     { HCBT_CREATEWND, hook },
@@ -5107,6 +5118,38 @@ static void test_messages(void)
     test_msg_setpos(WmFirstDrawSetWindowPosSeq2, SWP_SHOWWINDOW | SWP_NOREDRAW | SWP_NOSIZE, FALSE);
     test_msg_setpos(WmFirstDrawSetWindowPosSeq2, SWP_SHOWWINDOW | SWP_NOREDRAW | SWP_NOZORDER, FALSE);
 
+    /* Test SetWindowPos with child windows */
+    flush_events();
+    hparent = CreateWindowExA(0, "TestParentClass", "Test parent", WS_OVERLAPPEDWINDOW | WS_VISIBLE,
+                              100, 100, 200, 200, 0, 0, 0, NULL);
+    ok (hparent != 0, "Failed to create parent window\n");
+
+    hchild = CreateWindowExA(0, "TestWindowClass", "Test child", WS_CHILD | WS_VISIBLE,
+                             0, 0, 10, 10, hparent, 0, 0, NULL);
+    ok (hchild != 0, "Failed to create child window\n");
+    flush_sequence();
+    SetWindowPos(hparent, NULL, 0, 0, 100, 100, SWP_SHOWWINDOW);
+    ok_sequence(WmFirstDrawChildSeq1, /* Expect no messages for the child */
+                "SetWindowPos:show_popup_first_show_window_child1", FALSE);
+    DestroyWindow(hchild);
+    DestroyWindow(hparent);
+
+    flush_events();
+    hparent = CreateWindowExA(0, "TestParentClass", "Test parent", WS_OVERLAPPEDWINDOW | WS_VISIBLE | WS_CLIPCHILDREN,
+                              100, 100, 200, 200, 0, 0, 0, NULL);
+    ok (hparent != 0, "Failed to create parent window\n");
+
+    hchild = CreateWindowExA(0, "TestWindowClass", "Test child", WS_CHILD | WS_VISIBLE,
+                             0, 0, 10, 10, hparent, 0, 0, NULL);
+    ok (hchild != 0, "Failed to create child window\n");
+    flush_sequence();
+    SetWindowPos(hparent, NULL, 0, 0, 100, 100, SWP_SHOWWINDOW);
+    ok_sequence(WmFirstDrawChildSeq2, /* Expect child to be redrawn */
+                "SetWindowPos:show_popup_first_show_window_child2", TRUE);
+    DestroyWindow(hchild);
+    DestroyWindow(hparent);
+
+
     /* Test child windows */
 
     hparent = CreateWindowExA(0, "TestParentClass", "Test parent", WS_OVERLAPPEDWINDOW | WS_VISIBLE,
-- 
2.11.1




More information about the wine-patches mailing list