Module: wine Branch: master Commit: 0e6578d16bb8d61a8746c1c3312475ef65b4b4b4 URL: http://source.winehq.org/git/wine.git/?a=commit;h=0e6578d16bb8d61a8746c1c331...
Author: Aaryaman Vasishta jem456.vasishta@gmail.com Date: Mon Apr 11 23:52:31 2016 +0530
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
---
dlls/d3drm/tests/d3drm.c | 102 +++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 102 insertions(+)
diff --git a/dlls/d3drm/tests/d3drm.c b/dlls/d3drm/tests/d3drm.c index c94d31e..72691f7 100644 --- a/dlls/d3drm/tests/d3drm.c +++ b/dlls/d3drm/tests/d3drm.c @@ -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();