Detlef Riekenberg : winspool/tests: Add test for XcvDataW, PortIsValid.

Alexandre Julliard julliard at wine.codeweavers.com
Mon Feb 5 07:45:06 CST 2007


Module: wine
Branch: master
Commit: 3b453d5915f92e167e1b589a2cf22aec87c62823
URL:    http://source.winehq.org/git/wine.git/?a=commit;h=3b453d5915f92e167e1b589a2cf22aec87c62823

Author: Detlef Riekenberg <wine.dev at web.de>
Date:   Fri Feb  2 16:04:46 2007 +0100

winspool/tests: Add test for XcvDataW,PortIsValid.

---

 dlls/winspool.drv/tests/info.c |  168 +++++++++++++++++++++++++++++++++++++++-
 1 files changed, 166 insertions(+), 2 deletions(-)

diff --git a/dlls/winspool.drv/tests/info.c b/dlls/winspool.drv/tests/info.c
index 74d17e5..af5e571 100644
--- a/dlls/winspool.drv/tests/info.c
+++ b/dlls/winspool.drv/tests/info.c
@@ -25,6 +25,7 @@
 #include "winbase.h"
 #include "winerror.h"
 #include "wingdi.h"
+#include <winnls.h>
 #include "winuser.h"
 #include "winreg.h"
 #include "winspool.h"
@@ -48,8 +49,14 @@ static CHAR winetest[]          = "winet
 static CHAR xcv_localport[]     = ",XcvMonitor Local Port";
 
 static WCHAR cmd_MonitorUIW[] = {'M','o','n','i','t','o','r','U','I',0};
+static WCHAR cmd_PortIsValidW[] = {'P','o','r','t','I','s','V','a','l','i','d',0};
 static WCHAR emptyW[] = {0};
 
+static WCHAR portname_com1W[] = {'C','O','M','1',':',0};
+static WCHAR portname_com2W[] = {'C','O','M','2',':',0};
+static WCHAR portname_fileW[] = {'F','I','L','E',':',0};
+static WCHAR portname_lpt1W[] = {'L','P','T','1',':',0};
+static WCHAR portname_lpt2W[] = {'L','P','T','2',':',0};
 
 static HANDLE  hwinspool;
 static FARPROC pGetDefaultPrinterA;
@@ -64,9 +71,14 @@ struct monitor_entry {
     CHAR  dllname[32];
 };
 
-static LPSTR   default_printer = NULL;
-static LPSTR   local_server = NULL;
+static LPSTR default_printer = NULL;
+static LPSTR local_server = NULL;
+static LPSTR tempdirA = NULL;
+static LPSTR tempfileA = NULL;
+static LPWSTR tempdirW = NULL;
+static LPWSTR tempfileW = NULL;
 
+/* ################################ */
 /* report common behavior only once */
 static DWORD report_deactivated_spooler = 1;
 #define RETURN_ON_DEACTIVATED_SPOOLER(res) \
@@ -215,6 +227,47 @@ static void find_local_server(VOID)
 
 /* ########################### */
 
