Commit 31c9881f authored by Michael Stefaniuc's avatar Michael Stefaniuc Committed by Alexandre Julliard

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

parent e5b4b693
...@@ -24,6 +24,7 @@ ...@@ -24,6 +24,7 @@
#include <wine/test.h> #include <wine/test.h>
#include <dmusici.h> #include <dmusici.h>
#define ARRAY_SIZE(a) (sizeof(a)/sizeof((a)[0]))
static BOOL missing_dmstyle(void) static BOOL missing_dmstyle(void)
{ {
...@@ -88,6 +89,74 @@ static void test_COM(void) ...@@ -88,6 +89,74 @@ static void test_COM(void)
while (IDirectMusicStyle8_Release(dms8)); while (IDirectMusicStyle8_Release(dms8));
} }
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(DirectMusicAuditionTrack) },
{ X(DirectMusicChordTrack) },
{ X(DirectMusicCommandTrack) },
{ X(DirectMusicMotifTrack) },
{ X(DirectMusicMuteTrack) },
{ X(DirectMusicStyleTrack) },
};
#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(dmstyle) START_TEST(dmstyle)
{ {
CoInitialize(NULL); CoInitialize(NULL);
...@@ -99,6 +168,7 @@ START_TEST(dmstyle) ...@@ -99,6 +168,7 @@ START_TEST(dmstyle)
return; return;
} }
test_COM(); test_COM();
test_COM_track();
CoUninitialize(); CoUninitialize();
} }
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment