2 * Some unit tests for devenum
4 * Copyright (C) 2012 Christian Costa
6 * This library is free software; you can redistribute it and/or
7 * modify it under the terms of the GNU Lesser General Public
8 * License as published by the Free Software Foundation; either
9 * version 2.1 of the License, or (at your option) any later version.
11 * This library is distributed in the hope that it will be useful,
12 * but WITHOUT ANY WARRANTY; without even the implied warranty of
13 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
14 * Lesser General Public License for more details.
16 * You should have received a copy of the GNU Lesser General Public
17 * License along with this library; if not, write to the Free Software
18 * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA
25 #include "wine/test.h"
31 static const WCHAR friendly_name[] = {'F','r','i','e','n','d','l','y','N','a','m','e',0};
39 static struct category am_categories[] =
41 { "Legacy AM Filter category", &CLSID_LegacyAmFilterCategory },
42 { "Audio renderer category", &CLSID_AudioRendererCategory },
43 { "Midi renderer category", &CLSID_MidiRendererCategory },
44 { "Audio input device category", &CLSID_AudioInputDeviceCategory },
45 { "Video input device category", &CLSID_VideoInputDeviceCategory },
46 { "Audio compressor category", &CLSID_AudioCompressorCategory },
47 { "Video compressor category", &CLSID_VideoCompressorCategory }
50 static void test_devenum(void)
53 ICreateDevEnum* create_devenum;
54 IEnumMoniker* enum_moniker = NULL;
59 res = CoCreateInstance(&CLSID_SystemDeviceEnum, NULL, CLSCTX_INPROC,
60 &IID_ICreateDevEnum, (LPVOID*)&create_devenum);
62 skip("Cannot create SystemDeviceEnum object (%x)\n", res);
69 for (i = 0; i < (sizeof(am_categories) / sizeof(struct category)); i++)
71 trace("%s:\n", am_categories[i].name);
73 res = ICreateDevEnum_CreateClassEnumerator(create_devenum, am_categories[i].clsid, &enum_moniker, 0);
74 ok(SUCCEEDED(res), "Cannot create enum moniker (res = %x)\n", res);
78 while (IEnumMoniker_Next(enum_moniker, 1, &moniker, NULL) == S_OK)
80 IPropertyBag* prop_bag = NULL;
85 hr = IMoniker_BindToStorage(moniker, NULL, NULL, &IID_IPropertyBag, (LPVOID*)&prop_bag);
86 ok(hr == S_OK, "IMoniker_BindToStorage failed with error %x\n", hr);
90 hr = IPropertyBag_Read(prop_bag, friendly_name, &var, NULL);
91 ok((hr == S_OK) || broken(hr == 0x80070002), "IPropertyBag_Read failed with error %x\n", hr);
95 trace(" %s\n", wine_dbgstr_w(V_UNION(&var, bstrVal)));
105 IPropertyBag_Release(prop_bag);
106 IMoniker_Release(moniker);
108 IEnumMoniker_Release(enum_moniker);
114 ICreateDevEnum_Release(create_devenum);
119 /* CLSID_CDeviceMoniker */