[PATCH] urlmon/tests: Add ZoneEnumerator tests

Detlef Riekenberg wine.dev at web.de
Sun Jun 21 17:59:46 CDT 2009


---
 dlls/urlmon/tests/sec_mgr.c |  121 +++++++++++++++++++++++++++++++++++++++++++
 1 files changed, 121 insertions(+), 0 deletions(-)

diff --git a/dlls/urlmon/tests/sec_mgr.c b/dlls/urlmon/tests/sec_mgr.c
index fe27f62..280f6da 100644
--- a/dlls/urlmon/tests/sec_mgr.c
+++ b/dlls/urlmon/tests/sec_mgr.c
@@ -281,6 +281,76 @@ static void test_polices(void)
     IInternetZoneManager_Release(zonemgr);
 }
 
+static void test_CreateZoneEnumerator(void)
+{
+    IInternetZoneManager *zonemgr = NULL;
+    HRESULT hr;
+    DWORD dwEnum;
+    DWORD dwEnum2;
+    DWORD dwCount;
+    DWORD dwCount2;
+
+    hr = CoInternetCreateZoneManager(NULL, &zonemgr, 0);
+    ok(hr == S_OK, "CoInternetCreateZoneManager result: 0x%x\n", hr);
+    if (FAILED(hr))
+        return;
+
+    dwEnum=0xdeadbeef;
+    hr = IInternetZoneManager_CreateZoneEnumerator(zonemgr, &dwEnum, NULL, 0);
+    ok((hr == E_INVALIDARG) && (dwEnum == 0xdeadbeef),
+        "got 0x%x with 0x%x (expected E_INVALIDARG with 0xdeadbeef)\n", hr, dwEnum);
+
+    dwCount=0xdeadbeef;
+    hr = IInternetZoneManager_CreateZoneEnumerator(zonemgr, NULL, &dwCount, 0);
+    ok((hr == E_INVALIDARG) && (dwCount == 0xdeadbeef),
+        "got 0x%x and 0x%x (expected E_INVALIDARG and 0xdeadbeef)\n", hr, dwCount);
+
+    dwEnum=0xdeadbeef;
+    dwCount=0xdeadbeef;
+    hr = IInternetZoneManager_CreateZoneEnumerator(zonemgr, &dwEnum, &dwCount, 0xffffffff);
+    ok((hr == E_INVALIDARG) && (dwEnum == 0xdeadbeef) && (dwCount == 0xdeadbeef),
+        "got 0x%x with 0x%x and 0x%x (expected E_INVALIDARG with 0xdeadbeef and 0xdeadbeef)\n",
+        hr, dwEnum, dwCount);
+
+    dwEnum=0xdeadbeef;
+    dwCount=0xdeadbeef;
+    hr = IInternetZoneManager_CreateZoneEnumerator(zonemgr, &dwEnum, &dwCount, 1);
+    ok((hr == E_INVALIDARG) && (dwEnum == 0xdeadbeef) && (dwCount == 0xdeadbeef),
+        "got 0x%x with 0x%x and 0x%x (expected E_INVALIDARG with 0xdeadbeef and 0xdeadbeef)\n",
+        hr, dwEnum, dwCount);
+
+    dwEnum=0xdeadbeef;
+    dwCount=0xdeadbeef;
+    /* Normal use */
+    hr = IInternetZoneManager_CreateZoneEnumerator(zonemgr, &dwEnum, &dwCount, 0);
+    ok(hr == S_OK, "got 0x%x (expected S_OK)\n", hr);
+
+    if (SUCCEEDED(hr)) {
+        dwEnum2=0xdeadbeef;
+        dwCount2=0xdeadbeef;
+        hr = IInternetZoneManager_CreateZoneEnumerator(zonemgr, &dwEnum2, &dwCount2, 0);
+        ok(hr == S_OK, "got 0x%x (expected S_OK)\n", hr);
+        if (SUCCEEDED(hr)) {
+            /* native urlmon has an incrementing counter for dwEnum */
+            hr = IInternetZoneManager_DestroyZoneEnumerator(zonemgr, dwEnum2);
+            ok(hr == S_OK, "got 0x%x (expected S_OK)\n", hr);
+        }
+
+        hr = IInternetZoneManager_DestroyZoneEnumerator(zonemgr, dwEnum);
+        ok(hr == S_OK, "got 0x%x (expected S_OK)\n", hr);
+
+        if (0) {
+            /* Destroy the Enumerator twice is detected and handled in native urlmon */
+            hr = IInternetZoneManager_DestroyZoneEnumerator(zonemgr, dwEnum);
+            ok((hr == E_INVALIDARG), "got 0x%x (expected E_INVALIDARG)\n", hr);
+        }
+    }
+
+    /* ::Release succeed also, when a ::DestroyZoneEnumerator is missing */
+    hr = IInternetZoneManager_Release(zonemgr);
+    ok(hr == S_OK, "got 0x%x (expected S_OK)\n", hr);
+}
+
 static void test_GetZoneActionPolicy(void)
 {
     IInternetZoneManager *zonemgr = NULL;
@@ -321,6 +391,55 @@ static void test_GetZoneActionPolicy(void)
     IInternetZoneManager_Release(zonemgr);
 }
 
