This time with the patch.
Changelog: - Code cleanup - Dissable tests after UIActivate failes (fixes tests win 9x)
Index: dlls/mshtml/tests/htmldoc.c =================================================================== RCS file: /home/wine/wine/dlls/mshtml/tests/htmldoc.c,v retrieving revision 1.8 diff -u -p -r1.8 htmldoc.c --- dlls/mshtml/tests/htmldoc.c 15 Aug 2005 09:41:30 -0000 1.8 +++ dlls/mshtml/tests/htmldoc.c 15 Aug 2005 16:48:51 -0000 @@ -43,7 +43,6 @@ ok(called_ ## func, "expected " #func "\n"); \ expect_ ## func = called_ ## func = FALSE
-static IUnknown *htmldoc_unk = NULL; static IOleDocumentView *view = NULL; static HWND container_hwnd = NULL, hwnd = NULL, last_hwnd = NULL;
@@ -469,7 +468,7 @@ static HRESULT WINAPI DocumentSite_Activ CHECK_EXPECT(ActivateMe); ok(pViewToActivate != NULL, "pViewToActivate = NULL\n");
- hres = IUnknown_QueryInterface(htmldoc_unk, &IID_IOleDocument, (void**)&document); + hres = IOleDocumentView_QueryInterface(pViewToActivate, &IID_IOleDocument, (void**)&document); ok(hres == S_OK, "could not get IOleDocument: %08lx\n", hres);
if(SUCCEEDED(hres)) { @@ -513,8 +512,15 @@ static HRESULT WINAPI DocumentSite_Activ SET_EXPECT(SetActiveObject); SET_EXPECT(ShowUI); expect_SetActiveObject_active = TRUE; + hres = IOleDocumentView_UIActivate(view, TRUE); + + if(FAILED(hres)) { + trace("UIActivate failed: %08lx\n", hres); + return hres; + } ok(hres == S_OK, "UIActivate failed: %08lx\n", hres); + CHECK_CALLED(CanInPlaceActivate); CHECK_CALLED(GetWindowContext); CHECK_CALLED(GetWindow); @@ -796,14 +802,14 @@ static LRESULT WINAPI wnd_proc(HWND hwnd return DefWindowProc(hwnd, msg, wParam, lParam); }
-static void test_Persist() +static void test_Persist(IUnknown *unk) { IPersistMoniker *persist_mon; IPersistFile *persist_file; GUID guid; HRESULT hres;
- hres = IUnknown_QueryInterface(htmldoc_unk, &IID_IPersistFile, (void**)&persist_file); + hres = IUnknown_QueryInterface(unk, &IID_IPersistFile, (void**)&persist_file); ok(hres == S_OK, "QueryInterface(IID_IPersist) failed: %08lx\n", hres); if(SUCCEEDED(hres)) { hres = IPersist_GetClassID(persist_file, NULL); @@ -816,7 +822,7 @@ static void test_Persist() IPersist_Release(persist_file); }
- hres = IUnknown_QueryInterface(htmldoc_unk, &IID_IPersistMoniker, (void**)&persist_mon); + hres = IUnknown_QueryInterface(unk, &IID_IPersistMoniker, (void**)&persist_mon); ok(hres == S_OK, "QueryInterface(IID_IPersistMoniker) failed: %08lx\n", hres); if(SUCCEEDED(hres)) { hres = IPersistMoniker_GetClassID(persist_mon, NULL); @@ -872,12 +878,18 @@ static const OLECMDF expect_cmds[OLECMDI OLECMDF_SUPPORTED /* OLECMDID_GETPRINTTEMPLATE */ };
-static void test_OleCommandTarget(IOleCommandTarget *cmdtrg) +static void test_OleCommandTarget(IUnknown *unk) { + IOleCommandTarget *cmdtrg; OLECMD cmds[OLECMDID_GETPRINTTEMPLATE]; int i; HRESULT hres;
+ hres = IUnknown_QueryInterface(unk, &IID_IOleCommandTarget, (void**)&cmdtrg); + ok(hres == S_OK, "QueryInterface(IIDIOleM=CommandTarget failed: %08lx\n", hres); + if(FAILED(hres)) + return; + for(i=0; i<OLECMDID_GETPRINTTEMPLATE; i++) { cmds[i].cmdID = i+1; cmds[i].cmdf = 0xf0f0; @@ -891,20 +903,63 @@ static void test_OleCommandTarget(IOleCo ok(cmds[i].cmdf == expect_cmds[i+1], "cmds[%d].cmdf=%lx, expected %x\n", i+1, cmds[i].cmdf, expect_cmds[i+1]); } + + IOleCommandTarget_Release(cmdtrg); }
-static void test_HTMLDocument(void) +static void test_OleCommandTarget_fail(IUnknown *unk) { - IOleObject *oleobj = NULL; - IOleClientSite *clientsite = (LPVOID)0xdeadbeef; - IOleInPlaceObjectWindowless *windowlessobj = NULL; - IOleInPlaceActiveObject *activeobject = NULL; - IOleCommandTarget *cmdtrg = NULL; - GUID guid; - RECT rect = {0,0,500,500}; + IOleCommandTarget *cmdtrg; + int i; HRESULT hres; - ULONG ref;
+ OLECMD cmd[2] = { + {OLECMDID_OPEN, 0xf0f0}, + {OLECMDID_GETPRINTTEMPLATE+1, 0xf0f0} + }; + + hres = IUnknown_QueryInterface(unk, &IID_IOleCommandTarget, (void**)&cmdtrg); + ok(hres == S_OK, "QueryInterface(IIDIOleM=CommandTarget failed: %08lx\n", hres); + if(FAILED(hres)) + return; + + + + hres = IOleCommandTarget_QueryStatus(cmdtrg, NULL, 0, NULL, NULL); + ok(hres == S_OK, "QueryStatus failed: %08lx\n", hres); + + hres = IOleCommandTarget_QueryStatus(cmdtrg, NULL, 2, cmd, NULL); + ok(hres == OLECMDERR_E_NOTSUPPORTED, + "QueryStatus failed: %08lx, expected OLECMDERR_E_NOTSUPPORTED\n", hres); + ok(cmd[1].cmdID == OLECMDID_GETPRINTTEMPLATE+1, + "cmd[0].cmdID=%ld, expected OLECMDID_GETPRINTTEMPLATE+1\n", cmd[0].cmdID); + ok(cmd[1].cmdf == 0, "cmd[0].cmdf=%lx, expected 0\n", cmd[0].cmdf); + ok(cmd[0].cmdf == OLECMDF_SUPPORTED, + "cmd[1].cmdf=%lx, expected OLECMDF_SUPPORTED\n", cmd[1].cmdf); + + hres = IOleCommandTarget_QueryStatus(cmdtrg, &IID_IHTMLDocument2, 2, cmd, NULL); + ok(hres == OLECMDERR_E_UNKNOWNGROUP, + "QueryStatus failed: %08lx, expected OLECMDERR_E_UNKNOWNGROUP\n", hres); + + for(i=0; i<OLECMDID_GETPRINTTEMPLATE; i++) { + if(!expect_cmds[i]) { + hres = IOleCommandTarget_Exec(cmdtrg, NULL, OLECMDID_UPDATECOMMANDS, + OLECMDEXECOPT_DODEFAULT, NULL, NULL); + ok(hres == OLECMDERR_E_NOTSUPPORTED, + "Exec failed: %08lx, expected OLECMDERR_E_NOTSUPPORTED\n", hres); + } + } + + hres = IOleCommandTarget_Exec(cmdtrg, NULL, OLECMDID_GETPRINTTEMPLATE+1, + OLECMDEXECOPT_DODEFAULT, NULL, NULL); + ok(hres == OLECMDERR_E_NOTSUPPORTED, + "Exec failed: %08lx, expected OLECMDERR_E_NOTSUPPORTED\n", hres); + + IOleCommandTarget_Release(cmdtrg); +} + +static HWND create_container_window(void) +{ static const WCHAR wszHTMLDocumentTest[] = {'H','T','M','L','D','o','c','u','m','e','n','t','T','e','s','t',0}; static WNDCLASSEXW wndclass = { @@ -916,402 +971,307 @@ static void test_HTMLDocument(void) NULL };
- hres = CoCreateInstance(&CLSID_HTMLDocument, NULL, CLSCTX_INPROC_SERVER|CLSCTX_INPROC_HANDLER, - &IID_IUnknown, (void**)&htmldoc_unk); - ok(hres == S_OK, "CoCreateInstance failed: %08lx\n", hres); - if(FAILED(hres)) - return; - RegisterClassExW(&wndclass); - container_hwnd = CreateWindowW(wszHTMLDocumentTest, wszHTMLDocumentTest, + return CreateWindowW(wszHTMLDocumentTest, wszHTMLDocumentTest, WS_OVERLAPPEDWINDOW, CW_USEDEFAULT, CW_USEDEFAULT, CW_USEDEFAULT, CW_USEDEFAULT, NULL, NULL, NULL, NULL); +}
- test_Persist(); +static HRESULT test_DoVerb(IOleObject *oleobj) +{ + RECT rect = {0,0,500,500}; + HRESULT hres;
- hres = IUnknown_QueryInterface(htmldoc_unk, &IID_IOleInPlaceObjectWindowless, - (void**)&windowlessobj); - ok(hres == S_OK, "Could not get IOleInPlaceObjectWindowless interface: %08lx\n", hres); + SET_EXPECT(GetContainer); + SET_EXPECT(LockContainer); + SET_EXPECT(ActivateMe); + expect_LockContainer_fLock = TRUE; + hres = IOleObject_DoVerb(oleobj, OLEIVERB_SHOW, NULL, &ClientSite, -1, container_hwnd, &rect);
- hres = IUnknown_QueryInterface(htmldoc_unk, &IID_IOleCommandTarget, (void**)&cmdtrg); - ok(hres == S_OK, "could not get IOleCommandTarget: %08lx\n", hres); + if(FAILED(hres)) + return hres;
- hres = IUnknown_QueryInterface(htmldoc_unk, &IID_IOleObject, (void**)&oleobj); - ok(hres == S_OK, "QueryInterface(IID_IOleObject) failed: %08lx\n", hres); - if(oleobj) { - hres = IOleObject_GetUserClassID(oleobj, NULL); - ok(hres == E_INVALIDARG, "GetUserClassID returned: %08lx, expected E_INVALIDARG\n", hres); - - hres = IOleObject_GetUserClassID(oleobj, &guid); - ok(hres == S_OK, "GetUserClassID failed: %08lx\n", hres); - ok(IsEqualGUID(&guid, &CLSID_HTMLDocument), "guid != CLSID_HTMLDocument\n"); + ok(hres == S_OK, "DoVerb failed: %08lx\n", hres); + CHECK_CALLED(GetContainer); + CHECK_CALLED(LockContainer); + CHECK_CALLED(ActivateMe);
- hres = IOleObject_GetClientSite(oleobj, &clientsite); - ok(hres == S_OK, "GetClientSite failed: %08lx\n", hres); - ok(clientsite == NULL, "GetClientSite() = %p, expected NULL\n", clientsite); + return hres; +}
- SET_EXPECT(GetHostInfo); - SET_EXPECT(GetOptionKeyPath); - SET_EXPECT(GetOverrideKeyPath); - SET_EXPECT(GetWindow); - hres = IOleObject_SetClientSite(oleobj, &ClientSite); - ok(hres == S_OK, "SetClientSite failed: %08lx\n", hres); - CHECK_CALLED(GetHostInfo); - CHECK_CALLED(GetOptionKeyPath); - CHECK_CALLED(GetOverrideKeyPath); - CHECK_CALLED(GetWindow); +#define CLIENTSITE_EXPECTPATH 0x00000001 +#define CLIENTSITE_SETNULL 0x00000002 +#define CLIENTSITE_DONTSET 0x00000004
- hres = IOleObject_GetClientSite(oleobj, &clientsite); - ok(hres == S_OK, "GetClientSite failed: %08lx\n", hres); - ok(clientsite == &ClientSite, "GetClientSite() = %p, expected %p\n", clientsite, &ClientSite); +static void test_ClientSite(IOleObject *oleobj, DWORD flags) +{ + IOleClientSite *clientsite; + HRESULT hres;
- if(windowlessobj) { - hres = IOleInPlaceObjectWindowless_InPlaceDeactivate(windowlessobj); - ok(hres == S_OK, "InPlaceDeactivate failed: %08lx\n", hres); - } + if(flags & CLIENTSITE_SETNULL) { + hres = IOleObject_GetClientSite(oleobj, &clientsite); + ok(clientsite == &ClientSite, "clientsite=%p, expected %p\n", clientsite, &ClientSite);
- SET_EXPECT(GetContainer); - SET_EXPECT(LockContainer); - SET_EXPECT(ActivateMe); - expect_LockContainer_fLock = TRUE; - hres = IOleObject_DoVerb(oleobj, OLEIVERB_SHOW, NULL, &ClientSite, -1, container_hwnd, &rect); - ok(hres == S_OK, "DoVerb failed: %08lx\n", hres); - CHECK_CALLED(GetContainer); - CHECK_CALLED(LockContainer); - CHECK_CALLED(ActivateMe); + hres = IOleObject_SetClientSite(oleobj, NULL); + ok(hres == S_OK, "SetClientSite failed: %08lx\n", hres); }
- if(cmdtrg) { - int i; - - OLECMD cmd[2] = { - {OLECMDID_OPEN, 0xf0f0}, - {OLECMDID_GETPRINTTEMPLATE+1, 0xf0f0} - }; - - hres = IOleCommandTarget_QueryStatus(cmdtrg, NULL, 0, NULL, NULL); - ok(hres == S_OK, "QueryStatus failed: %08lx\n", hres); - - hres = IOleCommandTarget_QueryStatus(cmdtrg, NULL, 2, cmd, NULL); - ok(hres == OLECMDERR_E_NOTSUPPORTED, - "QueryStatus failed: %08lx, expected OLECMDERR_E_NOTSUPPORTED\n", hres); - ok(cmd[1].cmdID == OLECMDID_GETPRINTTEMPLATE+1, - "cmd[0].cmdID=%ld, expected OLECMDID_GETPRINTTEMPLATE+1\n", cmd[0].cmdID); - ok(cmd[1].cmdf == 0, "cmd[0].cmdf=%lx, expected 0\n", cmd[0].cmdf); - ok(cmd[0].cmdf == OLECMDF_SUPPORTED, - "cmd[1].cmdf=%lx, expected OLECMDF_SUPPORTED\n", cmd[1].cmdf); - - hres = IOleCommandTarget_QueryStatus(cmdtrg, &IID_IHTMLDocument2, 2, cmd, NULL); - ok(hres == OLECMDERR_E_UNKNOWNGROUP, - "QueryStatus failed: %08lx, expected OLECMDERR_E_UNKNOWNGROUP\n", hres); - - for(i=0; i<OLECMDID_GETPRINTTEMPLATE; i++) { - if(!expect_cmds[i]) { - hres = IOleCommandTarget_Exec(cmdtrg, NULL, OLECMDID_UPDATECOMMANDS, - OLECMDEXECOPT_DODEFAULT, NULL, NULL); - ok(hres == OLECMDERR_E_NOTSUPPORTED, - "Exec failed: %08lx, expected OLECMDERR_E_NOTSUPPORTED\n", hres); - } - } + if(flags & CLIENTSITE_DONTSET) + return;
- hres = IOleCommandTarget_Exec(cmdtrg, NULL, OLECMDID_GETPRINTTEMPLATE+1, - OLECMDEXECOPT_DODEFAULT, NULL, NULL); - ok(hres == OLECMDERR_E_NOTSUPPORTED, - "Exec failed: %08lx, expected OLECMDERR_E_NOTSUPPORTED\n", hres); + hres = IOleObject_GetClientSite(oleobj, &clientsite); + ok(hres == S_OK, "GetClientSite failed: %08lx\n", hres); + ok(clientsite == NULL, "GetClientSite() = %p, expected NULL\n", clientsite);
- test_OleCommandTarget(cmdtrg); + SET_EXPECT(GetHostInfo); + if(flags & CLIENTSITE_EXPECTPATH) { + SET_EXPECT(GetOptionKeyPath); + SET_EXPECT(GetOverrideKeyPath); } + SET_EXPECT(GetWindow); + hres = IOleObject_SetClientSite(oleobj, &ClientSite); + ok(hres == S_OK, "SetClientSite failed: %08lx\n", hres); + CHECK_CALLED(GetHostInfo); + if(flags & CLIENTSITE_EXPECTPATH) { + CHECK_CALLED(GetOptionKeyPath); + CHECK_CALLED(GetOverrideKeyPath); + } + CHECK_CALLED(GetWindow);
- hres = IOleDocumentView_QueryInterface(view, &IID_IOleInPlaceActiveObject, (void**)&activeobject); - ok(hres == S_OK, "Could not get IOleInPlaceActiveObject interface: %08lx\n", hres); + hres = IOleObject_GetClientSite(oleobj, &clientsite); + ok(hres == S_OK, "GetClientSite failed: %08lx\n", hres); + ok(clientsite == &ClientSite, "GetClientSite() = %p, expected %p\n", clientsite, &ClientSite); +}
- if(activeobject) { - HWND tmp_hwnd; - hres = IOleInPlaceActiveObject_GetWindow(activeobject, &tmp_hwnd); - ok(hres == S_OK, "GetWindow failed: %08lx\n", hres); - ok(tmp_hwnd == hwnd, "tmp_hwnd=%p, expected %p\n", tmp_hwnd, hwnd); - } +static void test_Close(IUnknown *unk, BOOL set_client) +{ + IOleObject *oleobj = NULL; + HRESULT hres;
- if(view) { - SET_EXPECT(SetActiveObject); - SET_EXPECT(HideUI); - SET_EXPECT(OnUIDeactivate); - expect_SetActiveObject_active = FALSE; - hres = IOleDocumentView_UIActivate(view, FALSE); - ok(hres == S_OK, "UIActivate failed: %08lx\n", hres); - CHECK_CALLED(SetActiveObject); - CHECK_CALLED(HideUI); - CHECK_CALLED(OnUIDeactivate); - } + hres = IUnknown_QueryInterface(unk, &IID_IOleObject, (void**)&oleobj); + ok(hres == S_OK, "QueryInterface(IID_IOleObject) failed: %08lx\n", hres); + if(FAILED(hres)) + return;
- if(cmdtrg) - test_OleCommandTarget(cmdtrg); + SET_EXPECT(GetContainer); + SET_EXPECT(LockContainer); + expect_LockContainer_fLock = FALSE; + hres = IOleObject_Close(oleobj, OLECLOSE_NOSAVE); + ok(hres == S_OK, "Close failed: %08lx\n", hres); + CHECK_CALLED(GetContainer); + CHECK_CALLED(LockContainer);
- if(activeobject) { - HWND tmp_hwnd; - hres = IOleInPlaceActiveObject_GetWindow(activeobject, &tmp_hwnd); - ok(hres == S_OK, "GetWindow failed: %08lx\n", hres); - ok(tmp_hwnd == hwnd, "tmp_hwnd=%p, expected %p\n", tmp_hwnd, hwnd); - } - - if(windowlessobj) { - SET_EXPECT(OnInPlaceDeactivate); - hres = IOleInPlaceObjectWindowless_InPlaceDeactivate(windowlessobj); - ok(hres == S_OK, "InPlaceDeactivate failed: %08lx\n", hres); - CHECK_CALLED(OnInPlaceDeactivate); - } + if(set_client) + test_ClientSite(oleobj, CLIENTSITE_SETNULL|CLIENTSITE_DONTSET);
- /* Calling test_OleCommandTarget here couses Segmentation Fault with native - * MSHTML. It doesn't with Wine. */ + IOleObject_Release(oleobj); +}
- if(activeobject) { - HWND tmp_hwnd; - hres = IOleInPlaceActiveObject_GetWindow(activeobject, &tmp_hwnd); - ok(hres == E_FAIL, "GetWindow returned %08lx, expected E_FAIL\n", hres); - ok(IsWindow(hwnd), "hwnd is destroyed\n"); - } +static void test_InPlaceDeactivate(IUnknown *unk, BOOL expect_call) +{ + IOleInPlaceObjectWindowless *windowlessobj = NULL; + HRESULT hres;
- if(view) { - hres = IOleDocumentView_Show(view, FALSE); - ok(hres == S_OK, "Show failed: %08lx\n", hres); - } - if(windowlessobj) { - hres = IOleInPlaceObjectWindowless_InPlaceDeactivate(windowlessobj); - ok(hres == S_OK, "InPlaceDeactivate failed: %08lx\n", hres); - } + hres = IUnknown_QueryInterface(unk, &IID_IOleInPlaceObjectWindowless, + (void**)&windowlessobj); + ok(hres == S_OK, "QueryInterface(IID_IOleInPlaceObjectWindowless) failed: %08lx\n", hres); + if(FAILED(hres)) + return;
- if(view) { - IOleInPlaceSite *inplacesite = (IOleInPlaceSite*)0xff00ff00; + if(expect_call) SET_EXPECT(OnInPlaceDeactivate); + hres = IOleInPlaceObjectWindowless_InPlaceDeactivate(windowlessobj); + ok(hres == S_OK, "InPlaceDeactivate failed: %08lx\n", hres); + if(expect_call) CHECK_CALLED(OnInPlaceDeactivate);
- hres = IOleDocumentView_Show(view, FALSE); - ok(hres == S_OK, "Show failed: %08lx\n", hres); + IOleInPlaceObjectWindowless_Release(windowlessobj); +}
- hres = IOleDocumentView_CloseView(view, 0); - ok(hres == S_OK, "CloseVire failed: %08lx\n", hres); +static HRESULT test_Activate(IUnknown *unk, DWORD flags) +{ + IOleObject *oleobj = NULL; + GUID guid; + HRESULT hres;
- hres = IOleDocumentView_SetInPlaceSite(view, NULL); - ok(hres == S_OK, "SetInPlaceSite failed: %08lx\n", hres); + last_hwnd = hwnd;
- hres = IOleDocumentView_GetInPlaceSite(view, &inplacesite); - ok(hres == S_OK, "SetInPlaceSite failed: %08lx\n", hres); - ok(inplacesite == NULL, "inplacesite=%p, expected NULL\n", inplacesite); - } + if(view) + IOleDocumentView_Release(view); + view = NULL;
- if(oleobj) { - SET_EXPECT(GetContainer); - SET_EXPECT(LockContainer); - expect_LockContainer_fLock = FALSE; - hres = IOleObject_Close(oleobj, OLECLOSE_NOSAVE); - ok(hres == S_OK, "Close failed: %08lx\n", hres); - CHECK_CALLED(GetContainer); - CHECK_CALLED(LockContainer); + hres = IUnknown_QueryInterface(unk, &IID_IOleObject, (void**)&oleobj); + ok(hres == S_OK, "QueryInterface(IID_IOleObject) failed: %08lx\n", hres); + if(FAILED(hres)) + return hres;
- if(view) - IOleDocumentView_Release(view); + hres = IOleObject_GetUserClassID(oleobj, NULL); + ok(hres == E_INVALIDARG, "GetUserClassID returned: %08lx, expected E_INVALIDARG\n", hres);
- /* Activate HTMLDocument again */ - last_hwnd = hwnd; + hres = IOleObject_GetUserClassID(oleobj, &guid); + ok(hres == S_OK, "GetUserClassID failed: %08lx\n", hres); + ok(IsEqualGUID(&guid, &CLSID_HTMLDocument), "guid != CLSID_HTMLDocument\n");
- hres = IOleObject_GetClientSite(oleobj, &clientsite); - ok(clientsite == &ClientSite, "clientsite=%p, expected %p\n", clientsite, &ClientSite); + test_ClientSite(oleobj, flags); + test_InPlaceDeactivate(unk, FALSE);
- hres = IOleObject_SetClientSite(oleobj, NULL); - ok(hres == S_OK, "SetClientSite failed: %08lx\n", hres); + hres = test_DoVerb(oleobj);
- hres = IOleObject_GetClientSite(oleobj, &clientsite); - ok(hres == S_OK, "GetClientSite failed: %08lx\n", hres); - ok(clientsite == NULL, "GetClientSite() = %p, expected NULL\n", clientsite); + IOleObject_Release(oleobj); + return hres; +}
- SET_EXPECT(GetHostInfo); - SET_EXPECT(GetWindow); - hres = IOleObject_SetClientSite(oleobj, &ClientSite); - ok(hres == S_OK, "SetClientSite failed: %08lx\n", hres); - CHECK_CALLED(GetHostInfo); - CHECK_CALLED(GetWindow); +static void test_Window(IUnknown *unk, BOOL expect_success) +{ + IOleInPlaceActiveObject *activeobject = NULL; + HWND tmp_hwnd; + HRESULT hres;
- if(windowlessobj) { - hres = IOleInPlaceObjectWindowless_InPlaceDeactivate(windowlessobj); - ok(hres == S_OK, "InPlaceDeactivate failed: %08lx\n", hres); - } + hres = IOleDocumentView_QueryInterface(view, &IID_IOleInPlaceActiveObject, (void**)&activeobject); + ok(hres == S_OK, "Could not get IOleInPlaceActiveObject interface: %08lx\n", hres); + if(FAILED(hres)) + return;
- SET_EXPECT(GetContainer); - SET_EXPECT(LockContainer); - SET_EXPECT(ActivateMe); - expect_LockContainer_fLock = TRUE; - hres = IOleObject_DoVerb(oleobj, OLEIVERB_SHOW, NULL, &ClientSite, -1, container_hwnd, &rect); - ok(hres == S_OK, "DoVerb failed: %08lx\n", hres); - CHECK_CALLED(GetContainer); - CHECK_CALLED(LockContainer); - CHECK_CALLED(ActivateMe); - } + hres = IOleInPlaceActiveObject_GetWindow(activeobject, &tmp_hwnd);
- if(activeobject) { - HWND tmp_hwnd; - hres = IOleInPlaceActiveObject_GetWindow(activeobject, &tmp_hwnd); + if(expect_success) { ok(hres == S_OK, "GetWindow failed: %08lx\n", hres); ok(tmp_hwnd == hwnd, "tmp_hwnd=%p, expected %p\n", tmp_hwnd, hwnd); + }else { + ok(hres == E_FAIL, "GetWindow returned %08lx, expected E_FAIL\n", hres); + ok(IsWindow(hwnd), "hwnd is destroyed\n"); }
- if(cmdtrg) - test_OleCommandTarget(cmdtrg); - - if(view) { - SET_EXPECT(SetActiveObject); - SET_EXPECT(HideUI); - SET_EXPECT(OnUIDeactivate); - expect_SetActiveObject_active = FALSE; - hres = IOleDocumentView_UIActivate(view, FALSE); - ok(hres == S_OK, "UIActivate failed: %08lx\n", hres); - CHECK_CALLED(SetActiveObject); - CHECK_CALLED(HideUI); - CHECK_CALLED(OnUIDeactivate); - } - - if(windowlessobj) { - SET_EXPECT(OnInPlaceDeactivate); - hres = IOleInPlaceObjectWindowless_InPlaceDeactivate(windowlessobj); - ok(hres == S_OK, "InPlaceDeactivate failed: %08lx\n", hres); - CHECK_CALLED(OnInPlaceDeactivate); - } + IOleInPlaceActiveObject_Release(activeobject); +}
- if(oleobj) { - SET_EXPECT(GetContainer); - SET_EXPECT(LockContainer); - expect_LockContainer_fLock = FALSE; - hres = IOleObject_Close(oleobj, OLECLOSE_NOSAVE); - ok(hres == S_OK, "Close failed: %08lx\n", hres); - CHECK_CALLED(GetContainer); - CHECK_CALLED(LockContainer); +static void test_CloseView(void) +{ + IOleInPlaceSite *inplacesite = (IOleInPlaceSite*)0xff00ff00; + HRESULT hres;
- if(view) - IOleDocumentView_Release(view); + if(!view) + return;
- hres = IOleObject_GetClientSite(oleobj, &clientsite); - ok(clientsite == &ClientSite, "clientsite=%p, expected %p\n", clientsite, &ClientSite); + hres = IOleDocumentView_Show(view, FALSE); + ok(hres == S_OK, "Show failed: %08lx\n", hres);
- hres = IOleObject_SetClientSite(oleobj, NULL); - ok(hres == S_OK, "SetClientSite failed: %08lx\n", hres); + hres = IOleDocumentView_CloseView(view, 0); + ok(hres == S_OK, "CloseView failed: %08lx\n", hres);
- hres = IOleObject_GetClientSite(oleobj, &clientsite); - ok(hres == S_OK, "GetClientSite failed: %08lx\n", hres); - ok(clientsite == NULL, "GetClientSite() = %p, expected NULL\n", clientsite); + hres = IOleDocumentView_SetInPlaceSite(view, NULL); + ok(hres == S_OK, "SetInPlaceSite failed: %08lx\n", hres);
- SET_EXPECT(GetHostInfo); - SET_EXPECT(GetWindow); - hres = IOleObject_SetClientSite(oleobj, &ClientSite); - ok(hres == S_OK, "SetClientSite failed: %08lx\n", hres); - CHECK_CALLED(GetHostInfo); - CHECK_CALLED(GetWindow); + hres = IOleDocumentView_GetInPlaceSite(view, &inplacesite); + ok(hres == S_OK, "SetInPlaceSite failed: %08lx\n", hres); + ok(inplacesite == NULL, "inplacesite=%p, expected NULL\n", inplacesite); +}
- /* Activate HTMLDocument again, this time without UIActivate */ - last_hwnd = hwnd; - call_UIActivate = FALSE; - - SET_EXPECT(GetContainer); - SET_EXPECT(LockContainer); - SET_EXPECT(ActivateMe); - expect_LockContainer_fLock = TRUE; - hres = IOleObject_DoVerb(oleobj, OLEIVERB_SHOW, NULL, &ClientSite, -1, container_hwnd, &rect); - ok(hres == S_OK, "DoVerb failed: %08lx\n", hres); - CHECK_CALLED(GetContainer); - CHECK_CALLED(LockContainer); - CHECK_CALLED(ActivateMe); - } +static void test_UIDeactivate(void) +{ + HRESULT hres;
- if(activeobject) { - HWND tmp_hwnd; - hres = IOleInPlaceActiveObject_GetWindow(activeobject, &tmp_hwnd); - ok(hres == S_OK, "GetWindow failed: %08lx\n", hres); - ok(tmp_hwnd == hwnd, "tmp_hwnd=%p, expected %p\n", tmp_hwnd, hwnd); + if(call_UIActivate) { + SET_EXPECT(SetActiveObject); + SET_EXPECT(HideUI); + SET_EXPECT(OnUIDeactivate); }
- if(view) { - expect_SetActiveObject_active = FALSE; - hres = IOleDocumentView_UIActivate(view, FALSE); - ok(hres == S_OK, "UIActivate failed: %08lx\n", hres); - } + expect_SetActiveObject_active = FALSE; + hres = IOleDocumentView_UIActivate(view, FALSE); + ok(hres == S_OK, "UIActivate failed: %08lx\n", hres);
- if(windowlessobj) { - SET_EXPECT(OnInPlaceDeactivate); - hres = IOleInPlaceObjectWindowless_InPlaceDeactivate(windowlessobj); - ok(hres == S_OK, "InPlaceDeactivate failed: %08lx\n", hres); - CHECK_CALLED(OnInPlaceDeactivate); + if(call_UIActivate) { + CHECK_CALLED(SetActiveObject); + CHECK_CALLED(HideUI); + CHECK_CALLED(OnUIDeactivate); } +}
- if(view) { - IOleInPlaceSite *inplacesite = (IOleInPlaceSite*)0xff00ff00; - - hres = IOleDocumentView_Show(view, FALSE); - ok(hres == S_OK, "Show failed: %08lx\n", hres); +static void test_Hide(void) +{ + HRESULT hres;
- hres = IOleDocumentView_CloseView(view, 0); - ok(hres == S_OK, "CloseView failed: %08lx\n", hres); + if(!view) + return;
- hres = IOleDocumentView_SetInPlaceSite(view, NULL); - ok(hres == S_OK, "SetInPlaceSite failed: %08lx\n", hres); + hres = IOleDocumentView_Show(view, FALSE); + ok(hres == S_OK, "Show failed: %08lx\n", hres); +}
- hres = IOleDocumentView_GetInPlaceSite(view, &inplacesite); - ok(hres == S_OK, "SetInPlaceSite failed: %08lx\n", hres); - ok(inplacesite == NULL, "inplacesite=%p, expected NULL\n", inplacesite); - } +static void test_HTMLDocument(void) +{ + IUnknown *unk; + HRESULT hres; + ULONG ref;
- if(view) { - IOleInPlaceSite *inplacesite = (IOleInPlaceSite*)0xff00ff00; + hres = CoCreateInstance(&CLSID_HTMLDocument, NULL, CLSCTX_INPROC_SERVER|CLSCTX_INPROC_HANDLER, + &IID_IUnknown, (void**)&unk); + ok(hres == S_OK, "CoCreateInstance failed: %08lx\n", hres); + if(FAILED(hres)) + return;
- hres = IOleDocumentView_Show(view, FALSE); - ok(hres == S_OK, "Show failed: %08lx\n", hres); + test_Persist(unk);
- hres = IOleDocumentView_CloseView(view, 0); - ok(hres == S_OK, "CloseVire failed: %08lx\n", hres); + hres = test_Activate(unk, CLIENTSITE_EXPECTPATH); + if(FAILED(hres)) { + IUnknown_Release(unk); + return; + }
- hres = IOleDocumentView_SetInPlaceSite(view, NULL); - ok(hres == S_OK, "SetInPlaceSite failed: %08lx\n", hres); - - hres = IOleDocumentView_GetInPlaceSite(view, &inplacesite); - ok(hres == S_OK, "SetInPlaceSite failed: %08lx\n", hres); - ok(inplacesite == NULL, "inplacesite=%p, expected NULL\n", inplacesite); - - SET_EXPECT(GetContainer); - SET_EXPECT(LockContainer); - expect_LockContainer_fLock = FALSE; - hres = IOleObject_Close(oleobj, OLECLOSE_NOSAVE); - ok(hres == S_OK, "Close failed: %08lx\n", hres); - CHECK_CALLED(GetContainer); - CHECK_CALLED(LockContainer); + test_OleCommandTarget_fail(unk); + test_OleCommandTarget(unk); + test_Window(unk, TRUE); + test_UIDeactivate(); + test_OleCommandTarget(unk); + test_Window(unk, TRUE); + test_InPlaceDeactivate(unk, TRUE);
- hres = IOleObject_GetClientSite(oleobj, &clientsite); - ok(clientsite == &ClientSite, "clientsite=%p, expected %p\n", clientsite, &ClientSite); + /* Calling test_OleCommandTarget here couses Segmentation Fault with native + * MSHTML. It doesn't with Wine. */
- hres = IOleObject_SetClientSite(oleobj, NULL); - ok(hres == S_OK, "SetClientSite failed: %08lx\n", hres); - } + test_Window(unk, FALSE); + test_Hide(); + test_InPlaceDeactivate(unk, FALSE); + test_CloseView(); + test_Close(unk, FALSE); + + /* Activate HTMLDocument again */ + test_Activate(unk, CLIENTSITE_SETNULL); + test_Window(unk, TRUE); + test_OleCommandTarget(unk); + test_UIDeactivate(); + test_InPlaceDeactivate(unk, TRUE); + test_Close(unk, FALSE); + + /* Activate HTMLDocument again, this time without UIActivate */ + call_UIActivate = FALSE; + test_Activate(unk, CLIENTSITE_SETNULL); + test_Window(unk, TRUE); + test_UIDeactivate(); + test_InPlaceDeactivate(unk, TRUE); + test_CloseView(); + test_CloseView(); + test_Close(unk, TRUE);
- if(cmdtrg) - IOleCommandTarget_Release(cmdtrg); - if(windowlessobj) - IOleInPlaceObjectWindowless_Release(windowlessobj); - if(oleobj) - IOleObject_Release(oleobj); if(view) IOleDocumentView_Release(view); - if(activeobject) - IOleInPlaceActiveObject_Release(activeobject); + view = NULL;
ok(IsWindow(hwnd), "hwnd is destroyed\n");
- ref = IUnknown_Release(htmldoc_unk); + ref = IUnknown_Release(unk); ok(ref == 0, "ref=%ld, expected 0\n", ref);
ok(!IsWindow(hwnd), "hwnd is not destroyed\n");
- DestroyWindow(container_hwnd); }
START_TEST(htmldoc) { CoInitialize(NULL); + container_hwnd = create_container_window();
test_HTMLDocument();
+ DestroyWindow(container_hwnd); CoUninitialize(); }