[MSHTML_WINETEST]

* Sync with Wine 1.7.17.
CORE-8080

svn path=/trunk/; revision=63005
This commit is contained in:
Amine Khaldi 2014-04-26 18:34:51 +00:00
parent 874b7e16f9
commit f550748eed
14 changed files with 1254 additions and 319 deletions

View file

@ -20,16 +20,18 @@ add_executable(mshtml_winetest ${SOURCE} rsrc.rc)
list(APPEND mshtml_winetest_rc_deps
${CMAKE_CURRENT_BINARY_DIR}/test_tlb.tlb
${CMAKE_CURRENT_SOURCE_DIR}/blank.html
${CMAKE_CURRENT_SOURCE_DIR}/exectest.html
${CMAKE_CURRENT_SOURCE_DIR}/jstest.html
${CMAKE_CURRENT_SOURCE_DIR}/nav_test.html
${CMAKE_CURRENT_SOURCE_DIR}/vbtest.html
${CMAKE_CURRENT_SOURCE_DIR}/events.html
${CMAKE_CURRENT_SOURCE_DIR}/externscr.js)
set_source_files_properties(rsrc.rc PROPERTIES OBJECT_DEPENDS "${mshtml_winetest_rc_deps}")
target_link_libraries(mshtml_winetest wine uuid strmiids)
target_link_libraries(mshtml_winetest uuid strmiids)
set_module_type(mshtml_winetest win32cui)
add_importlibs(mshtml_winetest wininet ole32 oleaut32 user32 gdi32 urlmon advapi32 msvcrt kernel32 ntdll)
add_importlibs(mshtml_winetest wininet ole32 oleaut32 user32 gdi32 urlmon advapi32 msvcrt kernel32)
add_dependencies(mshtml_winetest test_tlb_header stdole2)
add_cd_file(TARGET mshtml_winetest DESTINATION reactos/bin FOR all)

View file

