d3drm/tests: Port IDirect3DRMFrame tests to IDirect3DRMFrame3
André Hentschel
nerv at dawncrow.de
Mon May 7 17:20:31 CDT 2012
---
dlls/d3drm/tests/d3drm.c | 323 +++++++++++++++++++++++++++++++++++++++++++++-
1 file changed, 320 insertions(+), 3 deletions(-)
diff --git a/dlls/d3drm/tests/d3drm.c b/dlls/d3drm/tests/d3drm.c
index 6fdc2f7..cecd2f3 100644
--- a/dlls/d3drm/tests/d3drm.c
+++ b/dlls/d3drm/tests/d3drm.c
@@ -477,7 +477,7 @@ static void test_Frame(void)
hr = IDirect3DRMFrame_GetChildren(pFrameP1, &pArray);
ok(hr == D3DRM_OK, "Cannot get children (hr = %x)\n", hr);
/* In some older version of d3drm, creating IDirect3DRMFrameArray object with GetChildren does not increment refcount of children frames */
- ok((get_refcount((IUnknown*)pFrameC) == 3) || broken(get_refcount((IUnknown*)pFrameC) == 2), "Invalid refcount. Expected 3 (or 2) got %d\n", get_refcount((IUnknown*)pFrameC)); \
+ ok((get_refcount((IUnknown*)pFrameC) == 3) || broken(get_refcount((IUnknown*)pFrameC) == 2), "Invalid refcount. Expected 3 (or 2) got %d\n", get_refcount((IUnknown*)pFrameC));
if (pArray)
{
count = IDirect3DRMFrameArray_GetSize(pArray);
@@ -485,9 +485,9 @@ static void test_Frame(void)
hr = IDirect3DRMFrameArray_GetElement(pArray, 0, &pFrameTmp);
ok(hr == D3DRM_OK, "Cannot get element (hr = %x)\n", hr);
ok(pFrameTmp == pFrameC, "pFrameTmp = %p\n", pFrameTmp);
- ok((get_refcount((IUnknown*)pFrameC) == 4) || broken(get_refcount((IUnknown*)pFrameC) == 3), "Invalid refcount. Expected 4 (or 3) got %d\n", get_refcount((IUnknown*)pFrameC)); \
+ ok((get_refcount((IUnknown*)pFrameC) == 4) || broken(get_refcount((IUnknown*)pFrameC) == 3), "Invalid refcount. Expected 4 (or 3) got %d\n", get_refcount((IUnknown*)pFrameC));
IDirect3DRMFrame_Release(pFrameTmp);
- ok((get_refcount((IUnknown*)pFrameC) == 3) || broken(get_refcount((IUnknown*)pFrameC) == 2), "Invalid refcount. Expected 3 (or 2) got %d\n", get_refcount((IUnknown*)pFrameC)); \
+ ok((get_refcount((IUnknown*)pFrameC) == 3) || broken(get_refcount((IUnknown*)pFrameC) == 2), "Invalid refcount. Expected 3 (or 2) got %d\n", get_refcount((IUnknown*)pFrameC));
IDirect3DRMFrameArray_Release(pArray);
CHECK_REFCOUNT(pFrameC, 2);
}
@@ -701,6 +701,322 @@ static void test_Frame(void)
IDirect3DRM_Release(pD3DRM);
}
+static void test_Frame3(void)
+{
+ HRESULT hr;
+ LPDIRECT3DRM pD3DRM;
+ LPDIRECT3DRM3 pD3DRM3;
+ LPDIRECT3DRMFRAME3 pFrameC;
+ LPDIRECT3DRMFRAME3 pFrameP1;
+ LPDIRECT3DRMFRAME3 pFrameP2;
+ LPDIRECT3DRMFRAME3 pFrameTmp;
+ LPDIRECT3DRMFRAME pFrameTmpC;
+ LPDIRECT3DRMFRAMEARRAY pArray;
+ LPDIRECT3DRMMESHBUILDER3 pMeshBuilder;
+ LPDIRECT3DRMVISUAL pVisual1;
+ LPDIRECT3DRMVISUAL pVisualTmp;
+ LPDIRECT3DRMVISUALARRAY pVisualArray;
+ LPDIRECT3DRMLIGHT pLight1;
+ LPDIRECT3DRMLIGHT pLightTmp;
+ LPDIRECT3DRMLIGHTARRAY pLightArray;
+ DWORD count;
+
+ hr = pDirect3DRMCreate(&pD3DRM);
+ ok(hr == D3DRM_OK, "Cannot get IDirect3DRM interface (hr = %x)\n", hr);
+
+ hr = IDirect3DRM_QueryInterface(pD3DRM, &IID_IDirect3DRM3, (LPVOID*)&pD3DRM3);
+ if (FAILED(hr))
+ {
+ win_skip("Cannot get IDirect3DRM3 interface (hr = %x), skipping tests\n", hr);
+ IDirect3DRM_Release(pD3DRM);
+ return;
+ }
+
+ hr = IDirect3DRM3_CreateFrame(pD3DRM3, NULL, &pFrameC);
+ ok(hr == D3DRM_OK, "Cannot get IDirect3DRMFrame3 interface (hr = %x)\n", hr);
+ CHECK_REFCOUNT(pFrameC, 1);
+
+ hr = IDirect3DRMFrame3_GetParent(pFrameC, NULL);
+ ok(hr == D3DRMERR_BADVALUE, "Should fail and return D3DRM_BADVALUE (hr = %x)\n", hr);
+ pFrameTmp = (void*)0xdeadbeef;
+ hr = IDirect3DRMFrame3_GetParent(pFrameC, &pFrameTmp);
+ ok(hr == D3DRM_OK, "Cannot get parent frame (hr = %x)\n", hr);
+ ok(pFrameTmp == NULL, "pFrameTmp = %p\n", pFrameTmp);
+ CHECK_REFCOUNT(pFrameC, 1);
+
+ pArray = NULL;
+ hr = IDirect3DRMFrame3_GetChildren(pFrameC, &pArray);
+ ok(hr == D3DRM_OK, "Cannot get children (hr = %x)\n", hr);
+ ok(pArray != NULL, "pArray = %p\n", pArray);
+ if (pArray)
+ {
+ count = IDirect3DRMFrameArray_GetSize(pArray);
+ ok(count == 0, "count = %u\n", count);
+ hr = IDirect3DRMFrameArray_GetElement(pArray, 0, (LPDIRECT3DRMFRAME*)&pFrameTmp);
+ ok(hr == D3DRMERR_BADVALUE, "Should have returned D3DRMERR_BADVALUE (hr = %x)\n", hr);
+ ok(pFrameTmp == NULL, "pFrameTmp = %p\n", pFrameTmp);
+ IDirect3DRMFrameArray_Release(pArray);
+ }
+
+ hr = IDirect3DRM3_CreateFrame(pD3DRM3, NULL, &pFrameP1);
+ ok(hr == D3DRM_OK, "Cannot get IDirect3DRMFrame interface (hr = %x)\n", hr);
+
+ /* GetParent with NULL pointer */
+ hr = IDirect3DRMFrame3_GetParent(pFrameP1, NULL);
+ ok(hr == D3DRMERR_BADVALUE, "Should have returned D3DRMERR_BADVALUE (hr = %x)\n", hr);
+ CHECK_REFCOUNT(pFrameP1, 1);
+
+ /* [Add/Delete]Child with NULL pointer */
+ hr = IDirect3DRMFrame3_AddChild(pFrameP1, NULL);
+ ok(hr == D3DRMERR_BADOBJECT, "Should have returned D3DRMERR_BADOBJECT (hr = %x)\n", hr);
+ CHECK_REFCOUNT(pFrameP1, 1);
+
+ hr = IDirect3DRMFrame3_DeleteChild(pFrameP1, NULL);
+ ok(hr == D3DRMERR_BADOBJECT, "Should have returned D3DRMERR_BADOBJECT (hr = %x)\n", hr);
+ CHECK_REFCOUNT(pFrameP1, 1);
+
+ /* Add child to first parent */
+ pFrameTmp = (void*)0xdeadbeef;
+ hr = IDirect3DRMFrame3_GetParent(pFrameP1, &pFrameTmp);
+ ok(hr == D3DRM_OK, "Cannot get parent frame (hr = %x)\n", hr);
+ ok(pFrameTmp == NULL, "pFrameTmp = %p\n", pFrameTmp);
+
+ hr = IDirect3DRMFrame3_AddChild(pFrameP1, pFrameC);
+ ok(hr == D3DRM_OK, "Cannot add child frame (hr = %x)\n", hr);
+ CHECK_REFCOUNT(pFrameP1, 1);
+ CHECK_REFCOUNT(pFrameC, 2);
+
+ pArray = NULL;
+ hr = IDirect3DRMFrame3_GetChildren(pFrameP1, &pArray);
+ ok(hr == D3DRM_OK, "Cannot get children (hr = %x)\n", hr);
+ CHECK_REFCOUNT(pFrameC, 3);
+ if (pArray)
+ {
+ count = IDirect3DRMFrameArray_GetSize(pArray);
+ ok(count == 1, "count = %u\n", count);
+ hr = IDirect3DRMFrameArray_GetElement(pArray, 0, &pFrameTmpC);
+ ok(hr == D3DRM_OK, "Cannot get element (hr = %x)\n", hr);
+ ok(pFrameTmpC != (LPDIRECT3DRMFRAME)pFrameC, "pFrameTmpC = %p\n", pFrameTmpC);
+ CHECK_REFCOUNT(pFrameC, 4);
+ IDirect3DRMFrame_Release(pFrameTmpC);
+ IDirect3DRMFrameArray_Release(pArray);
+ CHECK_REFCOUNT(pFrameC, 2);
+ }
+
+ pFrameTmp = (void*)0xdeadbeef;
+ hr = IDirect3DRMFrame3_GetParent(pFrameC, &pFrameTmp);
+ ok(hr == D3DRM_OK, "Cannot get parent frame (hr = %x)\n", hr);
+ ok(pFrameTmp == pFrameP1, "pFrameTmp = %p\n", pFrameTmp);
+ CHECK_REFCOUNT(pFrameP1, 2);
+
+ /* Add child to second parent */
+ hr = IDirect3DRM3_CreateFrame(pD3DRM3, NULL, &pFrameP2);
+ ok(hr == D3DRM_OK, "Cannot get IDirect3DRMFrame interface (hr = %x)\n", hr);
+
+ hr = IDirect3DRMFrame3_AddChild(pFrameP2, pFrameC);
+ ok(hr == D3DRM_OK, "Cannot add child frame (hr = %x)\n", hr);
+ CHECK_REFCOUNT(pFrameC, 2);
+
+ pArray = NULL;
+ hr = IDirect3DRMFrame3_GetChildren(pFrameP2, &pArray);
+ ok(hr == D3DRM_OK, "Cannot get children (hr = %x)\n", hr);
+ if (pArray)
+ {
+ count = IDirect3DRMFrameArray_GetSize(pArray);
+ ok(count == 1, "count = %u\n", count);
+ hr = IDirect3DRMFrameArray_GetElement(pArray, 0, &pFrameTmpC);
+ ok(hr == D3DRM_OK, "Cannot get element (hr = %x)\n", hr);
+ ok(pFrameTmpC != (LPDIRECT3DRMFRAME)pFrameC, "pFrameTmpC = %p\n", pFrameTmpC);
+ IDirect3DRMFrame_Release(pFrameTmpC);
+ IDirect3DRMFrameArray_Release(pArray);
+ }
+
+ pArray = NULL;
+ hr = IDirect3DRMFrame3_GetChildren(pFrameP1, &pArray);
+ ok(hr == D3DRM_OK, "Cannot get children (hr = %x)\n", hr);
+ if (pArray)
+ {
+ count = IDirect3DRMFrameArray_GetSize(pArray);
+ ok(count == 0, "count = %u\n", count);
+ pFrameTmp = (void*)0xdeadbeef;
+ hr = IDirect3DRMFrameArray_GetElement(pArray, 0, &pFrameTmpC);
+ ok(hr == D3DRMERR_BADVALUE, "Should have returned D3DRMERR_BADVALUE (hr = %x)\n", hr);
+ ok(pFrameTmpC == NULL, "pFrameTmpC = %p\n", pFrameTmpC);
+ IDirect3DRMFrameArray_Release(pArray);
+ }
+
+ pFrameTmp = (void*)0xdeadbeef;
+ hr = IDirect3DRMFrame3_GetParent(pFrameC, &pFrameTmp);
+ ok(hr == D3DRM_OK, "Cannot get parent frame (hr = %x)\n", hr);
+ ok(pFrameTmp == pFrameP2, "pFrameTmp = %p\n", pFrameTmp);
+ CHECK_REFCOUNT(pFrameP2, 2);
+ CHECK_REFCOUNT(pFrameC, 2);
+
+ /* Add child again */
+ hr = IDirect3DRMFrame3_AddChild(pFrameP2, pFrameC);
+ ok(hr == D3DRM_OK, "Cannot add child frame (hr = %x)\n", hr);
+ CHECK_REFCOUNT(pFrameC, 2);
+
+ pArray = NULL;
+ hr = IDirect3DRMFrame3_GetChildren(pFrameP2, &pArray);
+ ok(hr == D3DRM_OK, "Cannot get children (hr = %x)\n", hr);
+ if (pArray)
+ {
+ count = IDirect3DRMFrameArray_GetSize(pArray);
+ ok(count == 1, "count = %u\n", count);
+ hr = IDirect3DRMFrameArray_GetElement(pArray, 0, &pFrameTmpC);
+ ok(hr == D3DRM_OK, "Cannot get element (hr = %x)\n", hr);
+ ok(pFrameTmpC != (LPDIRECT3DRMFRAME)pFrameC, "pFrameTmpC = %p\n", pFrameTmpC);
+ IDirect3DRMFrame_Release(pFrameTmpC);
+ IDirect3DRMFrameArray_Release(pArray);
+ }
+
+ /* Delete child */
+ hr = IDirect3DRMFrame3_DeleteChild(pFrameP2, pFrameC);
+ ok(hr == D3DRM_OK, "Cannot delete child frame (hr = %x)\n", hr);
+ CHECK_REFCOUNT(pFrameC, 1);
+
+ pArray = NULL;
+ hr = IDirect3DRMFrame3_GetChildren(pFrameP2, &pArray);
+ ok(hr == D3DRM_OK, "Cannot get children (hr = %x)\n", hr);
+ if (pArray)
+ {
+ count = IDirect3DRMFrameArray_GetSize(pArray);
+ ok(count == 0, "count = %u\n", count);
+ pFrameTmp = (void*)0xdeadbeef;
+ hr = IDirect3DRMFrameArray_GetElement(pArray, 0, &pFrameTmpC);
+ ok(hr == D3DRMERR_BADVALUE, "Should have returned D3DRMERR_BADVALUE (hr = %x)\n", hr);
+ ok(pFrameTmpC == NULL, "pFrameTmpC = %p\n", pFrameTmpC);
+ IDirect3DRMFrameArray_Release(pArray);
+ }
+
+ pFrameTmp = (void*)0xdeadbeef;
+ hr = IDirect3DRMFrame3_GetParent(pFrameC, &pFrameTmp);
+ ok(hr == D3DRM_OK, "Cannot get parent frame (hr = %x)\n", hr);
+ ok(pFrameTmp == NULL, "pFrameTmp = %p\n", pFrameTmp);
+
+ /* Add two children */
+ hr = IDirect3DRMFrame3_AddChild(pFrameP2, pFrameC);
+ ok(hr == D3DRM_OK, "Cannot add child frame (hr = %x)\n", hr);
+ CHECK_REFCOUNT(pFrameC, 2);
+
+ hr = IDirect3DRMFrame3_AddChild(pFrameP2, pFrameP1);
+ ok(hr == D3DRM_OK, "Cannot add child frame (hr = %x)\n", hr);
+ CHECK_REFCOUNT(pFrameP1, 3);
+
+ pArray = NULL;
+ hr = IDirect3DRMFrame3_GetChildren(pFrameP2, &pArray);
+ ok(hr == D3DRM_OK, "Cannot get children (hr = %x)\n", hr);
+ if (pArray)
+ {
+ count = IDirect3DRMFrameArray_GetSize(pArray);
+ ok(count == 2, "count = %u\n", count);
+ hr = IDirect3DRMFrameArray_GetElement(pArray, 0, &pFrameTmpC);
+ ok(hr == D3DRM_OK, "Cannot get element (hr = %x)\n", hr);
+ ok(pFrameTmpC != (LPDIRECT3DRMFRAME)pFrameC, "pFrameTmpC = %p\n", pFrameTmpC);
+ IDirect3DRMFrame_Release(pFrameTmpC);
+ hr = IDirect3DRMFrameArray_GetElement(pArray, 1, &pFrameTmpC);
+ ok(hr == D3DRM_OK, "Cannot get element (hr = %x)\n", hr);
+ ok(pFrameTmpC != (LPDIRECT3DRMFRAME)pFrameP1, "pFrameTmpC = %p\n", pFrameTmpC);
+ IDirect3DRMFrame_Release(pFrameTmpC);
+ IDirect3DRMFrameArray_Release(pArray);
+ }
+
+ /* [Add/Delete]Visual with NULL pointer */
+ if (0) /* crashes on native */
+ {
+ hr = IDirect3DRMFrame3_AddVisual(pFrameP1, NULL);
+ ok(hr == D3DRMERR_BADOBJECT, "Should have returned D3DRMERR_BADOBJECT (hr = %x)\n", hr);
+ CHECK_REFCOUNT(pFrameP1, 3);
+
+ hr = IDirect3DRMFrame3_DeleteVisual(pFrameP1, NULL);
+ ok(hr == D3DRMERR_BADOBJECT, "Should have returned D3DRMERR_BADOBJECT (hr = %x)\n", hr);
+ CHECK_REFCOUNT(pFrameP1, 3);
+ }
+
+ /* Create Visual */
+ hr = IDirect3DRM3_CreateMeshBuilder(pD3DRM3, &pMeshBuilder);
+ ok(hr == D3DRM_OK, "Cannot get IDirect3DRMMeshBuilder interface (hr = %x)\n", hr);
+ pVisual1 = (LPDIRECT3DRMVISUAL)pMeshBuilder;
+
+ /* Add Visual to first parent */
+ hr = IDirect3DRMFrame3_AddVisual(pFrameP1, (LPUNKNOWN)pVisual1);
+ ok(hr == D3DRM_OK, "Cannot add visual (hr = %x)\n", hr);
+ CHECK_REFCOUNT(pFrameP1, 3);
+ CHECK_REFCOUNT(pVisual1, 2);
+
+ pVisualArray = NULL;
+ count = 1;
+ hr = IDirect3DRMFrame3_GetVisuals(pFrameP1, &count, (LPUNKNOWN*)&pVisualArray);
+ todo_wine ok(hr == D3DRM_OK, "Cannot get visuals (hr = %x)\n", hr);
+ if (0) /* crashes on native */
+ {
+ count = IDirect3DRMVisualArray_GetSize(pVisualArray);
+ ok(count == 1, "count = %u\n", count);
+ hr = IDirect3DRMVisualArray_GetElement(pVisualArray, 0, &pVisualTmp);
+ ok(hr == D3DRM_OK, "Cannot get element (hr = %x)\n", hr);
+ ok(pVisualTmp == pVisual1, "pVisualTmp = %p\n", pVisualTmp);
+ IDirect3DRMVisual_Release(pVisualTmp);
+ IDirect3DRMVisualArray_Release(pVisualArray);
+ }
+
+ /* Delete Visual */
+ hr = IDirect3DRMFrame3_DeleteVisual(pFrameP1, (LPUNKNOWN)pVisual1);
+ ok(hr == D3DRM_OK, "Cannot delete visual (hr = %x)\n", hr);
+ CHECK_REFCOUNT(pFrameP1, 3);
+ IDirect3DRMMeshBuilder_Release(pMeshBuilder);
+
+ /* [Add/Delete]Light with NULL pointer */
+ hr = IDirect3DRMFrame3_AddLight(pFrameP1, NULL);
+ ok(hr == D3DRMERR_BADOBJECT, "Should have returned D3DRMERR_BADOBJECT (hr = %x)\n", hr);
+ CHECK_REFCOUNT(pFrameP1, 3);
+
+ hr = IDirect3DRMFrame3_DeleteLight(pFrameP1, NULL);
+ ok(hr == D3DRMERR_BADOBJECT, "Should have returned D3DRMERR_BADOBJECT (hr = %x)\n", hr);
+ CHECK_REFCOUNT(pFrameP1, 3);
+
+ /* Create Light */
+ hr = IDirect3DRM3_CreateLightRGB(pD3DRM3, D3DRMLIGHT_SPOT, 0.1, 0.2, 0.3, &pLight1);
+ ok(hr == D3DRM_OK, "Cannot get IDirect3DRMLight interface (hr = %x)\n", hr);
+
+ /* Add Light to first parent */
+ hr = IDirect3DRMFrame3_AddLight(pFrameP1, pLight1);
+ ok(hr == D3DRM_OK, "Cannot add light (hr = %x)\n", hr);
+ CHECK_REFCOUNT(pFrameP1, 3);
+ CHECK_REFCOUNT(pLight1, 2);
+
+ pLightArray = NULL;
+ hr = IDirect3DRMFrame3_GetLights(pFrameP1, &pLightArray);
+ todo_wine ok(hr == D3DRM_OK, "Cannot get lights (hr = %x)\n", hr);
+ if (pLightArray)
+ {
+ count = IDirect3DRMLightArray_GetSize(pLightArray);
+ ok(count == 1, "count = %u\n", count);
+ hr = IDirect3DRMLightArray_GetElement(pLightArray, 0, &pLightTmp);
+ ok(hr == D3DRM_OK, "Cannot get element (hr = %x)\n", hr);
+ ok(pLightTmp == pLight1, "pLightTmp = %p\n", pLightTmp);
+ IDirect3DRMLight_Release(pLightTmp);
+ IDirect3DRMLightArray_Release(pLightArray);
+ }
+
+ /* Delete Light */
+ hr = IDirect3DRMFrame3_DeleteLight(pFrameP1, pLight1);
+ ok(hr == D3DRM_OK, "Cannot delete light (hr = %x)\n", hr);
+ CHECK_REFCOUNT(pFrameP1, 3);
+ IDirect3DRMLight_Release(pLight1);
+
+ /* Cleanup */
+ IDirect3DRMFrame3_Release(pFrameP2);
+ CHECK_REFCOUNT(pFrameC, 2);
+ CHECK_REFCOUNT(pFrameP1, 3);
+
+ IDirect3DRMFrame3_Release(pFrameC);
+ IDirect3DRMFrame3_Release(pFrameP1);
+
+ IDirect3DRM3_Release(pD3DRM3);
+ IDirect3DRM3_Release(pD3DRM);
+}
+
static void test_Light(void)
{
HRESULT hr;
@@ -784,6 +1100,7 @@ START_TEST(d3drm)
test_MeshBuilder();
test_MeshBuilder3();
test_Frame();
+ test_Frame3();
test_Light();
test_d3drm_load();
--
Best Regards, André Hentschel
More information about the wine-patches
mailing list