riched20: Initial support for changing font properties.
[wine/multimedia.git] / dlls / wbemdisp / tests / wbemdisp.c
blobe3d432b91fe6d5d7c9e9108611a27defdbc0acb4
1 /*
2 * Copyright 2015 Hans Leidekker for CodeWeavers
4 * This library is free software; you can redistribute it and/or
5 * modify it under the terms of the GNU Lesser General Public
6 * License as published by the Free Software Foundation; either
7 * version 2.1 of the License, or (at your option) any later version.
9 * This library is distributed in the hope that it will be useful,
10 * but WITHOUT ANY WARRANTY; without even the implied warranty of
11 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
12 * Lesser General Public License for more details.
14 * You should have received a copy of the GNU Lesser General Public
15 * License along with this library; if not, write to the Free Software
16 * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA
19 #define COBJMACROS
21 #include <stdio.h>
22 #include "windows.h"
23 #include "initguid.h"
24 #include "objidl.h"
25 #include "wbemdisp.h"
26 #include "wine/test.h"
28 DEFINE_GUID(CLSID_WINMGMTS,0x172bddf8,0xceea,0x11d1,0x8b,0x05,0x00,0x60,0x08,0x06,0xd9,0xb6);
29 DEFINE_GUID(GUID_NULL,0,0,0,0,0,0,0,0,0,0,0);
31 static void test_ParseDisplayName(void)
33 static const WCHAR biosW[] = {'W','i','n','3','2','_','B','i','o','s',0};
34 static const WCHAR manufacturerW[] = {'M','a','n','u','f','a','c','t','u','r','e','r',0};
35 static const WCHAR versionW[] = {'v','e','r','s','i','o','n',0};
36 static const WCHAR nosuchW[] = {'N','o','S','u','c','h',0};
37 static const WCHAR name1[] =
38 {'w','i','n','m','g','m','t','s',':',0};
39 static const WCHAR name2[] =
40 {'w','i','n','m','g','m','t','s',':','\\','\\','.','\\','r','o','o','t','\\','c','i','m','v','2',0};
41 static const WCHAR name3[] =
42 {'w','i','n','m','g','m','t','s',':','\\','\\','.','\\','r','o','o','t','\\','c','i','m','v','2',':',
43 'W','i','n','3','2','_','L','o','g','i','c','a','l','D','i','s','k','.',
44 'D','e','v','i','c','e','I','D','=','\'','C',':','\'',0};
45 static const WCHAR name4[] =
46 {'w','i','n','m','g','m','t','s',':','\\','\\','.','\\','r','o','o','t','\\','c','i','m','v','2',':',
47 'W','i','n','3','2','_','S','e','r','v','i','c','e',0};
48 static const struct
50 const WCHAR *name;
51 HRESULT hr;
52 REFIID iid;
53 ULONG eaten;
54 } tests[] =
56 { name1, S_OK, &IID_ISWbemServices, sizeof(name1)/sizeof(name1[0]) - 1 },
57 { name2, S_OK, &IID_ISWbemServices, sizeof(name2)/sizeof(name2[0]) - 1 },
58 { name3, S_OK, &IID_ISWbemObject, sizeof(name3)/sizeof(name3[0]) - 1 },
59 { name4, S_OK, &IID_ISWbemObject, sizeof(name4)/sizeof(name4[0]) - 1 }
61 LCID english = MAKELCID(MAKELANGID(LANG_ENGLISH,SUBLANG_ENGLISH_US),SORT_DEFAULT);
62 IParseDisplayName *displayname;
63 IBindCtx *ctx;
64 IMoniker *moniker;
65 IUnknown *obj;
66 BSTR str;
67 ULONG i, eaten, count;
68 HRESULT hr;
70 hr = CoCreateInstance( &CLSID_WINMGMTS, NULL, CLSCTX_INPROC_SERVER, &IID_IParseDisplayName, (void **)&displayname );
71 if (hr != S_OK)
73 win_skip( "can't create instance of WINMGMTS\n" );
74 return;
77 hr = CreateBindCtx( 0, &ctx );
78 ok( hr == S_OK, "got %x\n", hr );
80 for (i =0; i < sizeof(tests)/sizeof(tests[0]); i++)
82 str = SysAllocString( tests[i].name );
83 eaten = 0xdeadbeef;
84 moniker = NULL;
85 hr = IParseDisplayName_ParseDisplayName( displayname, NULL, str, &eaten, &moniker );
86 SysFreeString( str );
87 ok( hr == tests[i].hr, "%u: got %x\n", i, hr );
88 ok( eaten == tests[i].eaten, "%u: got %u\n", i, eaten );
89 if (moniker)
91 obj = NULL;
92 hr = IMoniker_BindToObject( moniker, ctx, NULL, tests[i].iid, (void **)&obj );
93 ok( hr == S_OK, "%u: got %x\n", i, hr );
94 if (obj) IUnknown_Release( obj );
95 IMoniker_Release( moniker );
99 str = SysAllocString( name1 );
100 eaten = 0xdeadbeef;
101 moniker = NULL;
102 hr = IParseDisplayName_ParseDisplayName( displayname, NULL, str, &eaten, &moniker );
103 SysFreeString( str );
104 ok( hr == S_OK, "got %x\n", hr );
105 ok( eaten == lstrlenW(name1), "got %u\n", eaten );
106 if (moniker)
108 ISWbemServices *services = NULL;
110 hr = IMoniker_BindToObject( moniker, ctx, NULL, &IID_IUnknown, (void **)&services );
111 ok( hr == S_OK, "got %x\n", hr );
112 if (services)
114 ISWbemObjectSet *objectset = NULL;
116 str = SysAllocString( biosW );
117 hr = ISWbemServices_InstancesOf( services, str, 0, NULL, &objectset );
118 SysFreeString( str );
119 ok( hr == S_OK, "got %x\n", hr );
120 if (objectset)
122 hr = ISWbemObjectSet_get__NewEnum( objectset, &obj );
123 ok( hr == S_OK, "got %x\n", hr );
124 if (obj)
126 IEnumVARIANT *enumvar = NULL;
128 hr = IUnknown_QueryInterface( obj, &IID_IEnumVARIANT, (void **)&enumvar );
129 ok( hr == S_OK, "got %x\n", hr );
131 if (enumvar)
133 VARIANT var, res;
134 ULONG fetched;
135 IDispatch *dispatch = NULL;
136 DISPID dispid;
137 DISPPARAMS params;
138 UINT arg_err;
140 fetched = 0xdeadbeef;
141 hr = IEnumVARIANT_Next( enumvar, 0, &var, &fetched );
142 ok( hr == S_OK, "got %x\n", hr );
143 ok( !fetched, "got %u\n", fetched );
145 fetched = 0xdeadbeef;
146 V_VT( &var ) = VT_ERROR;
147 V_ERROR( &var ) = 0xdeadbeef;
148 hr = IEnumVARIANT_Next( enumvar, 1, &var, &fetched );
149 ok( hr == S_OK, "got %x\n", hr );
150 ok( fetched == 1, "got %u\n", fetched );
151 ok( V_VT( &var ) == VT_DISPATCH, "got %u\n", V_VT( &var ) );
152 ok( V_DISPATCH( &var ) != (IDispatch *)0xdeadbeef, "got %u\n", V_VT( &var ) );
154 dispatch = V_DISPATCH( &var );
155 count = 0;
156 hr = IDispatch_GetTypeInfoCount( dispatch, &count );
157 ok( hr == S_OK, "got %x\n", hr );
158 ok( count == 1, "got %u\n", count );
160 str = SysAllocString( manufacturerW );
161 dispid = 0xdeadbeef;
162 hr = IDispatch_GetIDsOfNames( dispatch, &IID_NULL, &str, 1, english, &dispid );
163 SysFreeString( str );
164 ok( hr == S_OK, "got %x\n", hr );
165 ok( dispid == 0x1800001 || dispid == 0x10b /* win2k */, "got %x\n", dispid );
167 str = SysAllocString( versionW );
168 dispid = 0xdeadbeef;
169 hr = IDispatch_GetIDsOfNames( dispatch, &IID_NULL, &str, 1, english, &dispid );
170 SysFreeString( str );
171 ok( hr == S_OK, "got %x\n", hr );
172 ok( dispid == 0x1800002 || dispid == 0x119 /* win2k */, "got %x\n", dispid );
174 str = SysAllocString( nosuchW );
175 dispid = 0xdeadbeef;
176 hr = IDispatch_GetIDsOfNames( dispatch, &IID_NULL, &str, 1, english, &dispid );
177 SysFreeString( str );
178 ok( hr == DISP_E_UNKNOWNNAME, "got %x\n", hr );
179 ok( dispid == DISPID_UNKNOWN, "got %x\n", dispid );
181 str = SysAllocString( manufacturerW );
182 dispid = 0xdeadbeef;
183 hr = IDispatch_GetIDsOfNames( dispatch, &IID_NULL, &str, 1, english, &dispid );
184 SysFreeString( str );
185 ok( hr == S_OK, "got %x\n", hr );
186 ok( dispid == 0x1800001 || dispid == 0x10b /* win2k */, "got %x\n", dispid );
188 if (dispid == 0x1800001) /* crashes on win2k */
190 V_VT( &res ) = VT_ERROR;
191 V_BSTR( &res ) = (BSTR)0xdeadbeef;
192 params.rgvarg = (VARIANTARG *)0xdeadbeef;
193 params.rgdispidNamedArgs = (DISPID *)0xdeadbeef;
194 params.cArgs = params.cNamedArgs = 0xdeadbeef;
195 arg_err = 0xdeadbeef;
196 hr = IDispatch_Invoke( dispatch, DISPID_UNKNOWN, &IID_NULL, english,
197 DISPATCH_METHOD|DISPATCH_PROPERTYGET,
198 &params, &res, NULL, &arg_err );
199 ok( hr == DISP_E_MEMBERNOTFOUND || hr == S_OK /* winxp */, "got %x\n", hr );
200 ok( params.rgvarg == (VARIANTARG *)0xdeadbeef, "got %p\n", params.rgvarg );
201 ok( params.rgdispidNamedArgs == (DISPID *)0xdeadbeef, "got %p\n", params.rgdispidNamedArgs );
202 ok( params.cArgs == 0xdeadbeef, "got %u\n", params.cArgs );
203 ok( params.cNamedArgs == 0xdeadbeef, "got %u\n", params.cNamedArgs );
204 ok( V_VT( &res ) == VT_ERROR, "got %u\n", V_VT( &res ) );
205 ok( V_ERROR( &res ) == 0xdeadbeef, "got %u\n", V_VT( &res ) );
206 ok( arg_err == 0xdeadbeef, "got %u\n", arg_err );
207 if (hr == S_OK) VariantClear( &res );
210 V_VT( &res ) = VT_ERROR;
211 V_BSTR( &res ) = (BSTR)0xdeadbeef;
212 memset( &params, 0, sizeof(params) );
213 hr = IDispatch_Invoke( dispatch, dispid, &IID_NULL, english,
214 DISPATCH_METHOD|DISPATCH_PROPERTYGET,
215 &params, &res, NULL, NULL );
216 ok( hr == S_OK, "got %x\n", hr );
217 ok( params.rgvarg == NULL, "got %p\n", params.rgvarg );
218 ok( params.rgdispidNamedArgs == NULL, "got %p\n", params.rgdispidNamedArgs );
219 ok( !params.cArgs, "got %u\n", params.cArgs );
220 ok( !params.cNamedArgs, "got %u\n", params.cNamedArgs );
221 ok( V_VT( &res ) == VT_BSTR, "got %u\n", V_VT( &res ) );
222 ok( V_BSTR( &res ) != (BSTR)0xdeadbeef, "got %u\n", V_VT( &res ) );
223 VariantClear( &res );
224 VariantClear( &var );
226 fetched = 0xdeadbeef;
227 hr = IEnumVARIANT_Next( enumvar, 1, &var, &fetched );
228 ok( hr == S_FALSE, "got %x\n", hr );
229 ok( !fetched, "got %u\n", fetched );
231 IEnumVARIANT_Release( enumvar );
233 IUnknown_Release( obj );
235 ISWbemObjectSet_Release( objectset );
237 IUnknown_Release( services );
239 IMoniker_Release( moniker );
242 IBindCtx_Release( ctx );
243 IParseDisplayName_Release( displayname );
246 START_TEST(wbemdisp)
248 CoInitialize( NULL );
249 test_ParseDisplayName();
250 CoUninitialize();