From 7c7c427c423104e630986d04d672a2b4cd6a90f2 Mon Sep 17 00:00:00 2001 From: Michael Stefaniuc Date: Thu, 16 Jan 2014 00:52:57 +0100 Subject: [PATCH] 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 6ff663a51d6..ba07305246a 100644 --- a/dlls/dmcompos/tests/dmcompos.c +++ b/dlls/dmcompos/tests/dmcompos.c @@ -24,6 +24,7 @@ #include #include +#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(); }