Module: wine Branch: master Commit: b73323d4e2049968e31f6d69ada2041580918e61 URL: http://source.winehq.org/git/wine.git/?a=commit;h=b73323d4e2049968e31f6d69ad... Author: Dmitry Timoshkov <dmitry(a)baikal.ru> Date: Tue Apr 9 12:51:10 2013 +0900 comdlg32: Add an interactive PrintDlgEx test. --- dlls/comdlg32/tests/printdlg.c | 135 +++++++++++++++++++++++++++++++++++++++- 1 files changed, 133 insertions(+), 2 deletions(-) diff --git a/dlls/comdlg32/tests/printdlg.c b/dlls/comdlg32/tests/printdlg.c index b6c8325..d004598 100644 --- a/dlls/comdlg32/tests/printdlg.c +++ b/dlls/comdlg32/tests/printdlg.c @@ -19,7 +19,11 @@ * */ +#define COBJMACROS +#define CONST_VTABLE + #include <stdarg.h> +#include <stdio.h> #include "windef.h" #include "winbase.h" @@ -35,6 +39,8 @@ /* ########################### */ +extern const IID IID_IObjectWithSite; + static HMODULE hcomdlg32; static HRESULT (WINAPI * pPrintDlgExW)(LPPRINTDLGEXW); @@ -43,6 +49,18 @@ static HRESULT (WINAPI * pPrintDlgExW)(LPPRINTDLGEXW); static const CHAR emptyA[] = ""; static const CHAR PrinterPortsA[] = "PrinterPorts"; +static const char *debugstr_guid(const GUID *guid) +{ + static char buf[50]; + + if (!guid) return "(null)"; + sprintf(buf, "{%08x-%04x-%04x-%02x%02x-%02x%02x%02x%02x%02x%02x}", + guid->Data1, guid->Data2, guid->Data3, guid->Data4[0], + guid->Data4[1], guid->Data4[2], guid->Data4[3], guid->Data4[4], + guid->Data4[5], guid->Data4[6], guid->Data4[7]); + return buf; +} + /* ########################### */ static void test_PageSetupDlgA(void) @@ -210,6 +228,98 @@ static void test_PrintDlgA(void) /* ########################### */ +static HRESULT WINAPI callback_QueryInterface(IPrintDialogCallback *iface, + REFIID riid, void **ppv) +{ + ok(0, "callback_QueryInterface(%s): unexpected call\n", debugstr_guid(riid)); + return E_NOINTERFACE; +} + +static ULONG WINAPI callback_AddRef(IPrintDialogCallback *iface) +{ + trace("callback_AddRef\n"); + return 2; +} + +static ULONG WINAPI callback_Release(IPrintDialogCallback *iface) +{ + trace("callback_Release\n"); + return 1; +} + +static HRESULT WINAPI callback_InitDone(IPrintDialogCallback *iface) +{ + trace("callback_InitDone\n"); + return S_OK; +} + +static HRESULT WINAPI callback_SelectionChange(IPrintDialogCallback *iface) +{ + trace("callback_SelectionChange\n"); + return S_OK; +} + +static HRESULT WINAPI callback_HandleMessage(IPrintDialogCallback *iface, + HWND hdlg, UINT msg, WPARAM wp, LPARAM lp, LRESULT *res) +{ + trace("callback_HandleMessage %p,%04x,%lx,%lx,%p\n", hdlg, msg, wp, lp, res); + /* *res = PD_RESULT_PRINT; */ + return S_OK; +} + +static const IPrintDialogCallbackVtbl callback_Vtbl = +{ + callback_QueryInterface, + callback_AddRef, + callback_Release, + callback_InitDone, + callback_SelectionChange, + callback_HandleMessage +}; + +static IPrintDialogCallback callback = { &callback_Vtbl }; + +static HRESULT WINAPI unknown_QueryInterface(IUnknown *iface, REFIID riid, void **ppv) +{ + trace("unknown_QueryInterface %s\n", debugstr_guid(riid)); + + if (IsEqualGUID(riid, &IID_IPrintDialogCallback)) + { + *ppv = &callback; + return S_OK; + } + else if (IsEqualGUID(riid, &IID_IObjectWithSite)) + { + *ppv = NULL; + return E_NOINTERFACE; + } + + ok(0, "unexpected IID %s\n", debugstr_guid(riid)); + *ppv = NULL; + return E_NOINTERFACE; +} + +static ULONG WINAPI unknown_AddRef(IUnknown *iface) +{ + trace("unknown_AddRef\n"); + return 2; +} + +static ULONG WINAPI unknown_Release(IUnknown *iface) +{ + trace("unknown_Release\n"); + return 1; +} + +static const IUnknownVtbl unknown_Vtbl = +{ + unknown_QueryInterface, + unknown_AddRef, + unknown_Release +}; + +static IUnknown unknown = { &unknown_Vtbl }; + static void test_PrintDlgExW(void) { PRINTPAGERANGE pagerange[2]; @@ -370,9 +480,30 @@ static void test_PrintDlgExW(void) GlobalFree(pDlg->hDevNames); DeleteDC(pDlg->hDC); - HeapFree(GetProcessHeap(), 0, pDlg); - return; + /* interactive PrintDlgEx tests */ + + if (!winetest_interactive) + { + skip("interactive PrintDlgEx tests (set WINETEST_INTERACTIVE=1)\n"); + return; + } + ZeroMemory(pDlg, sizeof(PRINTDLGEXW)); + pDlg->lStructSize = sizeof(PRINTDLGEXW); + pDlg->hwndOwner = GetDesktopWindow(); + pDlg->Flags = PD_NOPAGENUMS | PD_RETURNIC; + pDlg->nStartPage = START_PAGE_GENERAL; + pDlg->lpCallback = &unknown; + pDlg->dwResultAction = S_OK; + res = pPrintDlgExW(pDlg); + ok(res == S_OK, "got 0x%x (expected S_OK)\n", res); + ok(pDlg->dwResultAction == PD_RESULT_PRINT, "expected PD_RESULT_PRINT, got %#x\n", pDlg->dwResultAction); + ok(pDlg->hDC != NULL, "HDC missing for PD_RETURNIC\n"); + GlobalFree(pDlg->hDevMode); + GlobalFree(pDlg->hDevNames); + DeleteDC(pDlg->hDC); + + HeapFree(GetProcessHeap(), 0, pDlg); } static BOOL abort_proc_called = FALSE;