Nikolay Sivov : d3drm/tests: Some tests for animation keys handling.

Alexandre Julliard julliard at winehq.org
Mon Jul 3 15:56:46 CDT 2017


Module: wine
Branch: master
Commit: 31763493873e9991e2e0af5b6660ffb7da30366f
URL:    http://source.winehq.org/git/wine.git/?a=commit;h=31763493873e9991e2e0af5b6660ffb7da30366f

Author: Nikolay Sivov <nsivov at codeweavers.com>
Date:   Fri Jun 30 10:41:22 2017 +0300

d3drm/tests: Some tests for animation keys handling.

Signed-off-by: Nikolay Sivov <nsivov at codeweavers.com>
Signed-off-by: Henri Verbeet <hverbeet at codeweavers.com>
Signed-off-by: Alexandre Julliard <julliard at winehq.org>

---

 dlls/d3drm/tests/d3drm.c | 140 +++++++++++++++++++++++++++++++++++++++++++++++
 1 file changed, 140 insertions(+)

diff --git a/dlls/d3drm/tests/d3drm.c b/dlls/d3drm/tests/d3drm.c
index 950edb1..dcc6dd2 100644
--- a/dlls/d3drm/tests/d3drm.c
+++ b/dlls/d3drm/tests/d3drm.c
@@ -6708,10 +6708,15 @@ static void test_animation(void)
     IDirect3DRMAnimation *animation;
     D3DRMANIMATIONOPTIONS options;
     IDirect3DRMObject *obj, *obj2;
+    D3DRMANIMATIONKEY keys[10];
     IDirect3DRMFrame3 *frame3;
     IDirect3DRMFrame *frame;
+    D3DRMANIMATIONKEY key;
     IDirect3DRM *d3drm1;
+    D3DRMQUATERNION q;
+    DWORD count, i;
     HRESULT hr;
+    D3DVECTOR v;
 
     hr = Direct3DRMCreate(&d3drm1);
     ok(SUCCEEDED(hr), "Failed to create IDirect3DRM instance, hr 0x%08x.\n", hr);
@@ -6829,6 +6834,141 @@ static void test_animation(void)
     options = IDirect3DRMAnimation_GetOptions(animation);
     ok(options == D3DRMANIMATION_OPEN, "Unexpected options %#x.\n", options);
 
