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