Huw Davies : winspool/tests: Add some tests for OpenPrinter with non-NULL defaults.
Alexandre Julliard
julliard at winehq.org
Tue Apr 3 12:17:39 CDT 2012
Module: wine
Branch: master
Commit: bfab84378de6d6795b5eae8a1c9fe836146a1511
URL: http://source.winehq.org/git/wine.git/?a=commit;h=bfab84378de6d6795b5eae8a1c9fe836146a1511
Author: Huw Davies <huw at codeweavers.com>
Date: Tue Apr 3 11:43:40 2012 +0100
winspool/tests: Add some tests for OpenPrinter with non-NULL defaults.
---
dlls/winspool.drv/tests/info.c | 110 ++++++++++++++++++++++++++++++++++++++++
1 files changed, 110 insertions(+), 0 deletions(-)
diff --git a/dlls/winspool.drv/tests/info.c b/dlls/winspool.drv/tests/info.c
index 3f26693..b9d2201 100644
--- a/dlls/winspool.drv/tests/info.c
+++ b/dlls/winspool.drv/tests/info.c
@@ -2871,6 +2871,115 @@ static void test_IsValidDevmodeW(void)
ok(br == FALSE, "Got %d\n", br);
}
+static void test_OpenPrinter_defaults(void)
+{
+ HANDLE printer;
+ BOOL ret;
+ DWORD needed;
+ short default_size;
+ ADDJOB_INFO_1 *add_job;
+ JOB_INFO_2 *job_info;
+ DEVMODE my_dm;
+ PRINTER_DEFAULTS prn_def;
+ PRINTER_INFO_2 *pi;
+
+ if (!default_printer)
+ {
+ skip("There is no default printer installed\n");
+ return;
+ }
+
+ /* Printer opened with NULL defaults. Retrieve default paper size
+ and confirm that jobs have this size. */
+
+ ret = OpenPrinter( default_printer, &printer, NULL );
+ if (!ret)
+ {
+ skip("Unable to open the default printer (%s)\n", default_printer);
+ return;
+ }
+
+ ret = GetPrinter( printer, 2, NULL, 0, &needed );
+ ok( !ret, "got %d\n", ret );
+ pi = HeapAlloc( GetProcessHeap(), 0, needed );
+ ret = GetPrinter( printer, 2, (BYTE *)pi, needed, &needed );
+ ok( ret, "got %d\n", ret );
+ default_size = pi->pDevMode->u1.s1.dmPaperSize;
+ HeapFree( GetProcessHeap(), 0, pi );
+
+ ret = AddJob( printer, 1, NULL, 0, &needed );
+ ok( !ret, "got %d\n", ret );
+ add_job = HeapAlloc( GetProcessHeap(), 0, needed );
+ ret = AddJob( printer, 1, (BYTE *)add_job, needed, &needed );
+ ok( ret, "got %d\n", ret );
+
+ ret = GetJob( printer, add_job->JobId, 2, NULL, 0, &needed );
+ ok( !ret, "got %d\n", ret );
+ job_info = HeapAlloc( GetProcessHeap(), 0, needed );
+ ret = GetJob( printer, add_job->JobId, 2, (BYTE *)job_info, needed, &needed );
+ ok( ret, "got %d\n", ret );
+
+todo_wine
+ ok( job_info->pDevMode != NULL, "got NULL devmode\n");
+ if (job_info->pDevMode)
+ ok( job_info->pDevMode->u1.s1.dmPaperSize == default_size, "got %d default %d\n",
+ job_info->pDevMode->u1.s1.dmPaperSize, default_size );
+
+ HeapFree( GetProcessHeap(), 0, job_info );
+ ScheduleJob( printer, add_job->JobId ); /* remove the empty job */
+ HeapFree( GetProcessHeap(), 0, add_job );
+ ClosePrinter( printer );
+
+ /* Printer opened with something other than the default paper size. */
+
+ memset( &my_dm, 0, sizeof(my_dm) );
+ my_dm.dmSize = sizeof(my_dm);
+ my_dm.dmFields = DM_PAPERSIZE;
+ my_dm.u1.s1.dmPaperSize = (default_size == DMPAPER_A4) ? DMPAPER_LETTER : DMPAPER_A4;
+
+ prn_def.pDatatype = NULL;
+ prn_def.pDevMode = &my_dm;
+ prn_def.DesiredAccess = PRINTER_ACCESS_USE;
+
+ ret = OpenPrinter( default_printer, &printer, &prn_def );
+ ok( ret, "got %d\n", ret );
+
+ /* GetPrinter stills returns default size */
+ ret = GetPrinter( printer, 2, NULL, 0, &needed );
+ ok( !ret, "got %d\n", ret );
+ pi = HeapAlloc( GetProcessHeap(), 0, needed );
+ ret = GetPrinter( printer, 2, (BYTE *)pi, needed, &needed );
+ ok( ret, "got %d\n", ret );
+ ok( pi->pDevMode->u1.s1.dmPaperSize == default_size, "got %d default %d\n",
+ pi->pDevMode->u1.s1.dmPaperSize, default_size );
+
+ HeapFree( GetProcessHeap(), 0, pi );
+
+ /* However the GetJob has the new size */
+ ret = AddJob( printer, 1, NULL, 0, &needed );
+ ok( !ret, "got %d\n", ret );
+ add_job = HeapAlloc( GetProcessHeap(), 0, needed );
+ ret = AddJob( printer, 1, (BYTE *)add_job, needed, &needed );
+ ok( ret, "got %d\n", ret );
+
+ ret = GetJob( printer, add_job->JobId, 2, NULL, 0, &needed );
+ ok( !ret, "got %d\n", ret );
+ job_info = HeapAlloc( GetProcessHeap(), 0, needed );
+ ret = GetJob( printer, add_job->JobId, 2, (BYTE *)job_info, needed, &needed );
+ ok( ret, "got %d\n", ret );
+
+ ok( job_info->pDevMode->dmFields == DM_PAPERSIZE, "got %08x\n",
+ job_info->pDevMode->dmFields );
+ ok( job_info->pDevMode->u1.s1.dmPaperSize == my_dm.u1.s1.dmPaperSize,
+ "got %d new size %d\n",
+ job_info->pDevMode->u1.s1.dmPaperSize, my_dm.u1.s1.dmPaperSize );
+
+ HeapFree( GetProcessHeap(), 0, job_info );
+ ScheduleJob( printer, add_job->JobId ); /* remove the empty job */
+ HeapFree( GetProcessHeap(), 0, add_job );
+ ClosePrinter( printer );
+}
+
START_TEST(info)
{
hwinspool = GetModuleHandleA("winspool.drv");
@@ -2919,6 +3028,7 @@ START_TEST(info)
test_XcvDataW_MonitorUI();
test_XcvDataW_PortIsValid();
test_IsValidDevmodeW();
+ test_OpenPrinter_defaults();
/* Cleanup our temporary file */
DeleteFileA(tempfileA);
More information about the wine-cvs
mailing list