Detlef Riekenberg : winspool/tests: Add tests for EnumMonitors.

Alexandre Julliard julliard at wine.codeweavers.com
Fri Feb 17 11:41:48 CST 2006


Module: wine
Branch: refs/heads/master
Commit: ec24e38ed15cdc7ad727eaeb2ee8250dc743813f
URL:    http://source.winehq.org/git/?p=wine.git;a=commit;h=ec24e38ed15cdc7ad727eaeb2ee8250dc743813f

Author: Detlef Riekenberg <wine.dev at web.de>
Date:   Fri Feb 17 17:37:04 2006 +0100

winspool/tests: Add tests for EnumMonitors.

---

 dlls/winspool/tests/info.c |  111 ++++++++++++++++++++++++++++++++++++++++++++
 1 files changed, 111 insertions(+), 0 deletions(-)

diff --git a/dlls/winspool/tests/info.c b/dlls/winspool/tests/info.c
index 62989ba..bc04934 100644
--- a/dlls/winspool/tests/info.c
+++ b/dlls/winspool/tests/info.c
@@ -105,6 +105,116 @@ static LPSTR find_default_printer(VOID)
     return default_printer;
 }
 
+/* ########################### */
+
+static void test_EnumMonitors(void)
+{
+    DWORD   res;
+    LPBYTE  buffer;
+    DWORD   cbBuf;
+    DWORD   pcbNeeded;
+    DWORD   pcReturned;
+    DWORD   level;
+
+    /* valid levels are 1 and 2 */
+    for(level = 0; level < 4; level++) {
+        cbBuf = MAGIC_DEAD;
+        pcReturned = MAGIC_DEAD;
+        SetLastError(MAGIC_DEAD);
+        res = EnumMonitorsA(NULL, level, NULL, 0, &cbBuf, &pcReturned);
+
+        RETURN_ON_DEACTIVATED_SPOOLER(res)
+
+        /* not implemented yet in wine */
+        if (!res && (GetLastError() == ERROR_CALL_NOT_IMPLEMENTED)) continue;
+
+
+        /* use only a short test, when we test with an invalid level */
+        if(!level || (level > 2)) {
+            ok( (!res && (GetLastError() == ERROR_INVALID_LEVEL)) ||
+                (res && (pcReturned == 0)),
+                "(%ld) returned %ld with %ld and 0x%08lx (expected '0' with " \
+                "ERROR_INVALID_LEVEL or '!=0' and 0x0)\n",
+                level, res, GetLastError(), pcReturned);
+            continue;
+        }        
+
+        /* Level 2 is not supported on win9x */
+        if (!res && (GetLastError() == ERROR_INVALID_LEVEL)) {
+            trace("Level %ld not supported, skipping tests\n", level);
+            continue;
+        }
+
+        ok((!res) && (GetLastError() == ERROR_INSUFFICIENT_BUFFER),
+            "(%ld) returned %ld with %ld (expected '0' with " \
+            "ERROR_INSUFFICIENT_BUFFER)\n", level, res, GetLastError());
+
+        if (!cbBuf) {
+            trace("no valid buffer size returned, skipping tests\n");
+            continue;
+        }
+
+        buffer = HeapAlloc(GetProcessHeap(), 0, cbBuf *2);
+        if (buffer == NULL) continue;
+
+        SetLastError(MAGIC_DEAD);
+        pcbNeeded = MAGIC_DEAD;
+        res = EnumMonitorsA(NULL, level, buffer, cbBuf, &pcbNeeded, &pcReturned);
+        ok(res, "(%ld) returned %ld with %ld (expected '!=0')\n",
+                level, res, GetLastError());
+        ok(pcbNeeded == cbBuf, "(%ld) returned %ld (expected %ld)\n",
+                level, pcbNeeded, cbBuf);
+        /* We can validate the returned Data with the Registry here */
+
+
+        SetLastError(MAGIC_DEAD);
+        pcReturned = MAGIC_DEAD;
+        pcbNeeded = MAGIC_DEAD;
+        res = EnumMonitorsA(NULL, level, buffer, cbBuf+1, &pcbNeeded, &pcReturned);
+        ok(res, "(%ld) returned %ld with %ld (expected '!=0')\n", level,
+                res, GetLastError());
+        ok(pcbNeeded == cbBuf, "(%ld) returned %ld (expected %ld)\n", level,
+                pcbNeeded, cbBuf);
+
+        SetLastError(MAGIC_DEAD);
+        pcbNeeded = MAGIC_DEAD;
+        res = EnumMonitorsA(NULL, level, buffer, cbBuf-1, &pcbNeeded, &pcReturned);
+        ok( !res && (GetLastError() == ERROR_INSUFFICIENT_BUFFER),
+            "(%ld) returned %ld with %ld (expected '0' with " \
+            "ERROR_INSUFFICIENT_BUFFER)\n", level, res, GetLastError());
+
+        ok(pcbNeeded == cbBuf, "(%ld) returned %ld (expected %ld)\n", level,
+                pcbNeeded, cbBuf);
+
+/*
+      Do not add the next test:
+      w2k+:  RPC_X_NULL_REF_POINTER 
+      NT3.5: ERROR_INVALID_USER_BUFFER
+      win9x: crash in winspool.drv
+
+      res = EnumMonitorsA(NULL, level, NULL, cbBuf, &pcbNeeded, &pcReturned);
+*/
+
+        SetLastError(MAGIC_DEAD);
+        pcbNeeded = MAGIC_DEAD;
+        pcReturned = MAGIC_DEAD;
+        res = EnumMonitorsA(NULL, level, buffer, cbBuf, NULL, &pcReturned);
+        ok( res || (!res && (GetLastError() == RPC_X_NULL_REF_POINTER)) ,
+            "(%ld) returned %ld with %ld (expected '!=0' or '0' with "\
+            "RPC_X_NULL_REF_POINTER)\n", level, res, GetLastError());
+
+        pcbNeeded = MAGIC_DEAD;
+        pcReturned = MAGIC_DEAD;
+        SetLastError(MAGIC_DEAD);
+        res = EnumMonitorsA(NULL, level, buffer, cbBuf, &pcbNeeded, NULL);
+        ok( res || (!res && (GetLastError() == RPC_X_NULL_REF_POINTER)) ,
+            "(%ld) returned %ld with %ld (expected '!=0' or '0' with "\
+            "RPC_X_NULL_REF_POINTER)\n", level, res, GetLastError());
+
+        HeapFree(GetProcessHeap(), 0, buffer);
+    } /* for(level ... */
+}
+
 
 static void test_GetDefaultPrinter(void)
 {
@@ -481,6 +591,7 @@ START_TEST(info)
 
     find_default_printer();
 
+    test_EnumMonitors(); 
     test_GetDefaultPrinter();
     test_GetPrinterDriverDirectory();
     test_OpenPrinter();




More information about the wine-cvs mailing list