From: Anton Baskanov baskanov@gmail.com
--- dlls/dmloader/tests/loader.c | 49 ++++++++++++++++++++++++++++++++++++ 1 file changed, 49 insertions(+)
diff --git a/dlls/dmloader/tests/loader.c b/dlls/dmloader/tests/loader.c index 3d68a19c331..8c8f613575b 100644 --- a/dlls/dmloader/tests/loader.c +++ b/dlls/dmloader/tests/loader.c @@ -112,7 +112,11 @@ static void test_directory(void)
static void test_caching(void) { + IDirectMusicCollection *collection; IDirectMusicLoader8 *loader = NULL; + IDirectMusicSegment *segment; + DMUS_OBJECTDESC desc; + ULONG refcount; HRESULT hr;
hr = CoCreateInstance(&CLSID_DirectMusicLoader, NULL, CLSCTX_INPROC, &IID_IDirectMusicLoader8, @@ -145,6 +149,51 @@ static void test_caching(void) hr = IDirectMusicLoader_EnableCache(loader, &CLSID_DirectMusicContainer, TRUE); ok(hr == S_FALSE, "EnableCache failed with %#lx\n", hr);
+ memset(&desc, 0, sizeof(desc)); + desc.dwSize = sizeof(desc); + desc.dwValidData = DMUS_OBJ_OBJECT | DMUS_OBJ_CLASS; + desc.guidObject = GUID_DefaultGMCollection; + desc.guidClass = CLSID_DirectMusicCollection; + hr = IDirectMusicLoader_GetObject(loader, &desc, &IID_IDirectMusicCollection, (void **)&collection); + ok(hr == S_OK, "GetObject failed with %#lx\n", hr); + IDirectMusicCollection_AddRef(collection); + refcount = IDirectMusicCollection_Release(collection); + ok(refcount == 2, "refcount == %lu, expected 2\n", refcount); + + memset(&desc, 0, sizeof(desc)); + desc.dwSize = sizeof(desc); + desc.dwValidData = DMUS_OBJ_CLASS | DMUS_OBJ_MEMORY; + desc.guidClass = CLSID_DirectMusicSegment; + desc.llMemLength = sizeof(rifffile); + desc.pbMemData = rifffile; + hr = IDirectMusicLoader_GetObject(loader, &desc, &IID_IDirectMusicSegment, (void **)&segment); + ok(hr == S_OK, "GetObject failed with %#lx\n", hr); + IDirectMusicSegment_AddRef(segment); + refcount = IDirectMusicSegment_Release(segment); + ok(refcount == 2, "refcount == %lu, expected 2\n", refcount); + + hr = IDirectMusicLoader_ClearCache(loader, &GUID_DirectMusicAllTypes); + ok(hr == S_OK, "ClearCache failed with %#lx\n", hr); + + /* ClearCache releases the loaded objects */ + IDirectMusicCollection_AddRef(collection); + refcount = IDirectMusicCollection_Release(collection); + todo_wine ok(refcount == 1, "refcount == %lu, expected 1\n", refcount); + IDirectMusicSegment_AddRef(segment); + refcount = IDirectMusicSegment_Release(segment); + todo_wine ok(refcount == 1, "refcount == %lu, expected 1\n", refcount); + + /* ClearCache doesn't remove the default collection */ + memset(&desc, 0, sizeof(desc)); + desc.dwSize = sizeof(desc); + hr = IDirectMusicLoader_EnumObject(loader, &CLSID_DirectMusicCollection, 0, &desc); + ok(hr == S_OK, "EnumObject failed with %#lx\n", hr); + ok(IsEqualGUID(&desc.guidObject, &GUID_DefaultGMCollection), + "Got object guid %s, expected GUID_DefaultGMCollection\n", + wine_dbgstr_guid(&desc.guidObject)); + + IDirectMusicCollection_Release(collection); + IDirectMusicSegment_Release(segment); IDirectMusicLoader_Release(loader); }