Aaryaman Vasishta : d3drm/tests: Add tests for querying between IDirect3DRM interfaces.

Alexandre Julliard julliard at wine.codeweavers.com
Tue Mar 17 11:01:59 CDT 2015


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

Author: Aaryaman Vasishta <jem456.vasishta at gmail.com>
Date:   Sun Mar 15 17:51:51 2015 +0530

d3drm/tests: Add tests for querying between IDirect3DRM interfaces.

---

 dlls/d3drm/tests/Makefile.in |  2 +-
 dlls/d3drm/tests/d3drm.c     | 79 ++++++++++++++++++++++++++++++++++++++++++++
 2 files changed, 80 insertions(+), 1 deletion(-)

diff --git a/dlls/d3drm/tests/Makefile.in b/dlls/d3drm/tests/Makefile.in
index 7035bc6..dc6e8d1 100644
--- a/dlls/d3drm/tests/Makefile.in
+++ b/dlls/d3drm/tests/Makefile.in
@@ -1,5 +1,5 @@
 TESTDLL   = d3drm.dll
-IMPORTS   = dxguid ddraw user32
+IMPORTS   = dxguid ddraw user32 uuid
 
 C_SRCS = \
 	d3drm.c \
diff --git a/dlls/d3drm/tests/d3drm.c b/dlls/d3drm/tests/d3drm.c
index ee01b91..f9925ae 100644
--- a/dlls/d3drm/tests/d3drm.c
+++ b/dlls/d3drm/tests/d3drm.c
@@ -1,6 +1,7 @@
 /*
  * Copyright 2010, 2012 Christian Costa
  * Copyright 2012 André Hentschel
+ * Copyright 2011-2014 Henri Verbeet for CodeWeavers
  *
  * This library is free software; you can redistribute it and/or
  * modify it under the terms of the GNU Lesser General Public
@@ -1726,6 +1727,83 @@ static void test_frame_mesh_materials(void)
     IDirect3DRM_Release(d3drm);
 }
 
+struct qi_test
+{
+    REFIID iid;
+    REFIID refcount_iid;
+    HRESULT hr;
+    BOOL refcount_todo;
+};
+
+static void test_qi(const char *test_name, IUnknown *base_iface,
+                    REFIID refcount_iid, const struct qi_test *tests, UINT entry_count)
+{
+    ULONG refcount, expected_refcount;
+    IUnknown *iface1, *iface2;
+    HRESULT hr;
+    UINT i, j;
+
+    for (i = 0; i < entry_count; ++i)
+    {
+        hr = IUnknown_QueryInterface(base_iface, tests[i].iid, (void **)&iface1);
+        ok(hr == tests[i].hr, "Got hr %#x for test \"%s\" %u.\n", hr, test_name, i);
+        if (SUCCEEDED(hr))
+        {
+            for (j = 0; j < entry_count; ++j)
+            {
+                hr = IUnknown_QueryInterface(iface1, tests[j].iid, (void **)&iface2);
+                ok(hr == tests[j].hr, "Got hr %#x for test \"%s\" %u, %u.\n", hr, test_name, i, j);
+                if (SUCCEEDED(hr))
+                {
+                    expected_refcount = 0;
+                    if (IsEqualGUID(refcount_iid, tests[j].refcount_iid))
+                        ++expected_refcount;
+                    if (IsEqualGUID(tests[i].refcount_iid, tests[j].refcount_iid))
+                        ++expected_refcount;
+                    refcount = IUnknown_Release(iface2);
+                    if (tests[i].refcount_todo || tests[j].refcount_todo)
+                        todo_wine ok(refcount == expected_refcount, "Got refcount %u for test \"%s\" %u, %u, expected %u.\n",
+                                     refcount, test_name, i, j, expected_refcount);
+                    else
+                        ok(refcount == expected_refcount, "Got refcount %u for test \"%s\" %u, %u, expected %u.\n",
+                                     refcount, test_name, i, j, expected_refcount);
+                }
+            }
+
+            expected_refcount = 0;
+            if (IsEqualGUID(refcount_iid, tests[i].refcount_iid))
+                ++expected_refcount;
+            refcount = IUnknown_Release(iface1);
+            if (tests[i].refcount_todo)
+                todo_wine ok(refcount == expected_refcount, "Got refcount %u for test \"%s\" %u, expected %u.\n",
+                             refcount, test_name, i, expected_refcount);
+            else
+                ok(refcount == expected_refcount, "Got refcount %u for test \"%s\" %u, expected %u.\n",
+                             refcount, test_name, i, expected_refcount);
+        }
+    }
+}
+
+static void test_d3drm_qi(void)
+{
+    static const struct qi_test tests[] =
+    {
+        { &IID_IDirect3DRM3, &IID_IDirect3DRM3,       S_OK, TRUE },
+        { &IID_IDirect3DRM2, &IID_IDirect3DRM2,       S_OK, TRUE },
+        { &IID_IDirect3DRM,  &IID_IDirect3DRM,        S_OK, FALSE },
+        { &IID_IUnknown,     &IID_IDirect3DRM,        S_OK, FALSE },
+    };
+    HRESULT hr;
+    IDirect3DRM *d3drm;
+
+    hr = pDirect3DRMCreate(&d3drm);
+    ok(hr == D3DRM_OK, "Cannot get IDirect3DRM interface (hr = %x)\n", hr);
+
+    test_qi("d3drm_qi", (IUnknown *)d3drm, &IID_IDirect3DRM, tests, sizeof(tests) / sizeof(*tests));
+
+    IDirect3DRM_Release(d3drm);
+}
+
 START_TEST(d3drm)
 {
     if (!InitFunctionPtrs())
@@ -1744,6 +1822,7 @@ START_TEST(d3drm)
     test_frame_transform();
     test_d3drm_load();
     test_frame_mesh_materials();
+    test_d3drm_qi();
 
     FreeLibrary(d3drm_handle);
 }




More information about the wine-cvs mailing list