[4/4] d3drm/tests: Add tests for handling Lights

André Hentschel nerv at dawncrow.de
Tue May 1 15:17:11 CDT 2012


---
 dlls/d3drm/tests/d3drm.c |   89 ++++++++++++++++++++++++++++++++++++++++++++--
 1 file changed, 86 insertions(+), 3 deletions(-)

diff --git a/dlls/d3drm/tests/d3drm.c b/dlls/d3drm/tests/d3drm.c
index e5ab519..8864fff 100644
--- a/dlls/d3drm/tests/d3drm.c
+++ b/dlls/d3drm/tests/d3drm.c
@@ -411,6 +411,9 @@ static void test_Frame(void)
     LPDIRECT3DRMVISUAL pVisual1;
     LPDIRECT3DRMVISUAL pVisualTmp;
     LPDIRECT3DRMVISUALARRAY pVisualArray;
+    LPDIRECT3DRMLIGHT pLight1;
+    LPDIRECT3DRMLIGHT pLightTmp;
+    LPDIRECT3DRMLIGHTARRAY pLightArray;
     DWORD count;
 
     hr = pDirect3DRMCreate(&pD3DRM);
@@ -639,13 +642,92 @@ static void test_Frame(void)
     todo_wine CHECK_REFCOUNT(pFrameP1, 3);
     IDirect3DRMMeshBuilder_Release(pMeshBuilder);
 
+    /* [Add/Delete]Light with NULL pointer */
+    hr = IDirect3DRMFrame_AddLight(pFrameP1, NULL);
+    ok(hr == D3DRMERR_BADOBJECT, "Should have returned D3DRMERR_BADOBJECT (hr = %x)\n", hr);
+    todo_wine CHECK_REFCOUNT(pFrameP1, 3);
+
+    hr = IDirect3DRMFrame_DeleteLight(pFrameP1, NULL);
+    ok(hr == D3DRMERR_BADOBJECT, "Should have returned D3DRMERR_BADOBJECT (hr = %x)\n", hr);
+    todo_wine CHECK_REFCOUNT(pFrameP1, 3);
+
+    /* Create Light */
+    hr = IDirect3DRM_CreateLightRGB(pD3DRM, 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 = IDirect3DRMFrame_AddLight(pFrameP1, pLight1);
+    ok(hr == D3DRM_OK, "Cannot add light (hr = %x)\n", hr);
+    todo_wine CHECK_REFCOUNT(pFrameP1, 3);
+    CHECK_REFCOUNT(pLight1, 2);
+
+    pLightArray = NULL;
+    hr = IDirect3DRMFrame_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 = IDirect3DRMFrame_DeleteLight(pFrameP1, pLight1);
+    ok(hr == D3DRM_OK, "Cannot delete light (hr = %x)\n", hr);
+    todo_wine CHECK_REFCOUNT(pFrameP1, 3);
+    IDirect3DRMLight_Release(pLight1);
+
     /* Cleanup */
-    IDirect3DRMMeshBuilder_Release(pFrameP2);
+    IDirect3DRMFrame_Release(pFrameP2);
     CHECK_REFCOUNT(pFrameC, 2);
     todo_wine CHECK_REFCOUNT(pFrameP1, 3);
 
-    IDirect3DRMMeshBuilder_Release(pFrameC);
-    IDirect3DRMMeshBuilder_Release(pFrameP1);
+    IDirect3DRMFrame_Release(pFrameC);
+    IDirect3DRMFrame_Release(pFrameP1);
+
+    IDirect3DRM_Release(pD3DRM);
+}
+
+static void test_Light(void)
+{
+    HRESULT hr;
+    LPDIRECT3DRM pD3DRM;
+    LPDIRECT3DRMLIGHT pLight;
+    D3DRMLIGHTTYPE type;
+    D3DCOLOR color;
+
+    hr = pDirect3DRMCreate(&pD3DRM);
+    ok(hr == D3DRM_OK, "Cannot get IDirect3DRM interface (hr = %x)\n", hr);
+
+    hr = IDirect3DRM_CreateLightRGB(pD3DRM, D3DRMLIGHT_SPOT, 0.5, 0.5, 0.5, &pLight);
+    ok(hr == D3DRM_OK, "Cannot get IDirect3DRMLight interface (hr = %x)\n", hr);
+
+    type = IDirect3DRMLight_GetType(pLight);
+    todo_wine ok(type == D3DRMLIGHT_SPOT, "wrong type (%u)\n", type);
+
+    color = IDirect3DRMLight_GetColor(pLight);
+    todo_wine ok(color == 0xff7f7f7f, "wrong color (%x)\n", color);
+
+    hr = IDirect3DRMLight_SetType(pLight, D3DRMLIGHT_POINT);
+    todo_wine ok(hr == D3DRM_OK, "Cannot set type (hr = %x)\n", hr);
+    type = IDirect3DRMLight_GetType(pLight);
+    todo_wine ok(type == D3DRMLIGHT_POINT, "wrong type (%u)\n", type);
+
+    hr = IDirect3DRMLight_SetColor(pLight, 0xff180587);
+    todo_wine ok(hr == D3DRM_OK, "Cannot set color (hr = %x)\n", hr);
+    color = IDirect3DRMLight_GetColor(pLight);
+    todo_wine ok(color == 0xff180587, "wrong color (%x)\n", color);
+
+    hr = IDirect3DRMLight_SetColorRGB(pLight, 0.5, 0.5, 0.5);
+    todo_wine ok(hr == D3DRM_OK, "Cannot set color (hr = %x)\n", hr);
+    color = IDirect3DRMLight_GetColor(pLight);
+    todo_wine ok(color == 0xff7f7f7f, "wrong color (%x)\n", color);
+
+    IDirect3DRMLight_Release(pLight);
 
     IDirect3DRM_Release(pD3DRM);
 }
@@ -693,6 +775,7 @@ START_TEST(d3drm)
     test_MeshBuilder();
     test_MeshBuilder3();
     test_Frame();
+    test_Light();
     test_d3drm_load();
 
     FreeLibrary(d3drm_handle);
-- 

Best Regards, André Hentschel


More information about the wine-patches mailing list