[PATCH 4/4] d3drm/tests: Add vtable comparison tests in test_frame_qi
Aaryaman Vasishta
jem456.vasishta at gmail.com
Thu Apr 2 11:36:50 CDT 2015
---
dlls/d3drm/tests/d3drm1.c | 243 +++++++++++++++++++++++++++++++++-------------
dlls/d3drm/tests/d3drm2.c | 243 +++++++++++++++++++++++++++++++++-------------
dlls/d3drm/tests/d3drm3.c | 243 +++++++++++++++++++++++++++++++++-------------
3 files changed, 525 insertions(+), 204 deletions(-)
diff --git a/dlls/d3drm/tests/d3drm1.c b/dlls/d3drm/tests/d3drm1.c
index 2d607f8..34aa649 100644
--- a/dlls/d3drm/tests/d3drm1.c
+++ b/dlls/d3drm/tests/d3drm1.c
@@ -32,6 +32,30 @@
ok(count == rc_new, "Invalid refcount. Expected %d got %d\n", rc_new, count); \
}
+static const char* get_IID_string(const GUID* guid)
+{
+ if (IsEqualGUID(guid, &IID_IDirect3DRMFrame))
+ return "IID_IDirect3DRMFrame";
+ else if (IsEqualGUID(guid, &IID_IDirect3DRMFrame2))
+ return "IID_IDirect3DRMFrame2";
+ else if (IsEqualGUID(guid, &IID_IDirect3DRMFrame3))
+ return "IID_IDirect3DRMFrame3";
+ else if (IsEqualGUID(guid, &IID_IDirect3DRMMeshBuilder))
+ return "IID_IDirect3DRMMeshBuilder";
+ else if (IsEqualGUID(guid, &IID_IDirect3DRMMeshBuilder2))
+ return "IID_IDirect3DRMMeshBuilder2";
+ else if (IsEqualGUID(guid, &IID_IDirect3DRMMeshBuilder3))
+ return "IID_IDirect3DRMMeshBuilder3";
+ else if (IsEqualGUID(guid, &IID_IDirect3DRMObject))
+ return "IID_IDirect3DRMObject";
+ else if (IsEqualGUID(guid, &IID_IDirect3DRMVisual))
+ return "IID_IDirect3DRMVisual";
+ else if (IsEqualGUID(guid, &IID_IUnknown))
+ return "IID_IUnknown";
+
+ return "?";
+}
+
static int get_refcount(IUnknown *object)
{
IUnknown_AddRef(object);
@@ -42,20 +66,36 @@ struct qi_test
{
REFIID iid;
REFIID refcount_iid;
+ REFIID vtable_iid;
HRESULT hr;
BOOL refcount_todo;
+ BOOL vtable_equal;
+ BOOL vtable_todo;
};
static void test_qi(const char *test_name, IUnknown *base_iface,
REFIID refcount_iid, const struct qi_test *tests, UINT entry_count)
{
ULONG refcount, expected_refcount;
- IUnknown *iface1, *iface2;
+ IUnknown *iface1, *iface2, *vtable_iface;
HRESULT hr;
UINT i, j;
for (i = 0; i < entry_count; ++i)
{
+ if (tests[i].vtable_iid)
+ {
+ hr = IUnknown_QueryInterface(base_iface, tests[i].iid, (void **)&vtable_iface);
+ ok(hr == S_OK, "Got hr %#x for test \"%s\" %u.\n", hr, test_name, i);
+ if (tests[i].vtable_todo)
+ todo_wine ok((vtable_iface == base_iface) == tests[i].vtable_equal, "%s %s %s for test \"%s\".\n", get_IID_string(refcount_iid),
+ (vtable_iface == base_iface?"==":"!="), get_IID_string(tests[i].iid), test_name);
+ else
+ ok((vtable_iface == base_iface) == tests[i].vtable_equal, "%s %s %s for test \"%s\".\n", get_IID_string(refcount_iid),
+ (vtable_iface == base_iface?"==":"!="), get_IID_string(tests[i].iid), test_name);
+ IUnknown_Release(vtable_iface);
+ }
+
hr = IUnknown_QueryInterface(base_iface, tests[i].iid, (void **)&iface1);
ok(hr == tests[i].hr, "Got hr %#x for test \"%s\" %u.\n", hr, test_name, i);
if (SUCCEEDED(hr))
@@ -99,73 +139,140 @@ static void test_frame_qi(void)
{
static const struct qi_test tests[] =
{
- { &IID_IDirect3DRMFrame3, &IID_IDirect3DRMFrame, S_OK, FALSE },
- { &IID_IDirect3DRMFrame2, &IID_IDirect3DRMFrame, S_OK, FALSE },
- { &IID_IDirect3DRMFrame, &IID_IDirect3DRMFrame, S_OK, FALSE },
- { &IID_IDirect3DRM, NULL, CLASS_E_CLASSNOTAVAILABLE, FALSE },
- { &IID_IDirect3DRMDevice, NULL, CLASS_E_CLASSNOTAVAILABLE, FALSE },
- { &IID_IDirect3DRMObject, &IID_IDirect3DRMFrame, S_OK, FALSE },
- { &IID_IDirect3DRMDevice2, NULL, CLASS_E_CLASSNOTAVAILABLE, FALSE },
- { &IID_IDirect3DRMDevice3, NULL, CLASS_E_CLASSNOTAVAILABLE, FALSE },
- { &IID_IDirect3DRMViewport, NULL, CLASS_E_CLASSNOTAVAILABLE, FALSE },
- { &IID_IDirect3DRMViewport2, NULL, CLASS_E_CLASSNOTAVAILABLE, FALSE },
- { &IID_IDirect3DRM3, NULL, CLASS_E_CLASSNOTAVAILABLE, FALSE },
- { &IID_IDirect3DRM2, NULL, CLASS_E_CLASSNOTAVAILABLE, FALSE },
- { &IID_IDirect3DRMVisual, &IID_IDirect3DRMFrame, S_OK, FALSE },
- { &IID_IDirect3DRMMesh, NULL, CLASS_E_CLASSNOTAVAILABLE, FALSE },
- { &IID_IDirect3DRMMeshBuilder, NULL, CLASS_E_CLASSNOTAVAILABLE, FALSE },
- { &IID_IDirect3DRMMeshBuilder2, NULL, CLASS_E_CLASSNOTAVAILABLE, FALSE },
- { &IID_IDirect3DRMMeshBuilder3, NULL, CLASS_E_CLASSNOTAVAILABLE, FALSE },
- { &IID_IDirect3DRMFace, NULL, CLASS_E_CLASSNOTAVAILABLE, FALSE },
- { &IID_IDirect3DRMFace2, NULL, CLASS_E_CLASSNOTAVAILABLE, FALSE },
- { &IID_IDirect3DRMLight, NULL, CLASS_E_CLASSNOTAVAILABLE, FALSE },
- { &IID_IDirect3DRMTexture, NULL, CLASS_E_CLASSNOTAVAILABLE, FALSE },
- { &IID_IDirect3DRMTexture2, NULL, CLASS_E_CLASSNOTAVAILABLE, FALSE },
- { &IID_IDirect3DRMTexture3, NULL, CLASS_E_CLASSNOTAVAILABLE, FALSE },
- { &IID_IDirect3DRMWrap, NULL, CLASS_E_CLASSNOTAVAILABLE, FALSE },
- { &IID_IDirect3DRMMaterial, NULL, CLASS_E_CLASSNOTAVAILABLE, FALSE },
- { &IID_IDirect3DRMMaterial2, NULL, CLASS_E_CLASSNOTAVAILABLE, FALSE },
- { &IID_IDirect3DRMAnimation, NULL, CLASS_E_CLASSNOTAVAILABLE, FALSE },
- { &IID_IDirect3DRMAnimation2, NULL, CLASS_E_CLASSNOTAVAILABLE, FALSE },
- { &IID_IDirect3DRMAnimationSet, NULL, CLASS_E_CLASSNOTAVAILABLE, FALSE },
- { &IID_IDirect3DRMAnimationSet2, NULL, CLASS_E_CLASSNOTAVAILABLE, FALSE },
- { &IID_IDirect3DRMObjectArray, NULL, CLASS_E_CLASSNOTAVAILABLE, FALSE },
- { &IID_IDirect3DRMDeviceArray, NULL, CLASS_E_CLASSNOTAVAILABLE, FALSE },
- { &IID_IDirect3DRMViewportArray, NULL, CLASS_E_CLASSNOTAVAILABLE, FALSE },
- { &IID_IDirect3DRMFrameArray, NULL, CLASS_E_CLASSNOTAVAILABLE, FALSE },
- { &IID_IDirect3DRMVisualArray, NULL, CLASS_E_CLASSNOTAVAILABLE, FALSE },
- { &IID_IDirect3DRMLightArray, NULL, CLASS_E_CLASSNOTAVAILABLE, FALSE },
- { &IID_IDirect3DRMPickedArray, NULL, CLASS_E_CLASSNOTAVAILABLE, FALSE },
- { &IID_IDirect3DRMFaceArray, NULL, CLASS_E_CLASSNOTAVAILABLE, FALSE },
- { &IID_IDirect3DRMAnimationArray, NULL, CLASS_E_CLASSNOTAVAILABLE, FALSE },
- { &IID_IDirect3DRMUserVisual, NULL, CLASS_E_CLASSNOTAVAILABLE, FALSE },
- { &IID_IDirect3DRMShadow, NULL, CLASS_E_CLASSNOTAVAILABLE, FALSE },
- { &IID_IDirect3DRMShadow2, NULL, CLASS_E_CLASSNOTAVAILABLE, FALSE },
- { &IID_IDirect3DRMInterpolator, NULL, CLASS_E_CLASSNOTAVAILABLE, FALSE },
- { &IID_IDirect3DRMProgressiveMesh, NULL, CLASS_E_CLASSNOTAVAILABLE, FALSE },
- { &IID_IDirect3DRMPicked2Array, NULL, CLASS_E_CLASSNOTAVAILABLE, FALSE },
- { &IID_IDirect3DRMClippedVisual, NULL, CLASS_E_CLASSNOTAVAILABLE, FALSE },
- { &IID_IDirectDrawClipper, NULL, CLASS_E_CLASSNOTAVAILABLE, FALSE },
- { &IID_IDirectDrawSurface7, NULL, CLASS_E_CLASSNOTAVAILABLE, FALSE },
- { &IID_IDirectDrawSurface4, NULL, CLASS_E_CLASSNOTAVAILABLE, FALSE },
- { &IID_IDirectDrawSurface3, NULL, CLASS_E_CLASSNOTAVAILABLE, FALSE },
- { &IID_IDirectDrawSurface2, NULL, CLASS_E_CLASSNOTAVAILABLE, FALSE },
- { &IID_IDirectDrawSurface, NULL, CLASS_E_CLASSNOTAVAILABLE, FALSE },
- { &IID_IDirect3DDevice7, NULL, CLASS_E_CLASSNOTAVAILABLE, FALSE },
- { &IID_IDirect3DDevice3, NULL, CLASS_E_CLASSNOTAVAILABLE, FALSE },
- { &IID_IDirect3DDevice2, NULL, CLASS_E_CLASSNOTAVAILABLE, FALSE },
- { &IID_IDirect3DDevice, NULL, CLASS_E_CLASSNOTAVAILABLE, FALSE },
- { &IID_IDirect3D7, NULL, CLASS_E_CLASSNOTAVAILABLE, FALSE },
- { &IID_IDirect3D3, NULL, CLASS_E_CLASSNOTAVAILABLE, FALSE },
- { &IID_IDirect3D2, NULL, CLASS_E_CLASSNOTAVAILABLE, FALSE },
- { &IID_IDirect3D, NULL, CLASS_E_CLASSNOTAVAILABLE, FALSE },
- { &IID_IDirectDraw7, NULL, CLASS_E_CLASSNOTAVAILABLE, FALSE },
- { &IID_IDirectDraw4, NULL, CLASS_E_CLASSNOTAVAILABLE, FALSE },
- { &IID_IDirectDraw3, NULL, CLASS_E_CLASSNOTAVAILABLE, FALSE },
- { &IID_IDirectDraw2, NULL, CLASS_E_CLASSNOTAVAILABLE, FALSE },
- { &IID_IDirectDraw, NULL, CLASS_E_CLASSNOTAVAILABLE, FALSE },
- { &IID_IDirect3DLight, NULL, CLASS_E_CLASSNOTAVAILABLE, FALSE },
- { &IID_IUnknown, &IID_IDirect3DRMFrame, S_OK, FALSE },
+ { &IID_IDirect3DRMFrame3, &IID_IDirect3DRMFrame, &IID_IDirect3DRMFrame, S_OK,
+ FALSE, FALSE, FALSE },
+ { &IID_IDirect3DRMFrame2, &IID_IDirect3DRMFrame, &IID_IDirect3DRMFrame, S_OK,
+ FALSE, FALSE, TRUE },
+ { &IID_IDirect3DRMFrame, &IID_IDirect3DRMFrame, &IID_IDirect3DRMFrame, S_OK,
+ FALSE, TRUE, FALSE },
+ { &IID_IDirect3DRM, NULL, NULL, CLASS_E_CLASSNOTAVAILABLE,
+ FALSE, FALSE, FALSE },
+ { &IID_IDirect3DRMDevice, NULL, NULL, CLASS_E_CLASSNOTAVAILABLE,
+ FALSE, FALSE, FALSE },
+ { &IID_IDirect3DRMObject, &IID_IDirect3DRMFrame, &IID_IDirect3DRMFrame, S_OK,
+ FALSE, TRUE, FALSE },
+ { &IID_IDirect3DRMDevice2, NULL, NULL, CLASS_E_CLASSNOTAVAILABLE,
+ FALSE, FALSE, FALSE },
+ { &IID_IDirect3DRMDevice3, NULL, NULL, CLASS_E_CLASSNOTAVAILABLE,
+ FALSE, FALSE, FALSE },
+ { &IID_IDirect3DRMViewport, NULL, NULL, CLASS_E_CLASSNOTAVAILABLE,
+ FALSE, FALSE, FALSE },
+ { &IID_IDirect3DRMViewport2, NULL, NULL, CLASS_E_CLASSNOTAVAILABLE,
+ FALSE, FALSE, FALSE },
+ { &IID_IDirect3DRM3, NULL, NULL, CLASS_E_CLASSNOTAVAILABLE,
+ FALSE, FALSE, FALSE },
+ { &IID_IDirect3DRM2, NULL, NULL, CLASS_E_CLASSNOTAVAILABLE,
+ FALSE, FALSE, FALSE },
+ { &IID_IDirect3DRMVisual, &IID_IDirect3DRMFrame, &IID_IDirect3DRMFrame, S_OK,
+ FALSE, TRUE, FALSE },
+ { &IID_IDirect3DRMMesh, NULL, NULL, CLASS_E_CLASSNOTAVAILABLE,
+ FALSE, FALSE, FALSE },
+ { &IID_IDirect3DRMMeshBuilder, NULL, NULL, CLASS_E_CLASSNOTAVAILABLE,
+ FALSE, FALSE, FALSE },
+ { &IID_IDirect3DRMMeshBuilder2, NULL, NULL, CLASS_E_CLASSNOTAVAILABLE,
+ FALSE, FALSE, FALSE },
+ { &IID_IDirect3DRMMeshBuilder3, NULL, NULL, CLASS_E_CLASSNOTAVAILABLE,
+ FALSE, FALSE, FALSE },
+ { &IID_IDirect3DRMFace, NULL, NULL, CLASS_E_CLASSNOTAVAILABLE,
+ FALSE, FALSE, FALSE },
+ { &IID_IDirect3DRMFace2, NULL, NULL, CLASS_E_CLASSNOTAVAILABLE,
+ FALSE, FALSE, FALSE },
+ { &IID_IDirect3DRMLight, NULL, NULL, CLASS_E_CLASSNOTAVAILABLE,
+ FALSE, FALSE, FALSE },
+ { &IID_IDirect3DRMTexture, NULL, NULL, CLASS_E_CLASSNOTAVAILABLE,
+ FALSE, FALSE, FALSE },
+ { &IID_IDirect3DRMTexture2, NULL, NULL, CLASS_E_CLASSNOTAVAILABLE,
+ FALSE, FALSE, FALSE },
+ { &IID_IDirect3DRMTexture3, NULL, NULL, CLASS_E_CLASSNOTAVAILABLE,
+ FALSE, FALSE, FALSE },
+ { &IID_IDirect3DRMWrap, NULL, NULL, CLASS_E_CLASSNOTAVAILABLE,
+ FALSE, FALSE, FALSE },
+ { &IID_IDirect3DRMMaterial, NULL, NULL, CLASS_E_CLASSNOTAVAILABLE,
+ FALSE, FALSE, FALSE },
+ { &IID_IDirect3DRMMaterial2, NULL, NULL, CLASS_E_CLASSNOTAVAILABLE,
+ FALSE, FALSE, FALSE },
+ { &IID_IDirect3DRMAnimation, NULL, NULL, CLASS_E_CLASSNOTAVAILABLE,
+ FALSE, FALSE, FALSE },
+ { &IID_IDirect3DRMAnimation2, NULL, NULL, CLASS_E_CLASSNOTAVAILABLE,
+ FALSE, FALSE, FALSE },
+ { &IID_IDirect3DRMAnimationSet, NULL, NULL, CLASS_E_CLASSNOTAVAILABLE,
+ FALSE, FALSE, FALSE },
+ { &IID_IDirect3DRMAnimationSet2, NULL, NULL, CLASS_E_CLASSNOTAVAILABLE,
+ FALSE, FALSE, FALSE },
+ { &IID_IDirect3DRMObjectArray, NULL, NULL, CLASS_E_CLASSNOTAVAILABLE,
+ FALSE, FALSE, FALSE },
+ { &IID_IDirect3DRMDeviceArray, NULL, NULL, CLASS_E_CLASSNOTAVAILABLE,
+ FALSE, FALSE, FALSE },
+ { &IID_IDirect3DRMViewportArray, NULL, NULL, CLASS_E_CLASSNOTAVAILABLE,
+ FALSE, FALSE, FALSE },
+ { &IID_IDirect3DRMFrameArray, NULL, NULL, CLASS_E_CLASSNOTAVAILABLE,
+ FALSE, FALSE, FALSE },
+ { &IID_IDirect3DRMVisualArray, NULL, NULL, CLASS_E_CLASSNOTAVAILABLE,
+ FALSE, FALSE, FALSE },
+ { &IID_IDirect3DRMLightArray, NULL, NULL, CLASS_E_CLASSNOTAVAILABLE,
+ FALSE, FALSE, FALSE },
+ { &IID_IDirect3DRMPickedArray, NULL, NULL, CLASS_E_CLASSNOTAVAILABLE,
+ FALSE, FALSE, FALSE },
+ { &IID_IDirect3DRMFaceArray, NULL, NULL, CLASS_E_CLASSNOTAVAILABLE,
+ FALSE, FALSE, FALSE },
+ { &IID_IDirect3DRMAnimationArray, NULL, NULL, CLASS_E_CLASSNOTAVAILABLE,
+ FALSE, FALSE, FALSE },
+ { &IID_IDirect3DRMUserVisual, NULL, NULL, CLASS_E_CLASSNOTAVAILABLE,
+ FALSE, FALSE, FALSE },
+ { &IID_IDirect3DRMShadow, NULL, NULL, CLASS_E_CLASSNOTAVAILABLE,
+ FALSE, FALSE, FALSE },
+ { &IID_IDirect3DRMShadow2, NULL, NULL, CLASS_E_CLASSNOTAVAILABLE,
+ FALSE, FALSE, FALSE },
+ { &IID_IDirect3DRMInterpolator, NULL, NULL, CLASS_E_CLASSNOTAVAILABLE,
+ FALSE, FALSE, FALSE },
+ { &IID_IDirect3DRMProgressiveMesh, NULL, NULL, CLASS_E_CLASSNOTAVAILABLE,
+ FALSE, FALSE, FALSE },
+ { &IID_IDirect3DRMPicked2Array, NULL, NULL, CLASS_E_CLASSNOTAVAILABLE,
+ FALSE, FALSE, FALSE },
+ { &IID_IDirect3DRMClippedVisual, NULL, NULL, CLASS_E_CLASSNOTAVAILABLE,
+ FALSE, FALSE, FALSE },
+ { &IID_IDirectDrawClipper, NULL, NULL, CLASS_E_CLASSNOTAVAILABLE,
+ FALSE, FALSE, FALSE },
+ { &IID_IDirectDrawSurface7, NULL, NULL, CLASS_E_CLASSNOTAVAILABLE,
+ FALSE, FALSE, FALSE },
+ { &IID_IDirectDrawSurface4, NULL, NULL, CLASS_E_CLASSNOTAVAILABLE,
+ FALSE, FALSE, FALSE },
+ { &IID_IDirectDrawSurface3, NULL, NULL, CLASS_E_CLASSNOTAVAILABLE,
+ FALSE, FALSE, FALSE },
+ { &IID_IDirectDrawSurface2, NULL, NULL, CLASS_E_CLASSNOTAVAILABLE,
+ FALSE, FALSE, FALSE },
+ { &IID_IDirectDrawSurface, NULL, NULL, CLASS_E_CLASSNOTAVAILABLE,
+ FALSE, FALSE, FALSE },
+ { &IID_IDirect3DDevice7, NULL, NULL, CLASS_E_CLASSNOTAVAILABLE,
+ FALSE, FALSE, FALSE },
+ { &IID_IDirect3DDevice3, NULL, NULL, CLASS_E_CLASSNOTAVAILABLE,
+ FALSE, FALSE, FALSE },
+ { &IID_IDirect3DDevice2, NULL, NULL, CLASS_E_CLASSNOTAVAILABLE,
+ FALSE, FALSE, FALSE },
+ { &IID_IDirect3DDevice, NULL, NULL, CLASS_E_CLASSNOTAVAILABLE,
+ FALSE, FALSE, FALSE },
+ { &IID_IDirect3D7, NULL, NULL, CLASS_E_CLASSNOTAVAILABLE,
+ FALSE, FALSE, FALSE },
+ { &IID_IDirect3D3, NULL, NULL, CLASS_E_CLASSNOTAVAILABLE,
+ FALSE, FALSE, FALSE },
+ { &IID_IDirect3D2, NULL, NULL, CLASS_E_CLASSNOTAVAILABLE,
+ FALSE, FALSE, FALSE },
+ { &IID_IDirect3D, NULL, NULL, CLASS_E_CLASSNOTAVAILABLE,
+ FALSE, FALSE, FALSE },
+ { &IID_IDirectDraw7, NULL, NULL, CLASS_E_CLASSNOTAVAILABLE,
+ FALSE, FALSE, FALSE },
+ { &IID_IDirectDraw4, NULL, NULL, CLASS_E_CLASSNOTAVAILABLE,
+ FALSE, FALSE, FALSE },
+ { &IID_IDirectDraw3, NULL, NULL, CLASS_E_CLASSNOTAVAILABLE,
+ FALSE, FALSE, FALSE },
+ { &IID_IDirectDraw2, NULL, NULL, CLASS_E_CLASSNOTAVAILABLE,
+ FALSE, FALSE, FALSE },
+ { &IID_IDirectDraw, NULL, NULL, CLASS_E_CLASSNOTAVAILABLE,
+ FALSE, FALSE, FALSE },
+ { &IID_IDirect3DLight, NULL, NULL, CLASS_E_CLASSNOTAVAILABLE,
+ FALSE, FALSE, FALSE },
+ { &IID_IUnknown, &IID_IDirect3DRMFrame, &IID_IDirect3DRMFrame, S_OK,
+ FALSE, FALSE, TRUE },
};
HRESULT hr;
IDirect3DRM *d3drm;
diff --git a/dlls/d3drm/tests/d3drm2.c b/dlls/d3drm/tests/d3drm2.c
index e501627..5730392 100644
--- a/dlls/d3drm/tests/d3drm2.c
+++ b/dlls/d3drm/tests/d3drm2.c
@@ -32,6 +32,30 @@
ok(count == rc_new, "Invalid refcount. Expected %d got %d\n", rc_new, count); \
}
+static const char* get_IID_string(const GUID* guid)
+{
+ if (IsEqualGUID(guid, &IID_IDirect3DRMFrame))
+ return "IID_IDirect3DRMFrame";
+ else if (IsEqualGUID(guid, &IID_IDirect3DRMFrame2))
+ return "IID_IDirect3DRMFrame2";
+ else if (IsEqualGUID(guid, &IID_IDirect3DRMFrame3))
+ return "IID_IDirect3DRMFrame3";
+ else if (IsEqualGUID(guid, &IID_IDirect3DRMMeshBuilder))
+ return "IID_IDirect3DRMMeshBuilder";
+ else if (IsEqualGUID(guid, &IID_IDirect3DRMMeshBuilder2))
+ return "IID_IDirect3DRMMeshBuilder2";
+ else if (IsEqualGUID(guid, &IID_IDirect3DRMMeshBuilder3))
+ return "IID_IDirect3DRMMeshBuilder3";
+ else if (IsEqualGUID(guid, &IID_IDirect3DRMObject))
+ return "IID_IDirect3DRMObject";
+ else if (IsEqualGUID(guid, &IID_IDirect3DRMVisual))
+ return "IID_IDirect3DRMVisual";
+ else if (IsEqualGUID(guid, &IID_IUnknown))
+ return "IID_IUnknown";
+
+ return "?";
+}
+
static int get_refcount(IUnknown *object)
{
IUnknown_AddRef(object);
@@ -42,20 +66,36 @@ struct qi_test
{
REFIID iid;
REFIID refcount_iid;
+ REFIID vtable_iid;
HRESULT hr;
BOOL refcount_todo;
+ BOOL vtable_equal;
+ BOOL vtable_todo;
};
static void test_qi(const char *test_name, IUnknown *base_iface,
REFIID refcount_iid, const struct qi_test *tests, UINT entry_count)
{
ULONG refcount, expected_refcount;
- IUnknown *iface1, *iface2;
+ IUnknown *iface1, *iface2, *vtable_iface;
HRESULT hr;
UINT i, j;
for (i = 0; i < entry_count; ++i)
{
+ if (tests[i].vtable_iid)
+ {
+ hr = IUnknown_QueryInterface(base_iface, tests[i].iid, (void **)&vtable_iface);
+ ok(hr == S_OK, "Got hr %#x for test \"%s\" %u.\n", hr, test_name, i);
+ if (tests[i].vtable_todo)
+ todo_wine ok((vtable_iface == base_iface) == tests[i].vtable_equal, "%s %s %s for test \"%s\".\n", get_IID_string(refcount_iid),
+ (vtable_iface == base_iface?"==":"!="), get_IID_string(tests[i].iid), test_name);
+ else
+ ok((vtable_iface == base_iface) == tests[i].vtable_equal, "%s %s %s for test \"%s\".\n", get_IID_string(refcount_iid),
+ (vtable_iface == base_iface?"==":"!="), get_IID_string(tests[i].iid), test_name);
+ IUnknown_Release(vtable_iface);
+ }
+
hr = IUnknown_QueryInterface(base_iface, tests[i].iid, (void **)&iface1);
ok(hr == tests[i].hr, "Got hr %#x for test \"%s\" %u.\n", hr, test_name, i);
if (SUCCEEDED(hr))
@@ -99,73 +139,140 @@ static void test_frame_qi(void)
{
static const struct qi_test tests[] =
{
- { &IID_IDirect3DRMFrame3, &IID_IDirect3DRMFrame2, S_OK, FALSE },
- { &IID_IDirect3DRMFrame2, &IID_IDirect3DRMFrame2, S_OK, FALSE },
- { &IID_IDirect3DRMFrame, &IID_IDirect3DRMFrame2, S_OK, FALSE },
- { &IID_IDirect3DRM, NULL, CLASS_E_CLASSNOTAVAILABLE, FALSE },
- { &IID_IDirect3DRMDevice, NULL, CLASS_E_CLASSNOTAVAILABLE, FALSE },
- { &IID_IDirect3DRMObject, &IID_IDirect3DRMFrame2, S_OK, FALSE },
- { &IID_IDirect3DRMDevice2, NULL, CLASS_E_CLASSNOTAVAILABLE, FALSE },
- { &IID_IDirect3DRMDevice3, NULL, CLASS_E_CLASSNOTAVAILABLE, FALSE },
- { &IID_IDirect3DRMViewport, NULL, CLASS_E_CLASSNOTAVAILABLE, FALSE },
- { &IID_IDirect3DRMViewport2, NULL, CLASS_E_CLASSNOTAVAILABLE, FALSE },
- { &IID_IDirect3DRM3, NULL, CLASS_E_CLASSNOTAVAILABLE, FALSE },
- { &IID_IDirect3DRM2, NULL, CLASS_E_CLASSNOTAVAILABLE, FALSE },
- { &IID_IDirect3DRMVisual, &IID_IDirect3DRMFrame2, S_OK, FALSE },
- { &IID_IDirect3DRMMesh, NULL, CLASS_E_CLASSNOTAVAILABLE, FALSE },
- { &IID_IDirect3DRMMeshBuilder, NULL, CLASS_E_CLASSNOTAVAILABLE, FALSE },
- { &IID_IDirect3DRMMeshBuilder2, NULL, CLASS_E_CLASSNOTAVAILABLE, FALSE },
- { &IID_IDirect3DRMMeshBuilder3, NULL, CLASS_E_CLASSNOTAVAILABLE, FALSE },
- { &IID_IDirect3DRMFace, NULL, CLASS_E_CLASSNOTAVAILABLE, FALSE },
- { &IID_IDirect3DRMFace2, NULL, CLASS_E_CLASSNOTAVAILABLE, FALSE },
- { &IID_IDirect3DRMLight, NULL, CLASS_E_CLASSNOTAVAILABLE, FALSE },
- { &IID_IDirect3DRMTexture, NULL, CLASS_E_CLASSNOTAVAILABLE, FALSE },
- { &IID_IDirect3DRMTexture2, NULL, CLASS_E_CLASSNOTAVAILABLE, FALSE },
- { &IID_IDirect3DRMTexture3, NULL, CLASS_E_CLASSNOTAVAILABLE, FALSE },
- { &IID_IDirect3DRMWrap, NULL, CLASS_E_CLASSNOTAVAILABLE, FALSE },
- { &IID_IDirect3DRMMaterial, NULL, CLASS_E_CLASSNOTAVAILABLE, FALSE },
- { &IID_IDirect3DRMMaterial2, NULL, CLASS_E_CLASSNOTAVAILABLE, FALSE },
- { &IID_IDirect3DRMAnimation, NULL, CLASS_E_CLASSNOTAVAILABLE, FALSE },
- { &IID_IDirect3DRMAnimation2, NULL, CLASS_E_CLASSNOTAVAILABLE, FALSE },
- { &IID_IDirect3DRMAnimationSet, NULL, CLASS_E_CLASSNOTAVAILABLE, FALSE },
- { &IID_IDirect3DRMAnimationSet2, NULL, CLASS_E_CLASSNOTAVAILABLE, FALSE },
- { &IID_IDirect3DRMObjectArray, NULL, CLASS_E_CLASSNOTAVAILABLE, FALSE },
- { &IID_IDirect3DRMDeviceArray, NULL, CLASS_E_CLASSNOTAVAILABLE, FALSE },
- { &IID_IDirect3DRMViewportArray, NULL, CLASS_E_CLASSNOTAVAILABLE, FALSE },
- { &IID_IDirect3DRMFrameArray, NULL, CLASS_E_CLASSNOTAVAILABLE, FALSE },
- { &IID_IDirect3DRMVisualArray, NULL, CLASS_E_CLASSNOTAVAILABLE, FALSE },
- { &IID_IDirect3DRMLightArray, NULL, CLASS_E_CLASSNOTAVAILABLE, FALSE },
- { &IID_IDirect3DRMPickedArray, NULL, CLASS_E_CLASSNOTAVAILABLE, FALSE },
- { &IID_IDirect3DRMFaceArray, NULL, CLASS_E_CLASSNOTAVAILABLE, FALSE },
- { &IID_IDirect3DRMAnimationArray, NULL, CLASS_E_CLASSNOTAVAILABLE, FALSE },
- { &IID_IDirect3DRMUserVisual, NULL, CLASS_E_CLASSNOTAVAILABLE, FALSE },
- { &IID_IDirect3DRMShadow, NULL, CLASS_E_CLASSNOTAVAILABLE, FALSE },
- { &IID_IDirect3DRMShadow2, NULL, CLASS_E_CLASSNOTAVAILABLE, FALSE },
- { &IID_IDirect3DRMInterpolator, NULL, CLASS_E_CLASSNOTAVAILABLE, FALSE },
- { &IID_IDirect3DRMProgressiveMesh, NULL, CLASS_E_CLASSNOTAVAILABLE, FALSE },
- { &IID_IDirect3DRMPicked2Array, NULL, CLASS_E_CLASSNOTAVAILABLE, FALSE },
- { &IID_IDirect3DRMClippedVisual, NULL, CLASS_E_CLASSNOTAVAILABLE, FALSE },
- { &IID_IDirectDrawClipper, NULL, CLASS_E_CLASSNOTAVAILABLE, FALSE },
- { &IID_IDirectDrawSurface7, NULL, CLASS_E_CLASSNOTAVAILABLE, FALSE },
- { &IID_IDirectDrawSurface4, NULL, CLASS_E_CLASSNOTAVAILABLE, FALSE },
- { &IID_IDirectDrawSurface3, NULL, CLASS_E_CLASSNOTAVAILABLE, FALSE },
- { &IID_IDirectDrawSurface2, NULL, CLASS_E_CLASSNOTAVAILABLE, FALSE },
- { &IID_IDirectDrawSurface, NULL, CLASS_E_CLASSNOTAVAILABLE, FALSE },
- { &IID_IDirect3DDevice7, NULL, CLASS_E_CLASSNOTAVAILABLE, FALSE },
- { &IID_IDirect3DDevice3, NULL, CLASS_E_CLASSNOTAVAILABLE, FALSE },
- { &IID_IDirect3DDevice2, NULL, CLASS_E_CLASSNOTAVAILABLE, FALSE },
- { &IID_IDirect3DDevice, NULL, CLASS_E_CLASSNOTAVAILABLE, FALSE },
- { &IID_IDirect3D7, NULL, CLASS_E_CLASSNOTAVAILABLE, FALSE },
- { &IID_IDirect3D3, NULL, CLASS_E_CLASSNOTAVAILABLE, FALSE },
- { &IID_IDirect3D2, NULL, CLASS_E_CLASSNOTAVAILABLE, FALSE },
- { &IID_IDirect3D, NULL, CLASS_E_CLASSNOTAVAILABLE, FALSE },
- { &IID_IDirectDraw7, NULL, CLASS_E_CLASSNOTAVAILABLE, FALSE },
- { &IID_IDirectDraw4, NULL, CLASS_E_CLASSNOTAVAILABLE, FALSE },
- { &IID_IDirectDraw3, NULL, CLASS_E_CLASSNOTAVAILABLE, FALSE },
- { &IID_IDirectDraw2, NULL, CLASS_E_CLASSNOTAVAILABLE, FALSE },
- { &IID_IDirectDraw, NULL, CLASS_E_CLASSNOTAVAILABLE, FALSE },
- { &IID_IDirect3DLight, NULL, CLASS_E_CLASSNOTAVAILABLE, FALSE },
- { &IID_IUnknown, &IID_IDirect3DRMFrame2, S_OK, FALSE },
+ { &IID_IDirect3DRMFrame3, &IID_IDirect3DRMFrame2, &IID_IDirect3DRMFrame2, S_OK,
+ FALSE, FALSE, FALSE },
+ { &IID_IDirect3DRMFrame2, &IID_IDirect3DRMFrame2, &IID_IDirect3DRMFrame2, S_OK,
+ FALSE, TRUE, FALSE },
+ { &IID_IDirect3DRMFrame, &IID_IDirect3DRMFrame2, &IID_IDirect3DRMFrame2, S_OK,
+ FALSE, FALSE, TRUE },
+ { &IID_IDirect3DRM, NULL, NULL, CLASS_E_CLASSNOTAVAILABLE,
+ FALSE, FALSE, FALSE },
+ { &IID_IDirect3DRMDevice, NULL, NULL, CLASS_E_CLASSNOTAVAILABLE,
+ FALSE, FALSE, FALSE },
+ { &IID_IDirect3DRMObject, &IID_IDirect3DRMFrame2, &IID_IDirect3DRMFrame2, S_OK,
+ FALSE, FALSE, TRUE },
+ { &IID_IDirect3DRMDevice2, NULL, NULL, CLASS_E_CLASSNOTAVAILABLE,
+ FALSE, FALSE, FALSE },
+ { &IID_IDirect3DRMDevice3, NULL, NULL, CLASS_E_CLASSNOTAVAILABLE,
+ FALSE, FALSE, FALSE },
+ { &IID_IDirect3DRMViewport, NULL, NULL, CLASS_E_CLASSNOTAVAILABLE,
+ FALSE, FALSE, FALSE },
+ { &IID_IDirect3DRMViewport2, NULL, NULL, CLASS_E_CLASSNOTAVAILABLE,
+ FALSE, FALSE, FALSE },
+ { &IID_IDirect3DRM3, NULL, NULL, CLASS_E_CLASSNOTAVAILABLE,
+ FALSE, FALSE, FALSE },
+ { &IID_IDirect3DRM2, NULL, NULL, CLASS_E_CLASSNOTAVAILABLE,
+ FALSE, FALSE, FALSE },
+ { &IID_IDirect3DRMVisual, &IID_IDirect3DRMFrame2, &IID_IDirect3DRMFrame2, S_OK,
+ FALSE, FALSE, TRUE },
+ { &IID_IDirect3DRMMesh, NULL, NULL, CLASS_E_CLASSNOTAVAILABLE,
+ FALSE, FALSE, FALSE },
+ { &IID_IDirect3DRMMeshBuilder, NULL, NULL, CLASS_E_CLASSNOTAVAILABLE,
+ FALSE, FALSE, FALSE },
+ { &IID_IDirect3DRMMeshBuilder2, NULL, NULL, CLASS_E_CLASSNOTAVAILABLE,
+ FALSE, FALSE, FALSE },
+ { &IID_IDirect3DRMMeshBuilder3, NULL, NULL, CLASS_E_CLASSNOTAVAILABLE,
+ FALSE, FALSE, FALSE },
+ { &IID_IDirect3DRMFace, NULL, NULL, CLASS_E_CLASSNOTAVAILABLE,
+ FALSE, FALSE, FALSE },
+ { &IID_IDirect3DRMFace2, NULL, NULL, CLASS_E_CLASSNOTAVAILABLE,
+ FALSE, FALSE, FALSE },
+ { &IID_IDirect3DRMLight, NULL, NULL, CLASS_E_CLASSNOTAVAILABLE,
+ FALSE, FALSE, FALSE },
+ { &IID_IDirect3DRMTexture, NULL, NULL, CLASS_E_CLASSNOTAVAILABLE,
+ FALSE, FALSE, FALSE },
+ { &IID_IDirect3DRMTexture2, NULL, NULL, CLASS_E_CLASSNOTAVAILABLE,
+ FALSE, FALSE, FALSE },
+ { &IID_IDirect3DRMTexture3, NULL, NULL, CLASS_E_CLASSNOTAVAILABLE,
+ FALSE, FALSE, FALSE },
+ { &IID_IDirect3DRMWrap, NULL, NULL, CLASS_E_CLASSNOTAVAILABLE,
+ FALSE, FALSE, FALSE },
+ { &IID_IDirect3DRMMaterial, NULL, NULL, CLASS_E_CLASSNOTAVAILABLE,
+ FALSE, FALSE, FALSE },
+ { &IID_IDirect3DRMMaterial2, NULL, NULL, CLASS_E_CLASSNOTAVAILABLE,
+ FALSE, FALSE, FALSE },
+ { &IID_IDirect3DRMAnimation, NULL, NULL, CLASS_E_CLASSNOTAVAILABLE,
+ FALSE, FALSE, FALSE },
+ { &IID_IDirect3DRMAnimation2, NULL, NULL, CLASS_E_CLASSNOTAVAILABLE,
+ FALSE, FALSE, FALSE },
+ { &IID_IDirect3DRMAnimationSet, NULL, NULL, CLASS_E_CLASSNOTAVAILABLE,
+ FALSE, FALSE, FALSE },
+ { &IID_IDirect3DRMAnimationSet2, NULL, NULL, CLASS_E_CLASSNOTAVAILABLE,
+ FALSE, FALSE, FALSE },
+ { &IID_IDirect3DRMObjectArray, NULL, NULL, CLASS_E_CLASSNOTAVAILABLE,
+ FALSE, FALSE, FALSE },
+ { &IID_IDirect3DRMDeviceArray, NULL, NULL, CLASS_E_CLASSNOTAVAILABLE,
+ FALSE, FALSE, FALSE },
+ { &IID_IDirect3DRMViewportArray, NULL, NULL, CLASS_E_CLASSNOTAVAILABLE,
+ FALSE, FALSE, FALSE },
+ { &IID_IDirect3DRMFrameArray, NULL, NULL, CLASS_E_CLASSNOTAVAILABLE,
+ FALSE, FALSE, FALSE },
+ { &IID_IDirect3DRMVisualArray, NULL, NULL, CLASS_E_CLASSNOTAVAILABLE,
+ FALSE, FALSE, FALSE },
+ { &IID_IDirect3DRMLightArray, NULL, NULL, CLASS_E_CLASSNOTAVAILABLE,
+ FALSE, FALSE, FALSE },
+ { &IID_IDirect3DRMPickedArray, NULL, NULL, CLASS_E_CLASSNOTAVAILABLE,
+ FALSE, FALSE, FALSE },
+ { &IID_IDirect3DRMFaceArray, NULL, NULL, CLASS_E_CLASSNOTAVAILABLE,
+ FALSE, FALSE, FALSE },
+ { &IID_IDirect3DRMAnimationArray, NULL, NULL, CLASS_E_CLASSNOTAVAILABLE,
+ FALSE, FALSE, FALSE },
+ { &IID_IDirect3DRMUserVisual, NULL, NULL, CLASS_E_CLASSNOTAVAILABLE,
+ FALSE, FALSE, FALSE },
+ { &IID_IDirect3DRMShadow, NULL, NULL, CLASS_E_CLASSNOTAVAILABLE,
+ FALSE, FALSE, FALSE },
+ { &IID_IDirect3DRMShadow2, NULL, NULL, CLASS_E_CLASSNOTAVAILABLE,
+ FALSE, FALSE, FALSE },
+ { &IID_IDirect3DRMInterpolator, NULL, NULL, CLASS_E_CLASSNOTAVAILABLE,
+ FALSE, FALSE, FALSE },
+ { &IID_IDirect3DRMProgressiveMesh, NULL, NULL, CLASS_E_CLASSNOTAVAILABLE,
+ FALSE, FALSE, FALSE },
+ { &IID_IDirect3DRMPicked2Array, NULL, NULL, CLASS_E_CLASSNOTAVAILABLE,
+ FALSE, FALSE, FALSE },
+ { &IID_IDirect3DRMClippedVisual, NULL, NULL, CLASS_E_CLASSNOTAVAILABLE,
+ FALSE, FALSE, FALSE },
+ { &IID_IDirectDrawClipper, NULL, NULL, CLASS_E_CLASSNOTAVAILABLE,
+ FALSE, FALSE, FALSE },
+ { &IID_IDirectDrawSurface7, NULL, NULL, CLASS_E_CLASSNOTAVAILABLE,
+ FALSE, FALSE, FALSE },
+ { &IID_IDirectDrawSurface4, NULL, NULL, CLASS_E_CLASSNOTAVAILABLE,
+ FALSE, FALSE, FALSE },
+ { &IID_IDirectDrawSurface3, NULL, NULL, CLASS_E_CLASSNOTAVAILABLE,
+ FALSE, FALSE, FALSE },
+ { &IID_IDirectDrawSurface2, NULL, NULL, CLASS_E_CLASSNOTAVAILABLE,
+ FALSE, FALSE, FALSE },
+ { &IID_IDirectDrawSurface, NULL, NULL, CLASS_E_CLASSNOTAVAILABLE,
+ FALSE, FALSE, FALSE },
+ { &IID_IDirect3DDevice7, NULL, NULL, CLASS_E_CLASSNOTAVAILABLE,
+ FALSE, FALSE, FALSE },
+ { &IID_IDirect3DDevice3, NULL, NULL, CLASS_E_CLASSNOTAVAILABLE,
+ FALSE, FALSE, FALSE },
+ { &IID_IDirect3DDevice2, NULL, NULL, CLASS_E_CLASSNOTAVAILABLE,
+ FALSE, FALSE, FALSE },
+ { &IID_IDirect3DDevice, NULL, NULL, CLASS_E_CLASSNOTAVAILABLE,
+ FALSE, FALSE, FALSE },
+ { &IID_IDirect3D7, NULL, NULL, CLASS_E_CLASSNOTAVAILABLE,
+ FALSE, FALSE, FALSE },
+ { &IID_IDirect3D3, NULL, NULL, CLASS_E_CLASSNOTAVAILABLE,
+ FALSE, FALSE, FALSE },
+ { &IID_IDirect3D2, NULL, NULL, CLASS_E_CLASSNOTAVAILABLE,
+ FALSE, FALSE, FALSE },
+ { &IID_IDirect3D, NULL, NULL, CLASS_E_CLASSNOTAVAILABLE,
+ FALSE, FALSE, FALSE },
+ { &IID_IDirectDraw7, NULL, NULL, CLASS_E_CLASSNOTAVAILABLE,
+ FALSE, FALSE, FALSE },
+ { &IID_IDirectDraw4, NULL, NULL, CLASS_E_CLASSNOTAVAILABLE,
+ FALSE, FALSE, FALSE },
+ { &IID_IDirectDraw3, NULL, NULL, CLASS_E_CLASSNOTAVAILABLE,
+ FALSE, FALSE, FALSE },
+ { &IID_IDirectDraw2, NULL, NULL, CLASS_E_CLASSNOTAVAILABLE,
+ FALSE, FALSE, FALSE },
+ { &IID_IDirectDraw, NULL, NULL, CLASS_E_CLASSNOTAVAILABLE,
+ FALSE, FALSE, FALSE },
+ { &IID_IDirect3DLight, NULL, NULL, CLASS_E_CLASSNOTAVAILABLE,
+ FALSE, FALSE, FALSE },
+ { &IID_IUnknown, &IID_IDirect3DRMFrame2, &IID_IDirect3DRMFrame2, S_OK,
+ FALSE, FALSE, TRUE },
};
HRESULT hr;
IDirect3DRM *d3drm;
diff --git a/dlls/d3drm/tests/d3drm3.c b/dlls/d3drm/tests/d3drm3.c
index d60ddde..354a560 100644
--- a/dlls/d3drm/tests/d3drm3.c
+++ b/dlls/d3drm/tests/d3drm3.c
@@ -32,6 +32,30 @@
ok(count == rc_new, "Invalid refcount. Expected %d got %d\n", rc_new, count); \
}
+static const char* get_IID_string(const GUID* guid)
+{
+ if (IsEqualGUID(guid, &IID_IDirect3DRMFrame))
+ return "IID_IDirect3DRMFrame";
+ else if (IsEqualGUID(guid, &IID_IDirect3DRMFrame2))
+ return "IID_IDirect3DRMFrame2";
+ else if (IsEqualGUID(guid, &IID_IDirect3DRMFrame3))
+ return "IID_IDirect3DRMFrame3";
+ else if (IsEqualGUID(guid, &IID_IDirect3DRMMeshBuilder))
+ return "IID_IDirect3DRMMeshBuilder";
+ else if (IsEqualGUID(guid, &IID_IDirect3DRMMeshBuilder2))
+ return "IID_IDirect3DRMMeshBuilder2";
+ else if (IsEqualGUID(guid, &IID_IDirect3DRMMeshBuilder3))
+ return "IID_IDirect3DRMMeshBuilder3";
+ else if (IsEqualGUID(guid, &IID_IDirect3DRMObject))
+ return "IID_IDirect3DRMObject";
+ else if (IsEqualGUID(guid, &IID_IDirect3DRMVisual))
+ return "IID_IDirect3DRMVisual";
+ else if (IsEqualGUID(guid, &IID_IUnknown))
+ return "IID_IUnknown";
+
+ return "?";
+}
+
static int get_refcount(IUnknown *object)
{
IUnknown_AddRef(object);
@@ -42,20 +66,36 @@ struct qi_test
{
REFIID iid;
REFIID refcount_iid;
+ REFIID vtable_iid;
HRESULT hr;
BOOL refcount_todo;
+ BOOL vtable_equal;
+ BOOL vtable_todo;
};
static void test_qi(const char *test_name, IUnknown *base_iface,
REFIID refcount_iid, const struct qi_test *tests, UINT entry_count)
{
ULONG refcount, expected_refcount;
- IUnknown *iface1, *iface2;
+ IUnknown *iface1, *iface2, *vtable_iface;
HRESULT hr;
UINT i, j;
for (i = 0; i < entry_count; ++i)
{
+ if (tests[i].vtable_iid)
+ {
+ hr = IUnknown_QueryInterface(base_iface, tests[i].iid, (void **)&vtable_iface);
+ ok(hr == S_OK, "Got hr %#x for test \"%s\" %u.\n", hr, test_name, i);
+ if (tests[i].vtable_todo)
+ todo_wine ok((vtable_iface == base_iface) == tests[i].vtable_equal, "%s %s %s for test \"%s\".\n", get_IID_string(refcount_iid),
+ (vtable_iface == base_iface?"==":"!="), get_IID_string(tests[i].iid), test_name);
+ else
+ ok((vtable_iface == base_iface) == tests[i].vtable_equal, "%s %s %s for test \"%s\".\n", get_IID_string(refcount_iid),
+ (vtable_iface == base_iface?"==":"!="), get_IID_string(tests[i].iid), test_name);
+ IUnknown_Release(vtable_iface);
+ }
+
hr = IUnknown_QueryInterface(base_iface, tests[i].iid, (void **)&iface1);
ok(hr == tests[i].hr, "Got hr %#x for test \"%s\" %u.\n", hr, test_name, i);
if (SUCCEEDED(hr))
@@ -99,73 +139,140 @@ static void test_frame_qi(void)
{
static const struct qi_test tests[] =
{
- { &IID_IDirect3DRMFrame3, &IID_IDirect3DRMFrame3, S_OK, FALSE },
- { &IID_IDirect3DRMFrame2, &IID_IDirect3DRMFrame3, S_OK, FALSE },
- { &IID_IDirect3DRMFrame, &IID_IDirect3DRMFrame3, S_OK, FALSE },
- { &IID_IDirect3DRM, NULL, CLASS_E_CLASSNOTAVAILABLE, FALSE },
- { &IID_IDirect3DRMDevice, NULL, CLASS_E_CLASSNOTAVAILABLE, FALSE },
- { &IID_IDirect3DRMObject, &IID_IDirect3DRMFrame3, S_OK, FALSE },
- { &IID_IDirect3DRMDevice2, NULL, CLASS_E_CLASSNOTAVAILABLE, FALSE },
- { &IID_IDirect3DRMDevice3, NULL, CLASS_E_CLASSNOTAVAILABLE, FALSE },
- { &IID_IDirect3DRMViewport, NULL, CLASS_E_CLASSNOTAVAILABLE, FALSE },
- { &IID_IDirect3DRMViewport2, NULL, CLASS_E_CLASSNOTAVAILABLE, FALSE },
- { &IID_IDirect3DRM3, NULL, CLASS_E_CLASSNOTAVAILABLE, FALSE },
- { &IID_IDirect3DRM2, NULL, CLASS_E_CLASSNOTAVAILABLE, FALSE },
- { &IID_IDirect3DRMVisual, &IID_IDirect3DRMFrame3, S_OK, FALSE },
- { &IID_IDirect3DRMMesh, NULL, CLASS_E_CLASSNOTAVAILABLE, FALSE },
- { &IID_IDirect3DRMMeshBuilder, NULL, CLASS_E_CLASSNOTAVAILABLE, FALSE },
- { &IID_IDirect3DRMMeshBuilder2, NULL, CLASS_E_CLASSNOTAVAILABLE, FALSE },
- { &IID_IDirect3DRMMeshBuilder3, NULL, CLASS_E_CLASSNOTAVAILABLE, FALSE },
- { &IID_IDirect3DRMFace, NULL, CLASS_E_CLASSNOTAVAILABLE, FALSE },
- { &IID_IDirect3DRMFace2, NULL, CLASS_E_CLASSNOTAVAILABLE, FALSE },
- { &IID_IDirect3DRMLight, NULL, CLASS_E_CLASSNOTAVAILABLE, FALSE },
- { &IID_IDirect3DRMTexture, NULL, CLASS_E_CLASSNOTAVAILABLE, FALSE },
- { &IID_IDirect3DRMTexture2, NULL, CLASS_E_CLASSNOTAVAILABLE, FALSE },
- { &IID_IDirect3DRMTexture3, NULL, CLASS_E_CLASSNOTAVAILABLE, FALSE },
- { &IID_IDirect3DRMWrap, NULL, CLASS_E_CLASSNOTAVAILABLE, FALSE },
- { &IID_IDirect3DRMMaterial, NULL, CLASS_E_CLASSNOTAVAILABLE, FALSE },
- { &IID_IDirect3DRMMaterial2, NULL, CLASS_E_CLASSNOTAVAILABLE, FALSE },
- { &IID_IDirect3DRMAnimation, NULL, CLASS_E_CLASSNOTAVAILABLE, FALSE },
- { &IID_IDirect3DRMAnimation2, NULL, CLASS_E_CLASSNOTAVAILABLE, FALSE },
- { &IID_IDirect3DRMAnimationSet, NULL, CLASS_E_CLASSNOTAVAILABLE, FALSE },
- { &IID_IDirect3DRMAnimationSet2, NULL, CLASS_E_CLASSNOTAVAILABLE, FALSE },
- { &IID_IDirect3DRMObjectArray, NULL, CLASS_E_CLASSNOTAVAILABLE, FALSE },
- { &IID_IDirect3DRMDeviceArray, NULL, CLASS_E_CLASSNOTAVAILABLE, FALSE },
- { &IID_IDirect3DRMViewportArray, NULL, CLASS_E_CLASSNOTAVAILABLE, FALSE },
- { &IID_IDirect3DRMFrameArray, NULL, CLASS_E_CLASSNOTAVAILABLE, FALSE },
- { &IID_IDirect3DRMVisualArray, NULL, CLASS_E_CLASSNOTAVAILABLE, FALSE },
- { &IID_IDirect3DRMLightArray, NULL, CLASS_E_CLASSNOTAVAILABLE, FALSE },
- { &IID_IDirect3DRMPickedArray, NULL, CLASS_E_CLASSNOTAVAILABLE, FALSE },
- { &IID_IDirect3DRMFaceArray, NULL, CLASS_E_CLASSNOTAVAILABLE, FALSE },
- { &IID_IDirect3DRMAnimationArray, NULL, CLASS_E_CLASSNOTAVAILABLE, FALSE },
- { &IID_IDirect3DRMUserVisual, NULL, CLASS_E_CLASSNOTAVAILABLE, FALSE },
- { &IID_IDirect3DRMShadow, NULL, CLASS_E_CLASSNOTAVAILABLE, FALSE },
- { &IID_IDirect3DRMShadow2, NULL, CLASS_E_CLASSNOTAVAILABLE, FALSE },
- { &IID_IDirect3DRMInterpolator, NULL, CLASS_E_CLASSNOTAVAILABLE, FALSE },
- { &IID_IDirect3DRMProgressiveMesh, NULL, CLASS_E_CLASSNOTAVAILABLE, FALSE },
- { &IID_IDirect3DRMPicked2Array, NULL, CLASS_E_CLASSNOTAVAILABLE, FALSE },
- { &IID_IDirect3DRMClippedVisual, NULL, CLASS_E_CLASSNOTAVAILABLE, FALSE },
- { &IID_IDirectDrawClipper, NULL, CLASS_E_CLASSNOTAVAILABLE, FALSE },
- { &IID_IDirectDrawSurface7, NULL, CLASS_E_CLASSNOTAVAILABLE, FALSE },
- { &IID_IDirectDrawSurface4, NULL, CLASS_E_CLASSNOTAVAILABLE, FALSE },
- { &IID_IDirectDrawSurface3, NULL, CLASS_E_CLASSNOTAVAILABLE, FALSE },
- { &IID_IDirectDrawSurface2, NULL, CLASS_E_CLASSNOTAVAILABLE, FALSE },
- { &IID_IDirectDrawSurface, NULL, CLASS_E_CLASSNOTAVAILABLE, FALSE },
- { &IID_IDirect3DDevice7, NULL, CLASS_E_CLASSNOTAVAILABLE, FALSE },
- { &IID_IDirect3DDevice3, NULL, CLASS_E_CLASSNOTAVAILABLE, FALSE },
- { &IID_IDirect3DDevice2, NULL, CLASS_E_CLASSNOTAVAILABLE, FALSE },
- { &IID_IDirect3DDevice, NULL, CLASS_E_CLASSNOTAVAILABLE, FALSE },
- { &IID_IDirect3D7, NULL, CLASS_E_CLASSNOTAVAILABLE, FALSE },
- { &IID_IDirect3D3, NULL, CLASS_E_CLASSNOTAVAILABLE, FALSE },
- { &IID_IDirect3D2, NULL, CLASS_E_CLASSNOTAVAILABLE, FALSE },
- { &IID_IDirect3D, NULL, CLASS_E_CLASSNOTAVAILABLE, FALSE },
- { &IID_IDirectDraw7, NULL, CLASS_E_CLASSNOTAVAILABLE, FALSE },
- { &IID_IDirectDraw4, NULL, CLASS_E_CLASSNOTAVAILABLE, FALSE },
- { &IID_IDirectDraw3, NULL, CLASS_E_CLASSNOTAVAILABLE, FALSE },
- { &IID_IDirectDraw2, NULL, CLASS_E_CLASSNOTAVAILABLE, FALSE },
- { &IID_IDirectDraw, NULL, CLASS_E_CLASSNOTAVAILABLE, FALSE },
- { &IID_IDirect3DLight, NULL, CLASS_E_CLASSNOTAVAILABLE, FALSE },
- { &IID_IUnknown, &IID_IDirect3DRMFrame3, S_OK, FALSE },
+ { &IID_IDirect3DRMFrame3, &IID_IDirect3DRMFrame3, &IID_IDirect3DRMFrame3, S_OK,
+ FALSE, TRUE, FALSE },
+ { &IID_IDirect3DRMFrame2, &IID_IDirect3DRMFrame3, &IID_IDirect3DRMFrame3, S_OK,
+ FALSE, FALSE, FALSE },
+ { &IID_IDirect3DRMFrame, &IID_IDirect3DRMFrame3, &IID_IDirect3DRMFrame3, S_OK,
+ FALSE, FALSE, FALSE },
+ { &IID_IDirect3DRM, NULL, NULL, CLASS_E_CLASSNOTAVAILABLE,
+ FALSE, FALSE, FALSE },
+ { &IID_IDirect3DRMDevice, NULL, NULL, CLASS_E_CLASSNOTAVAILABLE,
+ FALSE, FALSE, FALSE },
+ { &IID_IDirect3DRMObject, &IID_IDirect3DRMFrame3, &IID_IDirect3DRMFrame3, S_OK,
+ FALSE, FALSE, FALSE },
+ { &IID_IDirect3DRMDevice2, NULL, NULL, CLASS_E_CLASSNOTAVAILABLE,
+ FALSE, FALSE, FALSE },
+ { &IID_IDirect3DRMDevice3, NULL, NULL, CLASS_E_CLASSNOTAVAILABLE,
+ FALSE, FALSE, FALSE },
+ { &IID_IDirect3DRMViewport, NULL, NULL, CLASS_E_CLASSNOTAVAILABLE,
+ FALSE, FALSE, FALSE },
+ { &IID_IDirect3DRMViewport2, NULL, NULL, CLASS_E_CLASSNOTAVAILABLE,
+ FALSE, FALSE, FALSE },
+ { &IID_IDirect3DRM3, NULL, NULL, CLASS_E_CLASSNOTAVAILABLE,
+ FALSE, FALSE, FALSE },
+ { &IID_IDirect3DRM2, NULL, NULL, CLASS_E_CLASSNOTAVAILABLE,
+ FALSE, FALSE, FALSE },
+ { &IID_IDirect3DRMVisual, &IID_IDirect3DRMFrame3, &IID_IDirect3DRMFrame3, S_OK,
+ FALSE, FALSE, FALSE },
+ { &IID_IDirect3DRMMesh, NULL, NULL, CLASS_E_CLASSNOTAVAILABLE,
+ FALSE, FALSE, FALSE },
+ { &IID_IDirect3DRMMeshBuilder, NULL, NULL, CLASS_E_CLASSNOTAVAILABLE,
+ FALSE, FALSE, FALSE },
+ { &IID_IDirect3DRMMeshBuilder2, NULL, NULL, CLASS_E_CLASSNOTAVAILABLE,
+ FALSE, FALSE, FALSE },
+ { &IID_IDirect3DRMMeshBuilder3, NULL, NULL, CLASS_E_CLASSNOTAVAILABLE,
+ FALSE, FALSE, FALSE },
+ { &IID_IDirect3DRMFace, NULL, NULL, CLASS_E_CLASSNOTAVAILABLE,
+ FALSE, FALSE, FALSE },
+ { &IID_IDirect3DRMFace2, NULL, NULL, CLASS_E_CLASSNOTAVAILABLE,
+ FALSE, FALSE, FALSE },
+ { &IID_IDirect3DRMLight, NULL, NULL, CLASS_E_CLASSNOTAVAILABLE,
+ FALSE, FALSE, FALSE },
+ { &IID_IDirect3DRMTexture, NULL, NULL, CLASS_E_CLASSNOTAVAILABLE,
+ FALSE, FALSE, FALSE },
+ { &IID_IDirect3DRMTexture2, NULL, NULL, CLASS_E_CLASSNOTAVAILABLE,
+ FALSE, FALSE, FALSE },
+ { &IID_IDirect3DRMTexture3, NULL, NULL, CLASS_E_CLASSNOTAVAILABLE,
+ FALSE, FALSE, FALSE },
+ { &IID_IDirect3DRMWrap, NULL, NULL, CLASS_E_CLASSNOTAVAILABLE,
+ FALSE, FALSE, FALSE },
+ { &IID_IDirect3DRMMaterial, NULL, NULL, CLASS_E_CLASSNOTAVAILABLE,
+ FALSE, FALSE, FALSE },
+ { &IID_IDirect3DRMMaterial2, NULL, NULL, CLASS_E_CLASSNOTAVAILABLE,
+ FALSE, FALSE, FALSE },
+ { &IID_IDirect3DRMAnimation, NULL, NULL, CLASS_E_CLASSNOTAVAILABLE,
+ FALSE, FALSE, FALSE },
+ { &IID_IDirect3DRMAnimation2, NULL, NULL, CLASS_E_CLASSNOTAVAILABLE,
+ FALSE, FALSE, FALSE },
+ { &IID_IDirect3DRMAnimationSet, NULL, NULL, CLASS_E_CLASSNOTAVAILABLE,
+ FALSE, FALSE, FALSE },
+ { &IID_IDirect3DRMAnimationSet2, NULL, NULL, CLASS_E_CLASSNOTAVAILABLE,
+ FALSE, FALSE, FALSE },
+ { &IID_IDirect3DRMObjectArray, NULL, NULL, CLASS_E_CLASSNOTAVAILABLE,
+ FALSE, FALSE, FALSE },
+ { &IID_IDirect3DRMDeviceArray, NULL, NULL, CLASS_E_CLASSNOTAVAILABLE,
+ FALSE, FALSE, FALSE },
+ { &IID_IDirect3DRMViewportArray, NULL, NULL, CLASS_E_CLASSNOTAVAILABLE,
+ FALSE, FALSE, FALSE },
+ { &IID_IDirect3DRMFrameArray, NULL, NULL, CLASS_E_CLASSNOTAVAILABLE,
+ FALSE, FALSE, FALSE },
+ { &IID_IDirect3DRMVisualArray, NULL, NULL, CLASS_E_CLASSNOTAVAILABLE,
+ FALSE, FALSE, FALSE },
+ { &IID_IDirect3DRMLightArray, NULL, NULL, CLASS_E_CLASSNOTAVAILABLE,
+ FALSE, FALSE, FALSE },
+ { &IID_IDirect3DRMPickedArray, NULL, NULL, CLASS_E_CLASSNOTAVAILABLE,
+ FALSE, FALSE, FALSE },
+ { &IID_IDirect3DRMFaceArray, NULL, NULL, CLASS_E_CLASSNOTAVAILABLE,
+ FALSE, FALSE, FALSE },
+ { &IID_IDirect3DRMAnimationArray, NULL, NULL, CLASS_E_CLASSNOTAVAILABLE,
+ FALSE, FALSE, FALSE },
+ { &IID_IDirect3DRMUserVisual, NULL, NULL, CLASS_E_CLASSNOTAVAILABLE,
+ FALSE, FALSE, FALSE },
+ { &IID_IDirect3DRMShadow, NULL, NULL, CLASS_E_CLASSNOTAVAILABLE,
+ FALSE, FALSE, FALSE },
+ { &IID_IDirect3DRMShadow2, NULL, NULL, CLASS_E_CLASSNOTAVAILABLE,
+ FALSE, FALSE, FALSE },
+ { &IID_IDirect3DRMInterpolator, NULL, NULL, CLASS_E_CLASSNOTAVAILABLE,
+ FALSE, FALSE, FALSE },
+ { &IID_IDirect3DRMProgressiveMesh, NULL, NULL, CLASS_E_CLASSNOTAVAILABLE,
+ FALSE, FALSE, FALSE },
+ { &IID_IDirect3DRMPicked2Array, NULL, NULL, CLASS_E_CLASSNOTAVAILABLE,
+ FALSE, FALSE, FALSE },
+ { &IID_IDirect3DRMClippedVisual, NULL, NULL, CLASS_E_CLASSNOTAVAILABLE,
+ FALSE, FALSE, FALSE },
+ { &IID_IDirectDrawClipper, NULL, NULL, CLASS_E_CLASSNOTAVAILABLE,
+ FALSE, FALSE, FALSE },
+ { &IID_IDirectDrawSurface7, NULL, NULL, CLASS_E_CLASSNOTAVAILABLE,
+ FALSE, FALSE, FALSE },
+ { &IID_IDirectDrawSurface4, NULL, NULL, CLASS_E_CLASSNOTAVAILABLE,
+ FALSE, FALSE, FALSE },
+ { &IID_IDirectDrawSurface3, NULL, NULL, CLASS_E_CLASSNOTAVAILABLE,
+ FALSE, FALSE, FALSE },
+ { &IID_IDirectDrawSurface2, NULL, NULL, CLASS_E_CLASSNOTAVAILABLE,
+ FALSE, FALSE, FALSE },
+ { &IID_IDirectDrawSurface, NULL, NULL, CLASS_E_CLASSNOTAVAILABLE,
+ FALSE, FALSE, FALSE },
+ { &IID_IDirect3DDevice7, NULL, NULL, CLASS_E_CLASSNOTAVAILABLE,
+ FALSE, FALSE, FALSE },
+ { &IID_IDirect3DDevice3, NULL, NULL, CLASS_E_CLASSNOTAVAILABLE,
+ FALSE, FALSE, FALSE },
+ { &IID_IDirect3DDevice2, NULL, NULL, CLASS_E_CLASSNOTAVAILABLE,
+ FALSE, FALSE, FALSE },
+ { &IID_IDirect3DDevice, NULL, NULL, CLASS_E_CLASSNOTAVAILABLE,
+ FALSE, FALSE, FALSE },
+ { &IID_IDirect3D7, NULL, NULL, CLASS_E_CLASSNOTAVAILABLE,
+ FALSE, FALSE, FALSE },
+ { &IID_IDirect3D3, NULL, NULL, CLASS_E_CLASSNOTAVAILABLE,
+ FALSE, FALSE, FALSE },
+ { &IID_IDirect3D2, NULL, NULL, CLASS_E_CLASSNOTAVAILABLE,
+ FALSE, FALSE, FALSE },
+ { &IID_IDirect3D, NULL, NULL, CLASS_E_CLASSNOTAVAILABLE,
+ FALSE, FALSE, FALSE },
+ { &IID_IDirectDraw7, NULL, NULL, CLASS_E_CLASSNOTAVAILABLE,
+ FALSE, FALSE, FALSE },
+ { &IID_IDirectDraw4, NULL, NULL, CLASS_E_CLASSNOTAVAILABLE,
+ FALSE, FALSE, FALSE },
+ { &IID_IDirectDraw3, NULL, NULL, CLASS_E_CLASSNOTAVAILABLE,
+ FALSE, FALSE, FALSE },
+ { &IID_IDirectDraw2, NULL, NULL, CLASS_E_CLASSNOTAVAILABLE,
+ FALSE, FALSE, FALSE },
+ { &IID_IDirectDraw, NULL, NULL, CLASS_E_CLASSNOTAVAILABLE,
+ FALSE, FALSE, FALSE },
+ { &IID_IDirect3DLight, NULL, NULL, CLASS_E_CLASSNOTAVAILABLE,
+ FALSE, FALSE, FALSE },
+ { &IID_IUnknown, &IID_IDirect3DRMFrame3, &IID_IDirect3DRMFrame3, S_OK,
+ FALSE, FALSE, FALSE },
};
HRESULT hr;
IDirect3DRM *d3drm;
--
1.9.3 (Apple Git-50)
More information about the wine-patches
mailing list