+static void test_GetZoneAt(void)
+{
+    IInternetZoneManager *zonemgr = NULL;
+    HRESULT hr;
+    DWORD dwEnum;
+    DWORD dwCount;
+    DWORD dwZone;
+    DWORD i;
+
+    hr = CoInternetCreateZoneManager(NULL, &zonemgr, 0);
+    ok(hr == S_OK, "CoInternetCreateZoneManager result: 0x%x\n", hr);
+    if (FAILED(hr))
+        return;
+
+    hr = IInternetZoneManager_CreateZoneEnumerator(zonemgr, &dwEnum, &dwCount, 0);
+    if (FAILED(hr))
+        goto cleanup;
+
+    if (0) {
+        /* this crash with native urlmon */
+        hr = IInternetZoneManager_GetZoneAt(zonemgr, dwEnum, 0, NULL);
+    }
+
+    dwZone = 0xdeadbeef;
+    hr = IInternetZoneManager_GetZoneAt(zonemgr, 0xdeadbeef, 0, &dwZone);
+    ok(hr == E_INVALIDARG,
+        "got 0x%x with 0x%x (expected E_INVALIDARG)\n", hr, dwZone);
+
+    for (i = 0; i < dwCount; i++)
+    {
+        dwZone = 0xdeadbeef;
+        hr = IInternetZoneManager_GetZoneAt(zonemgr, dwEnum, i, &dwZone);
+        ok(hr == S_OK, "#%d: got x%x with %d (expected S_OK)\n", i, hr, dwZone);
+    }
+
+    dwZone = 0xdeadbeef;
+    /* MSDN (index .. must be .. less than or equal to) is wrong */
+    hr = IInternetZoneManager_GetZoneAt(zonemgr, dwEnum, dwCount, &dwZone);
+    ok(hr == E_INVALIDARG,
+        "got 0x%x with 0x%x (expected E_INVALIDARG)\n", hr, dwZone);
+
+    hr = IInternetZoneManager_DestroyZoneEnumerator(zonemgr, dwEnum);
+    ok(hr == S_OK, "got 0x%x (expected S_OK)\n", hr);
+
+cleanup:
+    hr = IInternetZoneManager_Release(zonemgr);
+    ok(hr == S_OK, "got 0x%x (expected S_OK)\n", hr);
+}
+
 static void test_GetZoneAttributes(void)
 {
     IInternetZoneManager *zonemgr = NULL;
@@ -383,7 +502,9 @@ START_TEST(sec_mgr)
 
     test_SecurityManager();
     test_polices();
+    test_CreateZoneEnumerator();
     test_GetZoneActionPolicy();
+    test_GetZoneAt();
     test_GetZoneAttributes();
 
     OleUninitialize();
-- 
1.5.4.3


--=-ijucojykc5gSI9lFPFRz--




More information about the wine-patches mailing list