Module: wine Branch: master Commit: 31763493873e9991e2e0af5b6660ffb7da30366f URL: http://source.winehq.org/git/wine.git/?a=commit;h=31763493873e9991e2e0af5b66...
Author: Nikolay Sivov nsivov@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@codeweavers.com Signed-off-by: Henri Verbeet hverbeet@codeweavers.com Signed-off-by: Alexandre Julliard julliard@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);