qedit/tests: Test that reference counts are shared between interfaces.
Signed-off-by: Zebediah Figura <z.figura12@gmail.com> Signed-off-by: Alexandre Julliard <julliard@winehq.org>
This commit is contained in:
parent
975eabff33
commit
a18be1aeaf
|
@ -526,9 +526,6 @@ static void test_samplegrabber(void)
|
|||
struct unk_impl unk_obj = {{&unk_vtbl}, 19, NULL};
|
||||
ISampleGrabber *sg;
|
||||
IBaseFilter *bf;
|
||||
IMediaFilter *mf;
|
||||
IPersist *persist;
|
||||
IUnknown *unk;
|
||||
IPin *pin;
|
||||
IMemInputPin *inpin;
|
||||
IEnumPins *pins;
|
||||
|
@ -556,36 +553,12 @@ static void test_samplegrabber(void)
|
|||
(void**)&sg);
|
||||
ok(hr == E_NOINTERFACE, "SampleGrabber create failed: %08x, expected E_NOINTERFACE\n", hr);
|
||||
|
||||
/* Same refcount for all SampleGrabber interfaces */
|
||||
hr = CoCreateInstance(&CLSID_SampleGrabber, NULL, CLSCTX_INPROC_SERVER, &IID_ISampleGrabber,
|
||||
(void**)&sg);
|
||||
ok(hr == S_OK, "SampleGrabber create failed: %08x, expected S_OK\n", hr);
|
||||
refcount = ISampleGrabber_AddRef(sg);
|
||||
ok(refcount == 2, "refcount == %u, expected 2\n", refcount);
|
||||
|
||||
hr = ISampleGrabber_QueryInterface(sg, &IID_IBaseFilter, (void**)&bf);
|
||||
ok(hr == S_OK, "QueryInterface for IID_IBaseFilter failed: %08x\n", hr);
|
||||
refcount = IBaseFilter_AddRef(bf);
|
||||
ok(refcount == 4, "refcount == %u, expected 4\n", refcount);
|
||||
refcount = IBaseFilter_Release(bf);
|
||||
|
||||
hr = ISampleGrabber_QueryInterface(sg, &IID_IMediaFilter, (void**)&mf);
|
||||
ok(hr == S_OK, "QueryInterface for IID_IMediaFilter failed: %08x\n", hr);
|
||||
refcount = IMediaFilter_AddRef(mf);
|
||||
ok(refcount == 5, "refcount == %u, expected 5\n", refcount);
|
||||
refcount = IMediaFilter_Release(mf);
|
||||
|
||||
hr = ISampleGrabber_QueryInterface(sg, &IID_IPersist, (void**)&persist);
|
||||
ok(hr == S_OK, "QueryInterface for IID_IPersist failed: %08x\n", hr);
|
||||
refcount = IPersist_AddRef(persist);
|
||||
ok(refcount == 6, "refcount == %u, expected 6\n", refcount);
|
||||
refcount = IPersist_Release(persist);
|
||||
|
||||
hr = ISampleGrabber_QueryInterface(sg, &IID_IUnknown, (void**)&unk);
|
||||
ok(hr == S_OK, "QueryInterface for IID_IUnknown failed: %08x\n", hr);
|
||||
refcount = IUnknown_AddRef(unk);
|
||||
ok(refcount == 7, "refcount == %u, expected 7\n", refcount);
|
||||
refcount = IUnknown_Release(unk);
|
||||
|
||||
hr = ISampleGrabber_SetCallback(sg, &my_sg_cb, 0);
|
||||
ok(hr == S_OK, "SetCallback failed: %08x\n", hr);
|
||||
|
|
|
@ -32,19 +32,35 @@ static IBaseFilter *create_sample_grabber(void)
|
|||
return filter;
|
||||
}
|
||||
|
||||
static ULONG get_refcount(void *iface)
|
||||
{
|
||||
IUnknown *unknown = iface;
|
||||
IUnknown_AddRef(unknown);
|
||||
return IUnknown_Release(unknown);
|
||||
}
|
||||
|
||||
#define check_interface(a, b, c) check_interface_(__LINE__, a, b, c)
|
||||
static void check_interface_(unsigned int line, void *iface_ptr, REFIID iid, BOOL supported)
|
||||
{
|
||||
IUnknown *iface = iface_ptr;
|
||||
HRESULT hr, expected_hr;
|
||||
ULONG ref, expect_ref;
|
||||
IUnknown *unk;
|
||||
|
||||
expected_hr = supported ? S_OK : E_NOINTERFACE;
|
||||
|
||||
expect_ref = get_refcount(iface);
|
||||
|
||||
hr = IUnknown_QueryInterface(iface, iid, (void **)&unk);
|
||||
ok_(__FILE__, line)(hr == expected_hr, "Got hr %#x, expected %#x.\n", hr, expected_hr);
|
||||
if (SUCCEEDED(hr))
|
||||
{
|
||||
ref = get_refcount(iface);
|
||||
ok_(__FILE__, line)(ref == expect_ref + 1, "Expected %u references, got %u.\n", expect_ref + 1, ref);
|
||||
ref = get_refcount(unk);
|
||||
ok_(__FILE__, line)(ref == expect_ref + 1, "Expected %u references, got %u.\n", expect_ref + 1, ref);
|
||||
IUnknown_Release(unk);
|
||||
}
|
||||
}
|
||||
|
||||
static void test_interfaces(void)
|
||||
|
|
Loading…
Reference in New Issue