+    /* Key management. */
+    hr = IDirect3DRMAnimation_AddPositionKey(animation, 0.0f, 1.0f, 0.0f, 0.0f);
+todo_wine
+    ok(SUCCEEDED(hr), "Failed to add position key, hr %#x.\n", hr);
+
+if (hr == S_OK)
+{
+    hr = IDirect3DRMAnimation_AddScaleKey(animation, 0.0f, 1.0f, 2.0f, 1.0f);
+    ok(SUCCEEDED(hr), "Failed to add scale key, hr %#x.\n", hr);
+
+    hr = IDirect3DRMAnimation_AddPositionKey(animation, 0.0f, 2.0f, 0.0f, 0.0f);
+    ok(SUCCEEDED(hr), "Failed to add position key, hr %#x.\n", hr);
+
+    hr = IDirect3DRMAnimation_AddPositionKey(animation, 99.0f, 3.0f, 1.0f, 0.0f);
+    ok(SUCCEEDED(hr), "Failed to add position key, hr %#x.\n", hr);
+
+    hr = IDirect3DRMAnimation_AddPositionKey(animation, 80.0f, 4.0f, 1.0f, 0.0f);
+    ok(SUCCEEDED(hr), "Failed to add position key, hr %#x.\n", hr);
+
+    v.x = 1.0f;
+    v.y = 0.0f;
+    v.z = 0.0f;
+    D3DRMQuaternionFromRotation(&q, &v, 1.0f);
+
+    hr = IDirect3DRMAnimation_AddRotateKey(animation, 0.0f, &q);
+    ok(SUCCEEDED(hr), "Failed to add rotation key, hr %#.x\n", hr);
+
+    count = 0;
+    memset(keys, 0, sizeof(keys));
+    hr = IDirect3DRMAnimation2_GetKeys(animation2, 0.0f, 99.0f, &count, keys);
+    ok(SUCCEEDED(hr), "Failed to get animation keys, hr %#x.\n", hr);
+    ok(count == 6, "Unexpected key count %u.\n", count);
+
+    ok(keys[0].dwKeyType == D3DRMANIMATION_ROTATEKEY, "Unexpected key type %u.\n", keys[0].dwKeyType);
+    ok(keys[1].dwKeyType == D3DRMANIMATION_POSITIONKEY, "Unexpected key type %u.\n", keys[1].dwKeyType);
+    ok(keys[2].dwKeyType == D3DRMANIMATION_POSITIONKEY, "Unexpected key type %u.\n", keys[2].dwKeyType);
+    ok(keys[3].dwKeyType == D3DRMANIMATION_POSITIONKEY, "Unexpected key type %u.\n", keys[3].dwKeyType);
+    ok(keys[4].dwKeyType == D3DRMANIMATION_POSITIONKEY, "Unexpected key type %u.\n", keys[4].dwKeyType);
+    ok(keys[5].dwKeyType == D3DRMANIMATION_SCALEKEY, "Unexpected key type %u.\n", keys[5].dwKeyType);
+
+    /* Relative order, keys are returned sorted by time. */
+    ok(keys[1].dvTime == 0.0f, "Unexpected key time %.8e.\n", keys[1].dvTime);
+    ok(keys[2].dvTime == 0.0f, "Unexpected key time %.8e.\n", keys[2].dvTime);
+    ok(keys[3].dvTime == 80.0f, "Unexpected key time %.8e.\n", keys[3].dvTime);
+    ok(keys[4].dvTime == 99.0f, "Unexpected key time %.8e.\n", keys[4].dvTime);
+
+    /* For keys with same time, order they were added in is kept. */
+    ok(keys[1].dvPositionKey.x == 1.0f, "Unexpected key position x %.8e.\n", keys[1].dvPositionKey.x);
+    ok(keys[2].dvPositionKey.x == 2.0f, "Unexpected key position x %.8e.\n", keys[2].dvPositionKey.x);
+    ok(keys[3].dvPositionKey.x == 4.0f, "Unexpected key position x %.8e.\n", keys[3].dvPositionKey.x);
+    ok(keys[4].dvPositionKey.x == 3.0f, "Unexpected key position x %.8e.\n", keys[4].dvPositionKey.x);
+
+    for (i = 0; i < count; i++)
+    {
+        ok(keys[i].dwSize == sizeof(*keys), "%u: unexpected dwSize value %u.\n", i, keys[i].dwSize);
+
+        switch (keys[i].dwKeyType)
+        {
+        case D3DRMANIMATION_ROTATEKEY:
+            ok((keys[i].dwID & 0xf0000000) == 0x40000000, "%u: unexpected id mask %#x.\n", i, keys[i].dwID);
+            break;
+        case D3DRMANIMATION_POSITIONKEY:
+            ok((keys[i].dwID & 0xf0000000) == 0x80000000, "%u: unexpected id mask %#x.\n", i, keys[i].dwID);
+            break;
+        case D3DRMANIMATION_SCALEKEY:
+            ok((keys[i].dwID & 0xf0000000) == 0xc0000000, "%u: unexpected id mask %#x.\n", i, keys[i].dwID);
+            break;
+        default:
+            ok(0, "%u: unknown key type %d.\n", i, keys[i].dwKeyType);
+        }
+    }
+
+    /* No keys in this range. */
+    count = 10;
+    hr = IDirect3DRMAnimation2_GetKeys(animation2, 100.0f, 200.0f, &count, NULL);
+    ok(hr == D3DRMERR_NOSUCHKEY, "Unexpected hr %#x.\n", hr);
+    ok(count == 0, "Unexpected key count %u.\n", count);
+
+    count = 10;
+    hr = IDirect3DRMAnimation2_GetKeys(animation2, 100.0f, 200.0f, &count, keys);
+    ok(hr == D3DRMERR_NOSUCHKEY, "Unexpected hr %#x.\n", hr);
+    ok(count == 0, "Unexpected key count %u.\n", count);
+
+    count = 10;
+    hr = IDirect3DRMAnimation2_GetKeys(animation2, 0.0f, 0.0f, &count, NULL);
+    ok(SUCCEEDED(hr), "Failed to get animation keys, hr %#x.\n", hr);
+    ok(hr == S_OK, "Failed to get animation keys, hr %#x.\n", hr);
+    ok(count == 4, "Unexpected key count %u.\n", count);
+
+    hr = IDirect3DRMAnimation2_GetKeys(animation2, 0.0f, 100.0f, NULL, NULL);
+    ok(hr == D3DRMERR_BADVALUE, "Unexpected hr %#x.\n", hr);
+
+    /* Time is 0-based. */
+    count = 123;
+    hr = IDirect3DRMAnimation2_GetKeys(animation2, -100.0f, -50.0f, NULL, NULL);
+    ok(hr == D3DRMERR_BADVALUE, "Unexpected hr %#x.\n", hr);
+    ok(count == 123, "Unexpected key count %u.\n", count);
+
+    count = 10;
+    hr = IDirect3DRMAnimation2_GetKeys(animation2, -100.0f, -50.0f, &count, NULL);
+    ok(hr == D3DRMERR_NOSUCHKEY, "Unexpected hr %#x.\n", hr);
+    ok(count == 0, "Unexpected key count %u.\n", count);
+
+    count = 10;
+    hr = IDirect3DRMAnimation2_GetKeys(animation2, -100.0f, 100.0f, &count, NULL);
+    ok(SUCCEEDED(hr), "Failed to get animation keys, hr %#x.\n", hr);
+    ok(count == 6, "Unexpected key count %u.\n", count);
+
+    /* AddKey() tests. */
+    hr = IDirect3DRMAnimation2_AddKey(animation2, NULL);
+    ok(hr == E_INVALIDARG, "Unexpected hr %#x.\n", hr);
+
+    memset(&key, 0, sizeof(key));
+    key.dwKeyType = D3DRMANIMATION_POSITIONKEY;
+    hr = IDirect3DRMAnimation2_AddKey(animation2, &key);
+    ok(hr == E_INVALIDARG, "Unexpected hr %#x.\n", hr);
+
+    memset(&key, 0, sizeof(key));
+    key.dwSize = sizeof(key) - 1;
+    key.dwKeyType = D3DRMANIMATION_POSITIONKEY;
+    hr = IDirect3DRMAnimation2_AddKey(animation2, &key);
+    ok(hr == E_INVALIDARG, "Unexpected hr %#x.\n", hr);
+
+    memset(&key, 0, sizeof(key));
+    key.dwSize = sizeof(key) + 1;
+    key.dwKeyType = D3DRMANIMATION_POSITIONKEY;
+    hr = IDirect3DRMAnimation2_AddKey(animation2, &key);
+    ok(hr == E_INVALIDARG, "Unexpected hr %#x.\n", hr);
+
+    memset(&key, 0, sizeof(key));
+    key.dwSize = sizeof(key);
+    key.dwKeyType = D3DRMANIMATION_POSITIONKEY;
+    hr = IDirect3DRMAnimation2_AddKey(animation2, &key);
+    ok(SUCCEEDED(hr), "Failed to add key, hr %#x.\n", hr);
+}
     IDirect3DRMAnimation2_Release(animation2);
     IDirect3DRMAnimation_Release(animation);
 




More information about the wine-cvs mailing list