+static void find_tempfile(VOID)
+{
+    static CHAR buffer_dirA[MAX_PATH];
+    static CHAR buffer_fileA[MAX_PATH];
+    static WCHAR buffer_dirW[MAX_PATH];
+    static WCHAR buffer_fileW[MAX_PATH];
+    DWORD   res;
+    int     resint;
+
+    memset(buffer_dirA, 0, MAX_PATH - 1);
+    buffer_dirA[MAX_PATH - 1] = '\0';
+    SetLastError(0xdeadbeef);
+    res = GetTempPathA(MAX_PATH, buffer_dirA);
+    ok(res, "returned %u with %u and '%s' (expected '!= 0')\n", res, GetLastError(), buffer_dirA);
+    if (res == 0) return;
+
+    memset(buffer_fileA, 0, MAX_PATH - 1);
+    buffer_fileA[MAX_PATH - 1] = '\0';
+    SetLastError(0xdeadbeef);
+    res = GetTempFileNameA(buffer_dirA, winetest, 0, buffer_fileA);
+    ok(res, "returned %u with %u and '%s' (expected '!= 0')\n", res, GetLastError(), buffer_fileA);
+    if (res == 0) return;
+
+    SetLastError(0xdeadbeef);
+    resint = MultiByteToWideChar(CP_ACP, 0, buffer_dirA, -1, buffer_dirW, MAX_PATH);
+    ok(res, "returned %u with %u (expected '!= 0')\n", resint, GetLastError());
+    if (resint == 0) return;
+
+    SetLastError(0xdeadbeef);
+    resint = MultiByteToWideChar(CP_ACP, 0, buffer_fileA, -1, buffer_fileW, MAX_PATH);
+    ok(res, "returned %u with %u (expected '!= 0')\n", resint, GetLastError());
+    if (resint == 0) return;
+
+    tempdirA  = buffer_dirA;
+    tempfileA = buffer_fileA;
+    tempdirW  = buffer_dirW;
+    tempfileW = buffer_fileW;
+    trace("tempfile: '%s'\n", tempfileA);
+}
+
+/* ########################### */
 
 static void test_AddMonitor(void)
 {
@@ -1625,6 +1678,115 @@ static void test_XcvDataW_MonitorUI(void
 
 /* ########################### */
 
+static void test_XcvDataW_PortIsValid(void)
+{
+    DWORD   res;
+    HANDLE  hXcv;
+    DWORD   needed;
+    DWORD   status;
+    PRINTER_DEFAULTSA   pd;
+
+    /* api is not present before w2k */
+    if (pXcvDataW == NULL) return;
+
+    pd.pDatatype = NULL;
+    pd.pDevMode  = NULL;
+    pd.DesiredAccess = SERVER_ACCESS_ADMINISTER;
+
+    hXcv = (HANDLE) 0;
+    SetLastError(0xdeadbeef);
+    res = OpenPrinter(xcv_localport, &hXcv, &pd);
+
+    RETURN_ON_DEACTIVATED_SPOOLER(res)
+    ok(res, "returned %d with %u and handle %p (expected '!= 0')\n", res, GetLastError(), hXcv);
+    if (!res) return;
+
+
+    /* "PDWORD needed" is always required */
+    needed = (DWORD) 0xdeadbeef;
+    status = (DWORD) 0xdeadbeef;
+    SetLastError(0xdeadbeef);
+    res = pXcvDataW(hXcv, cmd_PortIsValidW, (PBYTE) portname_lpt1W, sizeof(portname_lpt1W), NULL, 0, NULL, &status);
+    ok( !res && (GetLastError() == ERROR_INVALID_PARAMETER),
+        "returned %d with %u and %u for status %u (expected '!= 0' with ERROR_INVALID_PARAMETER)\n",
+         res, GetLastError(), needed, status);
+
+    /* an empty name is not allowed */
+    needed = (DWORD) 0xdeadbeef;
+    status = (DWORD) 0xdeadbeef;
+    SetLastError(0xdeadbeef);
+    res = pXcvDataW(hXcv, cmd_PortIsValidW, (PBYTE) emptyW, sizeof(emptyW), NULL, 0, &needed, &status);
+    ok( res && (status == ERROR_PATH_NOT_FOUND),
+        "returned %d with %u and %u for status %u (expected '!= 0' for ERROR_PATH_NOT_FOUND)\n",
+        res, GetLastError(), needed, status);
+
+    /* a directory is not allowed */
+    needed = (DWORD) 0xdeadbeef;
+    status = (DWORD) 0xdeadbeef;
+    SetLastError(0xdeadbeef);
+    res = pXcvDataW(hXcv, cmd_PortIsValidW, (PBYTE) tempdirW, (lstrlenW(tempdirW) + 1) * sizeof(WCHAR), NULL, 0, &needed, &status);
+    /* XP: ERROR_PATH_NOT_FOUND, w2k ERROR_ACCESS_DENIED */
+    ok( res && ((status == ERROR_PATH_NOT_FOUND) || (status == ERROR_ACCESS_DENIED)),
+        "returned %d with %u and %u for status %u (expected '!= 0' for status: "
+        "ERROR_PATH_NOT_FOUND or ERROR_ACCESS_DENIED)\n",
+        res, GetLastError(), needed, status);
+
+    /* more valid well known Ports */
+    needed = (DWORD) 0xdeadbeef;
+    status = (DWORD) 0xdeadbeef;
+    SetLastError(0xdeadbeef);
+    res = pXcvDataW(hXcv, cmd_PortIsValidW, (PBYTE) portname_lpt1W, sizeof(portname_lpt1W), NULL, 0, &needed, &status);
+    ok( res && (status == ERROR_SUCCESS),
+        "returned %d with %u and %u for status %u (expected '!= 0' for ERROR_SUCCESS)\n",
+        res, GetLastError(), needed, status);
+
+    needed = (DWORD) 0xdeadbeef;
+    status = (DWORD) 0xdeadbeef;
+    SetLastError(0xdeadbeef);
+    res = pXcvDataW(hXcv, cmd_PortIsValidW, (PBYTE) portname_lpt2W, sizeof(portname_lpt2W), NULL, 0, &needed, &status);
+    ok( res && (status == ERROR_SUCCESS),
+        "returned %d with %u and %u for status %u (expected '!= 0' for ERROR_SUCCESS)\n",
+        res, GetLastError(), needed, status);
+
+    needed = (DWORD) 0xdeadbeef;
+    status = (DWORD) 0xdeadbeef;
+    SetLastError(0xdeadbeef);
+    res = pXcvDataW(hXcv, cmd_PortIsValidW, (PBYTE) portname_com1W, sizeof(portname_com1W), NULL, 0, &needed, &status);
+    ok( res && (status == ERROR_SUCCESS),
+        "returned %d with %u and %u for status %u (expected '!= 0' for ERROR_SUCCESS)\n",
+        res, GetLastError(), needed, status);
+
+    needed = (DWORD) 0xdeadbeef;
+    status = (DWORD) 0xdeadbeef;
+    SetLastError(0xdeadbeef);
+    res = pXcvDataW(hXcv, cmd_PortIsValidW, (PBYTE) portname_com2W, sizeof(portname_com2W), NULL, 0, &needed, &status);
+    ok( res && (status == ERROR_SUCCESS),
+        "returned %d with %u and %u for status %u (expected '!= 0' for ERROR_SUCCESS)\n",
+        res, GetLastError(), needed, status);
+
+    needed = (DWORD) 0xdeadbeef;
+    status = (DWORD) 0xdeadbeef;
+    SetLastError(0xdeadbeef);
+    res = pXcvDataW(hXcv, cmd_PortIsValidW, (PBYTE) portname_fileW, sizeof(portname_fileW), NULL, 0, &needed, &status);
+    ok( res && (status == ERROR_SUCCESS),
+        "returned %d with %u and %u for status %u (expected '!= 0' with  ERROR_SUCCESS)\n",
+        res, GetLastError(), needed, status);
+
+
+    /* a normal, writeable file is allowed */
+    needed = (DWORD) 0xdeadbeef;
+    status = (DWORD) 0xdeadbeef;
+    SetLastError(0xdeadbeef);
+    res = pXcvDataW(hXcv, cmd_PortIsValidW, (PBYTE) tempfileW, (lstrlenW(tempfileW) + 1) * sizeof(WCHAR), NULL, 0, &needed, &status);
+    ok( res && (status == ERROR_SUCCESS),
+        "returned %d with %u and %u for status %u (expected '!= 0' with ERROR_SUCCESS)\n",
+        res, GetLastError(), needed, status);
+
+    ClosePrinter(hXcv);
+}
+
+/* ########################### */
+
 static void test_GetPrinterDriver(void)
 {
     HANDLE hprn;
@@ -1836,6 +1998,7 @@ START_TEST(info)
 
     find_default_printer();
     find_local_server();
+    find_tempfile();
 
     test_AddMonitor();
     test_AddPort();
@@ -1855,4 +2018,5 @@ START_TEST(info)
     test_GetPrinterDriver();
     test_SetDefaultPrinter();
     test_XcvDataW_MonitorUI();
+    test_XcvDataW_PortIsValid();
 }




More information about the wine-cvs mailing list