2 * Copyright 2006 Jacek Caban for CodeWeavers
4 * This library is free software; you can redistribute it and/or
5 * modify it under the terms of the GNU Lesser General Public
6 * License as published by the Free Software Foundation; either
7 * version 2.1 of the License, or (at your option) any later version.
9 * This library is distributed in the hope that it will be useful,
10 * but WITHOUT ANY WARRANTY; without even the implied warranty of
11 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
12 * Lesser General Public License for more details.
14 * You should have received a copy of the GNU Lesser General Public
15 * License along with this library; if not, write to the Free Software
16 * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA
21 #include <wine/test.h>
30 #define DEFINE_EXPECT(func) \
31 static BOOL expect_ ## func = FALSE, called_ ## func = FALSE
33 #define SET_EXPECT(func) \
34 expect_ ## func = TRUE
36 #define CHECK_EXPECT(func) \
38 ok(expect_ ##func, "unexpected call " #func "\n"); \
39 expect_ ## func = FALSE; \
40 called_ ## func = TRUE; \
43 #define CHECK_EXPECT2(func) \
45 ok(expect_ ##func, "unexpected call " #func "\n"); \
46 called_ ## func = TRUE; \
49 #define CHECK_CALLED(func) \
51 ok(called_ ## func, "expected " #func "\n"); \
52 expect_ ## func = called_ ## func = FALSE; \
55 DEFINE_EXPECT(GetContainer
);
56 DEFINE_EXPECT(Site_GetWindow
);
57 DEFINE_EXPECT(ShowObject
);
58 DEFINE_EXPECT(CanInPlaceActivate
);
59 DEFINE_EXPECT(OnInPlaceActivate
);
60 DEFINE_EXPECT(OnUIActivate
);
61 DEFINE_EXPECT(GetWindowContext
);
62 DEFINE_EXPECT(Frame_GetWindow
);
63 DEFINE_EXPECT(Frame_SetActiveObject
);
64 DEFINE_EXPECT(UIWindow_SetActiveObject
);
65 DEFINE_EXPECT(SetMenu
);
67 static const WCHAR wszItem
[] = {'i','t','e','m',0};
69 static HWND container_hwnd
, shell_embedding_hwnd
;
71 static HRESULT
QueryInterface(REFIID
,void**);
73 static HRESULT WINAPI
OleContainer_QueryInterface(IOleContainer
*iface
, REFIID riid
, void **ppv
)
75 if(IsEqualGUID(&IID_ITargetContainer
, riid
))
76 return E_NOINTERFACE
; /* TODO */
77 if(IsEqualGUID(&IID_IOleCommandTarget
, riid
))
78 return E_NOINTERFACE
; /* TODO */
80 ok(0, "unexpected call\n");
84 static ULONG WINAPI
OleContainer_AddRef(IOleContainer
*iface
)
89 static ULONG WINAPI
OleContainer_Release(IOleContainer
*iface
)
94 static HRESULT WINAPI
OleContainer_ParseDisplayName(IOleContainer
*iface
, IBindCtx
*pbc
,
95 LPOLESTR pszDiaplayName
, ULONG
*pchEaten
, IMoniker
**ppmkOut
)
97 ok(0, "unexpected call\n");
101 static HRESULT WINAPI
OleContainer_EnumObjects(IOleContainer
*iface
, DWORD grfFlags
,
102 IEnumUnknown
**ppenum
)
104 ok(0, "unexpected call\n");
108 static HRESULT WINAPI
OleContainer_LockContainer(IOleContainer
*iface
, BOOL fLock
)
110 ok(0, "unexpected call\n");
114 static const IOleContainerVtbl OleContainerVtbl
= {
115 OleContainer_QueryInterface
,
117 OleContainer_Release
,
118 OleContainer_ParseDisplayName
,
119 OleContainer_EnumObjects
,
120 OleContainer_LockContainer
123 static IOleContainer OleContainer
= { &OleContainerVtbl
};
125 static HRESULT WINAPI
ClientSite_QueryInterface(IOleClientSite
*iface
, REFIID riid
, void **ppv
)
127 return QueryInterface(riid
, ppv
);
130 static ULONG WINAPI
ClientSite_AddRef(IOleClientSite
*iface
)
135 static ULONG WINAPI
ClientSite_Release(IOleClientSite
*iface
)
140 static HRESULT WINAPI
ClientSite_SaveObject(IOleClientSite
*iface
)
142 ok(0, "unexpected call\n");
146 static HRESULT WINAPI
ClientSite_GetMoniker(IOleClientSite
*iface
, DWORD dwAsign
, DWORD dwWhichMoniker
,
149 ok(0, "unexpected call\n");
153 static HRESULT WINAPI
ClientSite_GetContainer(IOleClientSite
*iface
, IOleContainer
**ppContainer
)
155 CHECK_EXPECT(GetContainer
);
157 ok(ppContainer
!= NULL
, "ppContainer == NULL\n");
159 *ppContainer
= &OleContainer
;
164 static HRESULT WINAPI
ClientSite_ShowObject(IOleClientSite
*iface
)
166 CHECK_EXPECT(ShowObject
);
170 static HRESULT WINAPI
ClientSite_OnShowWindow(IOleClientSite
*iface
, BOOL fShow
)
172 ok(0, "unexpected call\n");
176 static HRESULT WINAPI
ClientSite_RequestNewObjectLayout(IOleClientSite
*iface
)
178 ok(0, "unexpected call\n");
182 static const IOleClientSiteVtbl ClientSiteVtbl
= {
183 ClientSite_QueryInterface
,
186 ClientSite_SaveObject
,
187 ClientSite_GetMoniker
,
188 ClientSite_GetContainer
,
189 ClientSite_ShowObject
,
190 ClientSite_OnShowWindow
,
191 ClientSite_RequestNewObjectLayout
194 static HRESULT WINAPI
InPlaceUIWindow_QueryInterface(IOleInPlaceFrame
*iface
,
195 REFIID riid
, void **ppv
)
197 ok(0, "unexpected call\n");
198 return E_NOINTERFACE
;
201 static ULONG WINAPI
InPlaceUIWindow_AddRef(IOleInPlaceFrame
*iface
)
206 static ULONG WINAPI
InPlaceUIWindow_Release(IOleInPlaceFrame
*iface
)
211 static HRESULT WINAPI
InPlaceUIWindow_GetWindow(IOleInPlaceFrame
*iface
, HWND
*phwnd
)
213 ok(0, "unexpected call\n");
217 static HRESULT WINAPI
InPlaceFrame_GetWindow(IOleInPlaceFrame
*iface
, HWND
*phwnd
)
219 CHECK_EXPECT(Frame_GetWindow
);
220 ok(phwnd
!= NULL
, "phwnd == NULL\n");
222 *phwnd
= container_hwnd
;
226 static HRESULT WINAPI
InPlaceUIWindow_ContextSensitiveHelp(IOleInPlaceFrame
*iface
, BOOL fEnterMode
)
228 ok(0, "unexpected call\n");
232 static HRESULT WINAPI
InPlaceUIWindow_GetBorder(IOleInPlaceFrame
*iface
, LPRECT lprectBorder
)
234 ok(0, "unexpected call\n");
238 static HRESULT WINAPI
InPlaceUIWindow_RequestBorderSpace(IOleInPlaceFrame
*iface
,
239 LPCBORDERWIDTHS pborderwidths
)
241 ok(0, "unexpected call\n");
245 static HRESULT WINAPI
InPlaceUIWindow_SetBorderSpace(IOleInPlaceFrame
*iface
,
246 LPCBORDERWIDTHS pborderwidths
)
248 ok(0, "unexpected call\n");
252 static HRESULT WINAPI
InPlaceUIWindow_SetActiveObject(IOleInPlaceFrame
*iface
,
253 IOleInPlaceActiveObject
*pActiveObject
, LPCOLESTR pszObjName
)
255 CHECK_EXPECT(UIWindow_SetActiveObject
);
256 ok(pActiveObject
!= NULL
, "pActiveObject = NULL\n");
257 ok(!lstrcmpW(pszObjName
, wszItem
), "unexpected pszObjName\n");
261 static HRESULT WINAPI
InPlaceFrame_SetActiveObject(IOleInPlaceFrame
*iface
,
262 IOleInPlaceActiveObject
*pActiveObject
, LPCOLESTR pszObjName
)
264 CHECK_EXPECT(Frame_SetActiveObject
);
265 ok(pActiveObject
!= NULL
, "pActiveObject = NULL\n");
266 ok(!lstrcmpW(pszObjName
, wszItem
), "unexpected pszObjName\n");
270 static HRESULT WINAPI
InPlaceFrame_InsertMenus(IOleInPlaceFrame
*iface
, HMENU hmenuShared
,
271 LPOLEMENUGROUPWIDTHS lpMenuWidths
)
273 ok(0, "unexpected call\n");
277 static HRESULT WINAPI
InPlaceFrame_SetMenu(IOleInPlaceFrame
*iface
, HMENU hmenuShared
,
278 HOLEMENU holemenu
, HWND hwndActiveObject
)
280 CHECK_EXPECT(SetMenu
);
281 ok(hmenuShared
== NULL
, "hmenuShared=%p\n", hmenuShared
);
282 ok(holemenu
== NULL
, "holemenu=%p\n", holemenu
);
283 ok(hwndActiveObject
== shell_embedding_hwnd
, "hwndActiveObject=%p, expected %p\n",
284 hwndActiveObject
, shell_embedding_hwnd
);
288 static HRESULT WINAPI
InPlaceFrame_RemoveMenus(IOleInPlaceFrame
*iface
, HMENU hmenuShared
)
290 ok(0, "unexpected call\n");
294 static HRESULT WINAPI
InPlaceFrame_SetStatusText(IOleInPlaceFrame
*iface
, LPCOLESTR pszStatusText
)
296 ok(0, "unexpected call\n");
300 static HRESULT WINAPI
InPlaceFrame_EnableModeless(IOleInPlaceFrame
*iface
, BOOL fEnable
)
302 ok(0, "unexpected call\n");
306 static HRESULT WINAPI
InPlaceFrame_TranslateAccelerator(IOleInPlaceFrame
*iface
, LPMSG lpmsg
, WORD wID
)
308 ok(0, "unexpected call\n");
312 static const IOleInPlaceFrameVtbl InPlaceUIWindowVtbl
= {
313 InPlaceUIWindow_QueryInterface
,
314 InPlaceUIWindow_AddRef
,
315 InPlaceUIWindow_Release
,
316 InPlaceUIWindow_GetWindow
,
317 InPlaceUIWindow_ContextSensitiveHelp
,
318 InPlaceUIWindow_GetBorder
,
319 InPlaceUIWindow_RequestBorderSpace
,
320 InPlaceUIWindow_SetBorderSpace
,
321 InPlaceUIWindow_SetActiveObject
,
324 static IOleInPlaceUIWindow InPlaceUIWindow
= { (IOleInPlaceUIWindowVtbl
*)&InPlaceUIWindowVtbl
};
326 static const IOleInPlaceFrameVtbl InPlaceFrameVtbl
= {
327 InPlaceUIWindow_QueryInterface
,
328 InPlaceUIWindow_AddRef
,
329 InPlaceUIWindow_Release
,
330 InPlaceFrame_GetWindow
,
331 InPlaceUIWindow_ContextSensitiveHelp
,
332 InPlaceUIWindow_GetBorder
,
333 InPlaceUIWindow_RequestBorderSpace
,
334 InPlaceUIWindow_SetBorderSpace
,
335 InPlaceFrame_SetActiveObject
,
336 InPlaceFrame_InsertMenus
,
337 InPlaceFrame_SetMenu
,
338 InPlaceFrame_RemoveMenus
,
339 InPlaceFrame_SetStatusText
,
340 InPlaceFrame_EnableModeless
,
341 InPlaceFrame_TranslateAccelerator
344 static IOleInPlaceFrame InPlaceFrame
= { &InPlaceFrameVtbl
};
346 static IOleClientSite ClientSite
= { &ClientSiteVtbl
};
348 static HRESULT WINAPI
InPlaceSite_QueryInterface(IOleInPlaceSiteEx
*iface
, REFIID riid
, void **ppv
)
350 return QueryInterface(riid
, ppv
);
353 static ULONG WINAPI
InPlaceSite_AddRef(IOleInPlaceSiteEx
*iface
)
358 static ULONG WINAPI
InPlaceSite_Release(IOleInPlaceSiteEx
*iface
)
363 static HRESULT WINAPI
InPlaceSite_GetWindow(IOleInPlaceSiteEx
*iface
, HWND
*phwnd
)
365 CHECK_EXPECT(Site_GetWindow
);
366 ok(phwnd
!= NULL
, "phwnd == NULL\n");
368 *phwnd
= container_hwnd
;
372 static HRESULT WINAPI
InPlaceSite_ContextSensitiveHelp(IOleInPlaceSiteEx
*iface
, BOOL fEnterMode
)
374 ok(0, "unexpected call\n");
378 static HRESULT WINAPI
InPlaceSite_CanInPlaceActivate(IOleInPlaceSiteEx
*iface
)
380 CHECK_EXPECT(CanInPlaceActivate
);
384 static HRESULT WINAPI
InPlaceSite_OnInPlaceActivate(IOleInPlaceSiteEx
*iface
)
386 CHECK_EXPECT(OnInPlaceActivate
);
390 static HRESULT WINAPI
InPlaceSite_OnUIActivate(IOleInPlaceSiteEx
*iface
)
392 CHECK_EXPECT(OnUIActivate
);
396 static HRESULT WINAPI
InPlaceSite_GetWindowContext(IOleInPlaceSiteEx
*iface
,
397 IOleInPlaceFrame
**ppFrame
, IOleInPlaceUIWindow
**ppDoc
, LPRECT lprcPosRect
,
398 LPRECT lprcClipRect
, LPOLEINPLACEFRAMEINFO lpFrameInfo
)
400 static const RECT pos_rect
= {2,1,1002,901};
401 static const RECT clip_rect
= {10,10,990,890};
403 CHECK_EXPECT(GetWindowContext
);
405 ok(ppFrame
!= NULL
, "ppFrame = NULL\n");
407 *ppFrame
= &InPlaceFrame
;
409 ok(ppDoc
!= NULL
, "ppDoc = NULL\n");
411 *ppDoc
= &InPlaceUIWindow
;
413 ok(lprcPosRect
!= NULL
, "lprcPosRect = NULL\n");
415 memcpy(lprcPosRect
, &pos_rect
, sizeof(RECT
));
417 ok(lprcClipRect
!= NULL
, "lprcClipRect = NULL\n");
419 memcpy(lprcClipRect
, &clip_rect
, sizeof(RECT
));
421 ok(lpFrameInfo
!= NULL
, "lpFrameInfo = NULL\n");
423 lpFrameInfo
->cb
= sizeof(*lpFrameInfo
);
424 lpFrameInfo
->fMDIApp
= FALSE
;
425 lpFrameInfo
->hwndFrame
= container_hwnd
;
426 lpFrameInfo
->haccel
= NULL
;
427 lpFrameInfo
->cAccelEntries
= 0;
433 static HRESULT WINAPI
InPlaceSite_Scroll(IOleInPlaceSiteEx
*iface
, SIZE scrollExtant
)
435 ok(0, "unexpected call\n");
439 static HRESULT WINAPI
InPlaceSite_OnUIDeactivate(IOleInPlaceSiteEx
*iface
, BOOL fUndoable
)
441 ok(0, "unexpected call\n");
445 static HRESULT WINAPI
InPlaceSite_OnInPlaceDeactivate(IOleInPlaceSiteEx
*iface
)
447 ok(0, "unexpected call\n");
451 static HRESULT WINAPI
InPlaceSite_DiscardUndoState(IOleInPlaceSiteEx
*iface
)
453 ok(0, "unexpected call\n");
457 static HRESULT WINAPI
InPlaceSite_DeactivateAndUndo(IOleInPlaceSiteEx
*iface
)
459 ok(0, "unexpected call\n");
463 static HRESULT WINAPI
InPlaceSite_OnPosRectChange(IOleInPlaceSiteEx
*iface
, LPCRECT lprcPosRect
)
465 ok(0, "unexpected call\n");
469 static HRESULT WINAPI
InPlaceSite_OnInPlaceActivateEx(IOleInPlaceSiteEx
*iface
,
470 BOOL
*pNoRedraw
, DWORD dwFlags
)
472 ok(0, "unexpected call\n");
476 static HRESULT WINAPI
InPlaceSite_OnInPlaceDeactivateEx(IOleInPlaceSiteEx
*iface
,
479 ok(0, "unexpected call\n");
483 static HRESULT WINAPI
InPlaceSite_RequestUIActivate(IOleInPlaceSiteEx
*iface
)
485 ok(0, "unexpected call\n");
489 static const IOleInPlaceSiteExVtbl InPlaceSiteExVtbl
= {
490 InPlaceSite_QueryInterface
,
493 InPlaceSite_GetWindow
,
494 InPlaceSite_ContextSensitiveHelp
,
495 InPlaceSite_CanInPlaceActivate
,
496 InPlaceSite_OnInPlaceActivate
,
497 InPlaceSite_OnUIActivate
,
498 InPlaceSite_GetWindowContext
,
500 InPlaceSite_OnUIDeactivate
,
501 InPlaceSite_OnInPlaceDeactivate
,
502 InPlaceSite_DiscardUndoState
,
503 InPlaceSite_DeactivateAndUndo
,
504 InPlaceSite_OnPosRectChange
,
505 InPlaceSite_OnInPlaceActivateEx
,
506 InPlaceSite_OnInPlaceDeactivateEx
,
507 InPlaceSite_RequestUIActivate
510 static IOleInPlaceSiteEx InPlaceSite
= { &InPlaceSiteExVtbl
};
512 static HRESULT
QueryInterface(REFIID riid
, void **ppv
)
516 if(IsEqualGUID(&IID_IUnknown
, riid
)
517 || IsEqualGUID(&IID_IOleClientSite
, riid
))
519 else if(IsEqualGUID(&IID_IOleWindow
, riid
)
520 || IsEqualGUID(&IID_IOleInPlaceSite
, riid
)
521 || IsEqualGUID(&IID_IOleInPlaceSiteEx
, riid
))
527 return E_NOINTERFACE
;
530 static LRESULT WINAPI
wnd_proc(HWND hwnd
, UINT msg
, WPARAM wParam
, LPARAM lParam
)
532 return DefWindowProcW(hwnd
, msg
, wParam
, lParam
);
535 static HWND
create_container_window(void)
537 static const WCHAR wszWebBrowserContainer
[] =
538 {'W','e','b','B','r','o','w','s','e','r','C','o','n','t','a','i','n','e','r',0};
539 static WNDCLASSEXW wndclass
= {
543 0, 0, NULL
, NULL
, NULL
, NULL
, NULL
,
544 wszWebBrowserContainer
,
548 RegisterClassExW(&wndclass
);
549 return CreateWindowW(wszWebBrowserContainer
, wszWebBrowserContainer
,
550 WS_OVERLAPPEDWINDOW
, CW_USEDEFAULT
, CW_USEDEFAULT
, CW_USEDEFAULT
,
551 CW_USEDEFAULT
, NULL
, NULL
, NULL
, NULL
);
554 static void test_DoVerb(IUnknown
*unk
)
557 RECT rect
= {0,0,1000,1000};
560 hres
= IUnknown_QueryInterface(unk
, &IID_IOleObject
, (void**)&oleobj
);
561 ok(hres
== S_OK
, "QueryInterface(IID_OleObject) failed: %08lx\n", hres
);
565 SET_EXPECT(CanInPlaceActivate
);
566 SET_EXPECT(Site_GetWindow
);
567 SET_EXPECT(OnInPlaceActivate
);
568 SET_EXPECT(GetWindowContext
);
569 SET_EXPECT(ShowObject
);
570 SET_EXPECT(GetContainer
);
571 SET_EXPECT(Frame_GetWindow
);
572 SET_EXPECT(OnUIActivate
);
573 SET_EXPECT(Frame_SetActiveObject
);
574 SET_EXPECT(UIWindow_SetActiveObject
);
577 hres
= IOleObject_DoVerb(oleobj
, OLEIVERB_SHOW
, NULL
, &ClientSite
,
578 0, container_hwnd
, &rect
);
579 ok(hres
== S_OK
, "DoVerb failed: %08lx\n", hres
);
581 CHECK_CALLED(CanInPlaceActivate
);
582 CHECK_CALLED(Site_GetWindow
);
583 CHECK_CALLED(OnInPlaceActivate
);
584 CHECK_CALLED(GetWindowContext
);
585 CHECK_CALLED(ShowObject
);
586 CHECK_CALLED(GetContainer
);
587 CHECK_CALLED(Frame_GetWindow
);
588 CHECK_CALLED(OnUIActivate
);
589 CHECK_CALLED(Frame_SetActiveObject
);
590 CHECK_CALLED(UIWindow_SetActiveObject
);
591 CHECK_CALLED(SetMenu
);
593 hres
= IOleObject_DoVerb(oleobj
, OLEIVERB_SHOW
, NULL
, &ClientSite
,
594 0, container_hwnd
, &rect
);
595 ok(hres
== S_OK
, "DoVerb failed: %08lx\n", hres
);
597 IOleObject_Release(oleobj
);
600 static void test_GetMiscStatus(IOleObject
*oleobj
)
605 for(i
=0; i
<10; i
++) {
607 hres
= IOleObject_GetMiscStatus(oleobj
, i
, &st
);
608 ok(hres
== S_OK
, "GetMiscStatus failed: %08lx\n", hres
);
609 ok(st
== (OLEMISC_SETCLIENTSITEFIRST
|OLEMISC_ACTIVATEWHENVISIBLE
|OLEMISC_INSIDEOUT
610 |OLEMISC_CANTLINKINSIDE
|OLEMISC_RECOMPOSEONRESIZE
),
611 "st=%08lx, expected OLEMISC_SETCLIENTSITEFIRST|OLEMISC_ACTIVATEWHENVISIBLE|"
612 "OLEMISC_INSIDEOUT|OLEMISC_CANTLINKINSIDE|OLEMISC_RECOMPOSEONRESIZE)\n", st
);
616 static void test_ClientSite(IUnknown
*unk
, IOleClientSite
*client
)
619 IOleInPlaceObject
*inplace
;
623 hres
= IUnknown_QueryInterface(unk
, &IID_IOleObject
, (void**)&oleobj
);
624 ok(hres
== S_OK
, "QueryInterface(IID_OleObject) failed: %08lx\n", hres
);
628 test_GetMiscStatus(oleobj
);
630 hres
= IUnknown_QueryInterface(unk
, &IID_IOleInPlaceObject
, (void**)&inplace
);
631 ok(hres
== S_OK
, "QueryInterface(IID_OleInPlaceObject) failed: %08lx\n", hres
);
633 IOleObject_Release(oleobj
);
637 hres
= IOleInPlaceObject_GetWindow(inplace
, &hwnd
);
638 ok(hres
== S_OK
, "GetWindow failed: %08lx\n", hres
);
639 ok((hwnd
== NULL
) ^ (client
== NULL
), "unexpected hwnd %p\n", hwnd
);
642 SET_EXPECT(GetContainer
);
643 SET_EXPECT(Site_GetWindow
);
646 hres
= IOleObject_SetClientSite(oleobj
, client
);
647 ok(hres
== S_OK
, "SetClientSite failed: %08lx\n", hres
);
650 CHECK_CALLED(GetContainer
);
651 CHECK_CALLED(Site_GetWindow
);
654 hres
= IOleInPlaceObject_GetWindow(inplace
, &hwnd
);
655 ok(hres
== S_OK
, "GetWindow failed: %08lx\n", hres
);
656 ok((hwnd
== NULL
) == (client
== NULL
), "unexpected hwnd %p\n", hwnd
);
658 shell_embedding_hwnd
= hwnd
;
660 IOleInPlaceObject_Release(inplace
);
661 IOleObject_Release(oleobj
);
664 static void test_ClassInfo(IUnknown
*unk
)
666 IProvideClassInfo2
*class_info
;
670 hres
= IUnknown_QueryInterface(unk
, &IID_IProvideClassInfo2
, (void**)&class_info
);
671 ok(hres
== S_OK
, "QueryInterface(IID_IProvideClassInfo) failed: %08lx\n", hres
);
675 hres
= IProvideClassInfo2_GetGUID(class_info
, GUIDKIND_DEFAULT_SOURCE_DISP_IID
, &guid
);
676 ok(hres
== S_OK
, "GetGUID failed: %08lx\n", hres
);
677 ok(IsEqualGUID(&DIID_DWebBrowserEvents2
, &guid
), "wrong guid\n");
679 hres
= IProvideClassInfo2_GetGUID(class_info
, 0, &guid
);
680 ok(hres
== E_FAIL
, "GetGUID failed: %08lx, expected E_FAIL\n", hres
);
681 ok(IsEqualGUID(&IID_NULL
, &guid
), "wrong guid\n");
683 hres
= IProvideClassInfo2_GetGUID(class_info
, 2, &guid
);
684 ok(hres
== E_FAIL
, "GetGUID failed: %08lx, expected E_FAIL\n", hres
);
685 ok(IsEqualGUID(&IID_NULL
, &guid
), "wrong guid\n");
687 hres
= IProvideClassInfo2_GetGUID(class_info
, GUIDKIND_DEFAULT_SOURCE_DISP_IID
, NULL
);
688 ok(hres
== E_POINTER
, "GetGUID failed: %08lx, expected E_POINTER\n", hres
);
690 hres
= IProvideClassInfo2_GetGUID(class_info
, 0, NULL
);
691 ok(hres
== E_POINTER
, "GetGUID failed: %08lx, expected E_POINTER\n", hres
);
693 IProvideClassInfo2_Release(class_info
);
696 static void test_ie_funcs(IUnknown
*unk
)
704 hres
= IUnknown_QueryInterface(unk
, &IID_IWebBrowser2
, (void**)&wb
);
705 ok(hres
== S_OK
, "Could not get IWebBrowser2 interface: %08lx\n", hres
);
712 hres
= IWebBrowser2_get_HWND(wb
, &hwnd
);
713 ok(hres
== E_FAIL
, "get_HWND failed: %08lx, expected E_FAIL\n", hres
);
714 ok(hwnd
== 0, "unexpected hwnd %lx\n", hwnd
);
718 hres
= IWebBrowser2_get_MenuBar(wb
, &b
);
719 ok(hres
== S_OK
, "get_MenuBar failed: %08lx\n", hres
);
720 ok(b
== VARIANT_TRUE
, "b=%x\n", b
);
722 hres
= IWebBrowser2_put_MenuBar(wb
, VARIANT_FALSE
);
723 ok(hres
== S_OK
, "put_MenuBar failed: %08lx\n", hres
);
725 hres
= IWebBrowser2_get_MenuBar(wb
, &b
);
726 ok(hres
== S_OK
, "get_MenuBar failed: %08lx\n", hres
);
727 ok(b
== VARIANT_FALSE
, "b=%x\n", b
);
729 hres
= IWebBrowser2_put_MenuBar(wb
, 100);
730 ok(hres
== S_OK
, "put_MenuBar failed: %08lx\n", hres
);
732 hres
= IWebBrowser2_get_MenuBar(wb
, &b
);
733 ok(hres
== S_OK
, "get_MenuBar failed: %08lx\n", hres
);
734 ok(b
== VARIANT_TRUE
, "b=%x\n", b
);
738 hres
= IWebBrowser2_get_AddressBar(wb
, &b
);
739 ok(hres
== S_OK
, "get_AddressBar failed: %08lx\n", hres
);
740 ok(b
== VARIANT_TRUE
, "b=%x\n", b
);
742 hres
= IWebBrowser2_put_AddressBar(wb
, VARIANT_FALSE
);
743 ok(hres
== S_OK
, "put_AddressBar failed: %08lx\n", hres
);
745 hres
= IWebBrowser2_get_AddressBar(wb
, &b
);
746 ok(hres
== S_OK
, "get_MenuBar failed: %08lx\n", hres
);
747 ok(b
== VARIANT_FALSE
, "b=%x\n", b
);
749 hres
= IWebBrowser2_put_AddressBar(wb
, 100);
750 ok(hres
== S_OK
, "put_AddressBar failed: %08lx\n", hres
);
752 hres
= IWebBrowser2_get_AddressBar(wb
, &b
);
753 ok(hres
== S_OK
, "get_AddressBar failed: %08lx\n", hres
);
754 ok(b
== VARIANT_TRUE
, "b=%x\n", b
);
756 hres
= IWebBrowser2_put_AddressBar(wb
, VARIANT_TRUE
);
757 ok(hres
== S_OK
, "put_MenuBar failed: %08lx\n", hres
);
761 hres
= IWebBrowser2_get_StatusBar(wb
, &b
);
762 ok(hres
== S_OK
, "get_StatusBar failed: %08lx\n", hres
);
763 ok(b
== VARIANT_TRUE
, "b=%x\n", b
);
765 hres
= IWebBrowser2_put_StatusBar(wb
, VARIANT_TRUE
);
766 ok(hres
== S_OK
, "put_StatusBar failed: %08lx\n", hres
);
768 hres
= IWebBrowser2_get_StatusBar(wb
, &b
);
769 ok(hres
== S_OK
, "get_StatusBar failed: %08lx\n", hres
);
770 ok(b
== VARIANT_TRUE
, "b=%x\n", b
);
772 hres
= IWebBrowser2_put_StatusBar(wb
, VARIANT_FALSE
);
773 ok(hres
== S_OK
, "put_StatusBar failed: %08lx\n", hres
);
775 hres
= IWebBrowser2_get_StatusBar(wb
, &b
);
776 ok(hres
== S_OK
, "get_StatusBar failed: %08lx\n", hres
);
777 ok(b
== VARIANT_FALSE
, "b=%x\n", b
);
779 hres
= IWebBrowser2_put_StatusBar(wb
, 100);
780 ok(hres
== S_OK
, "put_StatusBar failed: %08lx\n", hres
);
782 hres
= IWebBrowser2_get_StatusBar(wb
, &b
);
783 ok(hres
== S_OK
, "get_StatusBar failed: %08lx\n", hres
);
784 ok(b
== VARIANT_TRUE
, "b=%x\n", b
);
788 hres
= IWebBrowser2_get_ToolBar(wb
, &i
);
789 ok(hres
== S_OK
, "get_ToolBar failed: %08lx\n", hres
);
790 ok(i
== VARIANT_TRUE
, "i=%x\n", i
);
792 hres
= IWebBrowser2_put_ToolBar(wb
, VARIANT_FALSE
);
793 ok(hres
== S_OK
, "put_ToolBar failed: %08lx\n", hres
);
795 hres
= IWebBrowser2_get_ToolBar(wb
, &i
);
796 ok(hres
== S_OK
, "get_ToolBar failed: %08lx\n", hres
);
797 ok(i
== VARIANT_FALSE
, "b=%x\n", i
);
799 hres
= IWebBrowser2_put_ToolBar(wb
, 100);
800 ok(hres
== S_OK
, "put_ToolBar failed: %08lx\n", hres
);
802 hres
= IWebBrowser2_get_ToolBar(wb
, &i
);
803 ok(hres
== S_OK
, "get_ToolBar failed: %08lx\n", hres
);
804 ok(i
== VARIANT_TRUE
, "i=%x\n", i
);
806 hres
= IWebBrowser2_put_ToolBar(wb
, VARIANT_TRUE
);
807 ok(hres
== S_OK
, "put_ToolBar failed: %08lx\n", hres
);
809 IWebBrowser2_Release(wb
);
812 static void test_Silent(IUnknown
*unk
)
818 hres
= IUnknown_QueryInterface(unk
, &IID_IWebBrowser2
, (void**)&wb
);
819 ok(hres
== S_OK
, "Could not get IWebBrowser2 interface: %08lx\n", hres
);
824 hres
= IWebBrowser2_get_Silent(wb
, &b
);
825 ok(hres
== S_OK
, "get_Silent failed: %08lx\n", hres
);
826 ok(b
== VARIANT_FALSE
, "b=%x\n", b
);
828 hres
= IWebBrowser2_put_Silent(wb
, VARIANT_TRUE
);
829 ok(hres
== S_OK
, "set_Silent failed: %08lx\n", hres
);
832 hres
= IWebBrowser2_get_Silent(wb
, &b
);
833 ok(hres
== S_OK
, "get_Silent failed: %08lx\n", hres
);
834 ok(b
== VARIANT_TRUE
, "b=%x\n", b
);
836 hres
= IWebBrowser2_put_Silent(wb
, 100);
837 ok(hres
== S_OK
, "set_Silent failed: %08lx\n", hres
);
840 hres
= IWebBrowser2_get_Silent(wb
, &b
);
841 ok(hres
== S_OK
, "get_Silent failed: %08lx\n", hres
);
842 ok(b
== VARIANT_TRUE
, "b=%x\n", b
);
844 hres
= IWebBrowser2_put_Silent(wb
, VARIANT_FALSE
);
845 ok(hres
== S_OK
, "set_Silent failed: %08lx\n", hres
);
848 hres
= IWebBrowser2_get_Silent(wb
, &b
);
849 ok(hres
== S_OK
, "get_Silent failed: %08lx\n", hres
);
850 ok(b
== VARIANT_FALSE
, "b=%x\n", b
);
852 IWebBrowser_Release(wb
);
855 static void test_GetControlInfo(IUnknown
*unk
)
857 IOleControl
*control
;
861 hres
= IUnknown_QueryInterface(unk
, &IID_IOleControl
, (void**)&control
);
862 ok(hres
== S_OK
, "Could not get IOleControl: %08lx\n", hres
);
866 hres
= IOleControl_GetControlInfo(control
, &info
);
867 ok(hres
== E_NOTIMPL
, "GetControlInfo failed: %08lx, exxpected E_NOTIMPL\n", hres
);
868 hres
= IOleControl_GetControlInfo(control
, NULL
);
869 ok(hres
== E_NOTIMPL
, "GetControlInfo failed: %08lx, exxpected E_NOTIMPL\n", hres
);
871 IOleControl_Release(control
);
874 static void test_Extent(IUnknown
*unk
)
880 hres
= IUnknown_QueryInterface(unk
, &IID_IOleObject
, (void**)&oleobj
);
881 ok(hres
== S_OK
, "Could not get IOleObkect: %08lx\n", hres
);
885 size
.cx
= size
.cy
= 0xdeadbeef;
886 hres
= IOleObject_GetExtent(oleobj
, DVASPECT_CONTENT
, &size
);
887 ok(hres
== S_OK
, "GetExtent failed: %08lx\n", hres
);
888 ok(size
.cx
== 1323 && size
.cy
== 529, "size = {%ld %ld}\n", size
.cx
, size
.cy
);
892 hres
= IOleObject_SetExtent(oleobj
, DVASPECT_CONTENT
, &size
);
893 ok(hres
== S_OK
, "SetExtent failed: %08lx\n", hres
);
895 size
.cx
= size
.cy
= 0xdeadbeef;
896 hres
= IOleObject_GetExtent(oleobj
, DVASPECT_CONTENT
, &size
);
897 ok(hres
== S_OK
, "GetExtent failed: %08lx\n", hres
);
898 ok(size
.cx
== 800 && size
.cy
== 700, "size = {%ld %ld}\n", size
.cx
, size
.cy
);
900 size
.cx
= size
.cy
= 0xdeadbeef;
901 hres
= IOleObject_GetExtent(oleobj
, 0, &size
);
902 ok(hres
== S_OK
, "GetExtent failed: %08lx\n", hres
);
903 ok(size
.cx
== 800 && size
.cy
== 700, "size = {%ld %ld}\n", size
.cx
, size
.cy
);
907 hres
= IOleObject_SetExtent(oleobj
, 0, &size
);
908 ok(hres
== S_OK
, "SetExtent failed: %08lx\n", hres
);
910 size
.cx
= size
.cy
= 0xdeadbeef;
911 hres
= IOleObject_GetExtent(oleobj
, 0, &size
);
912 ok(hres
== S_OK
, "GetExtent failed: %08lx\n", hres
);
913 ok(size
.cx
== 900 && size
.cy
== 800, "size = {%ld %ld}\n", size
.cx
, size
.cy
);
915 size
.cx
= size
.cy
= 0xdeadbeef;
916 hres
= IOleObject_GetExtent(oleobj
, 0xdeadbeef, &size
);
917 ok(hres
== S_OK
, "GetExtent failed: %08lx\n", hres
);
918 ok(size
.cx
== 900 && size
.cy
== 800, "size = {%ld %ld}\n", size
.cx
, size
.cy
);
922 hres
= IOleObject_SetExtent(oleobj
, 0xdeadbeef, &size
);
923 ok(hres
== S_OK
, "SetExtent failed: %08lx\n", hres
);
925 size
.cx
= size
.cy
= 0xdeadbeef;
926 hres
= IOleObject_GetExtent(oleobj
, 0xdeadbeef, &size
);
927 ok(hres
== S_OK
, "GetExtent failed: %08lx\n", hres
);
928 ok(size
.cx
== 1000 && size
.cy
== 900, "size = {%ld %ld}\n", size
.cx
, size
.cy
);
930 size
.cx
= size
.cy
= 0xdeadbeef;
931 hres
= IOleObject_GetExtent(oleobj
, DVASPECT_CONTENT
, &size
);
932 ok(hres
== S_OK
, "GetExtent failed: %08lx\n", hres
);
933 ok(size
.cx
== 1000 && size
.cy
== 900, "size = {%ld %ld}\n", size
.cx
, size
.cy
);
935 IOleObject_Release(oleobj
);
938 static void test_WebBrowser(void)
940 IUnknown
*unk
= NULL
;
944 hres
= CoCreateInstance(&CLSID_WebBrowser
, NULL
, CLSCTX_INPROC_SERVER
|CLSCTX_INPROC_HANDLER
,
945 &IID_IUnknown
, (void**)&unk
);
946 ok(hres
== S_OK
, "CoCreateInterface failed: %08lx\n", hres
);
951 test_ClientSite(unk
, &ClientSite
);
954 test_ClientSite(unk
, NULL
);
956 test_GetControlInfo(unk
);
959 ref
= IUnknown_Release(unk
);
960 ok(ref
== 0, "ref=%ld, expected 0\n", ref
);
963 START_TEST(webbrowser
)
965 container_hwnd
= create_container_window();