Akihiro Sagawa : winmm/tests: Add tests for destination of video window.

Alexandre Julliard julliard at winehq.org
Wed Aug 10 14:54:34 CDT 2022


Module: wine
Branch: master
Commit: e08631097eae8a2bcfd125cea2b09225789913ad
URL:    https://gitlab.winehq.org/wine/wine/-/commit/e08631097eae8a2bcfd125cea2b09225789913ad

Author: Akihiro Sagawa <sagawa.aki at gmail.com>
Date:   Sun Jul 31 20:49:25 2022 +0900

winmm/tests: Add tests for destination of video window.

Signed-off-by: Akihiro Sagawa <sagawa.aki at gmail.com>

---

 dlls/winmm/tests/mci.c | 68 +++++++++++++++++++++++++++++++++++++++++++++++++-
 1 file changed, 67 insertions(+), 1 deletion(-)

diff --git a/dlls/winmm/tests/mci.c b/dlls/winmm/tests/mci.c
index d7686ec54b1..a0989d542c5 100644
--- a/dlls/winmm/tests/mci.c
+++ b/dlls/winmm/tests/mci.c
@@ -39,7 +39,9 @@ typedef union {
       MCI_SYSINFO_PARMSA  sys;
       MCI_SEEK_PARMS      seek;
       MCI_DGV_OPEN_PARMSW dgv_open;
+      MCI_DGV_PUT_PARMS   put;
       MCI_DGV_WHERE_PARMS where;
+      MCI_DGV_WINDOW_PARMSW win;
       MCI_GENERIC_PARMS   gen;
     } MCI_PARMS_UNION;
 
@@ -1536,12 +1538,14 @@ static void test_video_window(void)
 
     for (i = 0; i < ARRAY_SIZE(testcase); ++i)
     {
-        HWND parent_window = NULL, hwnd, video_window;
+        HWND parent_window = NULL, hwnd, video_window, main_window;
         DWORD style, expected;
         RECT rc, src_rc, win_rc;
 
         winetest_push_context("%u", i);
 
+        main_window = CreateWindowExA(0, "static", "main",
+                WS_POPUPWINDOW, 0, 0, 10, 10, 0, 0, 0, NULL);
         if (testcase[i].open_flags & MCI_DGV_OPEN_PARENT)
             parent_window = CreateWindowExA(0, "static", "parent",
                     WS_POPUPWINDOW, 0, 0, 100, 100, 0, 0, 0, NULL);
@@ -1645,6 +1649,67 @@ static void test_video_window(void)
 
         ok(IsWindowVisible(video_window), "Video window should be visible.\n");
 
+        /* Test MCI_DGV_WINDOW_HWND. */
+        parm.win.hWnd = main_window;
+        err = mciSendCommandW(id, MCI_WINDOW, MCI_DGV_WINDOW_HWND, (DWORD_PTR)&parm);
+        ok(!err, "Got %s.\n", dbg_mcierr(err));
+        ok(!IsWindowVisible(main_window), "Main window should be hidden.\n");
+
+        hwnd = GetWindow(main_window, GW_CHILD);
+        todo_wine ok(hwnd != video_window,
+                "Video window (%p) and child window (%p) should be different.\n", video_window, hwnd);
+        style = GetWindowLongW(hwnd, GWL_STYLE);
+        expected = WS_CHILD | WS_VISIBLE;
+        todo_wine ok(style == expected, "Child window %p: got style %#lx, expected %#lx.\n",
+                hwnd, style, expected);
+
+        style = GetWindowLongW(video_window, GWL_STYLE);
+        expected = testcase[i].expected_style;
+        todo_wine ok(style == expected, "Video window %p: got style %#lx, expected %#lx.\n",
+                video_window, style, expected);
+
+        /* destination size is reset to the source video size */
+        err = mciSendCommandW(id, MCI_WHERE, MCI_DGV_WHERE_DESTINATION, (DWORD_PTR)&parm);
+        ok(!err, "Got %s.\n", dbg_mcierr(err));
+        todo_wine ok(EqualRect(&parm.where.rc, &src_rc), "Got destination rect %s, expected %s.\n",
+                wine_dbgstr_rect(&parm.where.rc), wine_dbgstr_rect(&src_rc));
+
+        /* destination size isn't reset unless the destination window is changed */
+        SetRect(&rc, 0, 0, src_rc.right * 2, src_rc.bottom / 2);
+        parm.put.rc = rc;
+        err = mciSendCommandW(id, MCI_PUT, MCI_DGV_PUT_DESTINATION | MCI_DGV_RECT, (DWORD_PTR)&parm);
+        ok(!err, "Got %s.\n", dbg_mcierr(err));
+
+        parm.win.hWnd = main_window;
+        err = mciSendCommandW(id, MCI_WINDOW, MCI_DGV_WINDOW_HWND, (DWORD_PTR)&parm);
+        ok(!err, "Got %s.\n", dbg_mcierr(err));
+        ok(!IsWindowVisible(main_window), "Main window should be hidden.\n");
+
+        err = mciSendCommandW(id, MCI_WHERE, MCI_DGV_WHERE_DESTINATION, (DWORD_PTR)&parm);
+        ok(!err, "Got %s.\n", dbg_mcierr(err));
+        todo_wine_if ((testcase[i].style & (WS_CHILD | WS_POPUP)) != WS_CHILD)
+            ok(EqualRect(&parm.where.rc, &rc), "Got destination rect %s, expected %s.\n",
+                    wine_dbgstr_rect(&parm.where.rc), wine_dbgstr_rect(&rc));
+
+        /* MCI_PLAY shows current video window */
+        err = mciSendCommandW(id, MCI_PLAY, 0, (DWORD_PTR)&parm);
+        ok(!err, "Got %s.\n", dbg_mcierr(err));
+        todo_wine ok(IsWindowVisible(main_window), "Main window should be shown.\n");
+        ok(IsWindow(video_window), "Video window should exist.\n");
+        ok(!IsWindowVisible(video_window), "Video window should be hidden.\n");
+
+        /* video window is reset to the default window, which is visible again */
+        parm.win.hWnd = NULL;
+        err = mciSendCommandW(id, MCI_WINDOW, MCI_DGV_WINDOW_HWND, (DWORD_PTR)&parm);
+        ok(!err, "Got %s.\n", dbg_mcierr(err));
+        todo_wine ok(IsWindowVisible(main_window), "Main window should be shown.\n");
+        todo_wine ok(IsWindowVisible(video_window), "Video window should be shown.\n");
+
+        err = mciSendCommandW(id, MCI_WHERE, MCI_DGV_WHERE_DESTINATION, (DWORD_PTR)&parm);
+        ok(!err, "Got %s.\n", dbg_mcierr(err));
+        todo_wine ok(EqualRect(&parm.where.rc, &src_rc), "Got destination rect %s, expected %s.\n",
+                wine_dbgstr_rect(&parm.where.rc), wine_dbgstr_rect(&src_rc));
+
 next:
         err = mciSendCommandW(id, MCI_CLOSE, 0, 0);
         ok(!err, "Got %s.\n", dbg_mcierr(err));
@@ -1654,6 +1719,7 @@ next:
             ret = DestroyWindow(parent_window);
             ok(ret, "Failed to destroy parent window\n");
         }
+        DestroyWindow(main_window);
 
         winetest_pop_context();
     }




More information about the wine-cvs mailing list