From: Akihiro Sagawa sagawa.aki@gmail.com
--- dlls/winmm/tests/mci.c | 63 +++++++++++++++++++++++++++++++++++++++++- 1 file changed, 62 insertions(+), 1 deletion(-)
diff --git a/dlls/winmm/tests/mci.c b/dlls/winmm/tests/mci.c index 67387419671..f75e8f962ee 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;
@@ -1522,12 +1524,15 @@ 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; LONG 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, @@ -1621,6 +1626,61 @@ static void test_video_window(void)
ok(IsWindowVisible(video_window), "video window should be visible\n");
+ /* test MCI_WINDOW */ + parm.win.hWnd = main_window; + err = mciSendCommandW(wDeviceID, MCI_WINDOW, MCI_DGV_WINDOW_HWND, (DWORD_PTR)&parm); + ok(!err,"mciCommand window handle returned %s\n", dbg_mcierr(err)); + ok(!IsWindowVisible(main_window), "at this point, 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 have different handle values\n", video_window, hwnd); + style = GetWindowLongW(hwnd, GWL_STYLE); + expected = WS_CHILD | WS_VISIBLE; + todo_wine ok(style == expected, "child hwnd %p: expected %#lx, got %#lx\n", hwnd, expected, style); + + style = GetWindowLongW(video_window, GWL_STYLE); + expected = testcase[i].expected_style; + todo_wine ok(style == expected, "video hwnd %p: expected %#lx, got %#lx\n", video_window, expected, style); + + /* destination size is reset to the source video size */ + err = mciSendCommandW(wDeviceID, MCI_WHERE, MCI_DGV_WHERE_DESTINATION, (DWORD_PTR)&parm); + ok(!err,"mciCommand where destination returned %s\n", dbg_mcierr(err)); + todo_wine ok(EqualRect(&parm.where.rc, &src_rc), "got %s, expected %s\n", wine_dbgstr_rect(&parm.where.rc), wine_dbgstr_rect(&src_rc)); + + /* destination size isn't reset if the destination window doesn't change */ + SetRect(&rc, 0, 0, src_rc.right * 2, src_rc.bottom / 2); + parm.put.rc = rc; + err = mciSendCommandW(wDeviceID, MCI_PUT, MCI_DGV_PUT_DESTINATION | MCI_DGV_RECT, (DWORD_PTR)&parm); + ok(!err,"mciCommand put destination returned %s\n", dbg_mcierr(err)); + + parm.win.hWnd = main_window; + err = mciSendCommandW(wDeviceID, MCI_WINDOW, MCI_DGV_WINDOW_HWND, (DWORD_PTR)&parm); + ok(!err,"mciCommand window handle returned %s\n", dbg_mcierr(err)); + ok(!IsWindowVisible(main_window), "main window should be hidden\n"); + + err = mciSendCommandW(wDeviceID, MCI_WHERE, MCI_DGV_WHERE_DESTINATION, (DWORD_PTR)&parm); + ok(!err,"mciCommand where destination returned %s\n", dbg_mcierr(err)); + todo_wine_if((testcase[i].style & (WS_CHILD|WS_POPUP)) != WS_CHILD) + ok(EqualRect(&parm.where.rc, &rc), "got %s, expected %s\n", wine_dbgstr_rect(&parm.where.rc), wine_dbgstr_rect(&rc)); + + /* MCI_PLAY shows current video window */ + err = mciSendCommandW(wDeviceID, MCI_PLAY, 0, (DWORD_PTR)&parm); + ok(!err,"mciCommand play returned %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(wDeviceID, MCI_WINDOW, MCI_DGV_WINDOW_HWND, (DWORD_PTR)&parm); + ok(!err,"mciCommand window handle returned %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, again\n"); + + err = mciSendCommandW(wDeviceID, MCI_WHERE, MCI_DGV_WHERE_DESTINATION, (DWORD_PTR)&parm); + ok(!err,"mciCommand where destination returned %s\n", dbg_mcierr(err)); + todo_wine ok(EqualRect(&parm.where.rc, &src_rc), "got %s, expected %s\n", wine_dbgstr_rect(&parm.where.rc), wine_dbgstr_rect(&src_rc)); + next: err = mciSendCommandW(wDeviceID, MCI_CLOSE, 0, 0); ok(!err,"mciCommand close returned %s\n", dbg_mcierr(err)); @@ -1630,6 +1690,7 @@ static void test_video_window(void) ret = DestroyWindow(parent_window); ok(ret, "Failed to destroy parent window\n"); } + DestroyWindow(main_window);
winetest_pop_context(); }