Akihiro Sagawa : winmm/tests: Add tests for window style of video window.
Alexandre Julliard
julliard at winehq.org
Wed Aug 10 14:54:33 CDT 2022
Module: wine
Branch: master
Commit: 34671bdcff1c99acfc8f887519054363bd483078
URL: https://gitlab.winehq.org/wine/wine/-/commit/34671bdcff1c99acfc8f887519054363bd483078
Author: Akihiro Sagawa <sagawa.aki at gmail.com>
Date: Sat Aug 6 17:45:36 2022 +0900
winmm/tests: Add tests for window style of video window.
The test shows that even if MCI_DGV_OPEN_PARENT is specified, the video window
is shown. In other words, it doesn't imply the window is a child window.
Signed-off-by: Akihiro Sagawa <sagawa.aki at gmail.com>
---
dlls/winmm/tests/mci.c | 151 +++++++++++++++++++++++++++++++++++++++----------
1 file changed, 120 insertions(+), 31 deletions(-)
diff --git a/dlls/winmm/tests/mci.c b/dlls/winmm/tests/mci.c
index c8ba5440287..bf609a9d26d 100644
--- a/dlls/winmm/tests/mci.c
+++ b/dlls/winmm/tests/mci.c
@@ -1488,41 +1488,130 @@ static void test_video_window(void)
{
const WCHAR *filename = load_resource(L"test.mpg");
MCI_PARMS_UNION parm;
- HWND video_window;
+ unsigned int i;
MCIDEVICEID id;
MCIERROR err;
BOOL ret;
- parm.dgv_open.lpstrDeviceType = (WCHAR *)L"MPEGVideo";
- parm.dgv_open.lpstrElementName = (WCHAR *)filename;
- err = mciSendCommandW(0, MCI_OPEN, MCI_OPEN_ELEMENT | MCI_OPEN_TYPE, (DWORD_PTR)&parm);
- ok(!err, "Got %s.\n", dbg_mcierr(err));
- id = parm.dgv_open.wDeviceID;
-
- err = mciSendCommandW(id, MCI_PLAY, 0, (DWORD_PTR)&parm);
- ok(!err, "Got %s.\n", dbg_mcierr(err));
-
- video_window = NULL;
- EnumWindows(my_visible_window_proc, (LPARAM)&video_window);
- ok(video_window != NULL, "Video window should be shown.\n");
-
- err = mciSendCommandW(id, MCI_STOP, 0, (DWORD_PTR)&parm);
- ok(!err, "Got %s.\n", dbg_mcierr(err));
-
- ok(IsWindowVisible(video_window), "Video window should be visible.\n");
-
- err = mciSendCommandW(id, MCI_PLAY, 0, (DWORD_PTR)&parm);
- ok(!err, "Got %s.\n", dbg_mcierr(err));
-
- ok(IsWindowVisible(video_window), "Video window should be visible.\n");
-
- err = mciSendCommandW(id, MCI_SEEK, MCI_SEEK_TO_START, (DWORD_PTR)&parm);
- ok(!err, "Got %s.\n", dbg_mcierr(err));
-
- ok(IsWindowVisible(video_window), "Video window should be visible.\n");
-
- err = mciSendCommandW(id, MCI_CLOSE, 0, 0);
- ok(!err, "Got %s.\n", dbg_mcierr(err));
+ static const struct
+ {
+ DWORD open_flags;
+ DWORD style;
+ DWORD expected_style;
+ }
+ testcase[] =
+ {
+ {
+ 0,
+ 0,
+ (WS_OVERLAPPEDWINDOW | WS_CLIPCHILDREN | WS_CLIPSIBLINGS) & ~WS_MAXIMIZEBOX,
+ },
+ {
+ MCI_DGV_OPEN_PARENT,
+ 0,
+ (WS_OVERLAPPEDWINDOW | WS_CLIPCHILDREN | WS_CLIPSIBLINGS) & ~WS_MAXIMIZEBOX,
+ },
+ {
+ MCI_DGV_OPEN_WS,
+ 0,
+ WS_BORDER | WS_CLIPSIBLINGS | WS_BORDER | WS_DLGFRAME,
+ },
+ {
+ MCI_DGV_OPEN_WS,
+ WS_POPUPWINDOW,
+ WS_POPUPWINDOW | WS_CLIPSIBLINGS,
+ },
+ {
+ MCI_DGV_OPEN_PARENT | MCI_DGV_OPEN_WS,
+ WS_OVERLAPPEDWINDOW,
+ WS_OVERLAPPEDWINDOW | WS_CLIPSIBLINGS,
+ },
+ {
+ MCI_DGV_OPEN_PARENT | MCI_DGV_OPEN_WS,
+ WS_CHILDWINDOW,
+ WS_CHILD,
+ },
+ };
+
+ for (i = 0; i < ARRAY_SIZE(testcase); ++i)
+ {
+ HWND parent_window = NULL, hwnd, video_window;
+ DWORD style, expected;
+
+ winetest_push_context("%u", i);
+
+ 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);
+
+ parm.dgv_open.lpstrDeviceType = (WCHAR *)L"MPEGVideo";
+ parm.dgv_open.lpstrElementName = (WCHAR *)filename;
+ parm.dgv_open.hWndParent = parent_window;
+ parm.dgv_open.dwStyle = testcase[i].style;
+ err = mciSendCommandW(0, MCI_OPEN,
+ MCI_OPEN_ELEMENT | MCI_OPEN_TYPE | testcase[i].open_flags, (DWORD_PTR)&parm);
+ ok(!err, "Got %s.\n", dbg_mcierr(err));
+ id = parm.dgv_open.wDeviceID;
+
+ err = mciSendCommandW(id, MCI_PLAY, 0, (DWORD_PTR)&parm);
+ ok(!err, "Got %s.\n", dbg_mcierr(err));
+
+ if (!(testcase[i].style & WS_CHILD))
+ {
+ video_window = NULL;
+ EnumWindows(my_visible_window_proc, (LPARAM)&video_window);
+ todo_wine_if (testcase[i].open_flags & MCI_DGV_OPEN_PARENT)
+ ok(video_window != NULL, "Video window should be shown.\n");
+
+ /* FIXME: Remove once Wine is fixed */
+ if (!video_window) goto next;
+
+ hwnd = GetWindow(video_window, GW_OWNER);
+ todo_wine_if (testcase[i].open_flags & MCI_DGV_OPEN_PARENT)
+ ok(hwnd == parent_window, "Got owner %p, expected %p.\n", hwnd, parent_window);
+ }
+ else
+ {
+ ok(!IsWindowVisible(parent_window), "Parent window should be hidden.\n");
+ ShowWindow(parent_window, SW_SHOWNA);
+
+ hwnd = GetWindow(parent_window, GW_CHILD);
+ ok(hwnd != NULL, "Child video window should be shown.\n");
+ video_window = hwnd;
+ }
+
+ expected = testcase[i].expected_style | WS_VISIBLE;
+ style = GetWindowLongW(video_window, GWL_STYLE);
+ todo_wine_if (i != 3)
+ ok(style == expected, "Got style %#lx for window %p, expected %#lx.\n", style, video_window, expected);
+
+ err = mciSendCommandW(id, MCI_STOP, 0, (DWORD_PTR)&parm);
+ ok(!err, "Got %s.\n", dbg_mcierr(err));
+
+ ok(IsWindowVisible(video_window), "Video window should be visible.\n");
+
+ err = mciSendCommandW(id, MCI_PLAY, 0, (DWORD_PTR)&parm);
+ ok(!err, "Got %s.\n", dbg_mcierr(err));
+
+ ok(IsWindowVisible(video_window), "Video window should be visible.\n");
+
+ err = mciSendCommandW(id, MCI_SEEK, MCI_SEEK_TO_START, (DWORD_PTR)&parm);
+ ok(!err, "Got %s.\n", dbg_mcierr(err));
+
+ ok(IsWindowVisible(video_window), "Video window should be visible.\n");
+
+next:
+ err = mciSendCommandW(id, MCI_CLOSE, 0, 0);
+ ok(!err, "Got %s.\n", dbg_mcierr(err));
+
+ if (parent_window)
+ {
+ ret = DestroyWindow(parent_window);
+ ok(ret, "Failed to destroy parent window\n");
+ }
+
+ winetest_pop_context();
+ }
ret = DeleteFileW(filename);
ok(ret, "Failed to delete %s, error %lu.\n", debugstr_w(filename), GetLastError());
More information about the wine-cvs
mailing list