Jacek Caban : ieframe: Added more InternetExplorer object tests.

Alexandre Julliard julliard at winehq.org
Fri May 10 11:17:57 CDT 2013


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

Author: Jacek Caban <jacek at codeweavers.com>
Date:   Fri May 10 10:42:10 2013 +0200

ieframe: Added more InternetExplorer object tests.

---

 dlls/ieframe/tests/ie.c |  167 +++++++++++++++++++++++++++++++++++++++++++++++
 1 files changed, 167 insertions(+), 0 deletions(-)

diff --git a/dlls/ieframe/tests/ie.c b/dlls/ieframe/tests/ie.c
index 00e802f..51cd8b3 100644
--- a/dlls/ieframe/tests/ie.c
+++ b/dlls/ieframe/tests/ie.c
@@ -26,8 +26,147 @@
 #include "winbase.h"
 #include "ole2.h"
 #include "exdisp.h"
+#include "exdispid.h"
 #include "mshtml.h"
 
+#define DEFINE_EXPECT(func) \
+    static BOOL expect_ ## func = FALSE, called_ ## func = FALSE
+
+#define SET_EXPECT(func) \
+    expect_ ## func = TRUE
+
+#define CHECK_EXPECT2(func) \
+    do { \
+        ok(expect_ ##func, "unexpected call " #func "\n"); \
+        called_ ## func = TRUE; \
+    }while(0)
+
+#define CHECK_EXPECT(func) \
+    do { \
+        CHECK_EXPECT2(func); \
+        expect_ ## func = FALSE; \
+    }while(0)
+
+#define CHECK_CALLED(func) \
+    do { \
+        ok(called_ ## func, "expected " #func "\n"); \
+        expect_ ## func = called_ ## func = FALSE; \
+    }while(0)
+
+DEFINE_EXPECT(Invoke_NAVIGATECOMPLETE2);
+
+static BOOL navigate_complete;
+
+static BSTR a2bstr(const char *str)
+{
+    BSTR ret;
+    int len;
+
+    len = MultiByteToWideChar(CP_ACP, 0, str, -1, NULL, 0);
+    ret = SysAllocStringLen(NULL, len);
+    MultiByteToWideChar(CP_ACP, 0, str, -1, ret, len);
+
+    return ret;
+}
+
+static HRESULT WINAPI Dispatch_QueryInterface(IDispatch *iface, REFIID riid, void **ppv)
+{
+    if(IsEqualGUID(&IID_IUnknown, riid) || IsEqualGUID(&IID_IDispatch, riid)) {
+        *ppv = iface;
+        return S_OK;
+    }
+
+    *ppv = NULL;
+    return E_NOINTERFACE;
+}
+
+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)
+{
+    switch(dispIdMember) {
+    case DISPID_NAVIGATECOMPLETE2:
+        CHECK_EXPECT(Invoke_NAVIGATECOMPLETE2);
+        navigate_complete = TRUE;
+        return S_OK;
+    }
+
+    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 void advise_cp(IUnknown *unk, BOOL init)
+{
+    IConnectionPointContainer *container;
+    IConnectionPoint *point;
+    HRESULT hres;
+
+    static DWORD cookie = 100;
+
+    hres = IUnknown_QueryInterface(unk, &IID_IConnectionPointContainer, (void**)&container);
+    ok(hres == S_OK, "QueryInterface(IID_IConnectionPointContainer) failed: %08x\n", hres);
+    if(FAILED(hres))
+        return;
+
+    hres = IConnectionPointContainer_FindConnectionPoint(container, &DIID_DWebBrowserEvents2, &point);
+    IConnectionPointContainer_Release(container);
+    ok(hres == S_OK, "FindConnectionPoint failed: %08x\n", hres);
+    if(FAILED(hres))
+        return;
+
+    if(init) {
+        hres = IConnectionPoint_Advise(point, (IUnknown*)&Dispatch, &cookie);
+        ok(hres == S_OK, "Advise failed: %08x\n", hres);
+    }else {
+        hres = IConnectionPoint_Unadvise(point, cookie);
+        ok(hres == S_OK, "Unadvise failed: %08x\n", hres);
+    }
+
+    IConnectionPoint_Release(point);
+
+}
+
 static void test_visible(IWebBrowser2 *wb)
 {
     VARIANT_BOOL b;
@@ -66,6 +205,29 @@ static void test_html_window(IWebBrowser2 *wb)
     IHTMLWindow2_Release(html_window);
 }
 
+static void test_navigate(IWebBrowser2 *wb, const char *url)
+{
+    VARIANT urlv, emptyv;
+    MSG msg;
+    HRESULT hres;
+
+    SET_EXPECT(Invoke_NAVIGATECOMPLETE2);
+
+    V_VT(&urlv) = VT_BSTR;
+    V_BSTR(&urlv) = a2bstr(url);
+    V_VT(&emptyv) = VT_EMPTY;
+    hres = IWebBrowser2_Navigate2(wb, &urlv, &emptyv, &emptyv, &emptyv, &emptyv);
+    ok(hres == S_OK, "Navigate2 failed: %08x\n", hres);
+    SysFreeString(V_BSTR(&urlv));
+
+    while(!navigate_complete && GetMessageW(&msg, NULL, 0, 0)) {
+        TranslateMessage(&msg);
+        DispatchMessage(&msg);
+    }
+
+    CHECK_CALLED(Invoke_NAVIGATECOMPLETE2);
+}
+
 static void test_InternetExplorer(void)
 {
     IWebBrowser2 *wb;
@@ -80,11 +242,16 @@ static void test_InternetExplorer(void)
     if(hres != S_OK)
         return;
 
+    advise_cp(unk, TRUE);
+
     hres = IUnknown_QueryInterface(unk, &IID_IWebBrowser2, (void**)&wb);
     ok(hres == S_OK, "Could not get IWebBrowser2 interface: %08x\n", hres);
 
     test_visible(wb);
     test_html_window(wb);
+    test_navigate(wb, "http://test.winehq.org/tests/hello.html");
+
+    advise_cp(unk, FALSE);
 
     IWebBrowser2_Release(wb);
     ref = IUnknown_Release(unk);




More information about the wine-cvs mailing list