[PATCH] devenum: Add tests for devenum. (try 2)
Christian Costa
titan.costa at gmail.com
Tue Mar 27 17:15:38 CDT 2012
Try 2: Handle Windows version without devenum.
---
configure.ac | 1
dlls/devenum/tests/Makefile.in | 7 ++
dlls/devenum/tests/devenum.c | 124 ++++++++++++++++++++++++++++++++++++++++
3 files changed, 132 insertions(+), 0 deletions(-)
create mode 100644 dlls/devenum/tests/Makefile.in
create mode 100644 dlls/devenum/tests/devenum.c
diff --git a/configure.ac b/configure.ac
index bebbb91..c499f86 100644
--- a/configure.ac
+++ b/configure.ac
@@ -2508,6 +2508,7 @@ WINE_CONFIG_TEST(dlls/ddraw/tests)
WINE_CONFIG_DLL(ddrawex)
WINE_CONFIG_TEST(dlls/ddrawex/tests)
WINE_CONFIG_DLL(devenum,,[po])
+WINE_CONFIG_TEST(dlls/devenum/tests)
WINE_CONFIG_DLL(dhcpcsvc)
WINE_CONFIG_DLL(dinput,,[implib,po,staticimplib])
WINE_CONFIG_TEST(dlls/dinput/tests)
diff --git a/dlls/devenum/tests/Makefile.in b/dlls/devenum/tests/Makefile.in
new file mode 100644
index 0000000..a6b1951
--- /dev/null
+++ b/dlls/devenum/tests/Makefile.in
@@ -0,0 +1,7 @@
+TESTDLL = devenum.dll
+IMPORTS = oleaut32 ole32 advapi32
+
+C_SRCS = \
+ devenum.c
+
+ at MAKE_TEST_RULES@
diff --git a/dlls/devenum/tests/devenum.c b/dlls/devenum/tests/devenum.c
new file mode 100644
index 0000000..f606e43
--- /dev/null
+++ b/dlls/devenum/tests/devenum.c
@@ -0,0 +1,124 @@
+/*
+ * Some unit tests for devenum
+ *
+ * Copyright (C) 2012 Christian Costa
+ *
+ * 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 <stdio.h>
+
+#include "wine/test.h"
+#include "initguid.h"
+#include "ole2.h"
+#include "strmif.h"
+#include "uuids.h"
+
+static const WCHAR friendly_name[] = {'F','r','i','e','n','d','l','y','N','a','m','e',0};
+
+struct category
+{
+ const char * name;
+ const GUID * clsid;
+};
+
+static struct category am_categories[] =
+{
+ { "Legacy AM Filter category", &CLSID_LegacyAmFilterCategory },
+ { "Audio renderer category", &CLSID_AudioRendererCategory },
+ { "Midi renderer category", &CLSID_MidiRendererCategory },
+ { "Audio input device category", &CLSID_AudioInputDeviceCategory },
+ { "Video input device category", &CLSID_VideoInputDeviceCategory },
+ { "Audio compressor category", &CLSID_AudioCompressorCategory },
+ { "Video compressor category", &CLSID_VideoCompressorCategory }
+};
+
+static void test_devenum(void)
+{
+ HRESULT res;
+ ICreateDevEnum* create_devenum;
+ IEnumMoniker* enum_moniker = NULL;
+ int i;
+
+ CoInitialize(NULL);
+
+ res = CoCreateInstance(&CLSID_SystemDeviceEnum, NULL, CLSCTX_INPROC,
+ &IID_ICreateDevEnum, (LPVOID*)&create_devenum);
+ if (res != S_OK) {
+ skip("Cannot create SystemDeviceEnum object (%x)\n", hr);
+ CoUninitialize();
+ return;
+ }
+
+ trace("\n");
+
+ for (i = 0; i < (sizeof(am_categories) / sizeof(struct category)); i++)
+ {
+ trace("%s:\n", am_categories[i].name);
+
+ res = ICreateDevEnum_CreateClassEnumerator(create_devenum, am_categories[i].clsid, &enum_moniker, 0);
+ ok(SUCCEEDED(res), "Cannot create enum moniker (res = %x)\n", res);
+ if (res == S_OK)
+ {
+ IMoniker* moniker;
+ while (IEnumMoniker_Next(enum_moniker, 1, &moniker, NULL) == S_OK)
+ {
+ IPropertyBag* prop_bag = NULL;
+ VARIANT var;
+ HRESULT hr;
+
+ VariantInit(&var);
+ hr = IMoniker_BindToStorage(moniker, NULL, NULL, &IID_IPropertyBag, (LPVOID*)&prop_bag);
+ ok(hr == S_OK, "IMoniker_BindToStorage failed with error %x\n", hr);
+
+ if (SUCCEEDED(hr))
+ {
+ hr = IPropertyBag_Read(prop_bag, friendly_name, &var, NULL);
+ ok((hr == S_OK) || broken(hr == 0x80070002), "IPropertyBag_Read failed with error %x\n", hr);
+
+ if (SUCCEEDED(hr))
+ {
+ trace(" %s\n", wine_dbgstr_w(V_UNION(&var, bstrVal)));
+ VariantClear(&var);
+ }
+ else
+ {
+ trace(" ???\n");
+ }
+ }
+
+ if (prop_bag)
+ IPropertyBag_Release(prop_bag);
+ IMoniker_Release(moniker);
+ }
+ IEnumMoniker_Release(enum_moniker);
+ }
+
+ trace("\n");
+ }
+
+ ICreateDevEnum_Release(create_devenum);
+
+ CoUninitialize();
+}
+
+/* CLSID_CDeviceMoniker */
+
+START_TEST(devenum)
+{
+ test_devenum();
+}
More information about the wine-patches
mailing list