MSHTML: Added test of IPersistMoniker::Load
Jacek Caban
jack at itma.pwr.wroc.pl
Thu Aug 25 09:10:26 CDT 2005
Alexandre Julliard wrote:
>Jacek Caban <jack at itma.pwr.wroc.pl> writes:
>
>
>
>>I forgot about diff of Makefile.in.
>>
>>Changelog:
>> - Added test of IPersistMoniker::Load
>> - Fix Wine to pass the test
>>
>>
>
>OK now I see the problem I was having, the test runs ok once but fails
>the second time with:
>
>htmldoc.c:1077: Test failed: Load failed: 80070050
>
>That's apparently because the file already exists in the cache. Could
>you please have a look at that?
>
>
>
I couldn't reproduce it. Although I get fixme:
fixme:wininet:CommitUrlCacheEntryInternal entry already in cache - don't
know what to do!
the test doesn't fail, doesn't matter how many time I run it.
I've disabled this test.
-------------- next part --------------
? dlls/mshtml/.persist.c.swp
Index: dlls/mshtml/persist.c
===================================================================
RCS file: /home/wine/wine/dlls/mshtml/persist.c,v
retrieving revision 1.10
diff -u -p -r1.10 persist.c
--- dlls/mshtml/persist.c 22 Aug 2005 09:23:14 -0000 1.10
+++ dlls/mshtml/persist.c 25 Aug 2005 12:06:12 -0000
@@ -29,6 +29,7 @@
#include "winbase.h"
#include "winuser.h"
#include "ole2.h"
+#include "shlguid.h"
#include "wine/debug.h"
@@ -295,7 +296,7 @@ static HRESULT WINAPI PersistMoniker_Loa
HRESULT hres;
nsresult nsres;
- FIXME("(%p)->(%x %p %p %08lx)\n", This, fFullyAvailable, pimkName, pibc, grfMode);
+ TRACE("(%p)->(%x %p %p %08lx)\n", This, fFullyAvailable, pimkName, pibc, grfMode);
if(pibc) {
IUnknown *unk = NULL;
@@ -330,6 +331,8 @@ static HRESULT WINAPI PersistMoniker_Loa
IUnknown_Release(unk);
}
}
+
+ HTMLDocument_LockContainer(This, TRUE);
hres = IMoniker_GetDisplayName(pimkName, pibc, NULL, &url);
if(FAILED(hres)) {
@@ -338,6 +341,20 @@ static HRESULT WINAPI PersistMoniker_Loa
}
TRACE("got url: %s\n", debugstr_w(url));
+
+ if(This->client) {
+ IOleCommandTarget *cmdtrg = NULL;
+
+ hres = IOleClientSite_QueryInterface(This->client, &IID_IOleCommandTarget,
+ (void**)&cmdtrg);
+ if(SUCCEEDED(hres)) {
+ VARIANT var;
+
+ V_VT(&var) = VT_I4;
+ V_I4(&var) = 0;
+ IOleCommandTarget_Exec(cmdtrg, &CGID_ShellDocView, 37, 0, &var, NULL);
+ }
+ }
if(This->nscontainer && !This->nscontainer->stream) {
/*
Index: dlls/mshtml/tests/Makefile.in
===================================================================
RCS file: /home/wine/wine/dlls/mshtml/tests/Makefile.in,v
retrieving revision 1.3
diff -u -p -r1.3 Makefile.in
--- dlls/mshtml/tests/Makefile.in 14 Jul 2005 12:18:59 -0000 1.3
+++ dlls/mshtml/tests/Makefile.in 25 Aug 2005 12:06:12 -0000
@@ -3,7 +3,7 @@ TOPOBJDIR = ../../..
SRCDIR = @srcdir@
VPATH = @srcdir@
TESTDLL = mshtml.dll
-IMPORTS = ole32 user32
+IMPORTS = ole32 user32 urlmon
EXTRALIBS = -luuid
CTESTS = \
Index: dlls/mshtml/tests/htmldoc.c
===================================================================
RCS file: /home/wine/wine/dlls/mshtml/tests/htmldoc.c,v
retrieving revision 1.11
diff -u -p -r1.11 htmldoc.c
--- dlls/mshtml/tests/htmldoc.c 22 Aug 2005 09:25:20 -0000 1.11
+++ dlls/mshtml/tests/htmldoc.c 25 Aug 2005 12:06:13 -0000
@@ -78,6 +78,7 @@ DEFINE_EXPECT(QueryStatus_OPEN);
DEFINE_EXPECT(QueryStatus_NEW);
DEFINE_EXPECT(Exec_SETPROGRESSMAX);
DEFINE_EXPECT(Exec_SETPROGRESSPOS);
+DEFINE_EXPECT(Exec_ShellDocView_37);
DEFINE_EXPECT(Invoke_AMBIENT_USERMODE);
DEFINE_EXPECT(Invoke_AMBIENT_DLCONTROL);
DEFINE_EXPECT(Invoke_AMBIENT_OFFLINEIFNOTCONNECTED);
@@ -87,6 +88,7 @@ DEFINE_EXPECT(Invoke_AMBIENT_PALETTE);
static BOOL expect_LockContainer_fLock;
static BOOL expect_SetActiveObject_active;
+static BOOL do_load = FALSE, set_clientsite = FALSE, container_locked = FALSE;
static HRESULT QueryInterface(REFIID riid, void **ppv);
@@ -873,10 +875,27 @@ static HRESULT WINAPI OleCommandTarget_E
};
}
+ if(IsEqualGUID(&CGID_ShellDocView, pguidCmdGroup)) {
+ switch(nCmdID) {
+ case 37:
+ CHECK_EXPECT(Exec_ShellDocView_37);
+ ok(pvaOut == NULL, "pvaOut=%p, expected NULL\n", pvaOut);
+ ok(pvaIn != NULL, "pvaIn == NULL\n");
+ if(pvaIn) {
+ ok(V_VT(pvaIn) == VT_I4, "V_VT(pvaIn)=%d, expected VT_I4\n", V_VT(pvaIn));
+ ok(V_I4(pvaIn) == 0, "V_I4(pvaIn)=%ld, expected 0\n", V_I4(pvaIn));
+ }
+ return S_OK;
+ default:
+ ok(0, "unexpected command %ld\n", nCmdID);
+ return E_FAIL;
+ };
+ }
+
if(IsEqualGUID(&CGID_Undocumented, pguidCmdGroup))
return E_FAIL; /* TODO */
- ok(0, "unexpected call");
+ ok(0, "unexpected call\n");
return E_NOTIMPL;
}
@@ -947,10 +966,10 @@ static HRESULT WINAPI Dispatch_Invoke(ID
CHECK_EXPECT2(Invoke_AMBIENT_DLCONTROL);
return E_FAIL;
case DISPID_AMBIENT_OFFLINEIFNOTCONNECTED:
- CHECK_EXPECT(Invoke_AMBIENT_OFFLINEIFNOTCONNECTED);
+ CHECK_EXPECT2(Invoke_AMBIENT_OFFLINEIFNOTCONNECTED);
return E_FAIL;
case DISPID_AMBIENT_SILENT:
- CHECK_EXPECT(Invoke_AMBIENT_SILENT);
+ CHECK_EXPECT2(Invoke_AMBIENT_SILENT);
V_VT(pVarResult) = VT_BOOL;
V_BOOL(pVarResult) = VARIANT_FALSE;
return S_OK;
@@ -1016,6 +1035,72 @@ static LRESULT WINAPI wnd_proc(HWND hwnd
return DefWindowProc(hwnd, msg, wParam, lParam);
}
+static void test_Load(IPersistMoniker *persist)
+{
+ IMoniker *mon;
+ IBindCtx *bind;
+ HRESULT hres;
+
+ static WCHAR wszClientSiteParam[] = {'{','d','4','d','b','6','8','5','0','-',
+ '5','3','8','5','-','1','1','d','0','-','8','9','e','9','-','0','0','a',
+ '0','c','9','0','a','9','0','a','c','}',0};
+ static const WCHAR wszWineHQ[] =
+ {'h','t','t','p',':','/','/','w','w','w','.','w','i','n','e','h','q','.','o','r','g','/',0};
+
+ hres = CreateURLMoniker(NULL, wszWineHQ, &mon);
+ ok(hres == S_OK, "CreateURLMoniker failed: %08lx\n", hres);
+ if(FAILED(hres))
+ return;
+
+ CreateBindCtx(0, &bind);
+ IBindCtx_RegisterObjectParam(bind, wszClientSiteParam, (IUnknown*)&ClientSite);
+
+ SET_EXPECT(GetHostInfo);
+ SET_EXPECT(GetOptionKeyPath);
+ SET_EXPECT(GetOverrideKeyPath);
+ SET_EXPECT(GetWindow);
+ SET_EXPECT(QueryStatus_SETPROGRESSTEXT);
+ SET_EXPECT(Exec_SETPROGRESSMAX);
+ SET_EXPECT(Exec_SETPROGRESSPOS);
+ SET_EXPECT(Invoke_AMBIENT_USERMODE);
+ SET_EXPECT(Invoke_AMBIENT_DLCONTROL);
+ SET_EXPECT(Invoke_AMBIENT_OFFLINEIFNOTCONNECTED);
+ SET_EXPECT(Invoke_AMBIENT_SILENT);
+ SET_EXPECT(Invoke_AMBIENT_USERAGENT);
+ SET_EXPECT(Invoke_AMBIENT_PALETTE);
+ SET_EXPECT(GetContainer);
+ SET_EXPECT(LockContainer);
+ SET_EXPECT(Exec_ShellDocView_37);
+ expect_LockContainer_fLock = TRUE;
+
+ hres = IPersistMoniker_Load(persist, FALSE, mon, bind, 0x12);
+#if 0
+ ok(hres == S_OK, "Load failed: %08lx\n", hres);
+#endif
+
+ CHECK_CALLED(GetHostInfo);
+ CHECK_CALLED(GetOptionKeyPath);
+ CHECK_CALLED(GetOverrideKeyPath);
+ CHECK_CALLED(GetWindow);
+ CHECK_CALLED(QueryStatus_SETPROGRESSTEXT);
+ CHECK_CALLED(Exec_SETPROGRESSMAX);
+ CHECK_CALLED(Exec_SETPROGRESSPOS);
+ CHECK_CALLED(Invoke_AMBIENT_USERMODE);
+ CHECK_CALLED(Invoke_AMBIENT_DLCONTROL);
+ CHECK_CALLED(Invoke_AMBIENT_OFFLINEIFNOTCONNECTED);
+ CHECK_CALLED(Invoke_AMBIENT_SILENT);
+ CHECK_CALLED(Invoke_AMBIENT_USERAGENT);
+ CHECK_CALLED(Invoke_AMBIENT_PALETTE);
+ CHECK_CALLED(GetContainer);
+ CHECK_CALLED(LockContainer);
+ CHECK_CALLED(Exec_ShellDocView_37);
+
+ set_clientsite = container_locked = TRUE;
+
+ IBindCtx_Release(bind);
+ IMoniker_Release(mon);
+}
+
static void test_Persist(IUnknown *unk)
{
IPersistMoniker *persist_mon;
@@ -1046,6 +1131,9 @@ static void test_Persist(IUnknown *unk)
ok(hres == S_OK, "GetClassID failed: %08lx\n", hres);
ok(IsEqualGUID(&CLSID_HTMLDocument, &guid), "guid != CLSID_HTMLDocument\n");
+ if(do_load)
+ test_Load(persist_mon);
+
IPersistMoniker_Release(persist_mon);
}
}
@@ -1201,18 +1289,23 @@ static HRESULT test_DoVerb(IOleObject *o
RECT rect = {0,0,500,500};
HRESULT hres;
- SET_EXPECT(GetContainer);
- SET_EXPECT(LockContainer);
+ if(!container_locked) {
+ 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);
if(FAILED(hres))
return hres;
-
ok(hres == S_OK, "DoVerb failed: %08lx\n", hres);
- CHECK_CALLED(GetContainer);
- CHECK_CALLED(LockContainer);
+
+ if(!container_locked) {
+ CHECK_CALLED(GetContainer);
+ CHECK_CALLED(LockContainer);
+ container_locked = TRUE;
+ }
CHECK_CALLED(ActivateMe);
return hres;
@@ -1233,6 +1326,8 @@ static void test_ClientSite(IOleObject *
hres = IOleObject_SetClientSite(oleobj, NULL);
ok(hres == S_OK, "SetClientSite failed: %08lx\n", hres);
+
+ set_clientsite = FALSE;
}
if(flags & CLIENTSITE_DONTSET)
@@ -1240,40 +1335,50 @@ static void test_ClientSite(IOleObject *
hres = IOleObject_GetClientSite(oleobj, &clientsite);
ok(hres == S_OK, "GetClientSite failed: %08lx\n", hres);
- ok(clientsite == NULL, "GetClientSite() = %p, expected NULL\n", clientsite);
+ ok(clientsite == (set_clientsite ? &ClientSite : NULL), "GetClientSite() = %p, expected %p\n",
+ clientsite, set_clientsite ? &ClientSite : NULL);
- SET_EXPECT(GetHostInfo);
- if(flags & CLIENTSITE_EXPECTPATH) {
- SET_EXPECT(GetOptionKeyPath);
- SET_EXPECT(GetOverrideKeyPath);
+ if(!set_clientsite) {
+ SET_EXPECT(GetHostInfo);
+ if(flags & CLIENTSITE_EXPECTPATH) {
+ SET_EXPECT(GetOptionKeyPath);
+ SET_EXPECT(GetOverrideKeyPath);
+ }
+ SET_EXPECT(GetWindow);
+ SET_EXPECT(QueryStatus_SETPROGRESSTEXT);
+ SET_EXPECT(Exec_SETPROGRESSMAX);
+ SET_EXPECT(Exec_SETPROGRESSPOS);
+ SET_EXPECT(Invoke_AMBIENT_USERMODE);
+ SET_EXPECT(Invoke_AMBIENT_DLCONTROL);
+ SET_EXPECT(Invoke_AMBIENT_OFFLINEIFNOTCONNECTED);
+ SET_EXPECT(Invoke_AMBIENT_SILENT);
+ SET_EXPECT(Invoke_AMBIENT_USERAGENT);
+ SET_EXPECT(Invoke_AMBIENT_PALETTE);
+
+ 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);
+ CHECK_CALLED(QueryStatus_SETPROGRESSTEXT);
+ CHECK_CALLED(Exec_SETPROGRESSMAX);
+ CHECK_CALLED(Exec_SETPROGRESSPOS);
+ CHECK_CALLED(Invoke_AMBIENT_USERMODE);
+ CHECK_CALLED(Invoke_AMBIENT_DLCONTROL);
+ CHECK_CALLED(Invoke_AMBIENT_OFFLINEIFNOTCONNECTED);
+ CHECK_CALLED(Invoke_AMBIENT_SILENT);
+ CHECK_CALLED(Invoke_AMBIENT_USERAGENT);
+ CHECK_CALLED(Invoke_AMBIENT_PALETTE);
+
+ set_clientsite = TRUE;
}
- SET_EXPECT(GetWindow);
- SET_EXPECT(QueryStatus_SETPROGRESSTEXT);
- SET_EXPECT(Exec_SETPROGRESSMAX);
- SET_EXPECT(Exec_SETPROGRESSPOS);
- SET_EXPECT(Invoke_AMBIENT_USERMODE);
- SET_EXPECT(Invoke_AMBIENT_DLCONTROL);
- SET_EXPECT(Invoke_AMBIENT_OFFLINEIFNOTCONNECTED);
- SET_EXPECT(Invoke_AMBIENT_SILENT);
- SET_EXPECT(Invoke_AMBIENT_USERAGENT);
- SET_EXPECT(Invoke_AMBIENT_PALETTE);
+
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);
- CHECK_CALLED(QueryStatus_SETPROGRESSTEXT);
- CHECK_CALLED(Exec_SETPROGRESSMAX);
- CHECK_CALLED(Exec_SETPROGRESSPOS);
- CHECK_CALLED(Invoke_AMBIENT_USERMODE);
- CHECK_CALLED(Invoke_AMBIENT_DLCONTROL);
- CHECK_CALLED(Invoke_AMBIENT_OFFLINEIFNOTCONNECTED);
- CHECK_CALLED(Invoke_AMBIENT_SILENT);
- CHECK_CALLED(Invoke_AMBIENT_USERAGENT);
- CHECK_CALLED(Invoke_AMBIENT_PALETTE);
hres = IOleObject_GetClientSite(oleobj, &clientsite);
ok(hres == S_OK, "GetClientSite failed: %08lx\n", hres);
@@ -1362,6 +1467,7 @@ static void test_Close(IUnknown *unk, BO
ok(hres == S_OK, "Close failed: %08lx\n", hres);
CHECK_CALLED(GetContainer);
CHECK_CALLED(LockContainer);
+ container_locked = FALSE;
if(set_client)
test_ClientSite(oleobj, CLIENTSITE_SETNULL|CLIENTSITE_DONTSET);
@@ -1505,6 +1611,8 @@ static void test_HTMLDocument(void)
HRESULT hres;
ULONG ref;
+ hwnd = last_hwnd = NULL;
+
hres = CoCreateInstance(&CLSID_HTMLDocument, NULL, CLSCTX_INPROC_SERVER|CLSCTX_INPROC_HANDLER,
&IID_IUnknown, (void**)&unk);
ok(hres == S_OK, "CoCreateInstance failed: %08lx\n", hres);
@@ -1512,8 +1620,9 @@ static void test_HTMLDocument(void)
return;
test_Persist(unk);
+ if(!do_load)
+ test_OnAmbientPropertyChange2(unk);
- test_OnAmbientPropertyChange2(unk);
hres = test_Activate(unk, CLIENTSITE_EXPECTPATH);
if(FAILED(hres)) {
IUnknown_Release(unk);
@@ -1575,6 +1684,9 @@ START_TEST(htmldoc)
CoInitialize(NULL);
container_hwnd = create_container_window();
+ do_load = FALSE;
+ test_HTMLDocument();
+ do_load = TRUE;
test_HTMLDocument();
DestroyWindow(container_hwnd);
More information about the wine-patches
mailing list