Jacek Caban : shdocvw: Added Navigate2 test.

Alexandre Julliard julliard at wine.codeweavers.com
Fri Mar 9 15:47:42 CST 2007


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

Author: Jacek Caban <jacek at codeweavers.com>
Date:   Fri Mar  9 16:58:52 2007 +0100

shdocvw: Added Navigate2 test.

---

 dlls/shdocvw/tests/Makefile.in  |    2 +-
 dlls/shdocvw/tests/webbrowser.c |  147 ++++++++++++++++++++++++++++++++++++---
 2 files changed, 139 insertions(+), 10 deletions(-)

diff --git a/dlls/shdocvw/tests/Makefile.in b/dlls/shdocvw/tests/Makefile.in
index 1b53b9d..77647da 100644
--- a/dlls/shdocvw/tests/Makefile.in
+++ b/dlls/shdocvw/tests/Makefile.in
@@ -3,7 +3,7 @@ TOPOBJDIR = ../../..
 SRCDIR    = @srcdir@
 VPATH     = @srcdir@
 TESTDLL   = shdocvw.dll
-IMPORTS   = shell32 ole32 user32 advapi32 kernel32
+IMPORTS   = shell32 ole32 oleaut32 user32 advapi32 kernel32
 EXTRALIBS = -luuid
 
 CTESTS = \
diff --git a/dlls/shdocvw/tests/webbrowser.c b/dlls/shdocvw/tests/webbrowser.c
index ac70c80..d9e9cf0 100644
--- a/dlls/shdocvw/tests/webbrowser.c
+++ b/dlls/shdocvw/tests/webbrowser.c
@@ -29,6 +29,8 @@
 #include "htiframe.h"
 #include "mshtmhst.h"
 #include "idispids.h"
+#include "olectl.h"
+#include "mshtmdid.h"
 
 #define DEFINE_EXPECT(func) \
     static BOOL expect_ ## func = FALSE, called_ ## func = FALSE
@@ -66,8 +68,18 @@ DEFINE_EXPECT(Frame_GetWindow);
 DEFINE_EXPECT(Frame_SetActiveObject);
 DEFINE_EXPECT(UIWindow_SetActiveObject);
 DEFINE_EXPECT(SetMenu);
+DEFINE_EXPECT(Invoke_AMBIENT_USERMODE);
+DEFINE_EXPECT(Invoke_AMBIENT_DLCONTROL);
+DEFINE_EXPECT(Invoke_AMBIENT_USERAGENT);
+DEFINE_EXPECT(Invoke_AMBIENT_PALETTE);
 DEFINE_EXPECT(Invoke_AMBIENT_SILENT);
 DEFINE_EXPECT(Invoke_AMBIENT_OFFLINEIFNOTCONNECTED);
+DEFINE_EXPECT(EnableModeless_TRUE);
+DEFINE_EXPECT(EnableModeless_FALSE);
+DEFINE_EXPECT(GetHostInfo);
+DEFINE_EXPECT(GetOptionKeyPath);
+DEFINE_EXPECT(GetOverridesKeyPath);
+DEFINE_EXPECT(SetStatusText);
 
 static const WCHAR wszItem[] = {'i','t','e','m',0};
 
@@ -169,7 +181,6 @@ static HRESULT WINAPI Dispatch_Invoke(IDispatch *iface, DISPID dispIdMember, REF
     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);
