Jacek Caban : shdocvw: Added more tests.

Alexandre Julliard julliard at wine.codeweavers.com
Mon Nov 6 05:48:37 CST 2006


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

Author: Jacek Caban <jacek at codeweavers.com>
Date:   Sun Nov  5 17:48:45 2006 +0100

shdocvw: Added more tests.

---

 dlls/shdocvw/tests/webbrowser.c |  188 +++++++++++++++++++++++++++++++++++++--
 1 files changed, 180 insertions(+), 8 deletions(-)

diff --git a/dlls/shdocvw/tests/webbrowser.c b/dlls/shdocvw/tests/webbrowser.c
index 84bc608..ac70c80 100644
--- a/dlls/shdocvw/tests/webbrowser.c
+++ b/dlls/shdocvw/tests/webbrowser.c
@@ -28,6 +28,7 @@ #include "ole2.h"
 #include "exdisp.h"
 #include "htiframe.h"
 #include "mshtmhst.h"
+#include "idispids.h"
 
 #define DEFINE_EXPECT(func) \
     static BOOL expect_ ## func = FALSE, called_ ## func = FALSE
@@ -65,6 +66,8 @@ DEFINE_EXPECT(Frame_GetWindow);
 DEFINE_EXPECT(Frame_SetActiveObject);
 DEFINE_EXPECT(UIWindow_SetActiveObject);
 DEFINE_EXPECT(SetMenu);
+DEFINE_EXPECT(Invoke_AMBIENT_SILENT);
+DEFINE_EXPECT(Invoke_AMBIENT_OFFLINEIFNOTCONNECTED);
 
 static const WCHAR wszItem[] = {'i','t','e','m',0};
 
@@ -124,6 +127,86 @@ static const IOleContainerVtbl OleContai
 
 static IOleContainer OleContainer = { &OleContainerVtbl };
 
