Jeremy White : winspool: Add modest tests for GetPrinter.
Alexandre Julliard
julliard at winehq.org
Tue Dec 1 09:19:42 CST 2009
Module: wine
Branch: master
Commit: 91678ff9e9c15a9eee29571decb2e729009c5b8b
URL: http://source.winehq.org/git/wine.git/?a=commit;h=91678ff9e9c15a9eee29571decb2e729009c5b8b
Author: Jeremy White <jwhite at winehq.org>
Date: Mon Nov 30 17:04:19 2009 -0600
winspool: Add modest tests for GetPrinter.
---
dlls/winspool.drv/tests/info.c | 80 ++++++++++++++++++++++++++++++++++++++++
1 files changed, 80 insertions(+), 0 deletions(-)
diff --git a/dlls/winspool.drv/tests/info.c b/dlls/winspool.drv/tests/info.c
index 0e12b07..bbf4642 100644
--- a/dlls/winspool.drv/tests/info.c
+++ b/dlls/winspool.drv/tests/info.c
@@ -71,6 +71,7 @@ static BOOL (WINAPI * pSetDefaultPrinterA)(LPCSTR);
static DWORD (WINAPI * pXcvDataW)(HANDLE, LPCWSTR, PBYTE, DWORD, PBYTE, DWORD, PDWORD, PDWORD);
static BOOL (WINAPI * pAddPortExA)(LPSTR, DWORD, LPBYTE, LPSTR);
static BOOL (WINAPI * pGetPrinterDriverW)(HANDLE, LPWSTR, DWORD, LPBYTE, DWORD, LPDWORD);
+static BOOL (WINAPI * pGetPrinterW)(HANDLE, DWORD, LPBYTE, DWORD, LPDWORD);
/* ################################ */
@@ -2212,6 +2213,83 @@ static void test_XcvDataW_PortIsValid(void)
/* ########################### */
+static void test_GetPrinter(void)
+{
+ HANDLE hprn;
+ BOOL ret;
+ BYTE *buf;
+ INT level;
+ DWORD needed, filled;
+
+ if (!default_printer)
+ {
+ skip("There is no default printer installed\n");
+ return;
+ }
+
+ hprn = 0;
+ ret = OpenPrinter(default_printer, &hprn, NULL);
+ if (!ret)
+ {
+ skip("Unable to open the default printer (%s)\n", default_printer);
+ return;
+ }
+ ok(hprn != 0, "wrong hprn %p\n", hprn);
+
+ for (level = 1; level <= 9; level++)
+ {
+ SetLastError(0xdeadbeef);
+ needed = (DWORD)-1;
+ ret = GetPrinter(hprn, level, NULL, 0, &needed);
+ ok(!ret, "level %d: GetPrinter should fail\n", level);
+ /* Not all levels are supported on all Windows-Versions */
+ if(GetLastError() == ERROR_INVALID_LEVEL) continue;
+ ok(GetLastError() == ERROR_INSUFFICIENT_BUFFER, "wrong error %d\n", GetLastError());
+ ok(needed > 0,"not expected needed buffer size %d\n", needed);
+
+ /* GetPrinterA returns the same number of bytes as GetPrinterW */
+ if (! ret && pGetPrinterW && level != 6 && level != 7)
+ {
+ DWORD double_needed;
+ ret = pGetPrinterW(hprn, level, NULL, 0, &double_needed);
+ todo_wine
+ ok(double_needed == needed, "level %d: GetPrinterA returned different size %d than GetPrinterW (%d)\n", level, needed, double_needed);
+ }
+
+ buf = HeapAlloc(GetProcessHeap(), 0, needed);
+
+ SetLastError(0xdeadbeef);
+ filled = -1;
+ ret = GetPrinter(hprn, level, buf, needed, &filled);
+ if (level == 7 && needed == sizeof(PRINTER_INFO_7A))
+ {
+ todo_wine
+ ok(ret, "level %d: GetPrinter error %d\n", level, GetLastError());
+ }
+ else
+ ok(needed == filled, "needed %d != filled %d\n", needed, filled);
+
+ if (level == 2)
+ {
+ PRINTER_INFO_2 *pi_2 = (PRINTER_INFO_2 *)buf;
+
+ ok(pi_2->pPrinterName!= NULL, "not expected NULL ptr\n");
+ ok(pi_2->pDriverName!= NULL, "not expected NULL ptr\n");
+
+ trace("pPrinterName %s\n", pi_2->pPrinterName);
+ trace("pDriverName %s\n", pi_2->pDriverName);
+ }
+
+ HeapFree(GetProcessHeap(), 0, buf);
+ }
+
+ SetLastError(0xdeadbeef);
+ ret = ClosePrinter(hprn);
+ ok(ret, "ClosePrinter error %d\n", GetLastError());
+}
+
+/* ########################### */
+
static void test_GetPrinterDriver(void)
{
HANDLE hprn;
@@ -2547,6 +2625,7 @@ START_TEST(info)
pGetDefaultPrinterA = (void *) GetProcAddress(hwinspool, "GetDefaultPrinterA");
pSetDefaultPrinterA = (void *) GetProcAddress(hwinspool, "SetDefaultPrinterA");
pGetPrinterDriverW = (void *) GetProcAddress(hwinspool, "GetPrinterDriverW");
+ pGetPrinterW = (void *) GetProcAddress(hwinspool, "GetPrinterW");
pXcvDataW = (void *) GetProcAddress(hwinspool, "XcvDataW");
pAddPortExA = (void *) GetProcAddress(hwinspool, "AddPortExA");
@@ -2573,6 +2652,7 @@ START_TEST(info)
test_GetPrinterDriverDirectory();
test_GetPrintProcessorDirectory();
test_OpenPrinter();
+ test_GetPrinter();
test_GetPrinterDriver();
test_SetDefaultPrinter();
test_XcvDataW_MonitorUI();
More information about the wine-cvs
mailing list