Jacek Caban : shdocvw: Added test of DoVerb.
Alexandre Julliard
julliard at wine.codeweavers.com
Tue Jul 11 06:10:19 CDT 2006
Module: wine
Branch: refs/heads/master
Commit: b1d1507ed8305195fb04992ae7985c53ed72ca02
URL: http://source.winehq.org/git/?p=wine.git;a=commit;h=b1d1507ed8305195fb04992ae7985c53ed72ca02
Author: Jacek Caban <jacek at codeweavers.com>
Date: Sat Jul 8 16:10:25 2006 +0200
shdocvw: Added test of DoVerb.
---
dlls/shdocvw/tests/webbrowser.c | 245 +++++++++++++++++++++++++++++++++++++++
1 files changed, 242 insertions(+), 3 deletions(-)
diff --git a/dlls/shdocvw/tests/webbrowser.c b/dlls/shdocvw/tests/webbrowser.c
index 1e4dffb..5763fe0 100644
--- a/dlls/shdocvw/tests/webbrowser.c
+++ b/dlls/shdocvw/tests/webbrowser.c
@@ -58,8 +58,15 @@ DEFINE_EXPECT(ShowObject);
DEFINE_EXPECT(CanInPlaceActivate);
DEFINE_EXPECT(OnInPlaceActivate);
DEFINE_EXPECT(OnUIActivate);
+DEFINE_EXPECT(GetWindowContext);
+DEFINE_EXPECT(Frame_GetWindow);
+DEFINE_EXPECT(Frame_SetActiveObject);
+DEFINE_EXPECT(UIWindow_SetActiveObject);
+DEFINE_EXPECT(SetMenu);
-static HWND container_hwnd;
+static const WCHAR wszItem[] = {'i','t','e','m',0};
+
+static HWND container_hwnd, shell_embedding_hwnd;
static HRESULT QueryInterface(REFIID,void**);
@@ -67,6 +74,8 @@ static HRESULT WINAPI OleContainer_Query
{
if(IsEqualGUID(&IID_ITargetContainer, riid))
return E_NOINTERFACE; /* TODO */
+ if(IsEqualGUID(&IID_IOleCommandTarget, riid))
+ return E_NOINTERFACE; /* TODO */
ok(0, "unexpected call\n");
return E_NOINTERFACE;
@@ -182,6 +191,158 @@ static const IOleClientSiteVtbl ClientSi
ClientSite_RequestNewObjectLayout
};
+static HRESULT WINAPI InPlaceUIWindow_QueryInterface(IOleInPlaceFrame *iface,
+ REFIID riid, void **ppv)
+{
+ ok(0, "unexpected call\n");
+ return E_NOINTERFACE;
+}
+
+static ULONG WINAPI InPlaceUIWindow_AddRef(IOleInPlaceFrame *iface)
+{
+ return 2;
+}
+
+static ULONG WINAPI InPlaceUIWindow_Release(IOleInPlaceFrame *iface)
+{
+ return 1;
+}
+
+static HRESULT WINAPI InPlaceUIWindow_GetWindow(IOleInPlaceFrame *iface, HWND *phwnd)
+{
+ ok(0, "unexpected call\n");
+ return E_NOTIMPL;
+}
+
+static HRESULT WINAPI InPlaceFrame_GetWindow(IOleInPlaceFrame *iface, HWND *phwnd)
+{
+ CHECK_EXPECT(Frame_GetWindow);
+ ok(phwnd != NULL, "phwnd == NULL\n");
+ if(phwnd)
+ *phwnd = container_hwnd;
+ return S_OK;
+}
+
+static HRESULT WINAPI InPlaceUIWindow_ContextSensitiveHelp(IOleInPlaceFrame *iface, BOOL fEnterMode)
+{
+ ok(0, "unexpected call\n");
+ return E_NOTIMPL;
+}
+
+static HRESULT WINAPI InPlaceUIWindow_GetBorder(IOleInPlaceFrame *iface, LPRECT lprectBorder)
+{
+ ok(0, "unexpected call\n");
+ return E_NOTIMPL;
+}
+
+static HRESULT WINAPI InPlaceUIWindow_RequestBorderSpace(IOleInPlaceFrame *iface,
+ LPCBORDERWIDTHS pborderwidths)
+{
+ ok(0, "unexpected call\n");
+ return E_NOTIMPL;
+}
+
+static HRESULT WINAPI InPlaceUIWindow_SetBorderSpace(IOleInPlaceFrame *iface,
+ LPCBORDERWIDTHS pborderwidths)
+{
+ ok(0, "unexpected call\n");
+ return E_NOTIMPL;
+}
+
+static HRESULT WINAPI InPlaceUIWindow_SetActiveObject(IOleInPlaceFrame *iface,
+ IOleInPlaceActiveObject *pActiveObject, LPCOLESTR pszObjName)
+{
+ CHECK_EXPECT(UIWindow_SetActiveObject);
+ ok(pActiveObject != NULL, "pActiveObject = NULL\n");
+ ok(!lstrcmpW(pszObjName, wszItem), "unexpected pszObjName\n");
+ return S_OK;
+}
+
+static HRESULT WINAPI InPlaceFrame_SetActiveObject(IOleInPlaceFrame *iface,
+ IOleInPlaceActiveObject *pActiveObject, LPCOLESTR pszObjName)
+{
+ CHECK_EXPECT(Frame_SetActiveObject);
+ ok(pActiveObject != NULL, "pActiveObject = NULL\n");
+ ok(!lstrcmpW(pszObjName, wszItem), "unexpected pszObjName\n");
+ return S_OK;
+}
+
+static HRESULT WINAPI InPlaceFrame_InsertMenus(IOleInPlaceFrame *iface, HMENU hmenuShared,
+ LPOLEMENUGROUPWIDTHS lpMenuWidths)
+{
+ ok(0, "unexpected call\n");
+ return E_NOTIMPL;
+}
+
+static HRESULT WINAPI InPlaceFrame_SetMenu(IOleInPlaceFrame *iface, HMENU hmenuShared,
+ HOLEMENU holemenu, HWND hwndActiveObject)
+{
+ CHECK_EXPECT(SetMenu);
+ ok(hmenuShared == NULL, "hmenuShared=%p\n", hmenuShared);
+ ok(holemenu == NULL, "holemenu=%p\n", holemenu);
+ ok(hwndActiveObject == shell_embedding_hwnd, "hwndActiveObject=%p, expected %p\n",
+ hwndActiveObject, shell_embedding_hwnd);
+ return S_OK;
+}
+
+static HRESULT WINAPI InPlaceFrame_RemoveMenus(IOleInPlaceFrame *iface, HMENU hmenuShared)
+{
+ ok(0, "unexpected call\n");
+ return E_NOTIMPL;
+}
+
+static HRESULT WINAPI InPlaceFrame_SetStatusText(IOleInPlaceFrame *iface, LPCOLESTR pszStatusText)
+{
+ ok(0, "unexpected call\n");
+ return E_NOTIMPL;
+}
+
+static HRESULT WINAPI InPlaceFrame_EnableModeless(IOleInPlaceFrame *iface, BOOL fEnable)
+{
+ ok(0, "unexpected call\n");
+ return E_NOTIMPL;
+}
+
+static HRESULT WINAPI InPlaceFrame_TranslateAccelerator(IOleInPlaceFrame *iface, LPMSG lpmsg, WORD wID)
+{
+ ok(0, "unexpected call\n");
+ return E_NOTIMPL;
+}
+
+static const IOleInPlaceFrameVtbl InPlaceUIWindowVtbl = {
+ InPlaceUIWindow_QueryInterface,
+ InPlaceUIWindow_AddRef,
+ InPlaceUIWindow_Release,
+ InPlaceUIWindow_GetWindow,
+ InPlaceUIWindow_ContextSensitiveHelp,
+ InPlaceUIWindow_GetBorder,
+ InPlaceUIWindow_RequestBorderSpace,
+ InPlaceUIWindow_SetBorderSpace,
+ InPlaceUIWindow_SetActiveObject,
+};
+
+static IOleInPlaceUIWindow InPlaceUIWindow = { (IOleInPlaceUIWindowVtbl*)&InPlaceUIWindowVtbl };
+
+static const IOleInPlaceFrameVtbl InPlaceFrameVtbl = {
+ InPlaceUIWindow_QueryInterface,
+ InPlaceUIWindow_AddRef,
+ InPlaceUIWindow_Release,
+ InPlaceFrame_GetWindow,
+ InPlaceUIWindow_ContextSensitiveHelp,
+ InPlaceUIWindow_GetBorder,
+ InPlaceUIWindow_RequestBorderSpace,
+ InPlaceUIWindow_SetBorderSpace,
+ InPlaceFrame_SetActiveObject,
+ InPlaceFrame_InsertMenus,
+ InPlaceFrame_SetMenu,
+ InPlaceFrame_RemoveMenus,
+ InPlaceFrame_SetStatusText,
+ InPlaceFrame_EnableModeless,
+ InPlaceFrame_TranslateAccelerator
+};
+
+static IOleInPlaceFrame InPlaceFrame = { &InPlaceFrameVtbl };
+
static IOleClientSite ClientSite = { &ClientSiteVtbl };
static HRESULT WINAPI InPlaceSite_QueryInterface(IOleInPlaceSiteEx *iface, REFIID riid, void **ppv)
@@ -236,8 +397,37 @@ static HRESULT WINAPI InPlaceSite_GetWin
IOleInPlaceFrame **ppFrame, IOleInPlaceUIWindow **ppDoc, LPRECT lprcPosRect,
LPRECT lprcClipRect, LPOLEINPLACEFRAMEINFO lpFrameInfo)
{
- ok(0, "unexpected call\n");
- return E_NOTIMPL;
+ static const RECT pos_rect = {2,1,1002,901};
+ static const RECT clip_rect = {10,10,990,890};
+
+ CHECK_EXPECT(GetWindowContext);
+
+ ok(ppFrame != NULL, "ppFrame = NULL\n");
+ if(ppFrame)
+ *ppFrame = &InPlaceFrame;
+
+ ok(ppDoc != NULL, "ppDoc = NULL\n");
+ if(ppDoc)
+ *ppDoc = &InPlaceUIWindow;
+
+ ok(lprcPosRect != NULL, "lprcPosRect = NULL\n");
+ if(lprcPosRect)
+ memcpy(lprcPosRect, &pos_rect, sizeof(RECT));
+
+ ok(lprcClipRect != NULL, "lprcClipRect = NULL\n");
+ if(lprcClipRect)
+ memcpy(lprcClipRect, &clip_rect, sizeof(RECT));
+
+ ok(lpFrameInfo != NULL, "lpFrameInfo = NULL\n");
+ if(lpFrameInfo) {
+ lpFrameInfo->cb = sizeof(*lpFrameInfo);
+ lpFrameInfo->fMDIApp = FALSE;
+ lpFrameInfo->hwndFrame = container_hwnd;
+ lpFrameInfo->haccel = NULL;
+ lpFrameInfo->cAccelEntries = 0;
+ }
+
+ return S_OK;
}
static HRESULT WINAPI InPlaceSite_Scroll(IOleInPlaceSiteEx *iface, SIZE scrollExtant)
@@ -361,6 +551,52 @@ static HWND create_container_window(void
CW_USEDEFAULT, NULL, NULL, NULL, NULL);
}
+static void test_DoVerb(IUnknown *unk)
+{
+ IOleObject *oleobj;
+ RECT rect = {0,0,1000,1000};
+ HRESULT hres;
+
+ hres = IUnknown_QueryInterface(unk, &IID_IOleObject, (void**)&oleobj);
+ ok(hres == S_OK, "QueryInterface(IID_OleObject) failed: %08lx\n", hres);
+ if(FAILED(hres))
+ return;
+
+ SET_EXPECT(CanInPlaceActivate);
+ SET_EXPECT(Site_GetWindow);
+ SET_EXPECT(OnInPlaceActivate);
+ SET_EXPECT(GetWindowContext);
+ SET_EXPECT(ShowObject);
+ SET_EXPECT(GetContainer);
+ SET_EXPECT(Frame_GetWindow);
+ SET_EXPECT(OnUIActivate);
+ SET_EXPECT(Frame_SetActiveObject);
+ SET_EXPECT(UIWindow_SetActiveObject);
+ SET_EXPECT(SetMenu);
+
+ hres = IOleObject_DoVerb(oleobj, OLEIVERB_SHOW, NULL, &ClientSite,
+ 0, container_hwnd, &rect);
+ ok(hres == S_OK, "DoVerb failed: %08lx\n", hres);
+
+ CHECK_CALLED(CanInPlaceActivate);
+ CHECK_CALLED(Site_GetWindow);
+ CHECK_CALLED(OnInPlaceActivate);
+ CHECK_CALLED(GetWindowContext);
+ CHECK_CALLED(ShowObject);
+ CHECK_CALLED(GetContainer);
+ CHECK_CALLED(Frame_GetWindow);
+ CHECK_CALLED(OnUIActivate);
+ CHECK_CALLED(Frame_SetActiveObject);
+ CHECK_CALLED(UIWindow_SetActiveObject);
+ CHECK_CALLED(SetMenu);
+
+ hres = IOleObject_DoVerb(oleobj, OLEIVERB_SHOW, NULL, &ClientSite,
+ 0, container_hwnd, &rect);
+ ok(hres == S_OK, "DoVerb failed: %08lx\n", hres);
+
+ IOleObject_Release(oleobj);
+}
+
static void test_GetMiscStatus(IOleObject *oleobj)
{
DWORD st, i;
@@ -419,6 +655,8 @@ static void test_ClientSite(IUnknown *un
ok(hres == S_OK, "GetWindow failed: %08lx\n", hres);
ok((hwnd == NULL) == (client == NULL), "unexpected hwnd %p\n", hwnd);
+ shell_embedding_hwnd = hwnd;
+
IOleInPlaceObject_Release(inplace);
IOleObject_Release(oleobj);
}
@@ -469,6 +707,7 @@ static void test_WebBrowser(void)
test_ClassInfo(unk);
test_ClientSite(unk, &ClientSite);
+ test_DoVerb(unk);
test_ClientSite(unk, NULL);
ref = IUnknown_Release(unk);
More information about the wine-cvs
mailing list