[PATCH 1/4] d3drm/tests: Add tests for IDirect3DRMTexture*::InitFromFile. (v2)

Aaryaman Vasishta jem456.vasishta at gmail.com
Fri Oct 19 22:59:23 CDT 2018


v2: Add todo_wine(s) on failed tests (which will be removed on the next patch in this series)
---
 dlls/d3drm/tests/d3drm.c | 74 ++++++++++++++++++++++++++++++++++++++--
 1 file changed, 72 insertions(+), 2 deletions(-)

diff --git a/dlls/d3drm/tests/d3drm.c b/dlls/d3drm/tests/d3drm.c
index f78e098fec..e336b98b95 100644
--- a/dlls/d3drm/tests/d3drm.c
+++ b/dlls/d3drm/tests/d3drm.c
@@ -5572,6 +5572,7 @@ static void test_load_texture(void)
     char *filename;
     HRESULT hr;
     BOOL ret;
+    ULONG ref1, ref2;
     int i;
 
     static const struct
@@ -5595,6 +5596,7 @@ static void test_load_texture(void)
     ok(SUCCEEDED(hr), "Failed to get IDirect3DRM2 interface, hr %#x.\n", hr);
     hr = IDirect3DRM_QueryInterface(d3drm1, &IID_IDirect3DRM3, (void **)&d3drm3);
     ok(SUCCEEDED(hr), "Failed to get IDirect3DRM3 interface, hr %#x.\n", hr);