@ -119,6 +119,7 @@ static ITypeInfo *actxtest_typeinfo, *class_typeinfo;
static HWND container_hwnd, plugin_hwnd;
static int plugin_behavior;
static BOOL no_quickact;
static LONG activex_refcnt;
#define TESTACTIVEX_CLSID "{178fc163-f585-4e24-9c13-4bb7f6680746}"
@ -164,18 +165,6 @@ static REFIID pluginhost_iids[] = {
NULL
};
static const char *debugstr_guid(REFIID riid)
{
static char buf[50];
sprintf(buf, "{%08x-%04x-%04x-%02x%02x-%02x%02x%02x%02x%02x%02x}",
riid->Data1, riid->Data2, riid->Data3, riid->Data4[0],
riid->Data4[1], riid->Data4[2], riid->Data4[3], riid->Data4[4],
riid->Data4[5], riid->Data4[6], riid->Data4[7]);
return buf;
}
static BOOL iface_cmp(IUnknown *iface1, IUnknown *iface2)
{
IUnknown *unk1, *unk2;
@ -200,7 +189,7 @@ static void _test_ifaces(unsigned line, IUnknown *iface, REFIID *iids)
for(piid = iids; *piid; piid++) {
hres = IUnknown_QueryInterface(iface, *piid, (void**)&unk);
ok_(__FILE__,line) (hres == S_OK, "Could not get %s interface: %08x\n", debugstr_guid(*piid), hres);
ok_(__FILE__,line) (hres == S_OK, "Could not get %s interface: %08x\n", wine_dbgstr_guid(*piid), hres);
if(SUCCEEDED(hres))
IUnknown_Release(unk);
}
@ -283,7 +272,7 @@ static LRESULT WINAPI plugin_proc(HWND hwnd, UINT msg, WPARAM wParam, LPARAM lPa
}
}
return DefWindowProc(hwnd, msg, wParam, lParam);
return DefWindowProcW(hwnd, msg, wParam, lParam);
}
static void create_plugin_window(HWND parent, const RECT *rect)
@ -307,7 +296,7 @@ static void create_plugin_window(HWND parent, const RECT *rect)
static HRESULT WINAPI ConnectionPoint_QueryInterface(IConnectionPoint *iface, REFIID riid, void **ppv)
{
ok(0, "unexpected QI call %s\n", debugstr_guid(riid));
ok(0, "unexpected QI call %s\n", wine_dbgstr_guid(riid));
return E_NOINTERFACE;
}
@ -398,12 +387,12 @@ static HRESULT WINAPI OleControl_QueryInterface(IOleControl *iface, REFIID riid,
static ULONG WINAPI OleControl_AddRef(IOleControl *iface)
{
return 2;
return ++activex_refcnt;
}
static ULONG WINAPI OleControl_Release(IOleControl *iface)
{
return 1;
return --activex_refcnt;
}
static HRESULT WINAPI OleControl_GetControlInfo(IOleControl *iface, CONTROLINFO *pCI)
@ -459,12 +448,12 @@ static HRESULT WINAPI QuickActivate_QueryInterface(IQuickActivate *iface, REFIID
static ULONG WINAPI QuickActivate_AddRef(IQuickActivate *iface)
{
return 2;
return ++activex_refcnt;
}
static ULONG WINAPI QuickActivate_Release(IQuickActivate *iface)
{
return 1;
return --activex_refcnt;
}
static HRESULT WINAPI QuickActivate_QuickActivate(IQuickActivate *iface, QACONTAINER *container, QACONTROL *control)
@ -547,12 +536,12 @@ static HRESULT WINAPI PersistPropertyBag_QueryInterface(IPersistPropertyBag *ifa
static ULONG WINAPI PersistPropertyBag_AddRef(IPersistPropertyBag *iface)
{
return 2;
return ++activex_refcnt;
}
static ULONG WINAPI PersistPropertyBag_Release(IPersistPropertyBag *iface)
{
return 1;
return --activex_refcnt;
}
static HRESULT WINAPI PersistPropertyBag_GetClassID(IPersistPropertyBag *face, CLSID *pClassID)
@ -689,12 +678,12 @@ static HRESULT WINAPI Dispatch_QueryInterface(IDispatch *iface, REFIID riid, voi
static ULONG WINAPI Dispatch_AddRef(IDispatch *iface)
{
return 2;
return ++activex_refcnt;
}
static ULONG WINAPI Dispatch_Release(IDispatch *iface)
{
return 1;
return --activex_refcnt;
}
static HRESULT WINAPI Dispatch_GetTypeInfoCount(IDispatch *iface, UINT *pctinfo)
@ -716,7 +705,7 @@ static HRESULT WINAPI Dispatch_GetTypeInfo(IDispatch *iface, UINT iTInfo, LCID l
static HRESULT WINAPI Dispatch_GetIDsOfNames(IDispatch *iface, REFIID riid, LPOLESTR *rgszNames,
UINT cNames, LCID lcid, DISPID *rgDispId)
{
ok(IsEqualGUID(riid, &IID_NULL), "riid = %s\n", debugstr_guid(riid));
ok(IsEqualGUID(riid, &IID_NULL), "riid = %s\n", wine_dbgstr_guid(riid));
ok(cNames == 1, "cNames = %d\n", cNames);
ok(rgszNames != NULL, "rgszNames == NULL\n");
ok(rgDispId != NULL, "rgDispId == NULL\n");
@ -737,7 +726,7 @@ static HRESULT WINAPI Dispatch_Invoke(IDispatch *iface, DISPID dispIdMember, REF
LCID lcid, WORD wFlags, DISPPARAMS *pDispParams, VARIANT *pVarResult,
EXCEPINFO *pExcepInfo, UINT *puArgErr)
{
ok(IsEqualGUID(riid, &IID_NULL), "riid = %s\n", debugstr_guid(riid));
ok(IsEqualGUID(riid, &IID_NULL), "riid = %s\n", wine_dbgstr_guid(riid));
ok(pDispParams != NULL, "pDispParams == NULL\n");
ok(!pDispParams->cNamedArgs, "pDispParams->cNamedArgs = %d\n", pDispParams->cNamedArgs);
ok(!pDispParams->rgdispidNamedArgs, "pDispParams->rgdispidNamedArgs != NULL\n");
@ -832,12 +821,12 @@ static HRESULT WINAPI ProvideClassInfo_QueryInterface(IProvideClassInfo *iface,
static ULONG WINAPI ProvideClassInfo_AddRef(IProvideClassInfo *iface)
{
return 2;
return ++activex_refcnt;
}
static ULONG WINAPI ProvideClassInfo_Release(IProvideClassInfo *iface)
{
return 1;
return --activex_refcnt;
}
static HRESULT WINAPI ProvideClassInfo_GetClassInfo(IProvideClassInfo *iface, ITypeInfo **ppTI)
@ -865,12 +854,12 @@ static HRESULT WINAPI ConnectionPointContainer_QueryInterface(IConnectionPointCo
static ULONG WINAPI ConnectionPointContainer_AddRef(IConnectionPointContainer *iface)
{
return 2;
return ++activex_refcnt;
}
static ULONG WINAPI ConnectionPointContainer_Release(IConnectionPointContainer *iface)
{
return 1;
return --activex_refcnt;
}
static HRESULT WINAPI ConnectionPointContainer_EnumConnectionPoints(IConnectionPointContainer *iface,
@ -890,8 +879,9 @@ static HRESULT WINAPI ConnectionPointContainer_FindConnectionPoint(IConnectionPo
}
CHECK_EXPECT(FindConnectionPoint);
ok(IsEqualGUID(riid, &DIID_DispActiveXTest), "riid = %s\n", debugstr_guid(riid));
ok(IsEqualGUID(riid, &DIID_DispActiveXTest), "riid = %s\n", wine_dbgstr_guid(riid));
IConnectionPoint_AddRef(&ConnectionPoint);
*ppCP = &ConnectionPoint;
return S_OK;
}
@ -913,12 +903,12 @@ static HRESULT WINAPI ViewObjectEx_QueryInterface(IViewObjectEx *iface, REFIID r
static ULONG WINAPI ViewObjectEx_AddRef(IViewObjectEx *iface)
{
return 2;
return ++activex_refcnt;
}
static ULONG WINAPI ViewObjectEx_Release(IViewObjectEx *iface)
{
return 1;
return --activex_refcnt;
}
static HRESULT WINAPI ViewObjectEx_Draw(IViewObjectEx *iface, DWORD dwDrawAspect, LONG lindex, void *pvAspect, DVTARGETDEVICE *ptd,
@ -987,7 +977,7 @@ static HRESULT WINAPI ViewObjectEx_GetViewStatus(IViewObjectEx *iface, DWORD *pd
static HRESULT WINAPI ViewObjectEx_QueryHitPoint(IViewObjectEx *iface, DWORD dwAspect, LPCRECT pRectBounds, POINT ptlLoc,
LONG lCloseHint, DWORD *pHitResult)
{
ok(0, "unexpected call\n");
trace("QueryHitPoint call ignored\n");
return E_NOTIMPL;
}
@ -1032,12 +1022,12 @@ static HRESULT WINAPI OleObject_QueryInterface(IOleObject *iface, REFIID riid, v
static ULONG WINAPI OleObject_AddRef(IOleObject *iface)
{
return 2;
return ++activex_refcnt;
}
static ULONG WINAPI OleObject_Release(IOleObject *iface)
{
return 1;
return --activex_refcnt;
}
static HRESULT WINAPI OleObject_SetClientSite(IOleObject *iface, IOleClientSite *pClientSite)
@ -1291,12 +1281,12 @@ static HRESULT WINAPI OleInPlaceObject_QueryInterface(IOleInPlaceObjectWindowles
static ULONG WINAPI OleInPlaceObject_AddRef(IOleInPlaceObjectWindowless *iface)
{
return 2;
return ++activex_refcnt;
}
static ULONG WINAPI OleInPlaceObject_Release(IOleInPlaceObjectWindowless *iface)
{
return 1;
return --activex_refcnt;
}
static HRESULT WINAPI OleInPlaceObject_GetWindow(IOleInPlaceObjectWindowless *iface,
@ -1343,7 +1333,7 @@ static HRESULT WINAPI OleInPlaceObject_UIDeactivate(IOleInPlaceObjectWindowless
static HRESULT WINAPI OleInPlaceObject_SetObjectRects(IOleInPlaceObjectWindowless *iface,
LPCRECT lprcPosRect, LPCRECT lprcClipRect)
{
CHECK_EXPECT(SetObjectRects);
CHECK_EXPECT2(SetObjectRects);
return S_OK;
}
@ -1456,15 +1446,20 @@ static HRESULT ax_qi(REFIID riid, void **ppv)
}else if(IsEqualGUID(riid, &IID_ITestActiveX)) {
CHECK_EXPECT(QI_ITestActiveX);
*ppv = &wrapped_iface;
return S_OK;
}else if(IsEqualGUID(riid, &IID_IOleWindow) || IsEqualGUID(riid, &IID_IOleInPlaceObject)
|| IsEqualGUID(&IID_IOleInPlaceObjectWindowless, riid)) {
*ppv = plugin_behavior == TEST_DISPONLY ? NULL : &OleInPlaceObjectWindowless;
}else {
trace("QI %s\n", debugstr_guid(riid));
trace("QI %s\n", wine_dbgstr_guid(riid));
*ppv = NULL;
}
return *ppv ? S_OK : E_NOINTERFACE;
if(!*ppv)
return E_NOINTERFACE;
IUnknown_AddRef((IUnknown*)*ppv);
return S_OK;
}
static HRESULT WINAPI ClassFactory_QueryInterface(IClassFactory *iface, REFIID riid, void **ppv)
@ -1483,7 +1478,7 @@ static HRESULT WINAPI ClassFactory_QueryInterface(IClassFactory *iface, REFIID r
if(IsEqualGUID(&IID_IClassFactoryEx, riid))
return E_NOINTERFACE; /* TODO */
ok(0, "unexpected riid %s\n", debugstr_guid(riid));
ok(0, "unexpected riid %s\n", wine_dbgstr_guid(riid));
return E_NOTIMPL;
}
@ -1502,8 +1497,9 @@ static HRESULT WINAPI ClassFactory_CreateInstance(IClassFactory *iface, IUnknown
CHECK_EXPECT(CreateInstance);
ok(!outer, "outer = %p\n", outer);
ok(IsEqualGUID(riid, &IID_IUnknown), "riid = %s\n", debugstr_guid(riid));
ok(IsEqualGUID(riid, &IID_IUnknown), "riid = %s\n", wine_dbgstr_guid(riid));
activex_refcnt++;
*ppv = &OleControl;
return S_OK;
}
@ -1675,7 +1671,7 @@ static void test_object_elem(IHTMLDocument2 *doc)
hres = IHTMLObjectElement_put_width(objelem, v);
ok(hres == S_OK, "put_width failed: %08x\n", hres);
CHECK_CALLED(OnAmbientPropertyChange_UNKNOWN);
CHECK_CALLED(Invoke_ENABLED);
CLEAR_CALLED(Invoke_ENABLED); /* Not called on IE10 */
hres = IHTMLObjectElement_get_width(objelem, &v);
ok(hres == S_OK, "get_width failed: %08x\n", hres);
@ -1690,7 +1686,7 @@ static void test_object_elem(IHTMLDocument2 *doc)
hres = IHTMLObjectElement_put_height(objelem, v);
ok(hres == S_OK, "put_height failed: %08x\n", hres);
CHECK_CALLED(OnAmbientPropertyChange_UNKNOWN);
CHECK_CALLED(Invoke_ENABLED);
CLEAR_CALLED(Invoke_ENABLED); /* Not called on IE10 */
hres = IHTMLObjectElement_get_height(objelem, &v);
ok(hres == S_OK, "get_height failed: %08x\n", hres);
@ -1739,6 +1735,7 @@ static void test_container(IHTMLDocument2 *doc_obj)
ok(hres == S_OK, "QueryService(CLSID_TestActiveX) failed: %08x\n", hres);
ok(unk == (IUnknown*)&OleObject, "unexpected unk %p\n", unk);
CHECK_CALLED(QueryService_TestActiveX);
IUnknown_Release(unk);
IServiceProvider_Release(serv_prov);
@ -1757,7 +1754,7 @@ static void test_ui_activate(void)
SET_EXPECT(Invoke_ENABLED);
hres = IOleInPlaceSite_OnUIActivate(ip_site);
ok(hres == S_OK, "OnUIActivate failed: %08x\n", hres);
CHECK_CALLED(Invoke_ENABLED);
CLEAR_CALLED(Invoke_ENABLED); /* Not called on IE10 */
IOleInPlaceSite_Release(ip_site);
}
@ -1770,7 +1767,7 @@ static HRESULT WINAPI InPlaceFrame_QueryInterface(IOleInPlaceFrame *iface, REFII
static const GUID undocumented_frame_iid = {0xfbece6c9,0x48d7,0x4a37,{0x8f,0xe3,0x6a,0xd4,0x27,0x2f,0xdd,0xac}};
if(!IsEqualGUID(&undocumented_frame_iid, riid))
ok(0, "unexpected riid %s\n", debugstr_guid(riid));
ok(0, "unexpected riid %s\n", wine_dbgstr_guid(riid));
*ppv = NULL;
return E_NOINTERFACE;
@ -2143,7 +2140,7 @@ static HRESULT WINAPI ServiceProvider_QueryService(IServiceProvider *iface, REFG
{
if(IsEqualGUID(&CLSID_TestActiveX, guidService)) {
CHECK_EXPECT(QueryService_TestActiveX);
ok(IsEqualGUID(&IID_IUnknown, riid), "unexpected riid %s\n", debugstr_guid(riid));
ok(IsEqualGUID(&IID_IUnknown, riid), "unexpected riid %s\n", wine_dbgstr_guid(riid));
*ppv = &OleObject;
return S_OK;
}
@ -2334,9 +2331,9 @@ static IHTMLDocument2 *create_doc(const char *str)
doc_load_string(doc, str);
do_advise((IUnknown*)doc, &IID_IPropertyNotifySink, (IUnknown*)&PropertyNotifySink);
while(!doc_complete && GetMessage(&msg, NULL, 0, 0)) {
while(!doc_complete && GetMessageW(&msg, NULL, 0, 0)) {
TranslateMessage(&msg);
DispatchMessage(&msg);
DispatchMessageW(&msg);
}
return doc;
@ -2359,12 +2356,15 @@ static void release_doc(IHTMLDocument2 *doc)
DestroyWindow(plugin_hwnd);
plugin_hwnd = NULL;
}
ok(!activex_refcnt, "activex_refcnt = %d\n", activex_refcnt);
}
static void init_test(int behavior)
{
plugin_behavior = behavior;
activex_refcnt = 0;
no_quickact = behavior == TEST_NOQUICKACT || behavior == TEST_DISPONLY;
}
@ -2399,6 +2399,7 @@ static void test_event_call(void)
static void test_flash_ax(void)
{
IHTMLDocument2 *doc;
IOleClientSite *cs;
init_test(TEST_FLASH);
@ -2448,6 +2449,9 @@ static void test_flash_ax(void)
skip("Skipping test_object_elem(notif_doc). ROSTESTS-114.\n");
}
IOleClientSite_AddRef(client_site);
cs = client_site;
SET_EXPECT(UIDeactivate);
SET_EXPECT(Invoke_ENABLED);
SET_EXPECT(Invoke_VALID);
@ -2456,13 +2460,14 @@ static void test_flash_ax(void)
SET_EXPECT(SetClientSite_NULL);
release_doc(doc);
CHECK_CALLED(UIDeactivate);
todo_wine
CHECK_CALLED(Invoke_ENABLED);
CLEAR_CALLED(Invoke_ENABLED); /* Not called on IE10 */
todo_wine
CHECK_CALLED(Invoke_VALID);
CHECK_CALLED(InPlaceDeactivate);
CHECK_CALLED(Close);
CHECK_CALLED(SetClientSite_NULL);
IOleClientSite_Release(cs);
}
static void test_noquickact_ax(void)
@ -2602,7 +2607,7 @@ static void test_nooleobj_ax(void)
static LRESULT WINAPI wnd_proc(HWND hwnd, UINT msg, WPARAM wParam, LPARAM lParam)
{
return DefWindowProc(hwnd, msg, wParam, lParam);
return DefWindowProcW(hwnd, msg, wParam, lParam);
}
static HWND create_container_window(void)
@ -2650,7 +2655,7 @@ static BOOL init_key(const char *key_name, const char *def_value, BOOL init)
DWORD res;
if(!init) {
RegDeleteKey(HKEY_CLASSES_ROOT, key_name);
RegDeleteKeyA(HKEY_CLASSES_ROOT, key_name);
return TRUE;
}

View file

@ -0,0 +1 @@
<html></html>

View file

@ -470,18 +470,6 @@ static const elem_type_info_t elem_type_infos[] = {
{"BUTTON", button_iids, &DIID_DispHTMLButtonElement}
};
static const char *dbgstr_guid(REFIID riid)
{
static char buf[50];
sprintf(buf, "{%08X-%04X-%04X-%02X%02X-%02X%02X%02X%02X%02X%02X}",
riid->Data1, riid->Data2, riid->Data3, riid->Data4[0],
riid->Data4[1], riid->Data4[2], riid->Data4[3], riid->Data4[4],
riid->Data4[5], riid->Data4[6], riid->Data4[7]);
return buf;
}
static int strcmp_wa(LPCWSTR strw, const char *stra)
{
CHAR buf[512];
@ -562,7 +550,7 @@ static void _test_ifaces(unsigned line, IUnknown *iface, REFIID *iids)
for(piid = iids; *piid; piid++) {
hres = IUnknown_QueryInterface(iface, *piid, (void**)&unk);
ok_(__FILE__,line) (hres == S_OK, "Could not get %s interface: %08x\n", dbgstr_guid(*piid), hres);
ok_(__FILE__,line) (hres == S_OK, "Could not get %s interface: %08x\n", wine_dbgstr_guid(*piid), hres);
if(SUCCEEDED(hres))
IUnknown_Release(unk);
}
@ -639,7 +627,7 @@ static void _test_disp(unsigned line, IUnknown *unk, const IID *diid, const char
IID iid;
if(_test_get_dispid(line, unk, &iid))
ok_(__FILE__,line) (IsEqualGUID(&iid, diid), "unexpected guid %s\n", dbgstr_guid(&iid));
ok_(__FILE__,line) (IsEqualGUID(&iid, diid), "unexpected guid %s\n", wine_dbgstr_guid(&iid));
if(val)
_test_disp_value(line, unk, val);
@ -652,7 +640,7 @@ static void _test_disp2(unsigned line, IUnknown *unk, const IID *diid, const IID
if(_test_get_dispid(line, unk, &iid))
ok_(__FILE__,line) (IsEqualGUID(&iid, diid) || broken(IsEqualGUID(&iid, diid2)),
"unexpected guid %s\n", dbgstr_guid(&iid));
"unexpected guid %s\n", wine_dbgstr_guid(&iid));
if(val)
_test_disp_value(line, unk, val);
@ -684,7 +672,7 @@ static void _test_class_info(unsigned line, IUnknown *unk)
if(SUCCEEDED(hres))
{
ok_(__FILE__,line)(IsEqualGUID(&type_attr->guid, &CLSID_HTMLDocument),
"unexpected guid %s\n", dbgstr_guid(&type_attr->guid));
"unexpected guid %s\n", wine_dbgstr_guid(&type_attr->guid));
ok_(__FILE__,line)(type_attr->typekind == TKIND_COCLASS,
"unexpected typekind %d\n", type_attr->typekind);
ITypeInfo_ReleaseTypeAttr(typeinfo, type_attr);
@ -759,6 +747,18 @@ static IHTMLElement4 *_get_elem4_iface(unsigned line, IUnknown *unk)
return elem;
}
#define get_doc3_iface(u) _get_doc3_iface(__LINE__,u)
static IHTMLDocument3 *_get_doc3_iface(unsigned line, IHTMLDocument2 *doc)
{
IHTMLDocument3 *doc3;
HRESULT hres;
hres = IHTMLDocument2_QueryInterface(doc, &IID_IHTMLDocument3, (void**)&doc3);
ok_(__FILE__,line) (hres == S_OK, "Could not get IHTMLDocument3 interface: %08x\n", hres);
return doc3;
}
#define get_node_iface(u) _get_node_iface(__LINE__,u)
static IHTMLDOMNode *_get_node_iface(unsigned line, IUnknown *unk)
{
@ -1943,6 +1943,28 @@ static void _test_select_type(unsigned line, IHTMLSelectElement *select, const c
SysFreeString(type);
}
#define test_select_multiple(s,t) _test_select_multiple(__LINE__,s,t)
static void _test_select_multiple(unsigned line, IHTMLSelectElement *select, VARIANT_BOOL exmultiple)
{
VARIANT_BOOL b = 100;
HRESULT hres;
hres = IHTMLSelectElement_get_multiple(select, &b);
ok_(__FILE__,line) (hres == S_OK, "get_multiple failed: %08x\n", hres);
ok_(__FILE__,line) (b == exmultiple, "multiple=%x, expected %x\n", b, exmultiple);
}
#define test_select_set_multiple(s,v) _test_select_set_multiple(__LINE__,s,v)
static void _test_select_set_multiple(unsigned line, IHTMLSelectElement *select, VARIANT_BOOL val)
{
HRESULT hres;
hres = IHTMLSelectElement_put_multiple(select, val);
ok_(__FILE__,line) (hres == S_OK, "put_multiple failed: %08x\n", hres);
_test_select_multiple(line, select, val);
}
#define test_range_text(r,t) _test_range_text(__LINE__,r,t)
static void _test_range_text(unsigned line, IHTMLTxtRange *range, const char *extext)
{
@ -4212,6 +4234,9 @@ static void test_select_elem(IHTMLSelectElement *select)
ok(iface_cmp((IUnknown*)disp, (IUnknown*)disp2), "disp != disp2\n");
IDispatch_Release(disp2);
IDispatch_Release(disp);
test_select_multiple(select, VARIANT_FALSE);
test_select_set_multiple(select, VARIANT_TRUE);
}
static void test_form_item(IHTMLElement *elem)
@ -5171,6 +5196,31 @@ static void test_default_body(IHTMLBodyElement *body)
VariantClear(&v);
}
#define test_body_scroll(a,b) _test_body_scroll(__LINE__,a,b)
static void _test_body_scroll(unsigned line, IHTMLBodyElement *body, const char *ex)
{
BSTR str;
HRESULT hres;
hres = IHTMLBodyElement_get_scroll(body, &str);
ok_(__FILE__,line)(hres == S_OK, "get_scroll failed: %08x\n", hres);
ok_(__FILE__,line)(ex ? !strcmp_wa(str, ex) : !str, "scroll = %s\n", wine_dbgstr_w(str));
SysFreeString(str);
}
#define set_body_scroll(a,b) _set_body_scroll(__LINE__,a,b)
static void _set_body_scroll(unsigned line, IHTMLBodyElement *body, const char *val)
{
BSTR str = a2bstr(val);
HRESULT hres;
hres = IHTMLBodyElement_put_scroll(body, str);
ok_(__FILE__,line)(hres == S_OK, "put_scroll failed: %08x\n", hres);
SysFreeString(str);
_test_body_scroll(line, body, val);
}
static void test_body_funs(IHTMLBodyElement *body)
{
VARIANT vbg, vDefaultbg;
@ -5197,6 +5247,11 @@ static void test_body_funs(IHTMLBodyElement *body)
hres = IHTMLBodyElement_put_bgColor(body, vDefaultbg);
ok(hres == S_OK, "put_bgColor failed: %08x\n", hres);
VariantClear(&vDefaultbg);
test_body_scroll(body, NULL);
set_body_scroll(body, "yes");
set_body_scroll(body, "no");
set_body_scroll(body, "auto");
}
static void test_history(IHTMLWindow2 *window)
@ -5521,6 +5576,9 @@ static void test_tr_elem(IHTMLElement *elem)
IHTMLElementCollection *col;
IHTMLTableRow *row;
HRESULT hres;
BSTR bstr;
LONG lval;
VARIANT vbg, vDefaultbg;
static const elem_type_t cell_types[] = {ET_TD,ET_TD};
@ -5537,6 +5595,74 @@ static void test_tr_elem(IHTMLElement *elem)
test_elem_collection((IUnknown*)col, cell_types, sizeof(cell_types)/sizeof(*cell_types));
IHTMLElementCollection_Release(col);
bstr = a2bstr("left");
hres = IHTMLTableRow_put_align(row, bstr);
ok(hres == S_OK, "set_align failed: %08x\n", hres);
SysFreeString(bstr);
bstr = NULL;
hres = IHTMLTableRow_get_align(row, &bstr);
ok(hres == S_OK, "get_align failed: %08x\n", hres);
ok(bstr != NULL, "get_align returned NULL\n");
ok(!strcmp_wa(bstr, "left"), "get_align returned %s\n", wine_dbgstr_w(bstr));
SysFreeString(bstr);
bstr = a2bstr("top");
hres = IHTMLTableRow_put_vAlign(row, bstr);
ok(hres == S_OK, "set_valign failed: %08x\n", hres);
SysFreeString(bstr);
bstr = NULL;
hres = IHTMLTableRow_get_vAlign(row, &bstr);
ok(hres == S_OK, "get_valign failed: %08x\n", hres);
ok(bstr != NULL, "get_valign returned NULL\n");
ok(!strcmp_wa(bstr, "top"), "get_valign returned %s\n", wine_dbgstr_w(bstr));
SysFreeString(bstr);
lval = 0xdeadbeef;
hres = IHTMLTableRow_get_rowIndex(row, &lval);
ok(hres == S_OK, "get_rowIndex failed: %08x\n", hres);
ok(lval == 1, "get_rowIndex returned %d\n", lval);
lval = 0xdeadbeef;
hres = IHTMLTableRow_get_sectionRowIndex(row, &lval);
ok(hres == S_OK, "get_sectionRowIndex failed: %08x\n", hres);
ok(lval == 1, "get_sectionRowIndex returned %d\n", lval);
hres = IHTMLTableRow_get_bgColor(row, &vDefaultbg);
ok(hres == S_OK, "get_bgColor failed: %08x\n", hres);
ok(V_VT(&vDefaultbg) == VT_BSTR, "bstr != NULL\n");
ok(!V_BSTR(&vDefaultbg), "V_BSTR(bgColor) = %s\n", wine_dbgstr_w(V_BSTR(&vDefaultbg)));
V_VT(&vbg) = VT_BSTR;
V_BSTR(&vbg) = a2bstr("red");
hres = IHTMLTableRow_put_bgColor(row, vbg);
ok(hres == S_OK, "put_bgColor failed: %08x\n", hres);
VariantClear(&vbg);
hres = IHTMLTableRow_get_bgColor(row, &vbg);
ok(hres == S_OK, "get_bgColor failed: %08x\n", hres);
ok(V_VT(&vDefaultbg) == VT_BSTR, "V_VT(&vDefaultbg) != VT_BSTR\n");
ok(!strcmp_wa(V_BSTR(&vbg), "#ff0000"), "Unexpected bgcolor %s\n", wine_dbgstr_w(V_BSTR(&vbg)));
VariantClear(&vbg);
V_VT(&vbg) = VT_I4;
V_I4(&vbg) = 0xff0000;
hres = IHTMLTableRow_put_bgColor(row, vbg);
ok(hres == S_OK, "put_bgColor failed: %08x\n", hres);
VariantClear(&vbg);
hres = IHTMLTableRow_get_bgColor(row, &vbg);
ok(hres == S_OK, "get_bgColor failed: %08x\n", hres);
ok(V_VT(&vDefaultbg) == VT_BSTR, "V_VT(&vDefaultbg) != VT_BSTR\n");
ok(!strcmp_wa(V_BSTR(&vbg), "#ff0000"), "Unexpected bgcolor %s\n", wine_dbgstr_w(V_BSTR(&vbg)));
VariantClear(&vbg);
/* Restore Originial */
hres = IHTMLTableRow_put_bgColor(row, vDefaultbg);
ok(hres == S_OK, "put_bgColor failed: %08x\n", hres);
VariantClear(&vDefaultbg);
IHTMLTableRow_Release(row);
}
@ -5602,6 +5728,8 @@ static void test_table_elem(IHTMLElement *elem)
IHTMLDOMNode *node;
VARIANT v;
HRESULT hres;
BSTR bstr;
VARIANT vbg, vDefaultbg;
static const elem_type_t row_types[] = {ET_TR,ET_TR};
static const elem_type_t all_types[] = {ET_TBODY,ET_TR,ET_TR,ET_TD,ET_TD};
@ -5655,6 +5783,52 @@ static void test_table_elem(IHTMLElement *elem)
test_table_cell_spacing(table, "11");
VariantClear(&v);
bstr = a2bstr("left");
hres = IHTMLTable_put_align(table, bstr);
ok(hres == S_OK, "set_align failed: %08x\n", hres);
SysFreeString(bstr);
bstr = NULL;
hres = IHTMLTable_get_align(table, &bstr);
ok(hres == S_OK, "get_align failed: %08x\n", hres);
ok(bstr != NULL, "get_align returned NULL\n");
ok(!strcmp_wa(bstr, "left"), "get_align returned %s\n", wine_dbgstr_w(bstr));
SysFreeString(bstr);
hres = IHTMLTable_get_bgColor(table, &vDefaultbg);
ok(hres == S_OK, "get_bgColor failed: %08x\n", hres);
ok(V_VT(&vDefaultbg) == VT_BSTR, "bstr != NULL\n");
ok(!V_BSTR(&vDefaultbg), "V_BSTR(bgColor) = %s\n", wine_dbgstr_w(V_BSTR(&vDefaultbg)));
V_VT(&vbg) = VT_BSTR;
V_BSTR(&vbg) = a2bstr("red");
hres = IHTMLTable_put_bgColor(table, vbg);
ok(hres == S_OK, "put_bgColor failed: %08x\n", hres);
VariantClear(&vbg);
hres = IHTMLTable_get_bgColor(table, &vbg);
ok(hres == S_OK, "get_bgColor failed: %08x\n", hres);
ok(V_VT(&vDefaultbg) == VT_BSTR, "V_VT(&vDefaultbg) != VT_BSTR\n");
ok(!strcmp_wa(V_BSTR(&vbg), "#ff0000"), "Unexpected bgcolor %s\n", wine_dbgstr_w(V_BSTR(&vbg)));
VariantClear(&vbg);
V_VT(&vbg) = VT_I4;
V_I4(&vbg) = 0xff0000;
hres = IHTMLTable_put_bgColor(table, vbg);
ok(hres == S_OK, "put_bgColor failed: %08x\n", hres);
VariantClear(&vbg);
hres = IHTMLTable_get_bgColor(table, &vbg);
ok(hres == S_OK, "get_bgColor failed: %08x\n", hres);
ok(V_VT(&vDefaultbg) == VT_BSTR, "V_VT(&vDefaultbg) != VT_BSTR\n");
ok(!strcmp_wa(V_BSTR(&vbg), "#ff0000"), "Unexpected bgcolor %s\n", wine_dbgstr_w(V_BSTR(&vbg)));
VariantClear(&vbg);
/* Restore Originial */
hres = IHTMLTable_put_bgColor(table, vDefaultbg);
ok(hres == S_OK, "put_bgColor failed: %08x\n", hres);
VariantClear(&vDefaultbg);
IHTMLTable_Release(table);
}
@ -5903,6 +6077,7 @@ static void test_stylesheet(IDispatch *disp)
IHTMLStyleSheetRulesCollection *col = NULL;
IHTMLStyleSheet *stylesheet;
HRESULT hres;
BSTR href;
test_disp2((IUnknown*)disp, &DIID_DispHTMLStyleSheet, &IID_IHTMLStyleSheet, "[object]");
@ -5912,8 +6087,14 @@ static void test_stylesheet(IDispatch *disp)
hres = IHTMLStyleSheet_get_rules(stylesheet, &col);
ok(hres == S_OK, "get_rules failed: %08x\n", hres);
ok(col != NULL, "col == NULL\n");
IHTMLStyleSheetRulesCollection_Release(col);
href = (void*)0xdeadbeef;
hres = IHTMLStyleSheet_get_href(stylesheet, &href);
ok(hres == S_OK, "get_href failed: %08x\n", hres);
ok(href == NULL, "got href != NULL\n");
SysFreeString(href);
IHTMLStyleSheet_Release(stylesheet);
}
@ -5952,7 +6133,6 @@ static void test_stylesheets(IHTMLDocument2 *doc)
hres = IHTMLStyleSheetsCollection_item(col, &idx, &res);
ok(hres == E_INVALIDARG, "item failed: %08x, expected E_INVALIDARG\n", hres);
ok(V_VT(&res) == VT_EMPTY, "V_VT(res) = %d\n", V_VT(&res));
ok(V_DISPATCH(&res) != NULL, "V_DISPATCH(&res) == NULL\n");
VariantClear(&res);
IHTMLStyleSheetsCollection_Release(col);
@ -6682,6 +6862,54 @@ static void test_blocked(IHTMLDocument2 *doc, IHTMLElement *outer_elem)
}
}
#define doc_get_elems_by_name(a,b) _doc_get_elems_by_name(__LINE__,a,b)
static IHTMLElementCollection *_doc_get_elems_by_name(unsigned line, IHTMLDocument2 *doc, const char *name)
{
IHTMLDocument3 *doc3 = _get_doc3_iface(line, doc);
IHTMLElementCollection *col;
BSTR str = a2bstr(name);
HRESULT hres;
hres = IHTMLDocument3_getElementsByName(doc3, str, &col);
ok_(__FILE__,line)(hres == S_OK, "getElementsByName failed: %08x\n", hres);
ok_(__FILE__,line)(col != NULL, "col = NULL\n");
IHTMLDocument3_Release(doc3);
SysFreeString(str);
return col;
}
static void test_elem_names(IHTMLDocument2 *doc)
{
IHTMLElementCollection *col;
IHTMLElement *body;
LONG len;
HRESULT hres;
static const elem_type_t test1_types[] = {ET_INPUT, ET_A, ET_DIV};
body = doc_get_body(doc);
test_elem_set_innerhtml((IUnknown*)body,
"<input name=\"test\"><a name=\"test\"></a><a name=\"xxx\"></a><div id=\"test\"></div>");
col = doc_get_elems_by_name(doc, "test");
test_elem_collection((IUnknown*)col, test1_types, sizeof(test1_types)/sizeof(*test1_types));
IHTMLElementCollection_Release(col);
col = doc_get_elems_by_name(doc, "yyy");
test_elem_collection((IUnknown*)col, NULL, 0);
IHTMLElementCollection_Release(col);
/* case insensivity test */
col = doc_get_elems_by_name(doc, "Xxx");
hres = IHTMLElementCollection_get_length(col, &len);
ok(hres == S_OK, "get_length failed: %08x\n", hres);
todo_wine ok(len == 1, "len = %d\n", len);
IHTMLElementCollection_Release(col);
IHTMLElement_Release(body);
}
static void test_elems2(IHTMLDocument2 *doc)
{
IHTMLElement *elem, *elem2, *div;
@ -6770,6 +6998,7 @@ static void test_elems2(IHTMLDocument2 *doc)
test_attr(div);
test_blocked(doc, div);
test_elem_names(doc);
IHTMLElement_Release(div);
}
@ -7120,7 +7349,7 @@ static void test_cond_comment(IHTMLDocument2 *doc)
static HRESULT WINAPI Unknown_QueryInterface(IUnknown *iface, REFIID riid, void **ppv)
{
ok(IsEqualGUID(riid, &IID_IServiceProvider), "riid = %s\n", dbgstr_guid(riid));
ok(IsEqualGUID(riid, &IID_IServiceProvider), "riid = %s\n", wine_dbgstr_guid(riid));
return E_NOINTERFACE;
}
@ -7542,9 +7771,9 @@ static void run_domtest(const char *str, domtest_t test)
do_advise((IUnknown*)doc, &IID_IPropertyNotifySink, (IUnknown*)&PropertyNotifySink);
while(!doc_complete && GetMessage(&msg, NULL, 0, 0)) {
while(!doc_complete && GetMessageW(&msg, NULL, 0, 0)) {
TranslateMessage(&msg);
DispatchMessage(&msg);
DispatchMessageW(&msg);
}
test(doc);

View file

@ -83,11 +83,13 @@ DEFINE_EXPECT(submit_onclick_attached);
DEFINE_EXPECT(submit_onclick_attached_check_cancel);
DEFINE_EXPECT(submit_onclick_setret);
DEFINE_EXPECT(elem2_cp_onclick);
DEFINE_EXPECT(iframe_onload);
static HWND container_hwnd = NULL;
static IHTMLWindow2 *window;
static IOleDocumentView *view;
static BOOL xy_todo;
static BOOL is_ie9plus;
typedef struct {
LONG x;
@ -125,18 +127,6 @@ static const char form_doc_str[] =
"<input type=\"submit\" id=\"submitid\" />"
"</form></body></html>";
static const char *debugstr_guid(REFIID riid)
{
static char buf[50];
sprintf(buf, "{%08x-%04x-%04x-%02x%02x-%02x%02x%02x%02x%02x%02x}",
riid->Data1, riid->Data2, riid->Data3, riid->Data4[0],
riid->Data4[1], riid->Data4[2], riid->Data4[3], riid->Data4[4],
riid->Data4[5], riid->Data4[6], riid->Data4[7]);
return buf;
}
static int strcmp_wa(LPCWSTR strw, const char *stra)
{
CHAR buf[512];
@ -198,7 +188,7 @@ static void _test_disp(unsigned line, IUnknown *unk, const IID *diid)
hres = ITypeInfo_GetTypeAttr(typeinfo, &type_attr);
ok_(__FILE__,line) (hres == S_OK, "GetTypeAttr failed: %08x\n", hres);
ok_(__FILE__,line) (IsEqualGUID(&type_attr->guid, diid), "unexpected guid %s\n",
debugstr_guid(&type_attr->guid));
wine_dbgstr_guid(&type_attr->guid));
ITypeInfo_ReleaseTypeAttr(typeinfo, type_attr);
ITypeInfo_Release(typeinfo);
@ -255,6 +245,18 @@ static IHTMLElement3 *_get_elem3_iface(unsigned line, IUnknown *unk)
return elem3;
}
#define get_iframe_iface(u) _get_iframe_iface(__LINE__,u)
static IHTMLIFrameElement *_get_iframe_iface(unsigned line, IUnknown *unk)
{
IHTMLIFrameElement *iframe;
HRESULT hres;
hres = IUnknown_QueryInterface(unk, &IID_IHTMLIFrameElement, (void**)&iframe);
ok_(__FILE__,line)(hres == S_OK, "QueryInterface(IID_IHTMLIFrameElement) failed: %08x\n", hres);
return iframe;
}
#define doc_get_body(d) _doc_get_body(__LINE__,d)
static IHTMLElement *_doc_get_body(unsigned line, IHTMLDocument2 *doc)
{
@ -729,7 +731,7 @@ static HRESULT WINAPI DispatchEx_QueryInterface(IDispatchEx *iface, REFIID riid,
|| IsEqualGUID(riid, &IID_IDispatchEx))
*ppv = iface;
else {
ok(0, "unexpected riid %s\n", debugstr_guid(riid));
ok(0, "unexpected riid %s\n", wine_dbgstr_guid(riid));
return E_NOINTERFACE;
}
@ -746,7 +748,7 @@ static HRESULT WINAPI Dispatch_QueryInterface(IDispatchEx *iface, REFIID riid, v
}else if(IsEqualGUID(riid, &IID_IDispatchEx)) {
return E_NOINTERFACE;
}else {
ok(0, "unexpected riid %s\n", debugstr_guid(riid));
ok(0, "unexpected riid %s\n", wine_dbgstr_guid(riid));
return E_NOINTERFACE;
}
@ -1005,6 +1007,17 @@ static HRESULT WINAPI submit_onclick(IDispatchEx *iface, DISPID id, LCID lcid, W
EVENT_HANDLER_FUNC_OBJ(submit_onclick);
static HRESULT WINAPI iframe_onload(IDispatchEx *iface, DISPID id, LCID lcid, WORD wFlags, DISPPARAMS *pdp,
VARIANT *pvarRes, EXCEPINFO *pei, IServiceProvider *pspCaller)
{
CHECK_EXPECT(iframe_onload);
test_event_args(&DIID_DispHTMLIFrame, id, wFlags, pdp, pvarRes, pei, pspCaller);
test_event_src("IFRAME");
return S_OK;
}
EVENT_HANDLER_FUNC_OBJ(iframe_onload);
static HRESULT WINAPI submit_onclick_attached(IDispatchEx *iface, DISPID id, LCID lcid, WORD wFlags, DISPPARAMS *pdp,
VARIANT *pvarRes, EXCEPINFO *pei, IServiceProvider *pspCaller)
{
@ -1200,7 +1213,7 @@ EVENT_HANDLER_FUNC_OBJ(nocall);
|| IsEqualGUID(riid, &diid)) \
*ppv = iface; \
else { \
ok(0, "unexpected riid %s\n", debugstr_guid(riid)); \
ok(0, "unexpected riid %s\n", wine_dbgstr_guid(riid)); \
return E_NOINTERFACE; \
} \
return S_OK; \
@ -1227,7 +1240,7 @@ EVENT_HANDLER_FUNC_OBJ(nocall);
#define test_cp_args(a,b,c,d,e,f) _test_cp_args(__LINE__,a,b,c,d,e,f)
static void _test_cp_args(unsigned line, REFIID riid, WORD flags, DISPPARAMS *dp, VARIANT *vres, EXCEPINFO *ei, UINT *argerr)
{
ok_(__FILE__,line)(IsEqualGUID(&IID_NULL, riid), "riid = %s\n", debugstr_guid(riid));
ok_(__FILE__,line)(IsEqualGUID(&IID_NULL, riid), "riid = %s\n", wine_dbgstr_guid(riid));
ok_(__FILE__,line)(flags == DISPATCH_METHOD, "flags = %x\n", flags);
ok_(__FILE__,line)(dp != NULL, "dp == NULL\n");
ok_(__FILE__,line)(!dp->cArgs, "dp->cArgs = %d\n", dp->cArgs);
@ -1245,7 +1258,7 @@ static void _test_cp_eventarg(unsigned line, REFIID riid, WORD flags, DISPPARAMS
{
IHTMLEventObj *event;
ok_(__FILE__,line)(IsEqualGUID(&IID_NULL, riid), "riid = %s\n", debugstr_guid(riid));
ok_(__FILE__,line)(IsEqualGUID(&IID_NULL, riid), "riid = %s\n", wine_dbgstr_guid(riid));
ok_(__FILE__,line)(flags == DISPATCH_METHOD, "flags = %x\n", flags);
ok_(__FILE__,line)(dp != NULL, "dp == NULL\n");
ok_(__FILE__,line)(dp->cArgs == 1, "dp->cArgs = %d\n", dp->cArgs);
@ -1329,7 +1342,7 @@ static HRESULT WINAPI timeoutFunc_Invoke(IDispatchEx *iface, DISPID dispIdMember
CHECK_EXPECT(timeout);
ok(dispIdMember == DISPID_VALUE, "dispIdMember = %d\n", dispIdMember);
ok(IsEqualGUID(&IID_NULL, riid), "riid = %s\n", debugstr_guid(riid));
ok(IsEqualGUID(&IID_NULL, riid), "riid = %s\n", wine_dbgstr_guid(riid));
ok(wFlags == DISPATCH_METHOD, "wFlags = %x\n", wFlags);
ok(!lcid, "lcid = %x\n", lcid);
ok(pDispParams != NULL, "pDispParams == NULL\n");
@ -1373,7 +1386,7 @@ static HRESULT WINAPI div_onclick_disp_Invoke(IDispatchEx *iface, DISPID id,
test_attached_event_args(id, wFlags, pdp, pvarRes, pei);
ok(IsEqualGUID(&IID_NULL, riid), "riid = %s\n", debugstr_guid(riid));
ok(IsEqualGUID(&IID_NULL, riid), "riid = %s\n", wine_dbgstr_guid(riid));
ok(!puArgErr, "puArgErr = %p\n", puArgErr);
return S_OK;
@ -1398,12 +1411,12 @@ static void pump_msgs(BOOL *b)
if(b) {
while(!*b && GetMessageW(&msg, NULL, 0, 0)) {
TranslateMessage(&msg);
DispatchMessage(&msg);
DispatchMessageW(&msg);
}
}else {
while(!b && PeekMessageW(&msg, NULL, 0, 0, PM_REMOVE)) {
TranslateMessage(&msg);
DispatchMessage(&msg);
DispatchMessageW(&msg);
}
}
}
@ -1493,7 +1506,7 @@ static HRESULT WINAPI EventDispatch_Invoke(IDispatch *iface, DISPID dispIdMember
LCID lcid, WORD wFlags, DISPPARAMS *pDispParams, VARIANT *pVarResult,
EXCEPINFO *pExcepInfo, UINT *puArgErr)
{
ok(IsEqualGUID(&IID_NULL, riid), "riid = %s\n", debugstr_guid(riid));
ok(IsEqualGUID(&IID_NULL, riid), "riid = %s\n", wine_dbgstr_guid(riid));
ok(pDispParams != NULL, "pDispParams == NULL\n");
ok(pExcepInfo != NULL, "pExcepInfo == NULL\n");
ok(puArgErr != NULL, "puArgErr == NULL\n");
@ -2070,6 +2083,8 @@ static void test_submit(IHTMLDocument2 *doc)
CHECK_CALLED(submit_onclick_attached_check_cancel);
CHECK_CALLED(submit_onclick_attached);
if(1)pump_msgs(NULL);
IHTMLElement_Release(submit);
}
@ -2156,16 +2171,19 @@ static IHTMLDocument2* get_iframe_doc(IHTMLIFrameElement *iframe)
static void test_iframe_connections(IHTMLDocument2 *doc)
{
HRESULT hres;
IHTMLIFrameElement *iframe;
IHTMLDocument2 *iframes_doc;
DWORD cookie;
IConnectionPoint *cp;
IHTMLElement *element = find_element_by_id(doc, "ifr");
IHTMLElement *element;
BSTR str;
HRESULT hres;
hres = IHTMLElement_QueryInterface(element, &IID_IHTMLIFrameElement, (void**)&iframe);
trace("iframe tests...\n");
element = find_element_by_id(doc, "ifr");
iframe = get_iframe_iface((IUnknown*)element);
IHTMLElement_Release(element);
ok(hres == S_OK, "QueryInterface(IID_IHTMLIFrameElement) failed: %08x\n", hres);
iframes_doc = get_iframe_doc(iframe);
IHTMLIFrameElement_Release(iframe);
@ -2177,6 +2195,43 @@ static void test_iframe_connections(IHTMLDocument2 *doc)
IConnectionPoint_Release(cp);
ok(hres == CONNECT_E_NOCONNECTION, "Unadvise returned %08x, expected CONNECT_E_NOCONNECTION\n", hres);
unregister_cp((IUnknown*)iframes_doc, &IID_IDispatch, cookie);
if(is_ie9plus) {
IHTMLFrameBase2 *frame_base2;
VARIANT v;
hres = IHTMLIFrameElement_QueryInterface(iframe, &IID_IHTMLFrameBase2, (void**)&frame_base2);
ok(hres == S_OK, "Could not get IHTMLFrameBase2 iface: %08x\n", hres);
V_VT(&v) = VT_DISPATCH;
V_DISPATCH(&v) = (IDispatch*)&iframe_onload_obj;
hres = IHTMLFrameBase2_put_onload(frame_base2, v);
ok(hres == S_OK, "put_onload failed: %08x\n", hres);
IHTMLFrameBase2_Release(frame_base2);
str = a2bstr("about:blank");
hres = IHTMLDocument2_put_URL(iframes_doc, str);
ok(hres == S_OK, "put_URL failed: %08x\n", hres);
SysFreeString(str);
SET_EXPECT(iframe_onload);
pump_msgs(&called_iframe_onload);
CHECK_CALLED(iframe_onload);
str = a2bstr("about:test");
hres = IHTMLDocument2_put_URL(iframes_doc, str);
ok(hres == S_OK, "put_URL failed: %08x\n", hres);
SysFreeString(str);
SET_EXPECT(iframe_onload);
pump_msgs(&called_iframe_onload);
CHECK_CALLED(iframe_onload);
}else {
win_skip("Skipping iframe onload tests on IE older than 9.\n");
}
IHTMLDocument2_Release(iframes_doc);
}
@ -2684,24 +2739,12 @@ static void set_client_site(IHTMLDocument2 *doc, BOOL set)
static IHTMLDocument2 *create_document(void)
{
IHTMLDocument2 *doc;
IHTMLDocument5 *doc5;
HRESULT hres;
hres = CoCreateInstance(&CLSID_HTMLDocument, NULL, CLSCTX_INPROC_SERVER|CLSCTX_INPROC_HANDLER,
&IID_IHTMLDocument2, (void**)&doc);
ok(hres == S_OK, "CoCreateInstance failed: %08x\n", hres);
if (FAILED(hres))
return NULL;
hres = IHTMLDocument2_QueryInterface(doc, &IID_IHTMLDocument5, (void**)&doc5);
if(FAILED(hres)) {
win_skip("Could not get IHTMLDocument5 interface, probably too old IE\n");
IHTMLDocument2_Release(doc);
return NULL;
}
IHTMLDocument5_Release(doc5);
return doc;
return SUCCEEDED(hres) ? doc : NULL;
}
@ -2722,9 +2765,9 @@ static void run_test(const char *str, testfunc_t test)
doc_load_string(doc, str);
do_advise((IUnknown*)doc, &IID_IPropertyNotifySink, (IUnknown*)&PropertyNotifySink);
while(!doc_complete && GetMessage(&msg, NULL, 0, 0)) {
while(!doc_complete && GetMessageA(&msg, NULL, 0, 0)) {
TranslateMessage(&msg);
DispatchMessage(&msg);
DispatchMessageA(&msg);
}
hres = IHTMLDocument2_get_body(doc, &body);
@ -2751,7 +2794,7 @@ static void run_test(const char *str, testfunc_t test)
static LRESULT WINAPI wnd_proc(HWND hwnd, UINT msg, WPARAM wParam, LPARAM lParam)
{
return DefWindowProc(hwnd, msg, wParam, lParam);
return DefWindowProcA(hwnd, msg, wParam, lParam);
}
static HWND create_container_window(void)
@ -2802,24 +2845,57 @@ static void test_empty_document(void)
IHTMLDocument2_Release(doc);
}
static BOOL check_ie(void)
{
IHTMLDocument2 *doc;
IHTMLDocument5 *doc5;
IHTMLDocument7 *doc7;
HRESULT hres;
doc = create_document();
if(!doc)
return FALSE;
hres = IHTMLDocument2_QueryInterface(doc, &IID_IHTMLDocument7, (void**)&doc7);
if(SUCCEEDED(hres)) {
is_ie9plus = TRUE;
IHTMLDocument7_Release(doc7);
}
trace("is_ie9plus %x\n", is_ie9plus);
hres = IHTMLDocument2_QueryInterface(doc, &IID_IHTMLDocument5, (void**)&doc5);
if(SUCCEEDED(hres))
IHTMLDocument5_Release(doc5);
IHTMLDocument2_Release(doc);
return SUCCEEDED(hres);
}
START_TEST(events)
{
CoInitialize(NULL);
container_hwnd = create_container_window();
if(winetest_interactive)
ShowWindow(container_hwnd, SW_SHOW);
if(check_ie()) {
container_hwnd = create_container_window();
run_test(empty_doc_str, test_timeout);
run_test(click_doc_str, test_onclick);
run_test(readystate_doc_str, test_onreadystatechange);
run_test(img_doc_str, test_imgload);
run_test(input_doc_str, test_focus);
run_test(form_doc_str, test_submit);
run_test(iframe_doc_str, test_iframe_connections);
if(winetest_interactive)
ShowWindow(container_hwnd, SW_SHOW);
test_empty_document();
run_test(empty_doc_str, test_timeout);
run_test(click_doc_str, test_onclick);
run_test(readystate_doc_str, test_onreadystatechange);
run_test(img_doc_str, test_imgload);
run_test(input_doc_str, test_focus);
run_test(form_doc_str, test_submit);
run_test(iframe_doc_str, test_iframe_connections);
test_empty_document();
DestroyWindow(container_hwnd);
}else {
win_skip("Too old IE\n");
}
DestroyWindow(container_hwnd);
CoUninitialize();
}

View file

@ -1,7 +1,7 @@
<html>
<head>
<script>
var testevent_divid2_called = false, cnt=0;
var testevent_divid2_called = false, testevent_document_called = false, cnt=0;
function ok(b,m) {
return external.ok(b, m);
@ -71,8 +71,11 @@ function test_scriptfor() {
ok("onclick" in div, "testevent not in div");
ok(typeof(div.onclick) === "function", "typeof(div.onclick) = " + typeof(div.onclick));
ok(testevent_divid2_called === false, "testevent_divid2_called = " + testevent_divid2_called);
ok(typeof(document.onclick) === "function", "typeof(document.onclick) = " + typeof(document.onclick));
ok(testevent_document_called === false, "testevent_document_called = " + testevent_document_called);
div.click();
ok(testevent_divid2_called === true, "testevent_divid2_called = " + testevent_divid2_called);
ok(testevent_document_called === true, "testevent_document_called = " + testevent_document_called);
ok(!("ontest" in div), "testevent in div");
ok(typeof(div.ontest) === "undefined", "typeof(div.ontest) = " + typeof(div.ontest));
@ -136,6 +139,9 @@ function runTests(t) {
<script event="onclick" for="divid2">
testevent_divid2_called = true;
</script>
<script event="onclick" for="document">
testevent_document_called = true;
</script>
<script event="ontest" for="divid2">
ok(false, "unexpected ontest");
</script>

File diff suppressed because it is too large Load diff

View file

@ -24,10 +24,10 @@ static BOOL is_ie_hardened(void)
DWORD ie_harden, type, size;
ie_harden = 0;
if(RegOpenKeyEx(HKEY_CURRENT_USER, "Software\\Microsoft\\Windows\\CurrentVersion\\Internet Settings\\ZoneMap",
if(RegOpenKeyExA(HKEY_CURRENT_USER, "Software\\Microsoft\\Windows\\CurrentVersion\\Internet Settings\\ZoneMap",
0, KEY_QUERY_VALUE, &zone_map) == ERROR_SUCCESS) {
size = sizeof(DWORD);
if (RegQueryValueEx(zone_map, "IEHarden", NULL, &type, (LPBYTE) &ie_harden, &size) != ERROR_SUCCESS ||
if (RegQueryValueExA(zone_map, "IEHarden", NULL, &type, (LPBYTE) &ie_harden, &size) != ERROR_SUCCESS ||
type != REG_DWORD) {
ie_harden = 0;
}

View file

@ -0,0 +1,42 @@
<html>
<head>
<script>
function ok(b,m) {
return external.ok(b, m);
}
function nav_back_test() {
external.trace("Running _parent navigation tests...");
var iframe = document.getElementById("testframe");
var subframe = iframe.contentWindow.document.createElement("iframe");
subframe.onload = function() {
var doc = subframe.contentWindow.document;
doc.body.innerHTML = '<a href="blank2.html" id="aid" target="_parent">test</a>';
doc.getElementById("aid").click();
}
iframe.onload = function() {
var href = iframe.contentWindow.location.href;
ok(/.*blank2.html/.test(href), "Unexpected href " + href);
next_test();
}
iframe.contentWindow.document.body.appendChild(subframe);
subframe.src = "blank.html";
}
var tests = [
nav_back_test,
function() { external.reportSuccess(); }
];
function next_test() {
window.setTimeout(tests.shift(), 0);
}
</script>
<body onload="next_test()">
<iframe src="about:blank" id="testframe"></iframe>
</body>
</html>

View file

@ -25,7 +25,7 @@
//#include "windef.h"
//#include "winbase.h"
//#include "ole2.h"
//#include "urlmon.h"
#include <urlmon.h>
#include <shlwapi.h>
#include <wininet.h>
@ -77,18 +77,6 @@ static const WCHAR javascript_test_url[] = {'j','a','v','a','s','c','r','i','p',
static WCHAR res_url_base[INTERNET_MAX_URL_LENGTH] = {'r','e','s',':','/','/'};
static unsigned res_url_base_len;
static const char *debugstr_guid(REFIID riid)
{
static char buf[50];
sprintf(buf, "{%08x-%04x-%04x-%02x%02x-%02x%02x%02x%02x%02x%02x}",
riid->Data1, riid->Data2, riid->Data3, riid->Data4[0],
riid->Data4[1], riid->Data4[2], riid->Data4[3], riid->Data4[4],
riid->Data4[5], riid->Data4[6], riid->Data4[7]);
return buf;
}
static HRESULT WINAPI ProtocolSink_QueryInterface(IInternetProtocolSink *iface, REFIID riid, void **ppv)
{
if(IsEqualGUID(&IID_IUnknown, riid) || IsEqualGUID(&IID_IInternetProtocolSink, riid)) {
@ -97,7 +85,7 @@ static HRESULT WINAPI ProtocolSink_QueryInterface(IInternetProtocolSink *iface,
}
*ppv = NULL;
ok(0, "unexpected riid %s\n", debugstr_guid(riid));
ok(0, "unexpected riid %s\n", wine_dbgstr_guid(riid));
return E_NOINTERFACE;
}
@ -184,7 +172,7 @@ static HRESULT WINAPI BindInfo_QueryInterface(IInternetBindInfo *iface, REFIID r
}
*ppv = NULL;
ok(0, "unexpected riid %s\n", debugstr_guid(riid));
ok(0, "unexpected riid %s\n", wine_dbgstr_guid(riid));
return E_NOINTERFACE;
}

View file

@ -31,6 +31,15 @@ events.html HTML "events.html"
/* @makedep: externscr.js */
externscr.js HTML "externscr.js"
/* @makedep: nav_test.html */
nav_test.html HTML "nav_test.html"
/* @makedep: blank.html */
blank.html HTML "blank.html"
/* @makedep: blank.html */
blank2.html HTML "blank.html"
/* @makedep: test_tlb.tlb */
1 TYPELIB test_tlb.tlb

View file

@ -150,6 +150,7 @@ static const GUID CLSID_TestScript =
static const GUID CLSID_TestActiveX =
{0x178fc163,0xf585,0x4e24,{0x9c,0x13,0x4b,0xb7,0xfa,0xf8,0x06,0x46}};
static BOOL is_ie9plus;
static IHTMLDocument2 *notif_doc;
static IOleDocumentView *view;
static IDispatchEx *window_dispex;
@ -161,18 +162,6 @@ static HRESULT ax_getopt_hres = S_OK, ax_setopt_dispex_hres = S_OK;
static HRESULT ax_setopt_disp_caller_hres = S_OK, ax_setopt_disp_data_hres = S_OK;
static BOOL skip_loadobject_tests;
static const char *debugstr_guid(REFIID riid)
{
static char buf[50];
sprintf(buf, "{%08X-%04X-%04X-%02X%02X-%02X%02X%02X%02X%02X%02X}",
riid->Data1, riid->Data2, riid->Data3, riid->Data4[0],
riid->Data4[1], riid->Data4[2], riid->Data4[3], riid->Data4[4],
riid->Data4[5], riid->Data4[6], riid->Data4[7]);
return buf;
}
static int strcmp_wa(LPCWSTR strw, const char *stra)
{
CHAR buf[512];
@ -201,7 +190,7 @@ static BOOL init_key(const char *key_name, const char *def_value, BOOL init)
DWORD res;
if(!init) {
RegDeleteKey(HKEY_CLASSES_ROOT, key_name);
RegDeleteKeyA(HKEY_CLASSES_ROOT, key_name);
return TRUE;
}
@ -276,7 +265,7 @@ static IPropertyNotifySink PropertyNotifySink = { &PropertyNotifySinkVtbl };
static HRESULT WINAPI VariantChangeType_QueryInterface(IVariantChangeType *iface, REFIID riid, void **ppv)
{
ok(0, "unexpected call %s\n", debugstr_guid(riid));
ok(0, "unexpected call %s\n", wine_dbgstr_guid(riid));
*ppv = NULL;
return E_NOINTERFACE;
}
@ -338,12 +327,12 @@ static HRESULT WINAPI ServiceProvider_QueryService(IServiceProvider *iface, REFG
{
if(IsEqualGUID(guidService, &SID_VariantConversion)) {
CHECK_EXPECT(QS_VariantConversion);
ok(IsEqualGUID(riid, &IID_IVariantChangeType), "uenxpected riid %s\n", debugstr_guid(riid));
ok(IsEqualGUID(riid, &IID_IVariantChangeType), "uenxpected riid %s\n", wine_dbgstr_guid(riid));
*ppv = &VChangeType;
return S_OK;
}
ok(0, "unexpected service %s\n", debugstr_guid(guidService));
ok(0, "unexpected service %s\n", wine_dbgstr_guid(guidService));
return E_NOINTERFACE;
}
@ -1177,23 +1166,12 @@ static HRESULT QueryInterface(REFIID riid, void **ppv)
static IHTMLDocument2 *create_document(void)
{
IHTMLDocument2 *doc;
IHTMLDocument5 *doc5;
HRESULT hres;
hres = CoCreateInstance(&CLSID_HTMLDocument, NULL, CLSCTX_INPROC_SERVER|CLSCTX_INPROC_HANDLER,
&IID_IHTMLDocument2, (void**)&doc);
ok(hres == S_OK, "CoCreateInstance failed: %08x\n", hres);
if (hres != S_OK) return NULL;
hres = IHTMLDocument2_QueryInterface(doc, &IID_IHTMLDocument5, (void**)&doc5);
if(FAILED(hres)) {
win_skip("Could not get IHTMLDocument5, probably too old IE\n");
IHTMLDocument2_Release(doc);
return NULL;
}
IHTMLDocument5_Release(doc5);
return doc;
return SUCCEEDED(hres) ? doc : NULL;
}
static void load_string(IHTMLDocument2 *doc, const char *str)
@ -1285,9 +1263,9 @@ static void load_doc(IHTMLDocument2 *doc, const char *str)
load_string(doc, str);
do_advise(doc, &IID_IPropertyNotifySink, (IUnknown*)&PropertyNotifySink);
while(!doc_complete && GetMessage(&msg, NULL, 0, 0)) {
while(!doc_complete && GetMessageW(&msg, NULL, 0, 0)) {
TranslateMessage(&msg);
DispatchMessage(&msg);
DispatchMessageW(&msg);
}
hres = IHTMLDocument2_get_body(doc, &body);
@ -1308,7 +1286,7 @@ static SCRIPTSTATE state;
static HRESULT WINAPI ObjectSafety_QueryInterface(IObjectSafety *iface, REFIID riid, void **ppv)
{
*ppv = NULL;
ok(0, "unexpected call %s\n", debugstr_guid(riid));
ok(0, "unexpected call %s\n", wine_dbgstr_guid(riid));
return E_NOINTERFACE;
}
@ -1327,7 +1305,7 @@ static HRESULT WINAPI ObjectSafety_GetInterfaceSafetyOptions(IObjectSafety *ifac
{
CHECK_EXPECT(GetInterfaceSafetyOptions);
ok(IsEqualGUID(&IID_IActiveScriptParse, riid), "unexpected riid %s\n", debugstr_guid(riid));
ok(IsEqualGUID(&IID_IActiveScriptParse, riid), "unexpected riid %s\n", wine_dbgstr_guid(riid));
ok(pdwSupportedOptions != NULL, "pdwSupportedOptions == NULL\n");
ok(pdwEnabledOptions != NULL, "pdwEnabledOptions == NULL\n");
@ -1342,7 +1320,7 @@ static HRESULT WINAPI ObjectSafety_SetInterfaceSafetyOptions(IObjectSafety *ifac
{
CHECK_EXPECT(SetInterfaceSafetyOptions);
ok(IsEqualGUID(&IID_IActiveScriptParse, riid), "unexpected riid %s\n", debugstr_guid(riid));
ok(IsEqualGUID(&IID_IActiveScriptParse, riid), "unexpected riid %s\n", wine_dbgstr_guid(riid));
ok(dwOptionSetMask == (INTERFACESAFE_FOR_UNTRUSTED_DATA|INTERFACE_USES_DISPEX|INTERFACE_USES_SECURITY_MANAGER),
"dwOptionSetMask=%x\n", dwOptionSetMask);
@ -1379,7 +1357,7 @@ static HRESULT WINAPI AXObjectSafety_QueryInterface(IObjectSafety *iface, REFIID
return S_OK;
}
ok(0, "unexpected call %s\n", debugstr_guid(riid));
ok(0, "unexpected call %s\n", wine_dbgstr_guid(riid));
return E_NOINTERFACE;
}
@ -1388,7 +1366,7 @@ static HRESULT WINAPI AXObjectSafety_GetInterfaceSafetyOptions(IObjectSafety *if
{
CHECK_EXPECT(AXGetInterfaceSafetyOptions);
ok(IsEqualGUID(&IID_IDispatchEx, riid), "unexpected riid %s\n", debugstr_guid(riid));
ok(IsEqualGUID(&IID_IDispatchEx, riid), "unexpected riid %s\n", wine_dbgstr_guid(riid));
ok(pdwSupportedOptions != NULL, "pdwSupportedOptions == NULL\n");
ok(pdwEnabledOptions != NULL, "pdwEnabledOptions == NULL\n");
@ -1439,7 +1417,7 @@ static HRESULT WINAPI AXObjectSafety_SetInterfaceSafetyOptions(IObjectSafety *if
return hres;
}
ok(0, "unexpected riid %s\n", debugstr_guid(riid));
ok(0, "unexpected riid %s\n", wine_dbgstr_guid(riid));
return E_NOINTERFACE;
}
@ -2424,7 +2402,7 @@ static HRESULT WINAPI ActiveScript_QueryInterface(IActiveScript *iface, REFIID r
if(IsEqualGUID(&IID_IActiveScriptDebug, riid))
return E_NOINTERFACE;
trace("QI(%s)\n", debugstr_guid(riid));
trace("QI(%s)\n", wine_dbgstr_guid(riid));
return E_NOINTERFACE;
}
@ -2653,7 +2631,7 @@ static HRESULT WINAPI ClassFactory_QueryInterface(IClassFactory *iface, REFIID r
if(IsEqualGUID(&CLSID_IdentityUnmarshal, riid))
return E_NOINTERFACE;
ok(0, "unexpected riid %s\n", debugstr_guid(riid));
ok(0, "unexpected riid %s\n", wine_dbgstr_guid(riid));
return E_NOTIMPL;
}
@ -2672,7 +2650,7 @@ static HRESULT WINAPI ClassFactory_CreateInstance(IClassFactory *iface, IUnknown
CHECK_EXPECT(CreateInstance);
ok(!outer, "outer = %p\n", outer);
ok(IsEqualGUID(&IID_IActiveScript, riid), "unexpected riid %s\n", debugstr_guid(riid));
ok(IsEqualGUID(&IID_IActiveScript, riid), "unexpected riid %s\n", wine_dbgstr_guid(riid));
*ppv = &ActiveScript;
return S_OK;
}
@ -2826,9 +2804,9 @@ static void run_js_script(const char *test_name)
SET_EXPECT(external_success);
while(!called_external_success && GetMessage(&msg, NULL, 0, 0)) {
while(!called_external_success && GetMessageW(&msg, NULL, 0, 0)) {
TranslateMessage(&msg);
DispatchMessage(&msg);
DispatchMessageW(&msg);
}
CHECK_CALLED(external_success);
@ -2843,6 +2821,10 @@ static void run_js_tests(void)
run_js_script("exectest.html");
run_js_script("vbtest.html");
run_js_script("events.html");
if(is_ie9plus)
run_js_script("nav_test.html");
else
win_skip("Skipping nav_test.html on IE older than 9 (for broken ieframe onload).\n");
}
static BOOL init_registry(BOOL init)
@ -2873,7 +2855,7 @@ static BOOL register_script_engine(void)
static LRESULT WINAPI wnd_proc(HWND hwnd, UINT msg, WPARAM wParam, LPARAM lParam)
{
return DefWindowProc(hwnd, msg, wParam, lParam);
return DefWindowProcA(hwnd, msg, wParam, lParam);
}
static HWND create_container_window(void)
@ -2894,21 +2876,52 @@ static HWND create_container_window(void)
300, 300, NULL, NULL, NULL, NULL);
}
static BOOL check_ie(void)
{
IHTMLDocument2 *doc;
IHTMLDocument5 *doc5;
IHTMLDocument7 *doc7;
HRESULT hres;
doc = create_document();
if(!doc)
return FALSE;
hres = IHTMLDocument2_QueryInterface(doc, &IID_IHTMLDocument7, (void**)&doc7);
if(SUCCEEDED(hres)) {
is_ie9plus = TRUE;
IHTMLDocument7_Release(doc7);
}
trace("is_ie9plus %x\n", is_ie9plus);
hres = IHTMLDocument2_QueryInterface(doc, &IID_IHTMLDocument5, (void**)&doc5);
if(SUCCEEDED(hres))
IHTMLDocument5_Release(doc5);
IHTMLDocument2_Release(doc);
return SUCCEEDED(hres);
}
START_TEST(script)
{
CoInitialize(NULL);
container_hwnd = create_container_window();
if(winetest_interactive || ! is_ie_hardened()) {
if(register_script_engine()) {
test_simple_script();
init_registry(FALSE);
if(check_ie()) {
if(winetest_interactive || ! is_ie_hardened()) {
if(register_script_engine()) {
test_simple_script();
init_registry(FALSE);
}else {
skip("Could not register TestScript engine\n");
}
run_js_tests();
}else {
skip("Could not register TestScript engine\n");
skip("IE running in Enhanced Security Configuration\n");
}
run_js_tests();
}else {
skip("IE running in Enhanced Security Configuration\n");
win_skip("Too old IE.\n");
}
DestroyWindow(container_hwnd);

View file

@ -37,6 +37,13 @@ static int strcmp_wa(LPCWSTR strw, const char *stra)
return lstrcmpA(stra, buf);
}
static BOOL wstr_contains(const WCHAR *strw, const char *stra)
{
CHAR buf[512];
WideCharToMultiByte(CP_ACP, 0, strw, -1, buf, sizeof(buf), NULL, NULL);
return strstr(buf, stra) != NULL;
}
static BSTR a2bstr(const char *str)
{
BSTR ret;
@ -464,11 +471,52 @@ static void test_style4(IHTMLStyle4 *style4)
VariantClear(&vdefault);
}
static void test_style6(IHTMLStyle6 *style)
{
BSTR str;
HRESULT hres;
str = (void*)0xdeadbeef;
hres = IHTMLStyle6_get_outline(style, &str);
ok(hres == S_OK, "get_outline failed: %08x\n", hres);
ok(str && !*str, "outline = %s\n", wine_dbgstr_w(str));
SysFreeString(str);
str = a2bstr("1px");
hres = IHTMLStyle6_put_outline(style, str);
ok(hres == S_OK, "put_outline failed: %08x\n", hres);
SysFreeString(str);
str = (void*)0xdeadbeef;
hres = IHTMLStyle6_get_outline(style, &str);
ok(hres == S_OK, "get_outline failed: %08x\n", hres);
ok(wstr_contains(str, "1px"), "outline = %s\n", wine_dbgstr_w(str));
SysFreeString(str);
str = (void*)0xdeadbeef;
hres = IHTMLStyle6_get_boxSizing(style, &str);
ok(hres == S_OK, "get_boxSizing failed: %08x\n", hres);
ok(!str, "boxSizing = %s\n", wine_dbgstr_w(str));
SysFreeString(str);
str = a2bstr("border-box");
hres = IHTMLStyle6_put_boxSizing(style, str);
ok(hres == S_OK, "put_boxSizing failed: %08x\n", hres);
SysFreeString(str);
str = NULL;
hres = IHTMLStyle6_get_boxSizing(style, &str);
ok(hres == S_OK, "get_boxSizing failed: %08x\n", hres);
ok(!strcmp_wa(str, "border-box"), "boxSizing = %s\n", wine_dbgstr_w(str));
SysFreeString(str);
}
static void test_body_style(IHTMLStyle *style)
{
IHTMLStyle2 *style2;
IHTMLStyle3 *style3;
IHTMLStyle4 *style4;
IHTMLStyle6 *style6;
VARIANT_BOOL b;
VARIANT v;
BSTR str;
@ -2044,6 +2092,22 @@ static void test_body_style(IHTMLStyle *style)
ok(!strcmp_wa(str, "nowrap"), "whiteSpace = %s\n", wine_dbgstr_w(str));
SysFreeString(str);
/* listStyleType */
hres = IHTMLStyle_get_listStyleType(style, &str);
ok(hres == S_OK, "get_listStyleType failed: %08x\n", hres);
ok(!str, "listStyleType = %s\n", wine_dbgstr_w(str));
str = a2bstr("square");
hres = IHTMLStyle_put_listStyleType(style, str);
ok(hres == S_OK, "put_listStyleType failed: %08x\n", hres);
SysFreeString(str);
str = NULL;
hres = IHTMLStyle_get_listStyleType(style, &str);
ok(hres == S_OK, "get_listStyleType failed: %08x\n", hres);
ok(!strcmp_wa(str, "square"), "listStyleType = %s\n", wine_dbgstr_w(str));
SysFreeString(str);
hres = IHTMLStyle_QueryInterface(style, &IID_IHTMLStyle2, (void**)&style2);
ok(hres == S_OK, "Could not get IHTMLStyle2 iface: %08x\n", hres);
if(SUCCEEDED(hres)) {
@ -2064,6 +2128,14 @@ static void test_body_style(IHTMLStyle *style)
test_style4(style4);
IHTMLStyle4_Release(style4);
}
hres = IHTMLStyle_QueryInterface(style, &IID_IHTMLStyle6, (void**)&style6);
if(SUCCEEDED(hres)) {
test_style6(style6);
IHTMLStyle6_Release(style6);
}else {
win_skip("IHTMLStyle6 not available\n");
}
}
#define test_style_filter(a,b) _test_style_filter(__LINE__,a,b)
@ -2647,9 +2719,9 @@ static void run_test(const char *str, style_test_t test)
do_advise((IUnknown*)doc, &IID_IPropertyNotifySink, (IUnknown*)&PropertyNotifySink);
while(!doc_complete && GetMessage(&msg, NULL, 0, 0)) {
while(!doc_complete && GetMessageW(&msg, NULL, 0, 0)) {
TranslateMessage(&msg);
DispatchMessage(&msg);
DispatchMessageW(&msg);
}
test(doc);

View file

@ -16,6 +16,8 @@
* Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA
*/
#pragma makedep typelib
import "oaidl.idl";
[