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
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
))
34 IOleClientSite_AddRef(iface
);
42 static ULONG WINAPI
OleClientSite_AddRef(IOleClientSite
*iface
)
47 static ULONG WINAPI
OleClientSite_Release(IOleClientSite
*iface
)
52 static HRESULT WINAPI
OleClientSite_SaveObject(IOleClientSite
*iface
)
57 static HRESULT WINAPI
OleClientSite_GetMoniker(IOleClientSite
*iface
, DWORD assign
,
58 DWORD which
, IMoniker
**moniker
)
63 static HRESULT WINAPI
OleClientSite_GetContainer(IOleClientSite
*iface
, IOleContainer
**container
)
68 static HRESULT WINAPI
OleClientSite_ShowObject(IOleClientSite
*iface
)
73 static HRESULT WINAPI
OleClientSite_OnShowWindow(IOleClientSite
*iface
, BOOL show
)
78 static HRESULT WINAPI
OleClientSite_RequestNewObjectLayout(IOleClientSite
*iface
)
83 static const IOleClientSiteVtbl OleClientSiteVtbl
= {
84 OleClientSite_QueryInterface
,
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
;
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
);
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
);
138 dpi_x
= GetDeviceCaps(hdc
, LOGPIXELSX
);
139 dpi_y
= GetDeviceCaps(hdc
, LOGPIXELSY
);
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
;
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
;
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
);
223 hr
= CoCreateInstance(&CLSID_ScriptControl
, NULL
, CLSCTX_INPROC_SERVER
|CLSCTX_INPROC_HANDLER
,
224 &IID_IUnknown
, (void**)&unk
);
226 win_skip("Could not create ScriptControl object: %08x\n", hr
);
229 IUnknown_Release(unk
);
232 test_persiststreaminit();