[PATCH 5/6] dmcompos/tests: COM tests for the different DirectMusic*Tracks.

Michael Stefaniuc mstefani at redhat.de
Wed Jan 15 17:52:57 CST 2014


---
 dlls/dmcompos/tests/dmcompos.c | 66 ++++++++++++++++++++++++++++++++++++++++++
 1 file changed, 66 insertions(+)

diff --git a/dlls/dmcompos/tests/dmcompos.c b/dlls/dmcompos/tests/dmcompos.c
index 6ff663a..ba07305 100644
--- a/dlls/dmcompos/tests/dmcompos.c
+++ b/dlls/dmcompos/tests/dmcompos.c
@@ -24,6 +24,7 @@
 #include <wine/test.h>
 #include <dmusici.h>
 
+#define ARRAY_SIZE(a) (sizeof(a)/sizeof((a)[0]))
 
 static BOOL missing_dmcompos(void)
 {
@@ -125,6 +126,70 @@ static void test_COM_chordmap(void)
     while (IDirectMusicChordMap_Release(dmcm));
 }
 
+static void test_COM_track(void)
+{
+    IDirectMusicTrack8 *dmt8;
+    IPersistStream *ps;
+    IUnknown *unk;
+    ULONG refcount;
+    HRESULT hr;
+#define X(class)        &CLSID_ ## class, #class
+    const struct {
+        REFCLSID clsid;
+        const char *name;
+    } class[] = {
+        { X(DirectMusicChordMapTrack) },
+        { X(DirectMusicSignPostTrack) },
+    };
+#undef X
+    unsigned int i;
+
+    for (i = 0; i < ARRAY_SIZE(class); i++) {
+        /* COM aggregation */
+        dmt8 = (IDirectMusicTrack8*)0xdeadbeef;
+        hr = CoCreateInstance(class[i].clsid, (IUnknown*)&dmt8, CLSCTX_INPROC_SERVER, &IID_IUnknown,
+                (void**)&dmt8);
+        if (hr == REGDB_E_CLASSNOTREG) {
+            win_skip("%s not registered\n", class[i].name);
+            continue;
+        }
+        ok(hr == CLASS_E_NOAGGREGATION,
+                "%s create failed: %08x, expected CLASS_E_NOAGGREGATION\n", class[i].name, hr);
+        ok(!dmt8, "dmt8 = %p\n", dmt8);
+
+        /* Invalid RIID */
+        hr = CoCreateInstance(class[i].clsid, NULL, CLSCTX_INPROC_SERVER, &IID_IDirectMusicObject,
+                (void**)&dmt8);
+        ok(hr == E_NOINTERFACE, "%s create failed: %08x, expected E_NOINTERFACE\n",
+                class[i].name, hr);
+
+        /* Same refcount for all DirectMusicTrack interfaces */
+        hr = CoCreateInstance(class[i].clsid, NULL, CLSCTX_INPROC_SERVER, &IID_IDirectMusicTrack8,
+                (void**)&dmt8);
+        if (hr == E_NOINTERFACE && !dmt8) {
+            skip("%s not created with CoCreateInstance()\n", class[i].name);
+            continue;
+        }
+        ok(hr == S_OK, "%s create failed: %08x, expected S_OK\n", class[i].name, hr);
+        refcount = IDirectMusicTrack8_AddRef(dmt8);
+        ok(refcount == 2, "refcount == %u, expected 2\n", refcount);
+
+        hr = IDirectMusicTrack8_QueryInterface(dmt8, &IID_IPersistStream, (void**)&ps);
+        ok(hr == S_OK, "QueryInterface for IID_IPersistStream failed: %08x\n", hr);
+        refcount = IPersistStream_AddRef(ps);
+        ok(refcount == 4, "refcount == %u, expected 4\n", refcount);
+        refcount = IPersistStream_Release(ps);
+
+        hr = IDirectMusicTrack8_QueryInterface(dmt8, &IID_IUnknown, (void**)&unk);
+        ok(hr == S_OK, "QueryInterface for IID_IUnknown failed: %08x\n", hr);
+        refcount = IUnknown_AddRef(unk);
+        ok(refcount == 5, "refcount == %u, expected 5\n", refcount);
+        refcount = IUnknown_Release(unk);
+
+        while (IDirectMusicTrack8_Release(dmt8));
+    }
+}
+
 START_TEST(dmcompos)
 {
     CoInitialize(NULL);
@@ -137,6 +202,7 @@ START_TEST(dmcompos)
     }
     test_COM();
     test_COM_chordmap();
+    test_COM_track();
 
     CoUninitialize();
 }
-- 
1.8.3.1



More information about the wine-patches mailing list