d3drm/tests: Add tests for IDirect3DRM*::CreateObject.

Signed-off-by: Aaryaman Vasishta <jem456.vasishta@gmail.com>
Signed-off-by: Henri Verbeet <hverbeet@codeweavers.com>
Signed-off-by: Alexandre Julliard <julliard@winehq.org>
oldstable
Aaryaman Vasishta 2016-04-11 23:34:31 +05:30 committed by Alexandre Julliard
parent bb4ead4c7c
commit 0e6578d16b
1 changed files with 102 additions and 0 deletions

View File

@ -1238,6 +1238,107 @@ static void CDECL destroy_callback1(IDirect3DRMObject *obj, void *arg)
ctxt->called++;
}
static void test_object(void)
{
static const struct
{
REFCLSID clsid;
REFIID iid;
}
tests[] =
{
{ &CLSID_CDirect3DRMDevice, &IID_IDirect3DRMDevice },
{ &CLSID_CDirect3DRMDevice, &IID_IDirect3DRMDevice2 },
{ &CLSID_CDirect3DRMDevice, &IID_IDirect3DRMDevice3 },
{ &CLSID_CDirect3DRMDevice, &IID_IDirect3DRMWinDevice },
{ &CLSID_CDirect3DRMTexture, &IID_IDirect3DRMTexture },
{ &CLSID_CDirect3DRMTexture, &IID_IDirect3DRMTexture2 },
{ &CLSID_CDirect3DRMTexture, &IID_IDirect3DRMTexture3 },
{ &CLSID_CDirect3DRMViewport, &IID_IDirect3DRMViewport },
{ &CLSID_CDirect3DRMViewport, &IID_IDirect3DRMViewport2 },
};
IDirect3DRM *d3drm1;
IDirect3DRM2 *d3drm2;
IDirect3DRM3 *d3drm3;
IUnknown *unknown;
HRESULT hr;
ULONG ref1, ref2, ref3, ref4;
int i;
hr = Direct3DRMCreate(&d3drm1);
ok(SUCCEEDED(hr), "Cannot get IDirect3DRM interface (hr = %#x).\n", hr);
ref1 = get_refcount((IUnknown *)d3drm1);
hr = IDirect3DRM_QueryInterface(d3drm1, &IID_IDirect3DRM2, (void **)&d3drm2);
ok(SUCCEEDED(hr), "Cannot get IDirect3DRM2 interface (hr = %#x).\n", hr);
hr = IDirect3DRM_QueryInterface(d3drm1, &IID_IDirect3DRM3, (void **)&d3drm3);
ok(SUCCEEDED(hr), "Cannot get IDirect3DRM3 interface (hr = %#x).\n", hr);
for (i = 0; i < sizeof(tests) / sizeof(*tests); ++i)
{
hr = IDirect3DRM_CreateObject(d3drm1, NULL, NULL, tests[i].iid, (void **)&unknown);
todo_wine ok(hr == D3DRMERR_BADVALUE, "Test %u: expected hr == D3DRMERR_BADVALUE, got %#x.\n", i, hr);
hr = IDirect3DRM_CreateObject(d3drm1, tests[i].clsid, NULL, NULL, (void **)&unknown);
todo_wine ok(hr == D3DRMERR_BADVALUE, "Test %u: expected hr == D3DRMERR_BADVALUE, got %#x.\n", i, hr);
hr = IDirect3DRM_CreateObject(d3drm1, tests[i].clsid, NULL, NULL, NULL);
todo_wine ok(hr == D3DRMERR_BADVALUE, "Test %u: expected hr == D3DRMERR_BADVALUE, got %#x.\n", i, hr);
hr = IDirect3DRM_CreateObject(d3drm1, tests[i].clsid, NULL, tests[i].iid, (void **)&unknown);
todo_wine ok(SUCCEEDED(hr), "Test %u: expected hr == D3DRM_OK, got %#x.\n", i, hr);
if (SUCCEEDED(hr))
{
ref2 = get_refcount((IUnknown *)d3drm1);
ok(ref2 == ref1, "Test %u: expected ref2 == ref1, got ref1 = %u, ref2 = %u.\n", i, ref1, ref2);
ref3 = get_refcount((IUnknown *)d3drm2);
ok(ref3 == ref1, "Test %u: expected ref3 == ref1, got ref1 = %u, ref3 = %u.\n", i, ref1, ref3);
ref4 = get_refcount((IUnknown *)d3drm3);
ok(ref4 == ref1, "Test %u: expected ref4 == ref1, got ref1 = %u, ref4 = %u.\n", i, ref1, ref4);
IUnknown_Release(unknown);
ref2 = get_refcount((IUnknown *)d3drm1);
ok(ref2 == ref1, "Test %u: expected ref2 == ref1, got ref1 = %u, ref2 = %u.\n", i, ref1, ref2);
ref3 = get_refcount((IUnknown *)d3drm2);
ok(ref3 == ref1, "Test %u: expected ref3 == ref1, got ref1 = %u, ref3 = %u.\n", i, ref1, ref3);
ref4 = get_refcount((IUnknown *)d3drm3);
ok(ref4 == ref1, "Test %u: expected ref4 == ref1, got ref1 = %u, ref4 = %u.\n", i, ref1, ref4);
hr = IDirect3DRM2_CreateObject(d3drm2, tests[i].clsid, NULL, tests[i].iid, (void **)&unknown);
ok(SUCCEEDED(hr), "Test %u: expected hr == D3DRM_OK, got %#x.\n", i, hr);
ref2 = get_refcount((IUnknown *)d3drm1);
ok(ref2 == ref1, "Test %u: expected ref2 == ref1, got ref1 = %u, ref2 = %u.\n", i, ref1, ref2);
ref3 = get_refcount((IUnknown *)d3drm2);
ok(ref3 == ref1, "Test %u: expected ref3 == ref1, got ref1 = %u, ref3 = %u.\n", i, ref1, ref3);
ref4 = get_refcount((IUnknown *)d3drm3);
ok(ref4 == ref1, "Test %u: expected ref4 == ref1, got ref1 = %u, ref4 = %u.\n", i, ref1, ref4);
IUnknown_Release(unknown);
ref2 = get_refcount((IUnknown *)d3drm1);
ok(ref2 == ref1, "Test %u: expected ref2 == ref1, got ref1 = %u, ref2 = %u.\n", i, ref1, ref2);
ref3 = get_refcount((IUnknown *)d3drm2);
ok(ref3 == ref1, "Test %u: expected ref3 == ref1, got ref1 = %u, ref3 = %u.\n", i, ref1, ref3);
ref4 = get_refcount((IUnknown *)d3drm3);
ok(ref4 == ref1, "Test %u: expected ref4 == ref1, got ref1 = %u, ref4 = %u.\n", i, ref1, ref4);
hr = IDirect3DRM3_CreateObject(d3drm3, tests[i].clsid, NULL, tests[i].iid, (void **)&unknown);
ok(SUCCEEDED(hr), "Test %u: expected hr == D3DRM_OK, got %#x.\n", i, hr);
ref2 = get_refcount((IUnknown *)d3drm1);
ok(ref2 == ref1, "Test %u: expected ref2 == ref1, got ref1 = %u, ref2 = %u.\n", i, ref1, ref2);
ref3 = get_refcount((IUnknown *)d3drm2);
ok(ref3 == ref1, "Test %u: expected ref3 == ref1, got ref1 = %u, ref3 = %u.\n", i, ref1, ref3);
ref4 = get_refcount((IUnknown *)d3drm3);
ok(ref4 == ref1, "Test %u: expected ref4 == ref1, got ref1 = %u, ref4 = %u.\n", i, ref1, ref4);
IUnknown_Release(unknown);
ref2 = get_refcount((IUnknown *)d3drm1);
ok(ref2 == ref1, "Test %u: expected ref2 == ref1, got ref1 = %u, ref2 = %u.\n", i, ref1, ref2);
ref3 = get_refcount((IUnknown *)d3drm2);
ok(ref3 == ref1, "Test %u: expected ref3 == ref1, got ref1 = %u, ref3 = %u.\n", i, ref1, ref3);
ref4 = get_refcount((IUnknown *)d3drm3);
ok(ref4 == ref1, "Test %u: expected ref4 == ref1, got ref1 = %u, ref4 = %u.\n", i, ref1, ref4);
}
}
IDirect3DRM_Release(d3drm1);
IDirect3DRM2_Release(d3drm2);
IDirect3DRM3_Release(d3drm3);
}
static void test_Viewport(void)
{
struct destroy_context context;
@ -4287,6 +4388,7 @@ START_TEST(d3drm)
test_Face();
test_Frame();
test_Device();
test_object();
test_Viewport();
test_Light();
test_Material2();