comdlg32: Add an interactive PrintDlgEx test.

This commit is contained in:
Dmitry Timoshkov 2013-04-09 12:51:10 +09:00 committed by Alexandre Julliard
parent e0b4b9f63f
commit b73323d4e2
1 changed files with 133 additions and 2 deletions

View File

@ -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;