Michael Stefaniuc : dmcompos/tests: COM tests for the different DirectMusic*Tracks.

Alexandre Julliard julliard at winehq.org
Thu Jan 16 14:52:27 CST 2014


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

Author: Michael Stefaniuc <mstefani at redhat.de>
Date:   Thu Jan 16 00:52:57 2014 +0100

dmcompos/tests: COM tests for the different DirectMusic*Tracks.

---

 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();
 }




More information about the wine-cvs mailing list