[PATCH 3/8] comdlg32/tests: Test more parameter for PrintDlgEx

Detlef Riekenberg wine.dev at web.de
Mon Feb 20 06:55:35 CST 2012


--
By by ... Detlef
---
 dlls/comdlg32/tests/printdlg.c |   81 ++++++++++++++++++++++++++++++++++++++++
 1 files changed, 81 insertions(+), 0 deletions(-)

diff --git a/dlls/comdlg32/tests/printdlg.c b/dlls/comdlg32/tests/printdlg.c
index 8597d5f..2eaf9d4 100644
--- a/dlls/comdlg32/tests/printdlg.c
+++ b/dlls/comdlg32/tests/printdlg.c
@@ -212,7 +212,9 @@ static void test_PrintDlgA(void)
 
 static void test_PrintDlgExW(void)
 {
+    PRINTPAGERANGE pagerange[2];
     LPPRINTDLGEXW pDlg;
+    DEVNAMES *dn;
     HRESULT res;
 
     /* PrintDlgEx not present before w2k */
@@ -262,6 +264,85 @@ static void test_PrintDlgExW(void)
         "got 0x%x with %u and %u (expected 'E_HANDLE')\n",
         res, GetLastError(), CommDlgExtendedError());
 
+    /* nStartPage must be START_PAGE_GENERAL for the general page or a valid property sheet index */
+    ZeroMemory(pDlg, sizeof(PRINTDLGEXW));
+    pDlg->lStructSize = sizeof(PRINTDLGEXW);
+    pDlg->hwndOwner = GetDesktopWindow();
+    pDlg->Flags = PD_RETURNDEFAULT | PD_NOWARNING | PD_NOPAGENUMS;
+    res = pPrintDlgExW(pDlg);
+    ok((res == E_INVALIDARG), "got 0x%x (expected 'E_INVALIDARG')\n", res);
+
+    /* Use PD_NOPAGENUMS or set nMaxPageRanges and lpPageRanges */
+    ZeroMemory(pDlg, sizeof(PRINTDLGEXW));
+    pDlg->lStructSize = sizeof(PRINTDLGEXW);
+    pDlg->hwndOwner = GetDesktopWindow();
+    pDlg->Flags = PD_RETURNDEFAULT | PD_NOWARNING;
+    pDlg->nStartPage = START_PAGE_GENERAL;
+    res = pPrintDlgExW(pDlg);
+    ok((res == E_INVALIDARG), "got 0x%x (expected 'E_INVALIDARG')\n", res);
+
+    /* this is invalid: a valid lpPageRanges with 0 for nMaxPageRanges */
+    ZeroMemory(pDlg, sizeof(PRINTDLGEXW));
+    pDlg->lStructSize = sizeof(PRINTDLGEXW);
+    pDlg->hwndOwner = GetDesktopWindow();
+    pDlg->Flags = PD_RETURNDEFAULT | PD_NOWARNING;
+    pDlg->lpPageRanges = pagerange;
+    pDlg->nStartPage = START_PAGE_GENERAL;
+    res = pPrintDlgExW(pDlg);
+    ok((res == E_INVALIDARG), "got 0x%x (expected 'E_INVALIDARG')\n", res);
+
+    /* this is invalid: NULL for lpPageRanges with a valid nMaxPageRanges */
+    ZeroMemory(pDlg, sizeof(PRINTDLGEXW));
+    pDlg->lStructSize = sizeof(PRINTDLGEXW);
+    pDlg->hwndOwner = GetDesktopWindow();
+    pDlg->Flags = PD_RETURNDEFAULT | PD_NOWARNING;
+    pDlg->nMaxPageRanges = 1;
+    pDlg->nStartPage = START_PAGE_GENERAL;
+    res = pPrintDlgExW(pDlg);
+    ok((res == E_INVALIDARG), "got 0x%x (expected 'E_INVALIDARG')\n", res);
+
+    /* this works: lpPageRanges with a valid nMaxPageRanges */
+    ZeroMemory(pDlg, sizeof(PRINTDLGEXW));
+    pDlg->lStructSize = sizeof(PRINTDLGEXW);
+    pDlg->hwndOwner = GetDesktopWindow();
+    pDlg->Flags = PD_RETURNDEFAULT | PD_NOWARNING;
+    pDlg->nMaxPageRanges = 1;
+    pDlg->lpPageRanges = pagerange;
+    pDlg->nStartPage = START_PAGE_GENERAL;
+    res = pPrintDlgExW(pDlg);
+    if (res == E_FAIL)
+    {
+        skip("No printer configured.\n");
+        HeapFree(GetProcessHeap(), 0, pDlg);
+        return;
+    }
+
+    ok(res == S_OK, "got 0x%x (expected S_OK)\n", res);
+
+    dn = GlobalLock(pDlg->hDevNames);
+    ok(dn != NULL, "expected '!= NULL' for GlobalLock(%p)\n",pDlg->hDevNames);
+    if (dn)
+    {
+        ok(dn->wDriverOffset, "(expected '!= 0' for wDriverOffset)\n");
+        ok(dn->wDeviceOffset, "(expected '!= 0' for wDeviceOffset)\n");
+        ok(dn->wOutputOffset, "(expected '!= 0' for wOutputOffset)\n");
+        ok(dn->wDefault == DN_DEFAULTPRN, "got 0x%x (expected DN_DEFAULTPRN)\n", dn->wDefault);
+
+        GlobalUnlock(pDlg->hDevNames);
+    }
+    GlobalFree(pDlg->hDevMode);
+    GlobalFree(pDlg->hDevNames);
+
+    /* this works also: PD_NOPAGENUMS */
+    ZeroMemory(pDlg, sizeof(PRINTDLGEXW));
+    pDlg->lStructSize = sizeof(PRINTDLGEXW);
+    pDlg->hwndOwner = GetDesktopWindow();
+    pDlg->Flags = PD_RETURNDEFAULT | PD_NOWARNING | PD_NOPAGENUMS;
+    pDlg->nStartPage = START_PAGE_GENERAL;
+    res = pPrintDlgExW(pDlg);
+    ok(res == S_OK, "got 0x%x (expected S_OK)\n", res);
+    GlobalFree(pDlg->hDevMode);
+    GlobalFree(pDlg->hDevNames);
 
     HeapFree(GetProcessHeap(), 0, pDlg);
     return;
-- 
1.7.5.4




More information about the wine-patches mailing list