+    ref1 = get_refcount((IUnknown *)d3drm1);
 
     for (i = 0; i < ARRAY_SIZE(tests); ++i)
     {
@@ -5602,22 +5604,74 @@ static void test_load_texture(void)
 
         hr = IDirect3DRM_LoadTexture(d3drm1, filename, &texture1);
         ok(SUCCEEDED(hr), "Test %u: Failed to load texture, hr %#x.\n", i, hr);
+        ref2 = get_refcount((IUnknown *)d3drm1);
+        todo_wine ok(ref2 > ref1, "Test %u: expected ref2 > ref1, got ref1 = %u, ref2 = %u.\n", i, ref1, ref2);
+
+        hr = IDirect3DRMTexture_InitFromFile(texture1, filename);
+        todo_wine ok(hr == D3DRMERR_BADOBJECT, "Test %u: Expected hr == D3DRMERR_BADOBJECT, got %#x.\n", i, hr);
+        /* InitFromFile seems to AddRef IDirect3DRM even if it fails. */
+        if (hr == D3DRMERR_BADOBJECT)
+            IDirect3DRM_Release(d3drm1);
+        d3drm_img = IDirect3DRMTexture_GetImage(texture1);
+        todo_wine ok(!!d3drm_img, "Test %u: Failed to get image.\n", i);
+        if (d3drm_img)
+            test_bitmap_data(i * 7, d3drm_img, FALSE, tests[i].w, tests[i].h, tests[i].palettized);
+        IDirect3DRMTexture_Release(texture1);
+        ref2 = get_refcount((IUnknown *)d3drm1);
+        ok(ref1 == ref2, "Test %u: expected ref1 == ref2, got ref1 = %u, ref2 = %u.\n", i, ref1, ref2);
+        hr = IDirect3DRM_CreateObject(d3drm1, &CLSID_CDirect3DRMTexture, NULL, &IID_IDirect3DRMTexture, (void **)&texture1);
+        ok(SUCCEEDED(hr), "Test %u: Failed to create texture, hr %#x.\n", i, hr);
+        hr = IDirect3DRMTexture_InitFromFile(texture1, NULL);
+        todo_wine ok(hr == D3DRMERR_BADOBJECT, "Test %u: Expected hr == D3DRMERR_BADOBJECT, got %#x.\n", i, hr);
+        hr = IDirect3DRMTexture_InitFromFile(texture1, "");
+        todo_wine ok(hr == D3DRMERR_BADOBJECT, "Test %u: Expected hr == D3DRMERR_BADOBJECT, got %#x.\n", i, hr);
+        hr = IDirect3DRMTexture_InitFromFile(texture1, filename);
+        todo_wine ok(SUCCEEDED(hr), "Test %u: Failed to initialize texture from file, hr %#x.\n", i, hr);
         d3drm_img = IDirect3DRMTexture_GetImage(texture1);
         todo_wine ok(!!d3drm_img, "Test %u: Failed to get image.\n", i);
         if (d3drm_img)
-            test_bitmap_data(i * 4, d3drm_img, FALSE, tests[i].w, tests[i].h, tests[i].palettized);
+            test_bitmap_data(i * 7 + 1, d3drm_img, FALSE, tests[i].w, tests[i].h, tests[i].palettized);
         IDirect3DRMTexture_Release(texture1);
 
         hr = IDirect3DRM2_LoadTexture(d3drm2, filename, &texture2);
         ok(SUCCEEDED(hr), "Test %u: Failed to load texture, hr %#x.\n", i, hr);
+        ref2 = get_refcount((IUnknown *)d3drm1);
+        todo_wine ok(ref2 > ref1, "Test %u: expected ref2 > ref1, got ref1 = %u, ref2 = %u.\n", i, ref1, ref2);
+
+        hr = IDirect3DRMTexture2_InitFromFile(texture2, filename);
+        todo_wine ok(hr == D3DRMERR_BADOBJECT, "Test %u: Expected hr == D3DRMERR_BADOBJECT, got %#x.\n", i, hr);
+        if (hr == D3DRMERR_BADOBJECT)
+            IDirect3DRM_Release(d3drm1);
         d3drm_img = IDirect3DRMTexture2_GetImage(texture2);
         todo_wine ok(!!d3drm_img, "Test %u: Failed to get image.\n", i);
         if (d3drm_img)
-            test_bitmap_data(i * 4 + 1, d3drm_img, TRUE, tests[i].w, tests[i].h, tests[i].palettized);
+            test_bitmap_data(i * 7 + 2, d3drm_img, TRUE, tests[i].w, tests[i].h, tests[i].palettized);
+        IDirect3DRMTexture2_Release(texture2);
+        ref2 = get_refcount((IUnknown *)d3drm1);
+        ok(ref1 == ref2, "Test %u: expected ref1 == ref2, got ref1 = %u, ref2 = %u.\n", i, ref1, ref2);
+        hr = IDirect3DRM2_CreateObject(d3drm2, &CLSID_CDirect3DRMTexture, NULL, &IID_IDirect3DRMTexture2, (void **)&texture2);
+        ok(SUCCEEDED(hr), "Test %u: Failed to create texture, hr %#x.\n", i, hr);
+        hr = IDirect3DRMTexture2_InitFromFile(texture2, NULL);
+        todo_wine ok(hr == D3DRMERR_BADOBJECT, "Test %u: Expected hr == D3DRMERR_BADOBJECT, got %#x.\n", i, hr);
+        hr = IDirect3DRMTexture2_InitFromFile(texture2, "");
+        todo_wine ok(hr == D3DRMERR_BADOBJECT, "Test %u: Expected hr == D3DRMERR_BADOBJECT, got %#x.\n", i, hr);
+        hr = IDirect3DRMTexture2_InitFromFile(texture2, filename);
+        todo_wine ok(SUCCEEDED(hr), "Test %u: Failed to initialize texture from file, hr %#x.\n", i, hr);
+        d3drm_img = IDirect3DRMTexture2_GetImage(texture2);
+        todo_wine ok(!!d3drm_img, "Test %u: Failed to get image.\n", i);
+        if (d3drm_img)
+            test_bitmap_data(i * 7 + 3, d3drm_img, TRUE, tests[i].w, tests[i].h, tests[i].palettized);
         IDirect3DRMTexture2_Release(texture2);
 
         hr = IDirect3DRM3_LoadTexture(d3drm3, filename, &texture3);
         ok(SUCCEEDED(hr), "Test %u: Failed to load texture, hr %#x.\n", i, hr);
+        ref2 = get_refcount((IUnknown *)d3drm1);
+        todo_wine ok(ref2 > ref1, "Test %u: expected ref2 > ref1, got ref1 = %u, ref2 = %u.\n", i, ref1, ref2);
+
+        hr = IDirect3DRMTexture3_InitFromFile(texture3, filename);
+        todo_wine ok(hr == D3DRMERR_BADOBJECT, "Test %u: Expected hr == D3DRMERR_BADOBJECT, got %#x.\n", i, hr);
+        if (hr == D3DRMERR_BADOBJECT)
+            IDirect3DRM_Release(d3drm1);
         d3drm_img = IDirect3DRMTexture3_GetImage(texture3);
         todo_wine ok(!!d3drm_img, "Test %u: Failed to get image.\n", i);
         if (d3drm_img)
@@ -5632,6 +5686,22 @@ static void test_load_texture(void)
             test_bitmap_data(i * 4 + 3, d3drm_img, TRUE, tests[i].w, tests[i].h, tests[i].palettized);
         IDirect3DRMTexture_Release(texture1);
         IDirect3DRMTexture3_Release(texture3);
+        ref2 = get_refcount((IUnknown *)d3drm1);
+        ok(ref1 == ref2, "Test %u: expected ref1 == ref2, got ref1 = %u, ref2 = %u.\n", i, ref1, ref2);
+
+        hr = IDirect3DRM3_CreateObject(d3drm3, &CLSID_CDirect3DRMTexture, NULL, &IID_IDirect3DRMTexture3, (void **)&texture3);
+        ok(SUCCEEDED(hr), "Test %u: Failed to create texture, hr %#x.\n", i, hr);
+        hr = IDirect3DRMTexture3_InitFromFile(texture3, NULL);
+        todo_wine ok(hr == D3DRMERR_BADOBJECT, "Test %u: Expected hr == D3DRMERR_BADOBJECT, got %#x.\n", i, hr);
+        hr = IDirect3DRMTexture3_InitFromFile(texture3, "");
+        todo_wine ok(hr == D3DRMERR_BADOBJECT, "Test %u: Expected hr == D3DRMERR_BADOBJECT, got %#x.\n", i, hr);
+        hr = IDirect3DRMTexture3_InitFromFile(texture3, filename);
+        todo_wine ok(SUCCEEDED(hr), "Test %u: Failed to initialize texture from file, hr %#x.\n", i, hr);
+        d3drm_img = IDirect3DRMTexture3_GetImage(texture3);
+        todo_wine ok(!!d3drm_img, "Test %u: Failed to get image.\n", i);
+        if (d3drm_img)
+            test_bitmap_data(i * 7 + 6, d3drm_img, TRUE, tests[i].w, tests[i].h, tests[i].palettized);
+        IDirect3DRMTexture3_Release(texture3);
 
         ret = DeleteFileA(filename);
         ok(ret, "Test %u: Failed to delete bitmap \"%s\".\n", i, filename);
-- 
2.17.1




More information about the wine-devel mailing list