+static HRESULT WINAPI Dispatch_QueryInterface(IDispatch *iface, REFIID riid, void **ppv)
+{
+    return QueryInterface(riid, ppv);
+}
+
+static ULONG WINAPI Dispatch_AddRef(IDispatch *iface)
+{
+    return 2;
+}
+
+static ULONG WINAPI Dispatch_Release(IDispatch *iface)
+{
+    return 1;
+}
+
+static HRESULT WINAPI Dispatch_GetTypeInfoCount(IDispatch *iface, UINT *pctinfo)
+{
+    ok(0, "unexpected call\n");
+    return E_NOTIMPL;
+}
+
+static HRESULT WINAPI Dispatch_GetTypeInfo(IDispatch *iface, UINT iTInfo, LCID lcid,
+        ITypeInfo **ppTInfo)
+{
+    ok(0, "unexpected call\n");
+    return E_NOTIMPL;
+}
+
+static HRESULT WINAPI Dispatch_GetIDsOfNames(IDispatch *iface, REFIID riid, LPOLESTR *rgszNames,
+        UINT cNames, LCID lcid, DISPID *rgDispId)
+{
+    ok(0, "unexpected call\n");
+    return E_NOTIMPL;
+}
+
+static HRESULT WINAPI Dispatch_Invoke(IDispatch *iface, DISPID dispIdMember, REFIID riid,
+        LCID lcid, WORD wFlags, DISPPARAMS *pDispParams, VARIANT *pVarResult,
+        EXCEPINFO *pExcepInfo, UINT *puArgErr)
+{
+    ok(IsEqualGUID(&IID_NULL, riid), "riid != IID_NULL\n");
+    ok(pDispParams != NULL, "pDispParams == NULL\n");
+    ok(pExcepInfo == NULL, "pExcepInfo=%p, expected NULL\n", pExcepInfo);
+    ok(puArgErr == NULL, "puArgErr=%p\n", puArgErr);
+    ok(V_VT(pVarResult) == VT_EMPTY, "V_VT(pVarResult)=%d\n", V_VT(pVarResult));
+    ok(wFlags == DISPATCH_PROPERTYGET, "wFlags=%08x, expected DISPATCH_PROPERTYGET\n", wFlags);
+    ok(pDispParams->rgvarg == NULL, "pDispParams->rgvarg = %p\n", pDispParams->rgvarg);
+    ok(pDispParams->rgdispidNamedArgs == NULL,
+       "pDispParams->rgdispidNamedArgs = %p\n", pDispParams->rgdispidNamedArgs);
+    ok(pDispParams->cArgs == 0, "pDispParams->cArgs = %d\n", pDispParams->cArgs);
+    ok(pDispParams->cNamedArgs == 0, "pDispParams->cNamedArgs = %d\n", pDispParams->cNamedArgs);
+
+    switch(dispIdMember) {
+    case DISPID_AMBIENT_OFFLINEIFNOTCONNECTED:
+        CHECK_EXPECT(Invoke_AMBIENT_OFFLINEIFNOTCONNECTED);
+        V_VT(pVarResult) = VT_BOOL;
+        V_BOOL(pVarResult) = VARIANT_FALSE;
+        return S_OK;
+    case DISPID_AMBIENT_SILENT:
+        CHECK_EXPECT(Invoke_AMBIENT_SILENT);
+        V_VT(pVarResult) = VT_BOOL;
+        V_BOOL(pVarResult) = VARIANT_FALSE;
+        return S_OK;
+    }
+
+    ok(0, "unexpected dispIdMember %d\n", dispIdMember);
+    return E_NOTIMPL;
+}
+
+static IDispatchVtbl DispatchVtbl = {
+    Dispatch_QueryInterface,
+    Dispatch_AddRef,
+    Dispatch_Release,
+    Dispatch_GetTypeInfoCount,
+    Dispatch_GetTypeInfo,
+    Dispatch_GetIDsOfNames,
+    Dispatch_Invoke
+};
+
+static IDispatch Dispatch = { &DispatchVtbl };
+
 static HRESULT WINAPI ClientSite_QueryInterface(IOleClientSite *iface, REFIID riid, void **ppv)
 {
     return QueryInterface(riid, ppv);
@@ -670,6 +753,8 @@ static HRESULT QueryInterface(REFIID rii
     else if(IsEqualGUID(&IID_IDocHostUIHandler, riid)
             || IsEqualGUID(&IID_IDocHostUIHandler2, riid))
         *ppv = &DocHostUIHandler;
+    else if(IsEqualGUID(&IID_IDispatch, riid))
+        *ppv = &Dispatch;
 
     if(*ppv)
         return S_OK;
@@ -791,6 +876,8 @@ static void test_ClientSite(IUnknown *un
     if(client) {
         SET_EXPECT(GetContainer);
         SET_EXPECT(Site_GetWindow);
+        SET_EXPECT(Invoke_AMBIENT_OFFLINEIFNOTCONNECTED);
+        SET_EXPECT(Invoke_AMBIENT_SILENT);
     }
 
     hres = IOleObject_SetClientSite(oleobj, client);
@@ -799,6 +886,8 @@ static void test_ClientSite(IUnknown *un
     if(client) {
         CHECK_CALLED(GetContainer);
         CHECK_CALLED(Site_GetWindow);
+        CHECK_CALLED(Invoke_AMBIENT_OFFLINEIFNOTCONNECTED);
+        CHECK_CALLED(Invoke_AMBIENT_SILENT);
     }
 
     hres = IOleInPlaceObject_GetWindow(inplace, &hwnd);
@@ -959,17 +1048,11 @@ static void test_ie_funcs(IUnknown *unk)
     IWebBrowser2_Release(wb);
 }
 
-static void test_Silent(IUnknown *unk)
+static void test_Silent(IWebBrowser2 *wb, IOleControl *control, BOOL is_clientsite)
 {
-    IWebBrowser2 *wb;
     VARIANT_BOOL b;
     HRESULT hres;
 
-    hres = IUnknown_QueryInterface(unk, &IID_IWebBrowser2, (void**)&wb);
-    ok(hres == S_OK, "Could not get IWebBrowser2 interface: %08x\n", hres);
-    if(FAILED(hres))
-        return;
-
     b = 100;
     hres = IWebBrowser2_get_Silent(wb, &b);
     ok(hres == S_OK, "get_Silent failed: %08x\n", hres);
@@ -999,7 +1082,95 @@ static void test_Silent(IUnknown *unk)
     ok(hres == S_OK, "get_Silent failed: %08x\n", hres);
     ok(b == VARIANT_FALSE, "b=%x\n", b);
 
+    if(is_clientsite) {
+        hres = IWebBrowser2_put_Silent(wb, VARIANT_TRUE);
+        ok(hres == S_OK, "set_Silent failed: %08x\n", hres);
+
+        SET_EXPECT(Invoke_AMBIENT_SILENT);
+    }
+
+    hres = IOleControl_OnAmbientPropertyChange(control, DISPID_AMBIENT_SILENT);
+    ok(hres == S_OK, "OnAmbientPropertyChange failed %08x\n", hres);
+
+    if(is_clientsite)
+        CHECK_CALLED(Invoke_AMBIENT_SILENT);
+
+    b = 100;
+    hres = IWebBrowser2_get_Silent(wb, &b);
+    ok(hres == S_OK, "get_Silent failed: %08x\n", hres);
+    ok(b == VARIANT_FALSE, "b=%x\n", b);
+}
+
+static void test_Offline(IWebBrowser2 *wb, IOleControl *control, BOOL is_clientsite)
+{
+    VARIANT_BOOL b;
+    HRESULT hres;
+
+    b = 100;
+    hres = IWebBrowser2_get_Offline(wb, &b);
+    ok(hres == S_OK, "get_Offline failed: %08x\n", hres);
+    ok(b == VARIANT_FALSE, "b=%x\n", b);
+
+    hres = IWebBrowser2_put_Offline(wb, VARIANT_TRUE);
+    ok(hres == S_OK, "set_Offline failed: %08x\n", hres);
+
+    b = 100;
+    hres = IWebBrowser2_get_Offline(wb, &b);
+    ok(hres == S_OK, "get_Offline failed: %08x\n", hres);
+    ok(b == VARIANT_TRUE, "b=%x\n", b);
+
+    hres = IWebBrowser2_put_Offline(wb, 100);
+    ok(hres == S_OK, "set_Offline failed: %08x\n", hres);
+
+    b = 100;
+    hres = IWebBrowser2_get_Offline(wb, &b);
+    ok(hres == S_OK, "get_Offline failed: %08x\n", hres);
+    ok(b == VARIANT_TRUE, "b=%x\n", b);
+
+    hres = IWebBrowser2_put_Offline(wb, VARIANT_FALSE);
+    ok(hres == S_OK, "set_Offline failed: %08x\n", hres);
+
+    b = 100;
+    hres = IWebBrowser2_get_Offline(wb, &b);
+    ok(hres == S_OK, "get_Offline failed: %08x\n", hres);
+    ok(b == VARIANT_FALSE, "b=%x\n", b);
+
+    if(is_clientsite) {
+        hres = IWebBrowser2_put_Offline(wb, VARIANT_TRUE);
+        ok(hres == S_OK, "set_Offline failed: %08x\n", hres);
+
+        SET_EXPECT(Invoke_AMBIENT_OFFLINEIFNOTCONNECTED);
+    }
+
+    hres = IOleControl_OnAmbientPropertyChange(control, DISPID_AMBIENT_OFFLINEIFNOTCONNECTED);
+    ok(hres == S_OK, "OnAmbientPropertyChange failed %08x\n", hres);
+
+    if(is_clientsite)
+        CHECK_CALLED(Invoke_AMBIENT_OFFLINEIFNOTCONNECTED);
+
+    b = 100;
+    hres = IWebBrowser2_get_Offline(wb, &b);
+    ok(hres == S_OK, "get_Offline failed: %08x\n", hres);
+    ok(b == VARIANT_FALSE, "b=%x\n", b);
+}
+
+static void test_wb_funcs(IUnknown *unk, BOOL is_clientsite)
+{
+    IWebBrowser2 *wb;
+    IOleControl *control;
+    HRESULT hres;
+
+    hres = IUnknown_QueryInterface(unk, &IID_IWebBrowser2, (void**)&wb);
+    ok(hres == S_OK, "Could not get IWebBrowser2 interface: %08x\n", hres);
+
+    hres = IUnknown_QueryInterface(unk, &IID_IOleControl, (void**)&control);
+    ok(hres == S_OK, "Could not get IOleControl interface: %08x\n", hres);
+
+    test_Silent(wb, control, is_clientsite);
+    test_Offline(wb, control, is_clientsite);
+
     IWebBrowser_Release(wb);
+    IOleControl_Release(control);
 }
 
 static void test_GetControlInfo(IUnknown *unk)
@@ -1116,11 +1287,12 @@ static void test_WebBrowser(void)
     test_ClassInfo(unk);
     test_ClientSite(unk, &ClientSite);
     test_Extent(unk);
+    test_wb_funcs(unk, TRUE);
     test_DoVerb(unk);
     test_ClientSite(unk, NULL);
     test_ie_funcs(unk);
     test_GetControlInfo(unk);
-    test_Silent(unk);
+    test_wb_funcs(unk, FALSE);
 
     ref = IUnknown_Release(unk);
     ok(ref == 0, "ref=%d, expected 0\n", ref);




More information about the wine-cvs mailing list