+++ /dev/null
-/*
- * 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 WIN32_NO_STATUS
-#define _INC_WINDOWS
-#define COM_NO_WINDOWS_H
-
-#define COBJMACROS
-
-//#include <stdio.h>
-
-#include <wine/test.h>
-#include <wingdi.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};
-static const WCHAR fcc_handlerW[] = {'F','c','c','H','a','n','d','l','e','r',0};
-static const WCHAR mrleW[] = {'m','r','l','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(IBindCtx *bind_ctx)
-{
- HRESULT res;
- ICreateDevEnum* create_devenum;
- IEnumMoniker* enum_moniker = NULL;
- BOOL have_mrle = FALSE;
- int i;
-
- res = CoCreateInstance(&CLSID_SystemDeviceEnum, NULL, CLSCTX_INPROC,
- &IID_ICreateDevEnum, (LPVOID*)&create_devenum);
- if (res != S_OK) {
- skip("Cannot create SystemDeviceEnum object (%x)\n", res);
- return;
- }
-
- for (i = 0; i < (sizeof(am_categories) / sizeof(struct category)); i++)
- {
- if (winetest_debug > 1)
- 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;
- CLSID clsid = {0};
-
- hr = IMoniker_GetClassID(moniker, NULL);
- ok(hr == E_INVALIDARG, "IMoniker_GetClassID should failed %x\n", hr);
-
- hr = IMoniker_GetClassID(moniker, &clsid);
- ok(hr == S_OK, "IMoniker_GetClassID failed with error %x\n", hr);
- ok(IsEqualGUID(&clsid, &CLSID_CDeviceMoniker),
- "Expected CLSID_CDeviceMoniker got %s\n", wine_dbgstr_guid(&clsid));
-
- VariantInit(&var);
- hr = IMoniker_BindToStorage(moniker, bind_ctx, 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))
- {
- if (winetest_debug > 1)
- trace(" %s\n", wine_dbgstr_w(V_BSTR(&var)));
- VariantClear(&var);
- }
- else
- {
- trace(" ???\n");
- }
-
- if (IsEqualGUID(&CLSID_VideoCompressorCategory, am_categories[i].clsid)) {
- /* Test well known compressor to ensure that we really enumerate codecs */
- hr = IPropertyBag_Read(prop_bag, fcc_handlerW, &var, NULL);
- if (SUCCEEDED(hr)) {
- ok(V_VT(&var) == VT_BSTR, "V_VT(var) = %d\n", V_VT(&var));
- if(!lstrcmpW(V_BSTR(&var), mrleW))
- have_mrle = TRUE;
- VariantClear(&var);
- }
- }
- }
-
- if (prop_bag)
- IPropertyBag_Release(prop_bag);
- IMoniker_Release(moniker);
- }
- IEnumMoniker_Release(enum_moniker);
- }
- }
-
- ICreateDevEnum_Release(create_devenum);
-
- /* 64-bit windows are missing mrle codec */
- if(sizeof(void*) == 4)
- ok(have_mrle, "mrle codec not found\n");
-}
-static void test_moniker_isequal(void)
-{
- HRESULT res;
- ICreateDevEnum *create_devenum = NULL;
- IEnumMoniker *enum_moniker0 = NULL, *enum_moniker1 = NULL;
- IMoniker *moniker0 = NULL, *moniker1 = NULL;
-
- res = CoCreateInstance(&CLSID_SystemDeviceEnum, NULL, CLSCTX_INPROC,
- &IID_ICreateDevEnum, (LPVOID*)&create_devenum);
- if (FAILED(res))
- {
- skip("Cannot create SystemDeviceEnum object (%x)\n", res);
- return;
- }
-
- res = ICreateDevEnum_CreateClassEnumerator(create_devenum, &CLSID_LegacyAmFilterCategory, &enum_moniker0, 0);
- ok(SUCCEEDED(res), "Cannot create enum moniker (res = %x)\n", res);
- if (SUCCEEDED(res))
- {
- if (IEnumMoniker_Next(enum_moniker0, 1, &moniker0, NULL) == S_OK &&
- IEnumMoniker_Next(enum_moniker0, 1, &moniker1, NULL) == S_OK)
- {
- res = IMoniker_IsEqual(moniker0, moniker1);
- ok(res == S_FALSE, "IMoniker_IsEqual should fail (res = %x)\n", res);
-
- res = IMoniker_IsEqual(moniker1, moniker0);
- ok(res == S_FALSE, "IMoniker_IsEqual should fail (res = %x)\n", res);
-
- IMoniker_Release(moniker0);
- IMoniker_Release(moniker1);
- }
- else
- skip("Cannot get moniker for testing.\n");
- }
- IEnumMoniker_Release(enum_moniker0);
-
- res = ICreateDevEnum_CreateClassEnumerator(create_devenum, &CLSID_LegacyAmFilterCategory, &enum_moniker0, 0);
- ok(SUCCEEDED(res), "Cannot create enum moniker (res = %x)\n", res);
- res = ICreateDevEnum_CreateClassEnumerator(create_devenum, &CLSID_AudioRendererCategory, &enum_moniker1, 0);
- ok(SUCCEEDED(res), "Cannot create enum moniker (res = %x)\n", res);
- if (SUCCEEDED(res))
- {
- if (IEnumMoniker_Next(enum_moniker0, 1, &moniker0, NULL) == S_OK &&
- IEnumMoniker_Next(enum_moniker1, 1, &moniker1, NULL) == S_OK)
- {
- res = IMoniker_IsEqual(moniker0, moniker1);
- ok(res == S_FALSE, "IMoniker_IsEqual should failed (res = %x)\n", res);
-
- res = IMoniker_IsEqual(moniker1, moniker0);
- ok(res == S_FALSE, "IMoniker_IsEqual should failed (res = %x)\n", res);
-
- IMoniker_Release(moniker0);
- IMoniker_Release(moniker1);
- }
- else
- skip("Cannot get moniker for testing.\n");
- }
- IEnumMoniker_Release(enum_moniker0);
- IEnumMoniker_Release(enum_moniker1);
-
- res = ICreateDevEnum_CreateClassEnumerator(create_devenum, &CLSID_LegacyAmFilterCategory, &enum_moniker0, 0);
- ok(SUCCEEDED(res), "Cannot create enum moniker (res = %x)\n", res);
- res = ICreateDevEnum_CreateClassEnumerator(create_devenum, &CLSID_LegacyAmFilterCategory, &enum_moniker1, 0);
- ok(SUCCEEDED(res), "Cannot create enum moniker (res = %x)\n", res);
- if (SUCCEEDED(res))
- {
- if (IEnumMoniker_Next(enum_moniker0, 1, &moniker0, NULL) == S_OK &&
- IEnumMoniker_Next(enum_moniker1, 1, &moniker1, NULL) == S_OK)
- {
- res = IMoniker_IsEqual(moniker0, moniker1);
- ok(res == S_OK, "IMoniker_IsEqual failed (res = %x)\n", res);
-
- res = IMoniker_IsEqual(moniker1, moniker0);
- ok(res == S_OK, "IMoniker_IsEqual failed (res = %x)\n", res);
-
- IMoniker_Release(moniker0);
- IMoniker_Release(moniker1);
- }
- else
- skip("Cannot get moniker for testing.\n");
- }
- IEnumMoniker_Release(enum_moniker0);
- IEnumMoniker_Release(enum_moniker1);
-
- ICreateDevEnum_Release(create_devenum);
-
- return;
-}
-
-/* CLSID_CDeviceMoniker */
-
-START_TEST(devenum)
-{
- IBindCtx *bind_ctx = NULL;
- HRESULT hr;
-
- CoInitialize(NULL);
-
- test_devenum(NULL);
-
- /* IBindCtx is allowed in IMoniker_BindToStorage (IMediaCatMoniker_BindToStorage) */
- hr = CreateBindCtx(0, &bind_ctx);
- ok(hr == S_OK, "Cannot create BindCtx: (res = 0x%x)\n", hr);
- if (bind_ctx) {
- test_devenum(bind_ctx);
- IBindCtx_Release(bind_ctx);
- }
-
- test_moniker_isequal();
-
- CoUninitialize();
-}