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
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};
45 IDispatch
*disp
, *shortcut
;
47 IFolderCollection
*folders
;
58 hr
= CoCreateInstance(&CLSID_WshShell
, NULL
, CLSCTX_INPROC_SERVER
|CLSCTX_INPROC_HANDLER
,
59 &IID_IDispatch
, (void**)&disp
);
61 win_skip("Could not create WshShell object: %08x\n", hr
);
65 hr
= IDispatch_QueryInterface(disp
, &IID_IWshShell3
, (void**)&shell
);
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
);
75 hr
= IWshShell3_get_SpecialFolders(sh3
, &coll
);
78 hr
= IWshCollection_QueryInterface(coll
, &IID_IFolderCollection
, (void**)&folders
);
79 EXPECT_HR(hr
, E_NOINTERFACE
);
81 hr
= IWshCollection_QueryInterface(coll
, &IID_IDispatch
, (void**)&disp
);
84 hr
= IDispatch_GetTypeInfo(disp
, 0, 0, &ti
);
87 hr
= ITypeInfo_GetTypeAttr(ti
, &tattr
);
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
);
97 dp
.rgdispidNamedArgs
= NULL
;
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
);
107 ok(V_VT(&res
) == VT_BSTR
, "got res type %d\n", V_VT(&res
));
111 /* CreateShortcut() */
112 str
= SysAllocString(lnk1W
);
113 hr
= IWshShell3_CreateShortcut(sh3
, str
, &shortcut
);
116 hr
= IDispatch_QueryInterface(shortcut
, &IID_IWshShortcut
, (void**)&shcut
);
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
);
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
);
143 hr
= IWshEnvironment_get_Item(env
, NULL
, NULL
);
144 ok(hr
== E_POINTER
, "got 0x%08x\n", hr
);
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
);
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
);
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
));
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
));
172 IWshEnvironment_Release(env
);
174 IWshCollection_Release(coll
);
175 IDispatch_Release(disp
);
176 IWshShell3_Release(sh3
);
177 IUnknown_Release(shell
);