=?UTF-8?Q?Stefan=20D=C3=B6singer=20?=: ddraw/tests: Show that a failing SetPrivateData call does not clear the old contents.

Alexandre Julliard julliard at winehq.org
Tue Mar 11 14:45:41 CDT 2014


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

Author: Stefan Dösinger <stefan at codeweavers.com>
Date:   Mon Mar 10 23:43:11 2014 +0100

ddraw/tests: Show that a failing SetPrivateData call does not clear the old contents.

---

 dlls/ddraw/tests/ddraw4.c |   17 +++++++++++++++++
 dlls/ddraw/tests/ddraw7.c |   17 +++++++++++++++++
 2 files changed, 34 insertions(+)

diff --git a/dlls/ddraw/tests/ddraw4.c b/dlls/ddraw/tests/ddraw4.c
index 5a2dba1..3b1f8d4 100644
--- a/dlls/ddraw/tests/ddraw4.c
+++ b/dlls/ddraw/tests/ddraw4.c
@@ -6072,6 +6072,23 @@ static void test_private_data(void)
             sizeof(ddraw) * 2, DDSPD_IUNKNOWNPOINTER);
     ok(hr == DDERR_INVALIDPARAMS, "Got unexpected hr %#x.\n", hr);
 
+    /* Note that with a size != 0 and size != sizeof(IUnknown *) and
+     * DDSPD_IUNKNOWNPOINTER set SetPrivateData in ddraw4 and ddraw7
+     * erases the old content and returns an error. This behavior has
+     * been fixed in d3d8 and d3d9. Unless an application is found
+     * that depends on this we don't care about this behavior. */
+    hr = IDirectDrawSurface4_SetPrivateData(surface, &IID_IDirect3D, ddraw,
+            sizeof(ddraw), DDSPD_IUNKNOWNPOINTER);
+    ok(SUCCEEDED(hr), "Failed to set private data, hr %#x.\n", hr);
+    hr = IDirectDrawSurface4_SetPrivateData(surface, &IID_IDirect3D, ddraw,
+            0, DDSPD_IUNKNOWNPOINTER);
+    ok(hr == DDERR_INVALIDPARAMS, "Got unexpected hr %#x.\n", hr);
+    size = sizeof(ptr);
+    hr = IDirectDrawSurface4_GetPrivateData(surface, &IID_IDirect3D, &ptr, &size);
+    ok(SUCCEEDED(hr), "Failed to get private data, hr %#x.\n", hr);
+    hr = IDirectDrawSurface4_FreePrivateData(surface, &IID_IDirect3D);
+    ok(SUCCEEDED(hr), "Failed to free private data, hr %#x.\n", hr);
+
     refcount = get_refcount((IUnknown *)ddraw);
     hr = IDirectDrawSurface4_SetPrivateData(surface, &IID_IDirect3D, ddraw,
             sizeof(ddraw), DDSPD_IUNKNOWNPOINTER);
diff --git a/dlls/ddraw/tests/ddraw7.c b/dlls/ddraw/tests/ddraw7.c
index 1218a21..b4570af 100644
--- a/dlls/ddraw/tests/ddraw7.c
+++ b/dlls/ddraw/tests/ddraw7.c
@@ -5927,6 +5927,23 @@ static void test_private_data(void)
             sizeof(ddraw) * 2, DDSPD_IUNKNOWNPOINTER);
     ok(hr == DDERR_INVALIDPARAMS, "Got unexpected hr %#x.\n", hr);
 
+    /* Note that with a size != 0 and size != sizeof(IUnknown *) and
+     * DDSPD_IUNKNOWNPOINTER set SetPrivateData in ddraw4 and ddraw7
+     * erases the old content and returns an error. This behavior has
+     * been fixed in d3d8 and d3d9. Unless an application is found
+     * that depends on this we don't care about this behavior. */
+    hr = IDirectDrawSurface7_SetPrivateData(surface, &IID_IDirect3D, ddraw,
+            sizeof(ddraw), DDSPD_IUNKNOWNPOINTER);
+    ok(SUCCEEDED(hr), "Failed to set private data, hr %#x.\n", hr);
+    hr = IDirectDrawSurface7_SetPrivateData(surface, &IID_IDirect3D, ddraw,
+            0, DDSPD_IUNKNOWNPOINTER);
+    ok(hr == DDERR_INVALIDPARAMS, "Got unexpected hr %#x.\n", hr);
+    size = sizeof(ptr);
+    hr = IDirectDrawSurface7_GetPrivateData(surface, &IID_IDirect3D, &ptr, &size);
+    ok(SUCCEEDED(hr), "Failed to get private data, hr %#x.\n", hr);
+    hr = IDirectDrawSurface7_FreePrivateData(surface, &IID_IDirect3D);
+    ok(SUCCEEDED(hr), "Failed to free private data, hr %#x.\n", hr);
+
     refcount = get_refcount((IUnknown *)ddraw);
     hr = IDirectDrawSurface7_SetPrivateData(surface, &IID_IDirect3D, ddraw,
             sizeof(ddraw), DDSPD_IUNKNOWNPOINTER);




More information about the wine-cvs mailing list