dwrite: Implement CreateFontFaceFromHdc().
[wine.git] / dlls / wshom.ocx / tests / wshom.c
blob4c3581ee72a83b46a530d8ba358749318f59488d
1 /*
2 * Copyright 2011 Jacek Caban 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
20 #define CONST_VTABLE
22 #include <initguid.h>
23 #include <ole2.h>
24 #include <dispex.h>
26 #include "wshom.h"
27 #include "wine/test.h"
29 DEFINE_GUID(GUID_NULL,0,0,0,0,0,0,0,0,0,0,0);
31 #define EXPECT_HR(hr,hr_exp) \
32 ok(hr == hr_exp, "got 0x%08x, expected 0x%08x\n", hr, hr_exp)
34 static void test_wshshell(void)
36 static const WCHAR desktopW[] = {'D','e','s','k','t','o','p',0};
37 static const WCHAR lnk1W[] = {'f','i','l','e','.','l','n','k',0};
38 static const WCHAR pathW[] = {'%','P','A','T','H','%',0};
39 static const WCHAR sysW[] = {'S','Y','S','T','E','M',0};
40 static const WCHAR path2W[] = {'P','A','T','H',0};
41 IWshEnvironment *env;
42 IWshShell3 *sh3;
43 IDispatchEx *dispex;
44 IWshCollection *coll;
45 IDispatch *disp, *shortcut;
46 IUnknown *shell;
47 IFolderCollection *folders;
48 IWshShortcut *shcut;
49 ITypeInfo *ti;
50 HRESULT hr;
51 TYPEATTR *tattr;
52 DISPPARAMS dp;
53 EXCEPINFO ei;
54 VARIANT arg, res;
55 BSTR str, ret;
56 UINT err;
58 hr = CoCreateInstance(&CLSID_WshShell, NULL, CLSCTX_INPROC_SERVER|CLSCTX_INPROC_HANDLER,
59 &IID_IDispatch, (void**)&disp);
60 if(FAILED(hr)) {
61 win_skip("Could not create WshShell object: %08x\n", hr);
62 return;
65 hr = IDispatch_QueryInterface(disp, &IID_IWshShell3, (void**)&shell);
66 EXPECT_HR(hr, S_OK);
67 IDispatch_Release(disp);
69 hr = IDispatch_QueryInterface(disp, &IID_IDispatchEx, (void**)&dispex);
70 EXPECT_HR(hr, E_NOINTERFACE);
72 hr = IUnknown_QueryInterface(shell, &IID_IWshShell3, (void**)&sh3);
73 EXPECT_HR(hr, S_OK);
75 hr = IWshShell3_get_SpecialFolders(sh3, &coll);
76 EXPECT_HR(hr, S_OK);
78 hr = IWshCollection_QueryInterface(coll, &IID_IFolderCollection, (void**)&folders);
79 EXPECT_HR(hr, E_NOINTERFACE);
81 hr = IWshCollection_QueryInterface(coll, &IID_IDispatch, (void**)&disp);
82 EXPECT_HR(hr, S_OK);
84 hr = IDispatch_GetTypeInfo(disp, 0, 0, &ti);
85 EXPECT_HR(hr, S_OK);
87 hr = ITypeInfo_GetTypeAttr(ti, &tattr);
88 EXPECT_HR(hr, S_OK);
89 ok(IsEqualIID(&tattr->guid, &IID_IWshCollection), "got wrong type guid\n");
90 ITypeInfo_ReleaseTypeAttr(ti, tattr);
92 /* try to call Item() with normal IDispatch procedure */
93 str = SysAllocString(desktopW);
94 V_VT(&arg) = VT_BSTR;
95 V_BSTR(&arg) = str;
96 dp.rgvarg = &arg;
97 dp.rgdispidNamedArgs = NULL;
98 dp.cArgs = 1;
99 dp.cNamedArgs = 0;
100 hr = IDispatch_Invoke(disp, DISPID_VALUE, &IID_NULL, 1033, DISPATCH_PROPERTYGET, &dp, &res, &ei, &err);
101 EXPECT_HR(hr, DISP_E_MEMBERNOTFOUND);
103 /* try Item() directly, it returns directory path apparently */
104 V_VT(&res) = VT_EMPTY;
105 hr = IWshCollection_Item(coll, &arg, &res);
106 EXPECT_HR(hr, S_OK);
107 ok(V_VT(&res) == VT_BSTR, "got res type %d\n", V_VT(&res));
108 SysFreeString(str);
109 VariantClear(&res);
111 /* CreateShortcut() */
112 str = SysAllocString(lnk1W);
113 hr = IWshShell3_CreateShortcut(sh3, str, &shortcut);
114 EXPECT_HR(hr, S_OK);
115 SysFreeString(str);
116 hr = IDispatch_QueryInterface(shortcut, &IID_IWshShortcut, (void**)&shcut);
117 EXPECT_HR(hr, S_OK);
119 hr = IWshShortcut_get_Arguments(shcut, NULL);
120 ok(hr == E_POINTER, "got 0x%08x\n", hr);
122 hr = IWshShortcut_get_IconLocation(shcut, NULL);
123 ok(hr == E_POINTER, "got 0x%08x\n", hr);
125 IWshShortcut_Release(shcut);
126 IDispatch_Release(shortcut);
128 /* ExpandEnvironmentStrings */
129 hr = IWshShell3_ExpandEnvironmentStrings(sh3, NULL, NULL);
130 ok(hr == E_POINTER, "got 0x%08x\n", hr);
132 str = SysAllocString(pathW);
133 hr = IWshShell3_ExpandEnvironmentStrings(sh3, str, NULL);
134 ok(hr == E_POINTER, "got 0x%08x\n", hr);
135 SysFreeString(str);
137 V_VT(&arg) = VT_BSTR;
138 V_BSTR(&arg) = SysAllocString(sysW);
139 hr = IWshShell3_get_Environment(sh3, &arg, &env);
140 ok(hr == S_OK, "got 0x%08x\n", hr);
141 VariantClear(&arg);
143 hr = IWshEnvironment_get_Item(env, NULL, NULL);
144 ok(hr == E_POINTER, "got 0x%08x\n", hr);
146 ret = (BSTR)0x1;
147 hr = IWshEnvironment_get_Item(env, NULL, &ret);
148 ok(hr == S_OK, "got 0x%08x\n", hr);
149 ok(ret && !*ret, "got %p\n", ret);
150 SysFreeString(ret);
152 /* invalid var name */
153 str = SysAllocString(lnk1W);
154 hr = IWshEnvironment_get_Item(env, str, NULL);
155 ok(hr == E_POINTER, "got 0x%08x\n", hr);
157 ret = NULL;
158 hr = IWshEnvironment_get_Item(env, str, &ret);
159 ok(hr == S_OK, "got 0x%08x\n", hr);
160 ok(ret && *ret == 0, "got %s\n", wine_dbgstr_w(ret));
161 SysFreeString(ret);
162 SysFreeString(str);
164 /* valid name */
165 str = SysAllocString(path2W);
166 hr = IWshEnvironment_get_Item(env, str, &ret);
167 ok(hr == S_OK, "got 0x%08x\n", hr);
168 ok(ret && *ret != 0, "got %s\n", wine_dbgstr_w(ret));
169 SysFreeString(ret);
170 SysFreeString(str);
172 IWshEnvironment_Release(env);
174 IWshCollection_Release(coll);
175 IDispatch_Release(disp);
176 IWshShell3_Release(sh3);
177 IUnknown_Release(shell);
180 START_TEST(wshom)
182 CoInitialize(NULL);
184 test_wshshell();
186 CoUninitialize();