@@ -179,13 +190,30 @@ static HRESULT WINAPI Dispatch_Invoke(IDispatch *iface, DISPID dispIdMember, REF
     ok(pDispParams->cNamedArgs == 0, "pDispParams->cNamedArgs = %d\n", pDispParams->cNamedArgs);
 
     switch(dispIdMember) {
+    case DISPID_AMBIENT_USERMODE:
+        CHECK_EXPECT2(Invoke_AMBIENT_USERMODE);
+        return E_FAIL;
+    case DISPID_AMBIENT_DLCONTROL:
+        CHECK_EXPECT(Invoke_AMBIENT_DLCONTROL);
+        ok(puArgErr != NULL, "puArgErr=%p\n", puArgErr);
+        return E_FAIL;
+    case DISPID_AMBIENT_USERAGENT:
+       CHECK_EXPECT(Invoke_AMBIENT_USERAGENT);
+        ok(puArgErr != NULL, "puArgErr=%p\n", puArgErr);
+        return E_FAIL;
+    case DISPID_AMBIENT_PALETTE:
+        CHECK_EXPECT(Invoke_AMBIENT_PALETTE);
+        ok(puArgErr != NULL, "puArgErr=%p\n", puArgErr);
+        return E_FAIL;
     case DISPID_AMBIENT_OFFLINEIFNOTCONNECTED:
         CHECK_EXPECT(Invoke_AMBIENT_OFFLINEIFNOTCONNECTED);
+        ok(puArgErr == NULL, "puArgErr=%p\n", puArgErr);
         V_VT(pVarResult) = VT_BOOL;
         V_BOOL(pVarResult) = VARIANT_FALSE;
         return S_OK;
     case DISPID_AMBIENT_SILENT:
         CHECK_EXPECT(Invoke_AMBIENT_SILENT);
+        ok(puArgErr == NULL, "puArgErr=%p\n", puArgErr);
         V_VT(pVarResult) = VT_BOOL;
         V_BOOL(pVarResult) = VARIANT_FALSE;
         return S_OK;
@@ -380,14 +408,18 @@ static HRESULT WINAPI InPlaceFrame_RemoveMenus(IOleInPlaceFrame *iface, HMENU hm
 
 static HRESULT WINAPI InPlaceFrame_SetStatusText(IOleInPlaceFrame *iface, LPCOLESTR pszStatusText)
 {
-    ok(0, "unexpected call\n");
-    return E_NOTIMPL;
+    CHECK_EXPECT2(SetStatusText);
+    /* FIXME: Check pszStatusText */
+    return S_OK;
 }
 
 static HRESULT WINAPI InPlaceFrame_EnableModeless(IOleInPlaceFrame *iface, BOOL fEnable)
 {
-    ok(0, "unexpected call\n");
-    return E_NOTIMPL;
+    if(fEnable)
+        CHECK_EXPECT(EnableModeless_TRUE);
+    else
+        CHECK_EXPECT(EnableModeless_FALSE);
+    return S_OK;
 }
 
 static HRESULT WINAPI InPlaceFrame_TranslateAccelerator(IOleInPlaceFrame *iface, LPMSG lpmsg, WORD wID)
@@ -618,8 +650,17 @@ static HRESULT WINAPI DocHostUIHandler_ShowContextMenu(IDocHostUIHandler2 *iface
 
 static HRESULT WINAPI DocHostUIHandler_GetHostInfo(IDocHostUIHandler2 *iface, DOCHOSTUIINFO *pInfo)
 {
-    ok(0, "unexpected call\n");
-    return E_NOTIMPL;
+    CHECK_EXPECT(GetHostInfo);
+    ok(pInfo != NULL, "pInfo=NULL\n");
+    if(pInfo) {
+        ok(pInfo->cbSize == sizeof(DOCHOSTUIINFO), "pInfo->cbSize=%u, expected %u\n",
+                pInfo->cbSize, sizeof(DOCHOSTUIINFO));
+        ok(!pInfo->dwFlags, "pInfo->dwFlags=%08x, expected 0\n", pInfo->dwFlags);
+        ok(!pInfo->dwDoubleClick, "pInfo->dwDoubleClick=%08x, expected 0\n", pInfo->dwDoubleClick);
+        ok(!pInfo->pchHostCss, "pInfo->pchHostCss=%p, expected NULL\n", pInfo->pchHostCss);
+        ok(!pInfo->pchHostNS, "pInfo->pchhostNS=%p, expected NULL\n", pInfo->pchHostNS);
+    }
+    return E_FAIL;
 }
 
 static HRESULT WINAPI DocHostUIHandler_ShowUI(IDocHostUIHandler2 *iface, DWORD dwID,
@@ -677,7 +718,11 @@ static HRESULT WINAPI DocHostUIHandler_TranslateAccelerator(IDocHostUIHandler2 *
 static HRESULT WINAPI DocHostUIHandler_GetOptionKeyPath(IDocHostUIHandler2 *iface,
         LPOLESTR *pchKey, DWORD dw)
 {
-    ok(0, "unexpected call\n");
+    CHECK_EXPECT(GetOptionKeyPath);
+    ok(pchKey != NULL, "pchKey==NULL\n");
+    if(pchKey)
+        ok(*pchKey == NULL, "*pchKey=%p\n", *pchKey);
+    ok(!dw, "dw=%x\n", dw);
     return E_NOTIMPL;
 }
 
@@ -711,7 +756,11 @@ static HRESULT WINAPI DocHostUIHandler_FilterDataObject(IDocHostUIHandler2 *ifac
 static HRESULT WINAPI DocHostUIHandler_GetOverrideKeyPath(IDocHostUIHandler2 *iface,
         LPOLESTR *pchKey, DWORD dw)
 {
-    ok(0, "unexpected call\n");
+    CHECK_EXPECT(GetOverridesKeyPath);
+    ok(pchKey != NULL, "pchKey==NULL\n");
+    if(pchKey)
+        ok(*pchKey == NULL, "*pchKey=%p\n", *pchKey);
+    ok(!dw, "dw=%x\n", dw);
     return E_NOTIMPL;
 }
 
@@ -1256,6 +1305,51 @@ static void test_Extent(IUnknown *unk)
     IOleObject_Release(oleobj);
 }
 
+static void test_Navigate2(IUnknown *unk)
+{
+    IWebBrowser2 *webbrowser;
+    VARIANT url;
+    HRESULT hres;
+
+    static const WCHAR wszAboutBlank[] =
+        {'a','b','o','u','t',':','b','l','a','n','k',0};
+
+    hres = IUnknown_QueryInterface(unk, &IID_IWebBrowser2, (void**)&webbrowser);
+    ok(hres == S_OK, "QueryInterface(IID_IWebBrowser) failed: %08x\n", hres);
+    if(FAILED(hres))
+        return;
+
+    V_VT(&url) = VT_BSTR;
+    V_BSTR(&url) = SysAllocString(wszAboutBlank);
+
+    SET_EXPECT(Invoke_AMBIENT_USERMODE);
+    SET_EXPECT(EnableModeless_FALSE);
+    SET_EXPECT(GetHostInfo);
+    SET_EXPECT(Invoke_AMBIENT_DLCONTROL);
+    SET_EXPECT(Invoke_AMBIENT_USERAGENT);
+    SET_EXPECT(Invoke_AMBIENT_PALETTE);
+    SET_EXPECT(GetOptionKeyPath);
+    SET_EXPECT(GetOverridesKeyPath);
+    SET_EXPECT(SetStatusText);
+    SET_EXPECT(EnableModeless_TRUE);
+
+    hres = IWebBrowser2_Navigate2(webbrowser, &url, NULL, NULL, NULL, NULL);
+    ok(hres == S_OK, "Navigate2 failed: %08x\n", hres);
+
+    CHECK_CALLED(Invoke_AMBIENT_USERMODE);
+    CHECK_CALLED(EnableModeless_FALSE);
+    CHECK_CALLED(GetHostInfo);
+    CHECK_CALLED(Invoke_AMBIENT_DLCONTROL);
+    CHECK_CALLED(Invoke_AMBIENT_USERAGENT);
+    CHECK_CALLED(Invoke_AMBIENT_PALETTE);
+    CHECK_CALLED(GetOptionKeyPath);
+    CHECK_CALLED(GetOverridesKeyPath);
+    CHECK_CALLED(SetStatusText);
+    CHECK_CALLED(EnableModeless_TRUE);
+
+    IWebBrowser2_Release(webbrowser);
+}
+
 static void test_QueryInterface(IUnknown *unk)
 {
     IQuickActivate *qa = (IQuickActivate*)0xdeadbeef;
@@ -1289,6 +1383,7 @@ static void test_WebBrowser(void)
     test_Extent(unk);
     test_wb_funcs(unk, TRUE);
     test_DoVerb(unk);
+    test_Navigate2(unk);
     test_ClientSite(unk, NULL);
     test_ie_funcs(unk);
     test_GetControlInfo(unk);
@@ -1298,8 +1393,40 @@ static void test_WebBrowser(void)
     ok(ref == 0, "ref=%d, expected 0\n", ref);
 }
 
+static void gecko_installer_workaround(BOOL disable)
+{
+    HKEY hkey;
+    DWORD res;
+
+    static BOOL has_url = FALSE;
+    static char url[2048];
+
+    if(!disable && !has_url)
+        return;
+
+    res = RegOpenKey(HKEY_CURRENT_USER, "Software\\Wine\\MSHTML", &hkey);
+    if(res != ERROR_SUCCESS)
+        return;
+
+    if(disable) {
+        DWORD type, size = sizeof(url);
+
+        res = RegQueryValueEx(hkey, "GeckoUrl", NULL, &type, (PVOID)url, &size);
+        if(res == ERROR_SUCCESS && type == REG_SZ)
+            has_url = TRUE;
+
+        RegDeleteValue(hkey, "GeckoUrl");
+    }else {
+        RegSetValueEx(hkey, "GeckoUrl", 0, REG_SZ, (PVOID)url, lstrlenA(url)+1);
+    }
+
+    RegCloseKey(hkey);
+}
+
 START_TEST(webbrowser)
 {
+    gecko_installer_workaround(TRUE);
+
     container_hwnd = create_container_window();
 
     OleInitialize(NULL);
@@ -1307,4 +1434,6 @@ START_TEST(webbrowser)
     test_WebBrowser();
 
     OleUninitialize();
+
+    gecko_installer_workaround(FALSE);
 }




More information about the wine-cvs mailing list