diff --git a/configure b/configure index 1ee19b2f444..48f12f1062c 100755 --- a/configure +++ b/configure @@ -16672,6 +16672,7 @@ wine_fn_config_test dlls/dmloader/tests dmloader_test wine_fn_config_dll dmscript enable_dmscript clean wine_fn_config_test dlls/dmscript/tests dmscript_test wine_fn_config_dll dmstyle enable_dmstyle clean +wine_fn_config_test dlls/dmstyle/tests dmstyle_test wine_fn_config_dll dmsynth enable_dmsynth clean wine_fn_config_test dlls/dmsynth/tests dmsynth_test wine_fn_config_dll dmusic enable_dmusic clean diff --git a/configure.ac b/configure.ac index da240bd7b17..75faadf23e4 100644 --- a/configure.ac +++ b/configure.ac @@ -2796,6 +2796,7 @@ WINE_CONFIG_TEST(dlls/dmloader/tests) WINE_CONFIG_DLL(dmscript,,[clean]) WINE_CONFIG_TEST(dlls/dmscript/tests) WINE_CONFIG_DLL(dmstyle,,[clean]) +WINE_CONFIG_TEST(dlls/dmstyle/tests) WINE_CONFIG_DLL(dmsynth,,[clean]) WINE_CONFIG_TEST(dlls/dmsynth/tests) WINE_CONFIG_DLL(dmusic,,[clean]) diff --git a/dlls/dmstyle/tests/Makefile.in b/dlls/dmstyle/tests/Makefile.in new file mode 100644 index 00000000000..ec8b0636014 --- /dev/null +++ b/dlls/dmstyle/tests/Makefile.in @@ -0,0 +1,5 @@ +TESTDLL = dmstyle.dll +IMPORTS = ole32 + +C_SRCS = \ + dmstyle.c diff --git a/dlls/dmstyle/tests/dmstyle.c b/dlls/dmstyle/tests/dmstyle.c new file mode 100644 index 00000000000..bbc04bdb194 --- /dev/null +++ b/dlls/dmstyle/tests/dmstyle.c @@ -0,0 +1,104 @@ +/* + * Copyright 2014 Michael Stefaniuc + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either + * version 2.1 of the License, or (at your option) any later version. + * + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this library; if not, write to the Free Software + * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA + */ + +#define COBJMACROS + +#include +#include +#include +#include +#include + + +static BOOL missing_dmstyle(void) +{ + IDirectMusicStyle *dms; + HRESULT hr = CoCreateInstance(&CLSID_DirectMusicStyle, NULL, CLSCTX_INPROC_SERVER, + &IID_IDirectMusicStyle, (void**)&dms); + + if (hr == S_OK && dms) + { + IDirectMusicStyle_Release(dms); + return FALSE; + } + return TRUE; +} + +static void test_COM(void) +{ + IDirectMusicStyle8 *dms8 = (IDirectMusicStyle8*)0xdeadbeef; + IDirectMusicObject *dmo; + IPersistStream *ps; + IUnknown *unk; + ULONG refcount; + HRESULT hr; + + /* COM aggregation */ + hr = CoCreateInstance(&CLSID_DirectMusicStyle, (IUnknown*)&dms8, CLSCTX_INPROC_SERVER, + &IID_IUnknown, (void**)&dms8); + ok(hr == CLASS_E_NOAGGREGATION, + "DirectMusicStyle8 create failed: %08x, expected CLASS_E_NOAGGREGATION\n", hr); + ok(!dms8, "dms8 = %p\n", dms8); + + /* Invalid RIID */ + hr = CoCreateInstance(&CLSID_DirectMusicStyle, NULL, CLSCTX_INPROC_SERVER, &IID_IClassFactory, + (void**)&dms8); + ok(hr == E_NOINTERFACE, "DirectMusicStyle8 create failed: %08x, expected E_NOINTERFACE\n", hr); + + /* Same refcount for all DirectMusicStyle8 interfaces */ + hr = CoCreateInstance(&CLSID_DirectMusicStyle, NULL, CLSCTX_INPROC_SERVER, + &IID_IDirectMusicStyle8, (void**)&dms8); + ok(hr == S_OK, "DirectMusicStyle8 create failed: %08x, expected S_OK\n", hr); + refcount = IDirectMusicStyle8_AddRef(dms8); + ok(refcount == 2, "refcount == %u, expected 2\n", refcount); + + hr = IDirectMusicStyle8_QueryInterface(dms8, &IID_IDirectMusicObject, (void**)&dmo); + ok(hr == S_OK, "QueryInterface for IID_IDirectMusicObject failed: %08x\n", hr); + refcount = IDirectMusicObject_AddRef(dmo); + ok(refcount == 4, "refcount == %u, expected 4\n", refcount); + refcount = IDirectMusicObject_Release(dmo); + + hr = IDirectMusicStyle8_QueryInterface(dms8, &IID_IPersistStream, (void**)&ps); + ok(hr == S_OK, "QueryInterface for IID_IPersistStream failed: %08x\n", hr); + refcount = IPersistStream_AddRef(ps); + ok(refcount == 5, "refcount == %u, expected 5\n", refcount); + refcount = IPersistStream_Release(ps); + + hr = IDirectMusicStyle8_QueryInterface(dms8, &IID_IUnknown, (void**)&unk); + ok(hr == S_OK, "QueryInterface for IID_IUnknown failed: %08x\n", hr); + refcount = IUnknown_AddRef(unk); + ok(refcount == 6, "refcount == %u, expected 6\n", refcount); + refcount = IUnknown_Release(unk); + + while (IDirectMusicStyle8_Release(dms8)); +} + +START_TEST(dmstyle) +{ + CoInitialize(NULL); + + if (missing_dmstyle()) + { + skip("dmstyle not available\n"); + CoUninitialize(); + return; + } + test_COM(); + + CoUninitialize(); +}