msscript: Implement GetControlInfo().
[wine.git] / dlls / msscript.ocx / tests / msscript.c
blob12f700399091607ddc37a2911846cdf50176a7e7
1 /*
2 * Copyright 2016 Nikolay Sivov 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 <olectl.h>
26 #include "msscript.h"
27 #include "wine/test.h"
29 static HRESULT WINAPI OleClientSite_QueryInterface(IOleClientSite *iface, REFIID riid, void **obj)
31 if (IsEqualIID(riid, &IID_IOleClientSite) || IsEqualIID(riid, &IID_IUnknown))
33 *obj = iface;
34 IOleClientSite_AddRef(iface);
35 return S_OK;
38 *obj = NULL;
39 return E_NOINTERFACE;
42 static ULONG WINAPI OleClientSite_AddRef(IOleClientSite *iface)
44 return 2;
47 static ULONG WINAPI OleClientSite_Release(IOleClientSite *iface)
49 return 1;
52 static HRESULT WINAPI OleClientSite_SaveObject(IOleClientSite *iface)
54 return E_NOTIMPL;
57 static HRESULT WINAPI OleClientSite_GetMoniker(IOleClientSite *iface, DWORD assign,
58 DWORD which, IMoniker **moniker)
60 return E_NOTIMPL;
63 static HRESULT WINAPI OleClientSite_GetContainer(IOleClientSite *iface, IOleContainer **container)
65 return E_NOTIMPL;
68 static HRESULT WINAPI OleClientSite_ShowObject(IOleClientSite *iface)
70 return E_NOTIMPL;
73 static HRESULT WINAPI OleClientSite_OnShowWindow(IOleClientSite *iface, BOOL show)
75 return E_NOTIMPL;
78 static HRESULT WINAPI OleClientSite_RequestNewObjectLayout(IOleClientSite *iface)
80 return E_NOTIMPL;
83 static const IOleClientSiteVtbl OleClientSiteVtbl = {
84 OleClientSite_QueryInterface,
85 OleClientSite_AddRef,
86 OleClientSite_Release,
87 OleClientSite_SaveObject,
88 OleClientSite_GetMoniker,
89 OleClientSite_GetContainer,
90 OleClientSite_ShowObject,
91 OleClientSite_OnShowWindow,
92 OleClientSite_RequestNewObjectLayout
95 static IOleClientSite testclientsite = { &OleClientSiteVtbl };
97 static void test_oleobject(void)
99 DWORD status, dpi_x, dpi_y;
100 IOleClientSite *site;
101 IOleObject *obj;
102 SIZEL extent;
103 HRESULT hr;
104 HDC hdc;
106 hr = CoCreateInstance(&CLSID_ScriptControl, NULL, CLSCTX_INPROC_SERVER|CLSCTX_INPROC_HANDLER,
107 &IID_IOleObject, (void**)&obj);
108 ok(hr == S_OK, "got 0x%08x\n", hr);
110 if (0) /* crashes on w2k3 */
111 hr = IOleObject_GetMiscStatus(obj, DVASPECT_CONTENT, NULL);
113 status = 0;
114 hr = IOleObject_GetMiscStatus(obj, DVASPECT_CONTENT, &status);
115 ok(hr == S_OK, "got 0x%08x\n", hr);
116 ok(status != 0, "got 0x%08x\n", status);
118 hr = IOleObject_SetClientSite(obj, &testclientsite);
119 ok(hr == S_OK, "got 0x%08x\n", hr);
121 if (0) /* crashes on w2k3 */
122 hr = IOleObject_GetClientSite(obj, NULL);
124 hr = IOleObject_GetClientSite(obj, &site);
125 ok(hr == S_OK, "got 0x%08x\n", hr);
126 ok(site == &testclientsite, "got %p, %p\n", site, &testclientsite);
127 IOleClientSite_Release(site);
129 hr = IOleObject_SetClientSite(obj, NULL);
130 ok(hr == S_OK, "got 0x%08x\n", hr);
132 hr = IOleObject_GetClientSite(obj, &site);
133 ok(hr == S_OK, "got 0x%08x\n", hr);
134 ok(site == NULL, "got %p\n", site);
136 /* extents */
137 hdc = GetDC(0);
138 dpi_x = GetDeviceCaps(hdc, LOGPIXELSX);
139 dpi_y = GetDeviceCaps(hdc, LOGPIXELSY);
140 ReleaseDC(0, hdc);
142 memset(&extent, 0, sizeof(extent));
143 hr = IOleObject_GetExtent(obj, DVASPECT_CONTENT, &extent);
144 ok(hr == S_OK, "got 0x%08x\n", hr);
145 ok(extent.cx == MulDiv(38, 2540, dpi_x), "got %d\n", extent.cx);
146 ok(extent.cy == MulDiv(38, 2540, dpi_y), "got %d\n", extent.cy);
148 extent.cx = extent.cy = 0xdeadbeef;
149 hr = IOleObject_GetExtent(obj, DVASPECT_THUMBNAIL, &extent);
150 ok(hr == DV_E_DVASPECT, "got 0x%08x\n", hr);
151 ok(extent.cx == 0xdeadbeef, "got %d\n", extent.cx);
152 ok(extent.cy == 0xdeadbeef, "got %d\n", extent.cy);
154 extent.cx = extent.cy = 0xdeadbeef;
155 hr = IOleObject_GetExtent(obj, DVASPECT_ICON, &extent);
156 ok(hr == DV_E_DVASPECT, "got 0x%08x\n", hr);
157 ok(extent.cx == 0xdeadbeef, "got %d\n", extent.cx);
158 ok(extent.cy == 0xdeadbeef, "got %d\n", extent.cy);
160 extent.cx = extent.cy = 0xdeadbeef;
161 hr = IOleObject_GetExtent(obj, DVASPECT_DOCPRINT, &extent);
162 ok(hr == DV_E_DVASPECT, "got 0x%08x\n", hr);
163 ok(extent.cx == 0xdeadbeef, "got %d\n", extent.cx);
164 ok(extent.cy == 0xdeadbeef, "got %d\n", extent.cy);
166 IOleObject_Release(obj);
169 static void test_persiststreaminit(void)
171 IPersistStreamInit *init;
172 HRESULT hr;
174 hr = CoCreateInstance(&CLSID_ScriptControl, NULL, CLSCTX_INPROC_SERVER|CLSCTX_INPROC_HANDLER,
175 &IID_IPersistStreamInit, (void**)&init);
176 ok(hr == S_OK, "got 0x%08x\n", hr);
178 IPersistStreamInit_Release(init);
181 static void test_olecontrol(void)
183 IOleControl *olecontrol;
184 CONTROLINFO info;
185 HRESULT hr;
187 hr = CoCreateInstance(&CLSID_ScriptControl, NULL, CLSCTX_INPROC_SERVER|CLSCTX_INPROC_HANDLER,
188 &IID_IOleControl, (void**)&olecontrol);
189 ok(hr == S_OK, "got 0x%08x\n", hr);
191 memset(&info, 0xab, sizeof(info));
192 info.cb = sizeof(info);
193 hr = IOleControl_GetControlInfo(olecontrol, &info);
194 ok(hr == S_OK, "got 0x%08x\n", hr);
195 ok(info.hAccel == NULL, "got %p\n", info.hAccel);
196 ok(info.cAccel == 0, "got %d\n", info.cAccel);
197 ok(info.dwFlags == 0xabababab, "got %x\n", info.dwFlags);
199 memset(&info, 0xab, sizeof(info));
200 info.cb = sizeof(info) - 1;
201 hr = IOleControl_GetControlInfo(olecontrol, &info);
202 ok(hr == S_OK, "got 0x%08x\n", hr);
203 ok(info.hAccel == NULL, "got %p\n", info.hAccel);
204 ok(info.cAccel == 0, "got %d\n", info.cAccel);
205 ok(info.dwFlags == 0xabababab, "got %x\n", info.dwFlags);
207 if (0) /* crashes on win2k3 */
209 hr = IOleControl_GetControlInfo(olecontrol, NULL);
210 ok(hr == E_POINTER, "got 0x%08x\n", hr);
213 IOleControl_Release(olecontrol);
216 START_TEST(msscript)
218 IUnknown *unk;
219 HRESULT hr;
221 CoInitialize(NULL);
223 hr = CoCreateInstance(&CLSID_ScriptControl, NULL, CLSCTX_INPROC_SERVER|CLSCTX_INPROC_HANDLER,
224 &IID_IUnknown, (void**)&unk);
225 if (FAILED(hr)) {
226 win_skip("Could not create ScriptControl object: %08x\n", hr);
227 return;
229 IUnknown_Release(unk);
231 test_oleobject();
232 test_persiststreaminit();
233 test_olecontrol();
235 CoUninitialize();