URLMON: Added CreateAsyncBindCtxEx implementation
Jacek Caban
jack at itma.pwr.wroc.pl
Fri Sep 2 16:32:19 CDT 2005
Robert Shearman wrote:
>
> Are you sure you mean to assign the value instead of just testing it?
Right, so there is similar bug is in CreateAsyncBindCtx test as
I've copied it from there. Thanks.
Changelog:
Added CreateAsyncBindCtxEx implementation
-------------- next part --------------
Index: dlls/urlmon/umon.c
===================================================================
RCS file: /home/wine/wine/dlls/urlmon/umon.c,v
retrieving revision 1.61
diff -u -p -r1.61 umon.c
--- dlls/urlmon/umon.c 18 Jul 2005 09:08:16 -0000 1.61
+++ dlls/urlmon/umon.c 2 Sep 2005 19:26:30 -0000
@@ -1179,16 +1179,38 @@ static HRESULT URLMonikerImpl_Construct(
HRESULT WINAPI CreateAsyncBindCtx(DWORD reserved, IBindStatusCallback *callback,
IEnumFORMATETC *format, IBindCtx **pbind)
{
+ TRACE("(%08lx %p %p %p)\n", reserved, callback, format, pbind);
+
+ if(!callback)
+ return E_INVALIDARG;
+
+ return CreateAsyncBindCtxEx(NULL, 0, callback, format, pbind, 0);
+}
+/***********************************************************************
+ * CreateAsyncBindCtxEx (URLMON.@)
+ *
+ * Create an asynchronous bind context.
+ */
+HRESULT WINAPI CreateAsyncBindCtxEx(IBindCtx *ibind, DWORD options,
+ IBindStatusCallback *callback, IEnumFORMATETC *format, IBindCtx** pbind,
+ DWORD reserved)
+{
HRESULT hres;
BIND_OPTS bindopts;
IBindCtx *bctx;
- TRACE("(%08lx %p %p %p)\n", reserved, callback, format, pbind);
+ TRACE("(%p %08lx %p %p %p %ld)\n", ibind, options, callback, format, pbind, reserved);
- if(!callback)
+ if(!pbind)
return E_INVALIDARG;
+
+ if(options)
+ FIXME("not supported options %08lx", options);
if(format)
- FIXME("format is not supported yet\n");
+ FIXME("format is not supported\n");
+
+ if(reserved)
+ WARN("reserved=%ld\n", reserved);
hres = CreateBindCtx(0, &bctx);
if(FAILED(hres))
@@ -1200,31 +1222,13 @@ HRESULT WINAPI CreateAsyncBindCtx(DWORD
bindopts.dwTickCountDeadline = 0;
IBindCtx_SetBindOptions(bctx, &bindopts);
- hres = IBindCtx_RegisterObjectParam(bctx, (LPOLESTR)BSCBHolder, (IUnknown*)callback);
- if(FAILED(hres)) {
- IBindCtx_Release(bctx);
- return hres;
- }
+ if(callback)
+ RegisterBindStatusCallback(bctx, callback, NULL, 0);
*pbind = bctx;
return S_OK;
}
-/***********************************************************************
- * CreateAsyncBindCtxEx (URLMON.@)
- *
- * Create an asynchronous bind context.
- *
- * FIXME
- * Not implemented.
- */
-HRESULT WINAPI CreateAsyncBindCtxEx(IBindCtx *ibind, DWORD options,
- IBindStatusCallback *callback, IEnumFORMATETC *format, IBindCtx** pbind,
- DWORD reserved)
-{
- FIXME("stub, returns failure\n");
- return E_INVALIDARG;
-}
/***********************************************************************
@@ -1445,7 +1449,7 @@ HRESULT WINAPI RegisterBindStatusCallbac
IBindStatusCallback_Release(prev);
}
- return IBindCtx_RegisterObjectParam(pbc, (LPOLESTR)BSCBHolder, (IUnknown *)pbsc);
+ return IBindCtx_RegisterObjectParam(pbc, (LPOLESTR)BSCBHolder, (IUnknown *)pbsc);
}
/***********************************************************************
Index: dlls/urlmon/tests/Makefile.in
===================================================================
RCS file: /home/wine/wine/dlls/urlmon/tests/Makefile.in,v
retrieving revision 1.5
diff -u -p -r1.5 Makefile.in
--- dlls/urlmon/tests/Makefile.in 2 Sep 2005 12:17:29 -0000 1.5
+++ dlls/urlmon/tests/Makefile.in 2 Sep 2005 19:26:30 -0000
@@ -3,7 +3,7 @@ TOPOBJDIR = ../../..
SRCDIR = @srcdir@
VPATH = @srcdir@
TESTDLL = urlmon.dll
-IMPORTS = urlmon user32 kernel32
+IMPORTS = urlmon user32 kernel32 ole32
EXTRALIBS = -luuid
CTESTS = \
Index: dlls/urlmon/tests/url.c
===================================================================
RCS file: /home/wine/wine/dlls/urlmon/tests/url.c,v
retrieving revision 1.10
diff -u -p -r1.10 url.c
--- dlls/urlmon/tests/url.c 13 Jul 2005 11:59:15 -0000 1.10
+++ dlls/urlmon/tests/url.c 2 Sep 2005 19:26:30 -0000
@@ -218,13 +218,14 @@ static void test_CreateAsyncBindCtx(void
return;
}
- bindopts.cbStruct = 16;
+ bindopts.cbStruct = sizeof(bindopts);;
hres = IBindCtx_GetBindOptions(bctx, &bindopts);
ok(SUCCEEDED(hres), "IBindCtx_GetBindOptions failed: %08lx\n", hres);
ok(bindopts.grfFlags == BIND_MAYBOTHERUSER,
"bindopts.grfFlags = %08lx, expected: BIND_MAYBOTHERUSER\n", bindopts.grfFlags);
- ok(bindopts.grfMode = STGM_READWRITE | STGM_SHARE_EXCLUSIVE,
- "bindopts.grfMode = %08lx, expected: STGM_READWRITE | STGM_SHARE_EXCLUSIVE\n", bindopts.grfMode);
+ ok(bindopts.grfMode == (STGM_READWRITE | STGM_SHARE_EXCLUSIVE),
+ "bindopts.grfMode = %08lx, expected: STGM_READWRITE | STGM_SHARE_EXCLUSIVE\n",
+ bindopts.grfMode);
ok(bindopts.dwTickCountDeadline == 0,
"bindopts.dwTickCountDeadline = %08lx, expected: 0\n", bindopts.dwTickCountDeadline);
@@ -234,6 +235,64 @@ static void test_CreateAsyncBindCtx(void
ok(ref == 0, "bsc should be destroyed here\n");
}
+static void test_CreateAsyncBindCtxEx(void)
+{
+ IBindCtx *bctx = NULL, *bctx_arg = NULL;
+ IBindStatusCallback *bsc = statusclb_create();
+ BIND_OPTS bindopts;
+ HRESULT hres;
+
+ hres = CreateAsyncBindCtxEx(NULL, 0, NULL, NULL, NULL, 0);
+ ok(hres == E_INVALIDARG, "CreateAsyncBindCtx failed: %08lx, expected E_INVALIDARG\n", hres);
+
+ hres = CreateAsyncBindCtxEx(NULL, 0, NULL, NULL, &bctx, 0);
+ ok(hres == S_OK, "CreateAsyncBindCtxEx failed: %08lx\n", hres);
+
+ if(SUCCEEDED(hres)) {
+ bindopts.cbStruct = sizeof(bindopts);
+ hres = IBindCtx_GetBindOptions(bctx, &bindopts);
+ ok(SUCCEEDED(hres), "IBindCtx_GetBindOptions failed: %08lx\n", hres);
+ ok(bindopts.grfFlags == BIND_MAYBOTHERUSER,
+ "bindopts.grfFlags = %08lx, expected: BIND_MAYBOTHERUSER\n", bindopts.grfFlags);
+ ok(bindopts.grfMode == (STGM_READWRITE | STGM_SHARE_EXCLUSIVE),
+ "bindopts.grfMode = %08lx, expected: STGM_READWRITE | STGM_SHARE_EXCLUSIVE\n",
+ bindopts.grfMode);
+ ok(bindopts.dwTickCountDeadline == 0,
+ "bindopts.dwTickCountDeadline = %08lx, expected: 0\n", bindopts.dwTickCountDeadline);
+
+ IBindCtx_Release(bctx);
+ }
+
+ CreateBindCtx(0, &bctx_arg);
+ hres = CreateAsyncBindCtxEx(NULL, 0, NULL, NULL, &bctx, 0);
+ ok(hres == S_OK, "CreateAsyncBindCtxEx failed: %08lx\n", hres);
+
+ if(SUCCEEDED(hres)) {
+ bindopts.cbStruct = sizeof(bindopts);
+ hres = IBindCtx_GetBindOptions(bctx, &bindopts);
+ ok(SUCCEEDED(hres), "IBindCtx_GetBindOptions failed: %08lx\n", hres);
+ ok(bindopts.grfFlags == BIND_MAYBOTHERUSER,
+ "bindopts.grfFlags = %08lx, expected: BIND_MAYBOTHERUSER\n", bindopts.grfFlags);
+ ok(bindopts.grfMode == (STGM_READWRITE | STGM_SHARE_EXCLUSIVE),
+ "bindopts.grfMode = %08lx, expected: STGM_READWRITE | STGM_SHARE_EXCLUSIVE\n",
+ bindopts.grfMode);
+ ok(bindopts.dwTickCountDeadline == 0,
+ "bindopts.dwTickCountDeadline = %08lx, expected: 0\n", bindopts.dwTickCountDeadline);
+
+ IBindCtx_Release(bctx);
+ }
+
+ IBindCtx_Release(bctx_arg);
+
+ hres = CreateAsyncBindCtxEx(NULL, 0, bsc, NULL, &bctx, 0);
+ ok(hres == S_OK, "CreateAsyncBindCtxEx failed: %08lx\n", hres);
+
+ if(SUCCEEDED(hres))
+ IBindCtx_Release(bctx);
+
+ IBindStatusCallback_Release(bsc);
+}
+
static void test_BindToStorage(void)
{
IMoniker *mon;
@@ -302,5 +361,6 @@ START_TEST(url)
{
test_create();
test_CreateAsyncBindCtx();
+ test_CreateAsyncBindCtxEx();
test_BindToStorage();
}
More information about the wine-patches
mailing list