sync mshtml and shdocvw winetests with wine 1.1.14

svn path=/trunk/; revision=39390
This commit is contained in:
Christoph von Wittich 2009-02-04 14:36:08 +00:00
parent cc12355d0e
commit 43eb75a9e4
12 changed files with 5053 additions and 142 deletions

View file

@ -25,6 +25,7 @@
#include "windef.h"
#include "winbase.h"
#include "initguid.h"
#include "ole2.h"
#include "mshtml.h"
#include "docobj.h"
@ -36,7 +37,8 @@
#include "idispids.h"
#include "shlguid.h"
#include "initguid.h"
DEFINE_GUID(GUID_NULL,0,0,0,0,0,0,0,0,0,0,0);
DEFINE_GUID(IID_IProxyManager,0x00000008,0x0000,0x0000,0xc0,0x00,0x00,0x00,0x00,0x00,0x00,0x46);
DEFINE_OLEGUID(CGID_DocHostCmdPriv, 0x000214D4L, 0, 0);
#define DEFINE_EXPECT(func) \
@ -136,6 +138,10 @@ DEFINE_EXPECT(RequestUIActivate);
DEFINE_EXPECT(InPlaceFrame_SetBorderSpace);
DEFINE_EXPECT(InPlaceUIWindow_SetActiveObject);
DEFINE_EXPECT(GetExternal);
DEFINE_EXPECT(EnableModeless_TRUE);
DEFINE_EXPECT(EnableModeless_FALSE);
DEFINE_EXPECT(Frame_EnableModeless_TRUE);
DEFINE_EXPECT(Frame_EnableModeless_FALSE);
static IUnknown *doc_unk;
static BOOL expect_LockContainer_fLock;
@ -143,7 +149,7 @@ static BOOL expect_InPlaceUIWindow_SetActiveObject_active = TRUE;
static BOOL ipsex;
static BOOL set_clientsite = FALSE, container_locked = FALSE;
static BOOL readystate_set_loading = FALSE, load_from_stream;
static BOOL editmode = FALSE;
static BOOL editmode = FALSE, show_failed;
static int stream_read, protocol_read;
static enum load_state_t {
LD_DOLOAD,
@ -649,11 +655,13 @@ static HRESULT WINAPI PropertyNotifySink_OnChanged(IPropertyNotifySink *iface, D
readystate_set_loading = FALSE;
load_state = LD_LOADING;
}
test_readyState(NULL);
if(!editmode || load_state != LD_LOADING || !called_Exec_Explorer_69)
test_readyState(NULL);
return S_OK;
case 1005:
CHECK_EXPECT(OnChanged_1005);
test_readyState(NULL);
if(!editmode)
test_readyState(NULL);
load_state = LD_INTERACTIVE;
return S_OK;
}
@ -1007,8 +1015,10 @@ static HRESULT WINAPI Moniker_BindToStorage(IMoniker *iface, IBindCtx *pbc, IMon
BINDSTATUS_ENDDOWNLOADDATA, NULL);
ok(hres == S_OK, "OnProgress(BINDSTATUS_ENDDOWNLOADDATA) failed: %08x\n", hres);
SET_EXPECT(GetBindResult);
hres = IBindStatusCallback_OnStopBinding(callback, S_OK, NULL);
ok(hres == S_OK, "OnStopBinding failed: %08x\n", hres);
SET_CALLED(GetBindResult); /* IE7 */
IBindStatusCallback_Release(callback);
@ -1304,7 +1314,10 @@ static HRESULT WINAPI InPlaceFrame_SetStatusText(IOleInPlaceFrame *iface, LPCOLE
static HRESULT WINAPI InPlaceFrame_EnableModeless(IOleInPlaceFrame *iface, BOOL fEnable)
{
ok(0, "unexpected call\n");
if(fEnable)
CHECK_EXPECT(Frame_EnableModeless_TRUE);
else
CHECK_EXPECT(Frame_EnableModeless_FALSE);
return E_NOTIMPL;
}
@ -1664,11 +1677,6 @@ static HRESULT WINAPI DocumentSite_ActivateMe(IOleDocumentSite *iface, IOleDocum
expect_status_text = NULL;
hres = IOleDocumentView_UIActivate(view, TRUE);
if(FAILED(hres)) {
skip("UIActivate failed: %08x\n", hres);
return hres;
}
ok(hres == S_OK, "UIActivate failed: %08x\n", hres);
CHECK_CALLED(CanInPlaceActivate);
@ -1724,6 +1732,14 @@ static HRESULT WINAPI DocumentSite_ActivateMe(IOleDocumentSite *iface, IOleDocum
expect_status_text = (load_state == LD_COMPLETE ? (LPCOLESTR)0xdeadbeef : NULL);
hres = IOleDocumentView_Show(view, TRUE);
if(FAILED(hres)) {
win_skip("Show failed\n");
if(activeobj)
IOleInPlaceActiveObject_Release(activeobj);
IOleDocument_Release(document);
show_failed = TRUE;
return S_OK;
}
ok(hres == S_OK, "Show failed: %08x\n", hres);
CHECK_CALLED(CanInPlaceActivate);
@ -1918,7 +1934,10 @@ static HRESULT WINAPI DocHostUIHandler_UpdateUI(IDocHostUIHandler2 *iface)
static HRESULT WINAPI DocHostUIHandler_EnableModeless(IDocHostUIHandler2 *iface, BOOL fEnable)
{
ok(0, "unexpected call\n");
if(fEnable)
CHECK_EXPECT(EnableModeless_TRUE);
else
CHECK_EXPECT(EnableModeless_FALSE);
return E_NOTIMPL;
}
@ -2635,6 +2654,7 @@ static void test_Load(IPersistMoniker *persist)
}
SET_EXPECT(OnChanged_READYSTATE);
SET_EXPECT(Exec_ShellDocView_84);
SET_EXPECT(IsSystemMoniker);
SET_EXPECT(BindToStorage);
SET_EXPECT(SetActiveObject);
if(set_clientsite) {
@ -2672,6 +2692,7 @@ static void test_Load(IPersistMoniker *persist)
container_locked = TRUE;
}
CHECK_CALLED(OnChanged_READYSTATE);
SET_CALLED(IsSystemMoniker); /* IE7 */
SET_CALLED(Exec_ShellDocView_84);
CHECK_CALLED(BindToStorage);
SET_CALLED(SetActiveObject); /* FIXME */
@ -2719,6 +2740,10 @@ static void test_download(BOOL verb_done, BOOL css_dwl, BOOL css_try_dwl)
SET_EXPECT(UnlockRequest);
}
SET_EXPECT(Exec_Explorer_69);
SET_EXPECT(EnableModeless_TRUE); /* IE7 */
SET_EXPECT(Frame_EnableModeless_TRUE); /* IE7 */
SET_EXPECT(EnableModeless_FALSE); /* IE7 */
SET_EXPECT(Frame_EnableModeless_FALSE); /* IE7 */
SET_EXPECT(OnChanged_1005);
SET_EXPECT(OnChanged_READYSTATE);
SET_EXPECT(Exec_SETPROGRESSPOS);
@ -2726,6 +2751,7 @@ static void test_download(BOOL verb_done, BOOL css_dwl, BOOL css_try_dwl)
SET_EXPECT(Exec_ShellDocView_103);
SET_EXPECT(Exec_MSHTML_PARSECOMPLETE);
SET_EXPECT(Exec_HTTPEQUIV_DONE);
SET_EXPECT(SetStatusText);
expect_status_text = (LPWSTR)0xdeadbeef; /* TODO */
while(!called_Exec_HTTPEQUIV_DONE && GetMessage(&msg, NULL, 0, 0)) {
@ -2766,6 +2792,10 @@ static void test_download(BOOL verb_done, BOOL css_dwl, BOOL css_try_dwl)
}
}
SET_CALLED(Exec_Explorer_69);
SET_CALLED(EnableModeless_TRUE); /* IE7 */
SET_CALLED(Frame_EnableModeless_TRUE); /* IE7 */
SET_CALLED(EnableModeless_FALSE); /* IE7 */
SET_CALLED(Frame_EnableModeless_FALSE); /* IE7 */
CHECK_CALLED(OnChanged_1005);
CHECK_CALLED(OnChanged_READYSTATE);
CHECK_CALLED(Exec_SETPROGRESSPOS);
@ -2773,6 +2803,7 @@ static void test_download(BOOL verb_done, BOOL css_dwl, BOOL css_try_dwl)
SET_CALLED(Exec_ShellDocView_103);
CHECK_CALLED(Exec_MSHTML_PARSECOMPLETE);
CHECK_CALLED(Exec_HTTPEQUIV_DONE);
SET_CALLED(SetStatusText);
load_state = LD_COMPLETE;
@ -3044,6 +3075,7 @@ static void test_exec_editmode(IUnknown *unk, BOOL loaded)
SET_EXPECT(Invoke_AMBIENT_SILENT);
SET_EXPECT(Invoke_AMBIENT_OFFLINEIFNOTCONNECTED);
SET_EXPECT(OnChanged_READYSTATE);
SET_EXPECT(IsSystemMoniker);
SET_EXPECT(Exec_ShellDocView_84);
if(loaded)
SET_EXPECT(BindToStorage);
@ -3069,6 +3101,7 @@ static void test_exec_editmode(IUnknown *unk, BOOL loaded)
CHECK_CALLED(Invoke_AMBIENT_SILENT);
CHECK_CALLED(Invoke_AMBIENT_OFFLINEIFNOTCONNECTED);
CHECK_CALLED(OnChanged_READYSTATE);
SET_CALLED(IsSystemMoniker); /* IE7 */
SET_CALLED(Exec_ShellDocView_84);
if(loaded)
CHECK_CALLED(BindToStorage);
@ -3199,7 +3232,7 @@ static HWND create_container_window(void)
515, 530, NULL, NULL, NULL, NULL);
}
static HRESULT test_DoVerb(IOleObject *oleobj)
static void test_DoVerb(IOleObject *oleobj)
{
RECT rect = {0,0,500,500};
HRESULT hres;
@ -3212,8 +3245,6 @@ static HRESULT test_DoVerb(IOleObject *oleobj)
expect_LockContainer_fLock = TRUE;
hres = IOleObject_DoVerb(oleobj, OLEIVERB_SHOW, NULL, &ClientSite, -1, container_hwnd, &rect);
if(FAILED(hres))
return hres;
ok(hres == S_OK, "DoVerb failed: %08x\n", hres);
if(!container_locked) {
@ -3222,8 +3253,6 @@ static HRESULT test_DoVerb(IOleObject *oleobj)
container_locked = TRUE;
}
CHECK_CALLED(ActivateMe);
return hres;
}
#define CLIENTSITE_EXPECTPATH 0x00000001
@ -3465,7 +3494,7 @@ static void test_InPlaceDeactivate(IUnknown *unk, BOOL expect_call)
IOleInPlaceObjectWindowless_Release(windowlessobj);
}
static HRESULT test_Activate(IUnknown *unk, DWORD flags)
static void test_Activate(IUnknown *unk, DWORD flags)
{
IOleObject *oleobj = NULL;
IOleDocumentView *docview;
@ -3480,8 +3509,6 @@ static HRESULT test_Activate(IUnknown *unk, DWORD flags)
hres = IUnknown_QueryInterface(unk, &IID_IOleObject, (void**)&oleobj);
ok(hres == S_OK, "QueryInterface(IID_IOleObject) failed: %08x\n", hres);
if(FAILED(hres))
return hres;
hres = IOleObject_GetUserClassID(oleobj, NULL);
ok(hres == E_INVALIDARG, "GetUserClassID returned: %08x, expected E_INVALIDARG\n", hres);
@ -3494,8 +3521,7 @@ static HRESULT test_Activate(IUnknown *unk, DWORD flags)
test_ClientSite(oleobj, flags);
test_InPlaceDeactivate(unk, FALSE);
hres = test_DoVerb(oleobj);
test_DoVerb(oleobj);
if(call_UIActivate == CallUIActivate_AfterShow) {
hres = IOleObject_QueryInterface(oleobj, &IID_IOleDocumentView, (void **)&docview);
@ -3523,8 +3549,6 @@ static HRESULT test_Activate(IUnknown *unk, DWORD flags)
IOleObject_Release(oleobj);
test_OnFrameWindowActivate(unk);
return hres;
}
static void test_Window(IUnknown *unk, BOOL expect_success)
@ -3612,9 +3636,23 @@ static void test_Hide(void)
static HRESULT create_document(IUnknown **unk)
{
HRESULT hres = CoCreateInstance(&CLSID_HTMLDocument, NULL, CLSCTX_INPROC_SERVER|CLSCTX_INPROC_HANDLER,
IHTMLDocument5 *doc5;
HRESULT hres;
hres = CoCreateInstance(&CLSID_HTMLDocument, NULL, CLSCTX_INPROC_SERVER|CLSCTX_INPROC_HANDLER,
&IID_IUnknown, (void**)unk);
ok(hres == S_OK, "CoCreateInstance failed: %08x\n", hres);
if(FAILED(hres))
return hres;
hres = IUnknown_QueryInterface(*unk, &IID_IHTMLDocument5, (void**)&doc5);
if(SUCCEEDED(hres)) {
IHTMLDocument5_Release(doc5);
}else {
win_skip("Could not get IHTMLDocument5, probably too old IE\n");
IUnknown_Release(*unk);
}
return hres;
}
@ -3707,27 +3745,32 @@ static void test_QueryInterface(IUnknown *unk)
qi = (void*)0xdeadbeef;
hres = IUnknown_QueryInterface(unk, &IID_IRunnableObject, (void**)&qi);
ok(hres == E_NOINTERFACE, "QueryInterface returned %08x, expected E_NOINTERFACE\n", hres);
ok(qi == NULL, "qirunnable=%p, ezpected NULL\n", qi);
ok(qi == NULL, "qirunnable=%p, expected NULL\n", qi);
qi = (void*)0xdeadbeef;
hres = IUnknown_QueryInterface(unk, &IID_IHTMLDOMNode, (void**)&qi);
ok(hres == E_NOINTERFACE, "QueryInterface returned %08x, expected E_NOINTERFACE\n", hres);
ok(qi == NULL, "qi=%p, ezpected NULL\n", qi);
ok(qi == NULL, "qi=%p, expected NULL\n", qi);
qi = (void*)0xdeadbeef;
hres = IUnknown_QueryInterface(unk, &IID_IHTMLDOMNode2, (void**)&qi);
ok(hres == E_NOINTERFACE, "QueryInterface returned %08x, expected E_NOINTERFACE\n", hres);
ok(qi == NULL, "qi=%p, ezpected NULL\n", qi);
ok(qi == NULL, "qi=%p, expected NULL\n", qi);
qi = (void*)0xdeadbeef;
hres = IUnknown_QueryInterface(unk, &IID_IPersistPropertyBag, (void**)&qi);
ok(hres == E_NOINTERFACE, "QueryInterface returned %08x, expected E_NOINTERFACE\n", hres);
ok(qi == NULL, "qi=%p, ezpected NULL\n", qi);
ok(qi == NULL, "qi=%p, expected NULL\n", qi);
qi = (void*)0xdeadbeef;
hres = IUnknown_QueryInterface(unk, &IID_UndocumentedScriptIface, (void**)&qi);
ok(hres == E_NOINTERFACE, "QueryInterface returned %08x, expected E_NOINTERFACE\n", hres);
ok(qi == NULL, "qi=%p, ezpected NULL\n", qi);
ok(qi == NULL, "qi=%p, expected NULL\n", qi);
qi = (void*)0xdeadbeef;
hres = IUnknown_QueryInterface(unk, &IID_IMarshal, (void**)&qi);
ok(hres == E_NOINTERFACE, "QueryInterface returned %08x, expected E_NOINTERFACE\n", hres);
ok(qi == NULL, "qi=%p, expected NULL\n", qi);
}
static void init_test(enum load_state_t ls) {
@ -3768,11 +3811,7 @@ static void test_HTMLDocument(BOOL do_load)
if(!do_load)
test_OnAmbientPropertyChange2(unk);
hres = test_Activate(unk, CLIENTSITE_EXPECTPATH);
if(FAILED(hres)) {
IUnknown_Release(unk);
return;
}
test_Activate(unk, CLIENTSITE_EXPECTPATH);
if(do_load) {
test_download(FALSE, TRUE, TRUE);
@ -3865,6 +3904,10 @@ static void test_HTMLDocument_hlink(void)
test_GetCurMoniker(unk, NULL, NULL);
test_Persist(unk);
test_Navigate(unk);
if(show_failed) {
IUnknown_Release(unk);
return;
}
test_download(FALSE, TRUE, TRUE);
@ -3999,7 +4042,11 @@ static void test_editing_mode(BOOL do_load)
test_MSHTML_QueryStatus(unk, OLECMDF_SUPPORTED);
test_download(TRUE, do_load, do_load);
SET_EXPECT(SetStatusText); /* ignore race in native mshtml */
test_timer(EXPECT_UPDATEUI);
SET_CALLED(SetStatusText);
test_MSHTML_QueryStatus(unk, OLECMDF_SUPPORTED|OLECMDF_ENABLED);
if(!do_load) {
@ -4088,6 +4135,31 @@ static void gecko_installer_workaround(BOOL disable)
RegCloseKey(hkey);
}
static void test_HTMLDoc_ISupportErrorInfo(void)
{
HRESULT hres;
IUnknown *unk;
ISupportErrorInfo *sinfo;
LONG ref;
hres = create_document(&unk);
if(FAILED(hres))
return;
hres = IUnknown_QueryInterface(unk, &IID_ISupportErrorInfo, (void**)&sinfo);
ok(hres == S_OK, "got %x\n", hres);
ok(sinfo != NULL, "got %p\n", sinfo);
if(sinfo)
{
hres = ISupportErrorInfo_InterfaceSupportsErrorInfo(sinfo, &IID_IErrorInfo);
ok(hres == S_FALSE, "Expected S_OK, got %x\n", hres);
IUnknown_Release(sinfo);
}
ref = IUnknown_Release(unk);
ok(ref == 0, "ref=%d, expected 0\n", ref);
}
START_TEST(htmldoc)
{
gecko_installer_workaround(TRUE);
@ -4096,12 +4168,15 @@ START_TEST(htmldoc)
container_hwnd = create_container_window();
register_protocol();
test_HTMLDocument(FALSE);
test_HTMLDocument(TRUE);
test_HTMLDocument_hlink();
test_HTMLDocument_StreamLoad();
test_editing_mode(FALSE);
test_editing_mode(TRUE);
if(!show_failed) {
test_HTMLDocument(FALSE);
test_HTMLDocument(TRUE);
test_HTMLDocument_StreamLoad();
test_editing_mode(FALSE);
test_editing_mode(TRUE);
}
test_HTMLDoc_ISupportErrorInfo();
DestroyWindow(container_hwnd);
CoUninitialize();