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