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