Added RegisterFormatEnumerator and RevokeFormatEnumerator
implementation.
This commit is contained in:
parent
3bf9c165fa
commit
74138a028f
|
@ -31,6 +31,8 @@
|
||||||
|
|
||||||
WINE_DEFAULT_DEBUG_CHANNEL(urlmon);
|
WINE_DEFAULT_DEBUG_CHANNEL(urlmon);
|
||||||
|
|
||||||
|
static WCHAR wszEnumFORMATETC[] = {'_','E','n','u','m','F','O','R','M','A','T','E','T','C','_',0};
|
||||||
|
|
||||||
typedef struct {
|
typedef struct {
|
||||||
const IEnumFORMATETCVtbl *lpEnumFORMATETCVtbl;
|
const IEnumFORMATETCVtbl *lpEnumFORMATETCVtbl;
|
||||||
|
|
||||||
|
@ -189,3 +191,32 @@ HRESULT WINAPI CreateFormatEnumerator(UINT cfmtetc, FORMATETC *rgfmtetc,
|
||||||
*ppenumfmtetc = EnumFORMATETC_Create(cfmtetc, rgfmtetc, 0);
|
*ppenumfmtetc = EnumFORMATETC_Create(cfmtetc, rgfmtetc, 0);
|
||||||
return S_OK;
|
return S_OK;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**********************************************************
|
||||||
|
* RegisterFormatEnumerator (urlmon.@)
|
||||||
|
*/
|
||||||
|
HRESULT WINAPI RegisterFormatEnumerator(LPBC pBC, IEnumFORMATETC *pEFetc, DWORD reserved)
|
||||||
|
{
|
||||||
|
TRACE("(%p %p %ld)\n", pBC, pEFetc, reserved);
|
||||||
|
|
||||||
|
if(reserved)
|
||||||
|
WARN("reserved != 0\n");
|
||||||
|
|
||||||
|
if(!pBC || !pEFetc)
|
||||||
|
return E_INVALIDARG;
|
||||||
|
|
||||||
|
return IBindCtx_RegisterObjectParam(pBC, wszEnumFORMATETC, (IUnknown*)pEFetc);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**********************************************************
|
||||||
|
* RevokeFormatEnumerator (urlmon.@)
|
||||||
|
*/
|
||||||
|
HRESULT WINAPI RevokeFormatEnumerator(LPBC pbc, IEnumFORMATETC *pEFetc)
|
||||||
|
{
|
||||||
|
TRACE("(%p %p)\n", pbc, pEFetc);
|
||||||
|
|
||||||
|
if(!pbc)
|
||||||
|
return E_INVALIDARG;
|
||||||
|
|
||||||
|
return IBindCtx_RevokeObjectParam(pbc, wszEnumFORMATETC);
|
||||||
|
}
|
||||||
|
|
|
@ -129,7 +129,81 @@ static void test_CreateFormatEnum(void)
|
||||||
IEnumFORMATETC_Release(fenum);
|
IEnumFORMATETC_Release(fenum);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static void test_RegisterFormatEnumerator(void)
|
||||||
|
{
|
||||||
|
IBindCtx *bctx = NULL;
|
||||||
|
IEnumFORMATETC *format = NULL, *format2 = NULL;
|
||||||
|
IUnknown *unk = NULL;
|
||||||
|
HRESULT hres;
|
||||||
|
|
||||||
|
static FORMATETC formatetc = {0,NULL,0,0,0};
|
||||||
|
static WCHAR wszEnumFORMATETC[] =
|
||||||
|
{'_','E','n','u','m','F','O','R','M','A','T','E','T','C','_',0};
|
||||||
|
|
||||||
|
CreateBindCtx(0, &bctx);
|
||||||
|
|
||||||
|
hres = CreateFormatEnumerator(1, &formatetc, &format);
|
||||||
|
ok(hres == S_OK, "CreateFormatEnumerator failed: %08lx\n", hres);
|
||||||
|
if(FAILED(hres))
|
||||||
|
return;
|
||||||
|
|
||||||
|
hres = RegisterFormatEnumerator(NULL, format, 0);
|
||||||
|
ok(hres == E_INVALIDARG,
|
||||||
|
"RegisterFormatEnumerator failed: %08lx, expected E_INVALIDARG\n", hres);
|
||||||
|
hres = RegisterFormatEnumerator(bctx, NULL, 0);
|
||||||
|
ok(hres == E_INVALIDARG,
|
||||||
|
"RegisterFormatEnumerator failed: %08lx, expected E_INVALIDARG\n", hres);
|
||||||
|
|
||||||
|
hres = RegisterFormatEnumerator(bctx, format, 0);
|
||||||
|
ok(hres == S_OK, "RegisterFormatEnumerator failed: %08lx\n", hres);
|
||||||
|
|
||||||
|
hres = IBindCtx_GetObjectParam(bctx, wszEnumFORMATETC, &unk);
|
||||||
|
ok(hres == S_OK, "GetObjectParam failed: %08lx\n", hres);
|
||||||
|
ok(unk == (IUnknown*)format, "unk != format\n");
|
||||||
|
|
||||||
|
hres = RevokeFormatEnumerator(NULL, format);
|
||||||
|
ok(hres == E_INVALIDARG,
|
||||||
|
"RevokeFormatEnumerator failed: %08lx, expected E_INVALIDARG\n", hres);
|
||||||
|
|
||||||
|
hres = RevokeFormatEnumerator(bctx, format);
|
||||||
|
ok(hres == S_OK, "RevokeFormatEnumerator failed: %08lx\n", hres);
|
||||||
|
|
||||||
|
hres = RevokeFormatEnumerator(bctx, format);
|
||||||
|
ok(hres == E_FAIL, "RevokeFormatEnumerator failed: %08lx, expected E_FAIL\n", hres);
|
||||||
|
|
||||||
|
hres = IBindCtx_GetObjectParam(bctx, wszEnumFORMATETC, &unk);
|
||||||
|
ok(hres == E_FAIL, "GetObjectParam failed: %08lx, expected E_FAIL\n", hres);
|
||||||
|
|
||||||
|
hres = RegisterFormatEnumerator(bctx, format, 0);
|
||||||
|
ok(hres == S_OK, "RegisterFormatEnumerator failed: %08lx\n", hres);
|
||||||
|
|
||||||
|
hres = CreateFormatEnumerator(1, &formatetc, &format2);
|
||||||
|
ok(hres == S_OK, "CreateFormatEnumerator failed: %08lx\n", hres);
|
||||||
|
|
||||||
|
if(SUCCEEDED(hres)) {
|
||||||
|
hres = RevokeFormatEnumerator(bctx, format);
|
||||||
|
ok(hres == S_OK, "RevokeFormatEnumerator failed: %08lx\n", hres);
|
||||||
|
|
||||||
|
IEnumFORMATETC_Release(format2);
|
||||||
|
}
|
||||||
|
|
||||||
|
hres = IBindCtx_GetObjectParam(bctx, wszEnumFORMATETC, &unk);
|
||||||
|
ok(hres == E_FAIL, "GetObjectParam failed: %08lx, expected E_FAIL\n", hres);
|
||||||
|
|
||||||
|
IEnumFORMATETC_Release(format);
|
||||||
|
|
||||||
|
hres = RegisterFormatEnumerator(bctx, format, 0);
|
||||||
|
ok(hres == S_OK, "RegisterFormatEnumerator failed: %08lx\n", hres);
|
||||||
|
hres = RevokeFormatEnumerator(bctx, NULL);
|
||||||
|
ok(hres == S_OK, "RevokeFormatEnumerator failed: %08lx\n", hres);
|
||||||
|
hres = IBindCtx_GetObjectParam(bctx, wszEnumFORMATETC, &unk);
|
||||||
|
ok(hres == E_FAIL, "GetObjectParam failed: %08lx, expected E_FAIL\n", hres);
|
||||||
|
|
||||||
|
IBindCtx_Release(bctx);
|
||||||
|
}
|
||||||
|
|
||||||
START_TEST(misc)
|
START_TEST(misc)
|
||||||
{
|
{
|
||||||
test_CreateFormatEnum();
|
test_CreateFormatEnum();
|
||||||
|
test_RegisterFormatEnumerator();
|
||||||
}
|
}
|
||||||
|
|
|
@ -56,12 +56,12 @@
|
||||||
@ stdcall ObtainUserAgentString(long str ptr)
|
@ stdcall ObtainUserAgentString(long str ptr)
|
||||||
@ stub PrivateCoInstall
|
@ stub PrivateCoInstall
|
||||||
@ stdcall RegisterBindStatusCallback(ptr ptr ptr long)
|
@ stdcall RegisterBindStatusCallback(ptr ptr ptr long)
|
||||||
@ stub RegisterFormatEnumerator
|
@ stdcall RegisterFormatEnumerator(ptr ptr long)
|
||||||
@ stub RegisterMediaTypeClass
|
@ stub RegisterMediaTypeClass
|
||||||
@ stub RegisterMediaTypes
|
@ stub RegisterMediaTypes
|
||||||
@ stdcall ReleaseBindInfo(ptr)
|
@ stdcall ReleaseBindInfo(ptr)
|
||||||
@ stdcall RevokeBindStatusCallback(ptr ptr)
|
@ stdcall RevokeBindStatusCallback(ptr ptr)
|
||||||
@ stub RevokeFormatEnumerator
|
@ stdcall RevokeFormatEnumerator(ptr ptr)
|
||||||
@ stub SetSoftwareUpdateAdvertisementState
|
@ stub SetSoftwareUpdateAdvertisementState
|
||||||
@ stub URLDownloadA
|
@ stub URLDownloadA
|
||||||
@ stub URLDownloadToCacheFileA
|
@ stub URLDownloadToCacheFileA
|
||||||
|
|
Loading…
Reference in New Issue