[ITSS_WINETEST] Sync with Wine Staging 3.9. CORE-14656

This commit is contained in:
Amine Khaldi 2018-06-04 03:37:50 +01:00
parent e64b032987
commit 454e360303

View file

@ -17,6 +17,9 @@
*/
#define COBJMACROS
#ifdef __REACTOS__
#define CONST_VTABLE
#endif
#include <wine/test.h>
#include <stdarg.h>
@ -60,6 +63,7 @@ DEFINE_EXPECT(ReportProgress_CACHEFILENAMEAVAILABLE);
DEFINE_EXPECT(ReportProgress_DIRECTBIND);
DEFINE_EXPECT(ReportData);
DEFINE_EXPECT(ReportResult);
DEFINE_EXPECT(outer_QI_test);
static HRESULT expect_hrResult;
static IInternetProtocol *read_protocol = NULL;
@ -660,6 +664,68 @@ static void delete_chm(void)
ok(ret, "DeleteFileA failed: %d\n", GetLastError());
}
static const IID outer_test_iid = {0xabcabc00,0,0,{0,0,0,0,0,0,0,0x66}};
static HRESULT WINAPI outer_QueryInterface(IUnknown *iface, REFIID riid, void **ppv)
{
if(IsEqualGUID(riid, &outer_test_iid)) {
CHECK_EXPECT(outer_QI_test);
*ppv = (IUnknown*)0xdeadbeef;
return S_OK;
}
ok(0, "unexpected call %s\n", wine_dbgstr_guid(riid));
return E_NOINTERFACE;
}
static ULONG WINAPI outer_AddRef(IUnknown *iface)
{
return 2;
}
static ULONG WINAPI outer_Release(IUnknown *iface)
{
return 1;
}
static const IUnknownVtbl outer_vtbl = {
outer_QueryInterface,
outer_AddRef,
outer_Release
};
static void test_com_aggregation(const CLSID *clsid)
{
IUnknown outer = { &outer_vtbl };
IClassFactory *class_factory;
IUnknown *unk, *unk2, *unk3;
HRESULT hres;
hres = CoGetClassObject(clsid, CLSCTX_INPROC_SERVER, NULL, &IID_IClassFactory, (void**)&class_factory);
ok(hres == S_OK, "CoGetClassObject failed: %08x\n", hres);
hres = IClassFactory_CreateInstance(class_factory, &outer, &IID_IUnknown, (void**)&unk);
ok(hres == S_OK, "CreateInstance returned: %08x\n", hres);
hres = IUnknown_QueryInterface(unk, &IID_IInternetProtocol, (void**)&unk2);
ok(hres == S_OK, "Could not get IInternetProtocol iface: %08x\n", hres);
SET_EXPECT(outer_QI_test);
hres = IUnknown_QueryInterface(unk2, &outer_test_iid, (void**)&unk3);
CHECK_CALLED(outer_QI_test);
ok(hres == S_OK, "Could not get IInternetProtocol iface: %08x\n", hres);
ok(unk3 == (IUnknown*)0xdeadbeef, "unexpected unk2\n");
IUnknown_Release(unk2);
IUnknown_Release(unk);
unk = (void*)0xdeadbeef;
hres = IClassFactory_CreateInstance(class_factory, &outer, &IID_IInternetProtocol, (void**)&unk);
ok(hres == CLASS_E_NOAGGREGATION, "CreateInstance returned: %08x\n", hres);
ok(!unk, "unk = %p\n", unk);
IClassFactory_Release(class_factory);
}
START_TEST(protocol)
{
OleInitialize(NULL);
@ -669,6 +735,7 @@ START_TEST(protocol)
test_its_protocol();
test_mk_protocol();
test_com_aggregation(&CLSID_ITSProtocol);
delete_chm();
OleUninitialize();