Signed-off-by: Gabriel Ivăncescu gabrielopcode@gmail.com --- dlls/quartz/tests/filtergraph.c | 45 +++++++++++++++++++++++++++++++++ 1 file changed, 45 insertions(+)
diff --git a/dlls/quartz/tests/filtergraph.c b/dlls/quartz/tests/filtergraph.c index 9988dca..2c787c4 100644 --- a/dlls/quartz/tests/filtergraph.c +++ b/dlls/quartz/tests/filtergraph.c @@ -26,6 +26,35 @@ #include "wine/heap.h" #include "wine/test.h"
+#define DEFINE_EXPECT(func) \ + static BOOL expect_ ## func = FALSE, called_ ## func = FALSE + +#define SET_EXPECT(func) \ + do { called_ ## func = FALSE; expect_ ## func = TRUE; } while(0) + +#define CHECK_EXPECT2(func) \ + do { \ + ok(expect_ ##func, "unexpected call " #func "\n"); \ + called_ ## func = TRUE; \ + }while(0) + +#define CHECK_EXPECT(func) \ + do { \ + CHECK_EXPECT2(func); \ + expect_ ## func = FALSE; \ + }while(0) + +#define CHECK_CALLED(func) \ + do { \ + ok(called_ ## func, "expected " #func "\n"); \ + expect_ ## func = called_ ## func = FALSE; \ + }while(0) + +#define CLEAR_CALLED(func) \ + expect_ ## func = called_ ## func = FALSE + +DEFINE_EXPECT(QI_IMediaSeeking); + static const GUID testguid = {0xabbccdde};
typedef struct TestFilterImpl @@ -1273,6 +1302,7 @@ static HRESULT WINAPI testfilter_QueryInterface(IBaseFilter *iface, REFIID iid, } else if (IsEqualGUID(iid, &IID_IMediaSeeking) && filter->IMediaSeeking_iface.lpVtbl) { + CHECK_EXPECT2(QI_IMediaSeeking); *out = &filter->IMediaSeeking_iface; } else if (IsEqualGUID(iid, &IID_IReferenceClock) && filter->IReferenceClock_iface.lpVtbl) @@ -3345,8 +3375,10 @@ todo_wine static HRESULT check_ec_complete(IFilterGraph2 *graph, IBaseFilter *filter) { IMediaEventSink *eventsink; + BOOL has_seeking = FALSE; LONG_PTR param1, param2; IMediaControl *control; + IMediaSeeking *seeking; IMediaEvent *eventsrc; HRESULT hr, ret_hr; LONG code; @@ -3355,7 +3387,17 @@ static HRESULT check_ec_complete(IFilterGraph2 *graph, IBaseFilter *filter) IFilterGraph2_QueryInterface(graph, &IID_IMediaEvent, (void **)&eventsrc); IFilterGraph2_QueryInterface(graph, &IID_IMediaEventSink, (void **)&eventsink);
+ SET_EXPECT(QI_IMediaSeeking); + if (SUCCEEDED(IBaseFilter_QueryInterface(filter, &IID_IMediaSeeking, (void **)&seeking))) + { + IMediaSeeking_Release(seeking); + has_seeking = TRUE; + } + CLEAR_CALLED(QI_IMediaSeeking); + + if (has_seeking) SET_EXPECT(QI_IMediaSeeking); IMediaControl_Run(control); + if (has_seeking) CHECK_CALLED(QI_IMediaSeeking);
hr = IMediaEvent_GetEvent(eventsrc, &code, ¶m1, ¶m2, 0); ok(hr == E_ABORT, "Got hr %#x.\n", hr); @@ -3766,9 +3808,12 @@ static void test_graph_seeking(void)
filter1.seek_caps = AM_SEEKING_CanDoSegments | AM_SEEKING_CanGetCurrentPos; filter2.seek_caps = AM_SEEKING_CanDoSegments | AM_SEEKING_CanGetDuration; + + SET_EXPECT(QI_IMediaSeeking); hr = IMediaSeeking_GetCapabilities(seeking, &caps); ok(hr == S_OK, "Got hr %#x.\n", hr); ok(caps == AM_SEEKING_CanDoSegments, "Got caps %#x.\n", caps); + CHECK_CALLED(QI_IMediaSeeking);
caps = AM_SEEKING_CanDoSegments | AM_SEEKING_CanGetCurrentPos; hr = IMediaSeeking_CheckCapabilities(seeking, &caps);