mirror of
https://github.com/reactos/reactos.git
synced 2025-01-07 06:45:24 +00:00
[MSHTML_WINETEST]
sync to wine 1.2 RC2 svn path=/trunk/; revision=47422
This commit is contained in:
parent
fcb1ce77af
commit
5e8f4e5fd6
4 changed files with 478 additions and 31 deletions
|
@ -508,7 +508,7 @@ static void _test_ifaces(unsigned line, IUnknown *iface, REFIID *iids)
|
|||
}
|
||||
}
|
||||
|
||||
#define test_get_dispid(u,id) _test_disp(__LINE__,u,id)
|
||||
#define test_get_dispid(u,id) _test_get_dispid(__LINE__,u,id)
|
||||
static BOOL _test_get_dispid(unsigned line, IUnknown *unk, IID *iid)
|
||||
{
|
||||
IDispatchEx *dispex;
|
||||
|
@ -673,6 +673,39 @@ static IHTMLAnchorElement *_get_anchor_iface(unsigned line, IUnknown *unk)
|
|||
return anchor;
|
||||
}
|
||||
|
||||
#define get_textarea_iface(u) _get_textarea_iface(__LINE__,u)
|
||||
static IHTMLTextAreaElement *_get_textarea_iface(unsigned line, IUnknown *unk)
|
||||
{
|
||||
IHTMLTextAreaElement *textarea;
|
||||
HRESULT hres;
|
||||
|
||||
hres = IUnknown_QueryInterface(unk, &IID_IHTMLTextAreaElement, (void**)&textarea);
|
||||
ok_(__FILE__,line) (hres == S_OK, "Could not get IHTMLTextAreaElement: %08x\n", hres);
|
||||
return textarea;
|
||||
}
|
||||
|
||||
#define get_select_iface(u) _get_select_iface(__LINE__,u)
|
||||
static IHTMLSelectElement *_get_select_iface(unsigned line, IUnknown *unk)
|
||||
{
|
||||
IHTMLSelectElement *select;
|
||||
HRESULT hres;
|
||||
|
||||
hres = IUnknown_QueryInterface(unk, &IID_IHTMLSelectElement, (void**)&select);
|
||||
ok_(__FILE__,line) (hres == S_OK, "Could not get IHTMLSelectElement: %08x\n", hres);
|
||||
return select;
|
||||
}
|
||||
|
||||
#define get_form_iface(u) _get_form_iface(__LINE__,u)
|
||||
static IHTMLFormElement *_get_form_iface(unsigned line, IUnknown *unk)
|
||||
{
|
||||
IHTMLFormElement *form;
|
||||
HRESULT hres;
|
||||
|
||||
hres = IUnknown_QueryInterface(unk, &IID_IHTMLFormElement, (void**)&form);
|
||||
ok_(__FILE__,line) (hres == S_OK, "Could not get IHTMLFormElement: %08x\n", hres);
|
||||
return form;
|
||||
}
|
||||
|
||||
#define get_text_iface(u) _get_text_iface(__LINE__,u)
|
||||
static IHTMLDOMTextNode *_get_text_iface(unsigned line, IUnknown *unk)
|
||||
{
|
||||
|
@ -1113,6 +1146,85 @@ static void _test_option_put_value(unsigned line, IHTMLOptionElement *option, co
|
|||
_test_option_value(line, option, value);
|
||||
}
|
||||
|
||||
#define test_option_selected(o,s) _test_option_selected(__LINE__,o,s)
|
||||
static void _test_option_selected(unsigned line, IHTMLOptionElement *option, VARIANT_BOOL ex)
|
||||
{
|
||||
VARIANT_BOOL b = 0x100;
|
||||
HRESULT hres;
|
||||
|
||||
hres = IHTMLOptionElement_get_selected(option, &b);
|
||||
ok_(__FILE__,line)(hres == S_OK, "get_selected failed: %08x\n", hres);
|
||||
ok_(__FILE__,line)(b == ex, "selected = %x, expected %x\n", b, ex);
|
||||
}
|
||||
|
||||
#define test_option_put_selected(o,s) _test_option_put_selected(__LINE__,o,s)
|
||||
static void _test_option_put_selected(unsigned line, IHTMLOptionElement *option, VARIANT_BOOL b)
|
||||
{
|
||||
HRESULT hres;
|
||||
|
||||
hres = IHTMLOptionElement_put_selected(option, b);
|
||||
ok_(__FILE__,line)(hres == S_OK, "put_selected failed: %08x\n", hres);
|
||||
_test_option_selected(line, option, b);
|
||||
}
|
||||
|
||||
#define test_textarea_value(t,v) _test_textarea_value(__LINE__,t,v)
|
||||
static void _test_textarea_value(unsigned line, IUnknown *unk, const char *exval)
|
||||
{
|
||||
IHTMLTextAreaElement *textarea = _get_textarea_iface(line, unk);
|
||||
BSTR value = (void*)0xdeadbeef;
|
||||
HRESULT hres;
|
||||
|
||||
hres = IHTMLTextAreaElement_get_value(textarea, &value);
|
||||
IHTMLTextAreaElement_Release(textarea);
|
||||
ok_(__FILE__,line)(hres == S_OK, "get_value failed: %08x\n", hres);
|
||||
if(exval)
|
||||
ok_(__FILE__,line)(!strcmp_wa(value, exval), "value = %s, expected %s\n", wine_dbgstr_w(value), exval);
|
||||
else
|
||||
ok_(__FILE__,line)(!value, "value = %p\n", value);
|
||||
SysFreeString(value);
|
||||
}
|
||||
|
||||
#define test_textarea_put_value(t,v) _test_textarea_put_value(__LINE__,t,v)
|
||||
static void _test_textarea_put_value(unsigned line, IUnknown *unk, const char *value)
|
||||
{
|
||||
IHTMLTextAreaElement *textarea = _get_textarea_iface(line, unk);
|
||||
BSTR tmp = a2bstr(value);
|
||||
HRESULT hres;
|
||||
|
||||
hres = IHTMLTextAreaElement_put_value(textarea, tmp);
|
||||
IHTMLTextAreaElement_Release(textarea);
|
||||
ok_(__FILE__,line)(hres == S_OK, "put_value failed: %08x\n", hres);
|
||||
SysFreeString(tmp);
|
||||
|
||||
_test_textarea_value(line, unk, value);
|
||||
}
|
||||
|
||||
#define test_textarea_readonly(t,v) _test_textarea_readonly(__LINE__,t,v)
|
||||
static void _test_textarea_readonly(unsigned line, IUnknown *unk, VARIANT_BOOL ex)
|
||||
{
|
||||
IHTMLTextAreaElement *textarea = _get_textarea_iface(line, unk);
|
||||
VARIANT_BOOL b = 0x100;
|
||||
HRESULT hres;
|
||||
|
||||
hres = IHTMLTextAreaElement_get_readOnly(textarea, &b);
|
||||
IHTMLTextAreaElement_Release(textarea);
|
||||
ok_(__FILE__,line)(hres == S_OK, "get_readOnly failed: %08x\n", hres);
|
||||
ok_(__FILE__,line)(b == ex, "readOnly = %x, expected %x\n", b, ex);
|
||||
}
|
||||
|
||||
#define test_textarea_put_readonly(t,v) _test_textarea_put_readonly(__LINE__,t,v)
|
||||
static void _test_textarea_put_readonly(unsigned line, IUnknown *unk, VARIANT_BOOL b)
|
||||
{
|
||||
IHTMLTextAreaElement *textarea = _get_textarea_iface(line, unk);
|
||||
HRESULT hres;
|
||||
|
||||
hres = IHTMLTextAreaElement_put_readOnly(textarea, b);
|
||||
IHTMLTextAreaElement_Release(textarea);
|
||||
ok_(__FILE__,line)(hres == S_OK, "put_readOnly failed: %08x\n", hres);
|
||||
|
||||
_test_textarea_readonly(line, unk, b);
|
||||
}
|
||||
|
||||
#define test_comment_text(c,t) _test_comment_text(__LINE__,c,t)
|
||||
static void _test_comment_text(unsigned line, IUnknown *unk, const char *extext)
|
||||
{
|
||||
|
@ -1161,12 +1273,13 @@ static IHTMLOptionElement *_create_option_elem(unsigned line, IHTMLDocument2 *do
|
|||
|
||||
_test_option_text(line, option, txt);
|
||||
_test_option_value(line, option, val);
|
||||
_test_option_selected(line, option, VARIANT_FALSE);
|
||||
|
||||
return option;
|
||||
}
|
||||
|
||||
#define test_img_width(o,w) _test_img_width(__LINE__,o,w)
|
||||
static void _test_img_width(unsigned line, IHTMLImgElement *img, const long exp)
|
||||
static void _test_img_width(unsigned line, IHTMLImgElement *img, const LONG exp)
|
||||
{
|
||||
LONG found = -1;
|
||||
HRESULT hres;
|
||||
|
@ -1177,7 +1290,7 @@ static void _test_img_width(unsigned line, IHTMLImgElement *img, const long exp)
|
|||
}
|
||||
|
||||
#define test_img_put_width(o,w) _test_img_put_width(__LINE__,o,w)
|
||||
static void _test_img_put_width(unsigned line, IHTMLImgElement *img, const long width)
|
||||
static void _test_img_put_width(unsigned line, IHTMLImgElement *img, const LONG width)
|
||||
{
|
||||
HRESULT hres;
|
||||
|
||||
|
@ -1188,7 +1301,7 @@ static void _test_img_put_width(unsigned line, IHTMLImgElement *img, const long
|
|||
}
|
||||
|
||||
#define test_img_height(o,h) _test_img_height(__LINE__,o,h)
|
||||
static void _test_img_height(unsigned line, IHTMLImgElement *img, const long exp)
|
||||
static void _test_img_height(unsigned line, IHTMLImgElement *img, const LONG exp)
|
||||
{
|
||||
LONG found = -1;
|
||||
HRESULT hres;
|
||||
|
@ -1199,7 +1312,7 @@ static void _test_img_height(unsigned line, IHTMLImgElement *img, const long exp
|
|||
}
|
||||
|
||||
#define test_img_put_height(o,w) _test_img_put_height(__LINE__,o,w)
|
||||
static void _test_img_put_height(unsigned line, IHTMLImgElement *img, const long height)
|
||||
static void _test_img_put_height(unsigned line, IHTMLImgElement *img, const LONG height)
|
||||
{
|
||||
HRESULT hres;
|
||||
|
||||
|
@ -1275,6 +1388,18 @@ static void _test_select_length(unsigned line, IHTMLSelectElement *select, LONG
|
|||
ok_(__FILE__,line) (len == length, "len=%d, expected %d\n", len, length);
|
||||
}
|
||||
|
||||
#define test_select_put_length(s,l) _test_select_put_length(__LINE__,s,l)
|
||||
static void _test_select_put_length(unsigned line, IUnknown *unk, LONG length)
|
||||
{
|
||||
IHTMLSelectElement *select = _get_select_iface(line, unk);
|
||||
HRESULT hres;
|
||||
|
||||
hres = IHTMLSelectElement_put_length(select, length);
|
||||
ok_(__FILE__,line) (hres == S_OK, "put_length failed: %08x\n", hres);
|
||||
_test_select_length(line, select, length);
|
||||
IHTMLSelectElement_Release(select);
|
||||
}
|
||||
|
||||
#define test_select_selidx(s,i) _test_select_selidx(__LINE__,s,i)
|
||||
static void _test_select_selidx(unsigned line, IHTMLSelectElement *select, LONG index)
|
||||
{
|
||||
|
@ -1995,9 +2120,49 @@ static void _test_img_name(unsigned line, IUnknown *unk, const char *pValue)
|
|||
hres = IHTMLImgElement_get_name(img, &sName);
|
||||
ok_(__FILE__,line) (hres == S_OK, "get_Name failed: %08x\n", hres);
|
||||
ok_(__FILE__,line) (!strcmp_wa (sName, pValue), "expected '%s' got '%s'\n", pValue, wine_dbgstr_w(sName));
|
||||
IHTMLImgElement_Release(img);
|
||||
SysFreeString(sName);
|
||||
}
|
||||
|
||||
#define test_input_type(i,t) _test_input_type(__LINE__,i,t)
|
||||
static void _test_input_type(unsigned line, IHTMLInputElement *input, const char *extype)
|
||||
{
|
||||
BSTR type;
|
||||
HRESULT hres;
|
||||
|
||||
hres = IHTMLInputElement_get_type(input, &type);
|
||||
ok_(__FILE__,line) (hres == S_OK, "get_type failed: %08x\n", hres);
|
||||
ok_(__FILE__,line) (!strcmp_wa(type, extype), "type=%s, expected %s\n", wine_dbgstr_w(type), extype);
|
||||
SysFreeString(type);
|
||||
}
|
||||
|
||||
#define test_input_name(u, c) _test_input_name(__LINE__,u, c)
|
||||
static void _test_input_name(unsigned line, IHTMLInputElement *input, const char *exname)
|
||||
{
|
||||
BSTR name = (BSTR)0xdeadbeef;
|
||||
HRESULT hres;
|
||||
|
||||
hres = IHTMLInputElement_get_name(input, &name);
|
||||
ok_(__FILE__,line) (hres == S_OK, "get_name failed: %08x\n", hres);
|
||||
if(exname)
|
||||
ok_(__FILE__,line) (!strcmp_wa (name, exname), "name=%s, expected %s\n", wine_dbgstr_w(name), exname);
|
||||
else
|
||||
ok_(__FILE__,line) (!name, "name=%p, expected NULL\n", name);
|
||||
SysFreeString(name);
|
||||
}
|
||||
|
||||
#define test_input_set_name(u, c) _test_input_set_name(__LINE__,u, c)
|
||||
static void _test_input_set_name(unsigned line, IHTMLInputElement *input, const char *name)
|
||||
{
|
||||
BSTR tmp = a2bstr(name);
|
||||
HRESULT hres;
|
||||
|
||||
hres = IHTMLInputElement_put_name(input, tmp);
|
||||
ok_(__FILE__,line) (hres == S_OK, "put_name failed: %08x\n", hres);
|
||||
SysFreeString(tmp);
|
||||
|
||||
_test_input_name(line, input, name);
|
||||
}
|
||||
|
||||
#define test_input_get_disabled(i,b) _test_input_get_disabled(__LINE__,i,b)
|
||||
static void _test_input_get_disabled(unsigned line, IHTMLInputElement *input, VARIANT_BOOL exb)
|
||||
|
@ -2366,6 +2531,52 @@ static void _test_elem_client_rect(unsigned line, IUnknown *unk)
|
|||
IHTMLElement2_Release(elem);
|
||||
}
|
||||
|
||||
#define test_form_length(e,l) _test_form_length(__LINE__,e,l)
|
||||
static void _test_form_length(unsigned line, IUnknown *unk, LONG exlen)
|
||||
{
|
||||
IHTMLFormElement *form = _get_form_iface(line, unk);
|
||||
LONG len = 0xdeadbeef;
|
||||
HRESULT hres;
|
||||
|
||||
hres = IHTMLFormElement_get_length(form, &len);
|
||||
ok_(__FILE__,line)(hres == S_OK, "get_length failed: %08x\n", hres);
|
||||
ok_(__FILE__,line)(len == exlen, "length=%d, expected %d\n", len, exlen);
|
||||
|
||||
IHTMLFormElement_Release(form);
|
||||
}
|
||||
|
||||
#define test_form_action(f,a) _test_form_action(__LINE__,f,a)
|
||||
static void _test_form_action(unsigned line, IUnknown *unk, const char *ex)
|
||||
{
|
||||
IHTMLFormElement *form = _get_form_iface(line, unk);
|
||||
BSTR action = (void*)0xdeadbeef;
|
||||
HRESULT hres;
|
||||
|
||||
hres = IHTMLFormElement_get_action(form, &action);
|
||||
ok_(__FILE__,line)(hres == S_OK, "get_action failed: %08x\n", hres);
|
||||
if(ex)
|
||||
ok_(__FILE__,line)(!strcmp_wa(action, ex), "action=%s, expected %s\n", wine_dbgstr_w(action), ex);
|
||||
else
|
||||
ok_(__FILE__,line)(!action, "action=%p\n", action);
|
||||
|
||||
IHTMLFormElement_Release(form);
|
||||
}
|
||||
|
||||
#define test_form_put_action(f,a) _test_form_put_action(__LINE__,f,a)
|
||||
static void _test_form_put_action(unsigned line, IUnknown *unk, const char *action)
|
||||
{
|
||||
IHTMLFormElement *form = _get_form_iface(line, unk);
|
||||
BSTR tmp = a2bstr(action);
|
||||
HRESULT hres;
|
||||
|
||||
hres = IHTMLFormElement_put_action(form, tmp);
|
||||
ok_(__FILE__,line)(hres == S_OK, "put_action failed: %08x\n", hres);
|
||||
SysFreeString(tmp);
|
||||
IHTMLFormElement_Release(form);
|
||||
|
||||
_test_form_action(line, unk, action);
|
||||
}
|
||||
|
||||
#define get_elem_doc(e) _get_elem_doc(__LINE__,e)
|
||||
static IHTMLDocument2 *_get_elem_doc(unsigned line, IUnknown *unk)
|
||||
{
|
||||
|
@ -2753,6 +2964,10 @@ static IHTMLElement *get_doc_elem_by_id(IHTMLDocument2 *doc, const char *id)
|
|||
|
||||
static void test_select_elem(IHTMLSelectElement *select)
|
||||
{
|
||||
IDispatch *disp, *disp2;
|
||||
VARIANT name, index;
|
||||
HRESULT hres;
|
||||
|
||||
test_select_type(select, "select-one");
|
||||
test_select_length(select, 2);
|
||||
test_select_selidx(select, 0);
|
||||
|
@ -2764,6 +2979,89 @@ static void test_select_elem(IHTMLSelectElement *select)
|
|||
test_select_get_disabled(select, VARIANT_FALSE);
|
||||
test_select_set_disabled(select, VARIANT_TRUE);
|
||||
test_select_set_disabled(select, VARIANT_FALSE);
|
||||
|
||||
disp = NULL;
|
||||
hres = IHTMLSelectElement_get_options(select, &disp);
|
||||
ok(hres == S_OK, "get_options failed: %08x\n", hres);
|
||||
ok(disp != NULL, "options == NULL\n");
|
||||
ok(iface_cmp((IUnknown*)disp, (IUnknown*)select), "disp != select\n");
|
||||
IDispatch_Release(disp);
|
||||
|
||||
V_VT(&index) = VT_EMPTY;
|
||||
V_VT(&name) = VT_I4;
|
||||
V_I4(&name) = -1;
|
||||
disp = (void*)0xdeadbeef;
|
||||
hres = IHTMLSelectElement_item(select, name, index, &disp);
|
||||
ok(hres == E_INVALIDARG, "item failed: %08x, expected E_INVALIDARG\n", hres);
|
||||
ok(!disp, "disp = %p\n", disp);
|
||||
|
||||
V_I4(&name) = 2;
|
||||
disp = (void*)0xdeadbeef;
|
||||
hres = IHTMLSelectElement_item(select, name, index, &disp);
|
||||
ok(hres == S_OK, "item failed: %08x\n", hres);
|
||||
ok(!disp, "disp = %p\n", disp);
|
||||
|
||||
V_I4(&name) = 1;
|
||||
hres = IHTMLSelectElement_item(select, name, index, NULL);
|
||||
ok(hres == E_POINTER || broken(hres == E_INVALIDARG), "item failed: %08x, expected E_POINTER\n", hres);
|
||||
|
||||
disp = NULL;
|
||||
hres = IHTMLSelectElement_item(select, name, index, &disp);
|
||||
ok(hres == S_OK, "item failed: %08x\n", hres);
|
||||
ok(disp != NULL, "disp = NULL\n");
|
||||
test_disp((IUnknown*)disp, &DIID_DispHTMLOptionElement, NULL);
|
||||
|
||||
V_VT(&index) = VT_I4;
|
||||
V_I4(&index) = 1;
|
||||
disp2 = NULL;
|
||||
hres = IHTMLSelectElement_item(select, name, index, &disp2);
|
||||
ok(hres == S_OK, "item failed: %08x\n", hres);
|
||||
ok(disp2 != NULL, "disp = NULL\n");
|
||||
ok(iface_cmp((IUnknown*)disp, (IUnknown*)disp2), "disp != disp2\n");
|
||||
IDispatch_Release(disp2);
|
||||
IDispatch_Release(disp);
|
||||
}
|
||||
|
||||
static void test_form_item(IHTMLElement *elem)
|
||||
{
|
||||
IHTMLFormElement *form = get_form_iface((IUnknown*)elem);
|
||||
IDispatch *disp, *disp2;
|
||||
VARIANT name, index;
|
||||
HRESULT hres;
|
||||
|
||||
V_VT(&index) = VT_EMPTY;
|
||||
V_VT(&name) = VT_I4;
|
||||
V_I4(&name) = -1;
|
||||
disp = (void*)0xdeadbeef;
|
||||
hres = IHTMLFormElement_item(form, name, index, &disp);
|
||||
ok(hres == E_INVALIDARG, "item failed: %08x, expected E_INVALIDARG\n", hres);
|
||||
ok(!disp, "disp = %p\n", disp);
|
||||
|
||||
V_I4(&name) = 2;
|
||||
disp = (void*)0xdeadbeef;
|
||||
hres = IHTMLFormElement_item(form, name, index, &disp);
|
||||
ok(hres == S_OK, "item failed: %08x\n", hres);
|
||||
ok(!disp, "disp = %p\n", disp);
|
||||
|
||||
V_I4(&name) = 1;
|
||||
hres = IHTMLFormElement_item(form, name, index, NULL);
|
||||
ok(hres == E_INVALIDARG, "item failed: %08x, expected E_INVALIDARG\n", hres);
|
||||
|
||||
disp = NULL;
|
||||
hres = IHTMLFormElement_item(form, name, index, &disp);
|
||||
ok(hres == S_OK, "item failed: %08x\n", hres);
|
||||
ok(disp != NULL, "disp = NULL\n");
|
||||
test_disp((IUnknown*)disp, &DIID_DispHTMLInputElement, NULL);
|
||||
|
||||
V_VT(&index) = VT_I4;
|
||||
V_I4(&index) = 1;
|
||||
disp2 = NULL;
|
||||
hres = IHTMLFormElement_item(form, name, index, &disp2);
|
||||
ok(hres == S_OK, "item failed: %08x\n", hres);
|
||||
ok(disp2 != NULL, "disp = NULL\n");
|
||||
ok(iface_cmp((IUnknown*)disp, (IUnknown*)disp2), "disp != disp2\n");
|
||||
IDispatch_Release(disp2);
|
||||
IDispatch_Release(disp);
|
||||
}
|
||||
|
||||
static void test_create_option_elem(IHTMLDocument2 *doc)
|
||||
|
@ -2774,6 +3072,8 @@ static void test_create_option_elem(IHTMLDocument2 *doc)
|
|||
|
||||
test_option_put_text(option, "new text");
|
||||
test_option_put_value(option, "new value");
|
||||
test_option_put_selected(option, VARIANT_TRUE);
|
||||
test_option_put_selected(option, VARIANT_FALSE);
|
||||
|
||||
IHTMLOptionElement_Release(option);
|
||||
}
|
||||
|
@ -3142,7 +3442,7 @@ static void test_navigator(IHTMLDocument2 *doc)
|
|||
hres = IOmNavigator_get_platform(navigator, &bstr);
|
||||
ok(hres == S_OK, "get_platform failed: %08x\n", hres);
|
||||
#ifdef _WIN64
|
||||
ok(!strcmp_wa(bstr, "Win64"), "unexpected platform %s\n", wine_dbgstr_w(bstr));
|
||||
ok(!strcmp_wa(bstr, "Win64") || broken(!strcmp_wa(bstr, "Win32") /* IE6 */), "unexpected platform %s\n", wine_dbgstr_w(bstr));
|
||||
#else
|
||||
ok(!strcmp_wa(bstr, "Win32"), "unexpected platform %s\n", wine_dbgstr_w(bstr));
|
||||
#endif
|
||||
|
@ -5553,12 +5853,9 @@ static void test_elems(IHTMLDocument2 *doc)
|
|||
|
||||
elem = get_elem_by_id(doc, "s", TRUE);
|
||||
if(elem) {
|
||||
IHTMLSelectElement *select;
|
||||
IHTMLSelectElement *select = get_select_iface((IUnknown*)elem);
|
||||
IHTMLDocument2 *doc_node, *elem_doc;
|
||||
|
||||
hres = IHTMLElement_QueryInterface(elem, &IID_IHTMLSelectElement, (void**)&select);
|
||||
ok(hres == S_OK, "Could not get IHTMLSelectElement interface: %08x\n", hres);
|
||||
|
||||
test_select_elem(select);
|
||||
|
||||
test_elem_title((IUnknown*)select, NULL);
|
||||
|
@ -5646,6 +5943,7 @@ static void test_elems(IHTMLDocument2 *doc)
|
|||
test_elem3_set_disabled((IUnknown*)input, VARIANT_FALSE);
|
||||
test_input_get_disabled(input, VARIANT_FALSE);
|
||||
test_elem_client_size((IUnknown*)elem);
|
||||
test_input_type(input, "text");
|
||||
|
||||
test_node_get_value_str((IUnknown*)elem, NULL);
|
||||
test_node_put_value_str((IUnknown*)elem, "test");
|
||||
|
@ -5666,6 +5964,9 @@ static void test_elems(IHTMLDocument2 *doc)
|
|||
test_input_set_checked(input, VARIANT_TRUE);
|
||||
test_input_set_checked(input, VARIANT_FALSE);
|
||||
|
||||
test_input_name(input, NULL);
|
||||
test_input_set_name(input, "test");
|
||||
|
||||
test_input_src(input, NULL);
|
||||
test_input_set_src(input, "about:blank");
|
||||
|
||||
|
@ -5788,6 +6089,13 @@ static void test_elems(IHTMLDocument2 *doc)
|
|||
|
||||
IHTMLElement_Release(elem);
|
||||
|
||||
elem = get_doc_elem_by_id(doc, "frm");
|
||||
ok(elem != NULL, "elem == NULL\n");
|
||||
if(elem) {
|
||||
test_form_length((IUnknown*)elem, 0);
|
||||
IHTMLElement_Release(elem);
|
||||
}
|
||||
|
||||
test_stylesheets(doc);
|
||||
test_create_option_elem(doc);
|
||||
test_create_img_elem(doc);
|
||||
|
@ -5854,6 +6162,17 @@ static void test_elems(IHTMLDocument2 *doc)
|
|||
|
||||
IHTMLDocument3_Release(doc3);
|
||||
|
||||
elem = get_elem_by_id(doc, "s", TRUE);
|
||||
if(elem) {
|
||||
static const elem_type_t select_types[] = { ET_OPTION, ET_OPTION, ET_OPTION };
|
||||
|
||||
test_select_put_length((IUnknown*)elem, 3);
|
||||
test_elem_all((IUnknown*)elem, select_types, sizeof(select_types)/sizeof(*select_types));
|
||||
test_select_put_length((IUnknown*)elem, 1);
|
||||
test_elem_all((IUnknown*)elem, select_types, 1);
|
||||
IHTMLElement_Release(elem);
|
||||
}
|
||||
|
||||
window = get_doc_window(doc);
|
||||
test_window_name(window, NULL);
|
||||
set_window_name(window, "test name");
|
||||
|
@ -5863,29 +6182,51 @@ static void test_elems(IHTMLDocument2 *doc)
|
|||
|
||||
static void test_elems2(IHTMLDocument2 *doc)
|
||||
{
|
||||
IHTMLElement *elem, *elem2;
|
||||
IHTMLElement *elem, *elem2, *div;
|
||||
|
||||
static const elem_type_t outer_types[] = {
|
||||
ET_BR,
|
||||
ET_A
|
||||
};
|
||||
|
||||
elem = get_doc_elem_by_id(doc, "divid");
|
||||
div = get_doc_elem_by_id(doc, "divid");
|
||||
|
||||
test_elem_set_innerhtml((IUnknown*)elem, "<div id=\"innerid\"></div>");
|
||||
test_elem_set_innerhtml((IUnknown*)div, "<div id=\"innerid\"></div>");
|
||||
elem2 = get_doc_elem_by_id(doc, "innerid");
|
||||
ok(elem2 != NULL, "elem2 == NULL\n");
|
||||
test_elem_set_outerhtml((IUnknown*)elem2, "<br><a href=\"about:blank\" id=\"aid\">a</a>");
|
||||
test_elem_all((IUnknown*)elem, outer_types, sizeof(outer_types)/sizeof(*outer_types));
|
||||
test_elem_all((IUnknown*)div, outer_types, sizeof(outer_types)/sizeof(*outer_types));
|
||||
IHTMLElement_Release(elem2);
|
||||
|
||||
elem2 = get_doc_elem_by_id(doc, "aid");
|
||||
ok(elem2 != NULL, "elem2 == NULL\n");
|
||||
test_elem_set_outerhtml((IUnknown*)elem2, "");
|
||||
test_elem_all((IUnknown*)elem, outer_types, 1);
|
||||
test_elem_all((IUnknown*)div, outer_types, 1);
|
||||
IHTMLElement_Release(elem2);
|
||||
|
||||
IHTMLElement_Release(elem);
|
||||
test_elem_set_innerhtml((IUnknown*)div, "<textarea id=\"ta\"></textarea>");
|
||||
elem = get_elem_by_id(doc, "ta", TRUE);
|
||||
if(elem) {
|
||||
test_textarea_value((IUnknown*)elem, NULL);
|
||||
test_textarea_put_value((IUnknown*)elem, "test");
|
||||
test_textarea_readonly((IUnknown*)elem, VARIANT_FALSE);
|
||||
test_textarea_put_readonly((IUnknown*)elem, VARIANT_TRUE);
|
||||
test_textarea_put_readonly((IUnknown*)elem, VARIANT_FALSE);
|
||||
IHTMLElement_Release(elem);
|
||||
}
|
||||
|
||||
test_elem_set_innerhtml((IUnknown*)div,
|
||||
"<form id=\"form\"><input type=\"button\"></input><input type=\"text\"></input></textarea>");
|
||||
elem = get_elem_by_id(doc, "form", TRUE);
|
||||
if(elem) {
|
||||
test_form_length((IUnknown*)elem, 2);
|
||||
test_form_item(elem);
|
||||
test_form_action((IUnknown*)elem, NULL);
|
||||
test_form_put_action((IUnknown*)elem, "about:blank");
|
||||
IHTMLElement_Release(elem);
|
||||
}
|
||||
|
||||
IHTMLElement_Release(div);
|
||||
}
|
||||
|
||||
static void test_create_elems(IHTMLDocument2 *doc)
|
||||
|
|
|
@ -3405,6 +3405,14 @@ static void test_put_href(IHTMLDocument2 *doc)
|
|||
test_download(DWL_VERBDONE);
|
||||
}
|
||||
|
||||
static void test_clear(IHTMLDocument2 *doc)
|
||||
{
|
||||
HRESULT hres;
|
||||
|
||||
hres = IHTMLDocument2_clear(doc);
|
||||
ok(hres == S_OK, "clear failed: %08x\n", hres);
|
||||
}
|
||||
|
||||
static const OLECMDF expect_cmds[OLECMDID_GETPRINTTEMPLATE+1] = {
|
||||
0,
|
||||
OLECMDF_SUPPORTED, /* OLECMDID_OPEN */
|
||||
|
@ -4566,6 +4574,8 @@ static void test_HTMLDocument_hlink(void)
|
|||
test_Close(doc, FALSE);
|
||||
test_IsDirty(doc, S_FALSE);
|
||||
test_GetCurMoniker((IUnknown*)doc, &Moniker, NULL);
|
||||
test_clear(doc);
|
||||
test_GetCurMoniker((IUnknown*)doc, &Moniker, NULL);
|
||||
|
||||
if(view)
|
||||
IOleDocumentView_Release(view);
|
||||
|
|
|
@ -20,6 +20,17 @@ function test_removeAttribute(e) {
|
|||
|
||||
}
|
||||
|
||||
function test_select_index() {
|
||||
var s = document.getElementById("sel");
|
||||
|
||||
ok("0" in s, "'0' is not in s");
|
||||
ok(s[0].text === "opt1", "s[0].text = " + s[0].text);
|
||||
ok("1" in s, "'1 is not in s");
|
||||
ok(s[1].text === "opt2", "s[1].text = " + s[1].text);
|
||||
ok("2" in s, "'2' is in s");
|
||||
ok(s[2] === null, "s[2] = " + s[2]);
|
||||
}
|
||||
|
||||
function runTest() {
|
||||
obj = new Object();
|
||||
ok(obj === window.obj, "obj !== window.obj");
|
||||
|
@ -28,11 +39,16 @@ function runTest() {
|
|||
|
||||
test_removeAttribute(document.getElementById("divid"));
|
||||
test_removeAttribute(document.body);
|
||||
test_select_index();
|
||||
|
||||
external.reportSuccess();
|
||||
}
|
||||
</script>
|
||||
<body onload="runTest();">
|
||||
<div id="divid"></div>
|
||||
<select id="sel">
|
||||
<option>opt1</option>
|
||||
<option>opt2</option>
|
||||
</select>
|
||||
</body>
|
||||
</html>
|
||||
|
|
|
@ -123,7 +123,8 @@ DEFINE_EXPECT(script_testprop2_d);
|
|||
DEFINE_EXPECT(AXQueryInterface_IActiveScript);
|
||||
DEFINE_EXPECT(AXQueryInterface_IObjectSafety);
|
||||
DEFINE_EXPECT(AXGetInterfaceSafetyOptions);
|
||||
DEFINE_EXPECT(AXSetInterfaceSafetyOptions);
|
||||
DEFINE_EXPECT(AXSetInterfaceSafetyOptions_IDispatch);
|
||||
DEFINE_EXPECT(AXSetInterfaceSafetyOptions_IDispatchEx);
|
||||
DEFINE_EXPECT(external_success);
|
||||
|
||||
#define TESTSCRIPT_CLSID "{178fc163-f585-4e24-9c13-4bb7faf80746}"
|
||||
|
@ -148,6 +149,8 @@ static BOOL doc_complete;
|
|||
static IDispatch *script_disp;
|
||||
static BOOL ax_objsafe;
|
||||
static HWND container_hwnd;
|
||||
static HRESULT ax_getopt_hres = S_OK, ax_setopt_dispex_hres = S_OK, ax_setopt_disp_hres = S_OK;
|
||||
static DWORD ax_setopt;
|
||||
|
||||
static const char *debugstr_guid(REFIID riid)
|
||||
{
|
||||
|
@ -1265,25 +1268,35 @@ static HRESULT WINAPI AXObjectSafety_GetInterfaceSafetyOptions(IObjectSafety *if
|
|||
ok(pdwSupportedOptions != NULL, "pdwSupportedOptions == NULL\n");
|
||||
ok(pdwEnabledOptions != NULL, "pdwEnabledOptions == NULL\n");
|
||||
|
||||
*pdwSupportedOptions = INTERFACESAFE_FOR_UNTRUSTED_DATA|INTERFACE_USES_DISPEX|INTERFACE_USES_SECURITY_MANAGER;
|
||||
*pdwEnabledOptions = INTERFACE_USES_DISPEX;
|
||||
if(SUCCEEDED(ax_getopt_hres)) {
|
||||
*pdwSupportedOptions = INTERFACESAFE_FOR_UNTRUSTED_DATA|INTERFACE_USES_DISPEX|INTERFACE_USES_SECURITY_MANAGER;
|
||||
*pdwEnabledOptions = INTERFACE_USES_DISPEX;
|
||||
}
|
||||
|
||||
return S_OK;
|
||||
return ax_getopt_hres;
|
||||
}
|
||||
|
||||
static HRESULT WINAPI AXObjectSafety_SetInterfaceSafetyOptions(IObjectSafety *iface, REFIID riid,
|
||||
DWORD dwOptionSetMask, DWORD dwEnabledOptions)
|
||||
{
|
||||
CHECK_EXPECT(AXSetInterfaceSafetyOptions);
|
||||
if(IsEqualGUID(&IID_IDispatchEx, riid)) {
|
||||
CHECK_EXPECT(AXSetInterfaceSafetyOptions_IDispatchEx);
|
||||
ok(dwOptionSetMask == ax_setopt, "dwOptionSetMask=%x, expected %x\n", dwOptionSetMask, ax_setopt);
|
||||
ok(dwEnabledOptions == ax_setopt, "dwEnabledOptions=%x, expected %x\n", dwOptionSetMask, ax_setopt);
|
||||
return ax_setopt_dispex_hres;
|
||||
}
|
||||
|
||||
ok(IsEqualGUID(&IID_IDispatchEx, riid), "unexpected riid %s\n", debugstr_guid(riid));
|
||||
if(IsEqualGUID(&IID_IDispatch, riid)) {
|
||||
DWORD exopt = ax_setopt & ~INTERFACE_USES_SECURITY_MANAGER;
|
||||
|
||||
ok(dwOptionSetMask == (INTERFACESAFE_FOR_UNTRUSTED_CALLER|INTERFACE_USES_SECURITY_MANAGER),
|
||||
"dwOptionSetMask=%x\n", dwOptionSetMask);
|
||||
ok(dwEnabledOptions == (INTERFACESAFE_FOR_UNTRUSTED_CALLER|INTERFACE_USES_SECURITY_MANAGER),
|
||||
"dwEnabledOptions=%x\n", dwOptionSetMask);
|
||||
CHECK_EXPECT(AXSetInterfaceSafetyOptions_IDispatch);
|
||||
ok(dwOptionSetMask == exopt, "dwOptionSetMask=%x, expected %x\n", dwOptionSetMask, exopt);
|
||||
ok(dwEnabledOptions == exopt, "dwEnabledOptions=%x, expected %x\n", dwOptionSetMask, exopt);
|
||||
return ax_setopt_disp_hres;
|
||||
}
|
||||
|
||||
return S_OK;
|
||||
ok(0, "unexpected riid %s\n", debugstr_guid(riid));
|
||||
return E_NOINTERFACE;
|
||||
}
|
||||
|
||||
static const IObjectSafetyVtbl AXObjectSafetyVtbl = {
|
||||
|
@ -1311,6 +1324,8 @@ static void test_security(void)
|
|||
BYTE *ppolicy;
|
||||
HRESULT hres;
|
||||
|
||||
ax_setopt = INTERFACESAFE_FOR_UNTRUSTED_CALLER|INTERFACE_USES_SECURITY_MANAGER;
|
||||
|
||||
hres = IActiveScriptSite_QueryInterface(site, &IID_IServiceProvider, (void**)&sp);
|
||||
ok(hres == S_OK, "Could not get IServiceProvider iface: %08x\n", hres);
|
||||
|
||||
|
@ -1332,13 +1347,13 @@ static void test_security(void)
|
|||
SET_EXPECT(AXQueryInterface_IActiveScript);
|
||||
SET_EXPECT(AXQueryInterface_IObjectSafety);
|
||||
SET_EXPECT(AXGetInterfaceSafetyOptions);
|
||||
SET_EXPECT(AXSetInterfaceSafetyOptions);
|
||||
SET_EXPECT(AXSetInterfaceSafetyOptions_IDispatchEx);
|
||||
hres = IInternetHostSecurityManager_QueryCustomPolicy(sec_mgr, &GUID_CUSTOM_CONFIRMOBJECTSAFETY,
|
||||
&ppolicy, &policy_size, (BYTE*)&cs, sizeof(cs), 0);
|
||||
CHECK_CALLED(AXQueryInterface_IActiveScript);
|
||||
CHECK_CALLED(AXQueryInterface_IObjectSafety);
|
||||
CHECK_CALLED(AXGetInterfaceSafetyOptions);
|
||||
CHECK_CALLED(AXSetInterfaceSafetyOptions);
|
||||
CHECK_CALLED(AXSetInterfaceSafetyOptions_IDispatchEx);
|
||||
|
||||
ok(hres == S_OK, "QueryCusromPolicy failed: %08x\n", hres);
|
||||
ok(policy_size == sizeof(DWORD), "policy_size = %d\n", policy_size);
|
||||
|
@ -1376,13 +1391,13 @@ static void test_security(void)
|
|||
SET_EXPECT(AXQueryInterface_IActiveScript);
|
||||
SET_EXPECT(AXQueryInterface_IObjectSafety);
|
||||
SET_EXPECT(AXGetInterfaceSafetyOptions);
|
||||
SET_EXPECT(AXSetInterfaceSafetyOptions);
|
||||
SET_EXPECT(AXSetInterfaceSafetyOptions_IDispatchEx);
|
||||
hres = IInternetHostSecurityManager_QueryCustomPolicy(sec_mgr, &GUID_CUSTOM_CONFIRMOBJECTSAFETY,
|
||||
&ppolicy, &policy_size, (BYTE*)&cs, sizeof(cs), 0);
|
||||
CHECK_CALLED(AXQueryInterface_IActiveScript);
|
||||
CHECK_CALLED(AXQueryInterface_IObjectSafety);
|
||||
CHECK_CALLED(AXGetInterfaceSafetyOptions);
|
||||
CHECK_CALLED(AXSetInterfaceSafetyOptions);
|
||||
CHECK_CALLED(AXSetInterfaceSafetyOptions_IDispatchEx);
|
||||
|
||||
ok(hres == S_OK, "QueryCusromPolicy failed: %08x\n", hres);
|
||||
ok(policy_size == sizeof(DWORD), "policy_size = %d\n", policy_size);
|
||||
|
@ -1394,6 +1409,69 @@ static void test_security(void)
|
|||
skip("Could not set safety registry\n");
|
||||
}
|
||||
|
||||
ax_objsafe = TRUE;
|
||||
|
||||
ax_setopt_dispex_hres = E_NOINTERFACE;
|
||||
SET_EXPECT(AXQueryInterface_IActiveScript);
|
||||
SET_EXPECT(AXQueryInterface_IObjectSafety);
|
||||
SET_EXPECT(AXGetInterfaceSafetyOptions);
|
||||
SET_EXPECT(AXSetInterfaceSafetyOptions_IDispatchEx);
|
||||
SET_EXPECT(AXSetInterfaceSafetyOptions_IDispatch);
|
||||
hres = IInternetHostSecurityManager_QueryCustomPolicy(sec_mgr, &GUID_CUSTOM_CONFIRMOBJECTSAFETY,
|
||||
&ppolicy, &policy_size, (BYTE*)&cs, sizeof(cs), 0);
|
||||
CHECK_CALLED(AXQueryInterface_IActiveScript);
|
||||
CHECK_CALLED(AXQueryInterface_IObjectSafety);
|
||||
CHECK_CALLED(AXGetInterfaceSafetyOptions);
|
||||
CHECK_CALLED(AXSetInterfaceSafetyOptions_IDispatchEx);
|
||||
CHECK_CALLED(AXSetInterfaceSafetyOptions_IDispatch);
|
||||
|
||||
ok(hres == S_OK, "QueryCusromPolicy failed: %08x\n", hres);
|
||||
ok(policy_size == sizeof(DWORD), "policy_size = %d\n", policy_size);
|
||||
ok(*(DWORD*)ppolicy == URLPOLICY_ALLOW, "policy = %x\n", *(DWORD*)ppolicy);
|
||||
CoTaskMemFree(ppolicy);
|
||||
|
||||
ax_setopt_dispex_hres = E_FAIL;
|
||||
ax_setopt_disp_hres = E_NOINTERFACE;
|
||||
SET_EXPECT(AXQueryInterface_IActiveScript);
|
||||
SET_EXPECT(AXQueryInterface_IObjectSafety);
|
||||
SET_EXPECT(AXGetInterfaceSafetyOptions);
|
||||
SET_EXPECT(AXSetInterfaceSafetyOptions_IDispatchEx);
|
||||
SET_EXPECT(AXSetInterfaceSafetyOptions_IDispatch);
|
||||
hres = IInternetHostSecurityManager_QueryCustomPolicy(sec_mgr, &GUID_CUSTOM_CONFIRMOBJECTSAFETY,
|
||||
&ppolicy, &policy_size, (BYTE*)&cs, sizeof(cs), 0);
|
||||
CHECK_CALLED(AXQueryInterface_IActiveScript);
|
||||
CHECK_CALLED(AXQueryInterface_IObjectSafety);
|
||||
CHECK_CALLED(AXGetInterfaceSafetyOptions);
|
||||
CHECK_CALLED(AXSetInterfaceSafetyOptions_IDispatchEx);
|
||||
CHECK_CALLED(AXSetInterfaceSafetyOptions_IDispatch);
|
||||
|
||||
ok(hres == S_OK, "QueryCusromPolicy failed: %08x\n", hres);
|
||||
ok(policy_size == sizeof(DWORD), "policy_size = %d\n", policy_size);
|
||||
ok(*(DWORD*)ppolicy == URLPOLICY_DISALLOW, "policy = %x\n", *(DWORD*)ppolicy);
|
||||
CoTaskMemFree(ppolicy);
|
||||
|
||||
ax_setopt_dispex_hres = E_FAIL;
|
||||
ax_setopt_disp_hres = S_OK;
|
||||
ax_getopt_hres = E_NOINTERFACE;
|
||||
ax_setopt = INTERFACESAFE_FOR_UNTRUSTED_CALLER;
|
||||
SET_EXPECT(AXQueryInterface_IActiveScript);
|
||||
SET_EXPECT(AXQueryInterface_IObjectSafety);
|
||||
SET_EXPECT(AXGetInterfaceSafetyOptions);
|
||||
SET_EXPECT(AXSetInterfaceSafetyOptions_IDispatchEx);
|
||||
SET_EXPECT(AXSetInterfaceSafetyOptions_IDispatch);
|
||||
hres = IInternetHostSecurityManager_QueryCustomPolicy(sec_mgr, &GUID_CUSTOM_CONFIRMOBJECTSAFETY,
|
||||
&ppolicy, &policy_size, (BYTE*)&cs, sizeof(cs), 0);
|
||||
CHECK_CALLED(AXQueryInterface_IActiveScript);
|
||||
CHECK_CALLED(AXQueryInterface_IObjectSafety);
|
||||
CHECK_CALLED(AXGetInterfaceSafetyOptions);
|
||||
CHECK_CALLED(AXSetInterfaceSafetyOptions_IDispatchEx);
|
||||
CHECK_CALLED(AXSetInterfaceSafetyOptions_IDispatch);
|
||||
|
||||
ok(hres == S_OK, "QueryCusromPolicy failed: %08x\n", hres);
|
||||
ok(policy_size == sizeof(DWORD), "policy_size = %d\n", policy_size);
|
||||
ok(*(DWORD*)ppolicy == URLPOLICY_ALLOW, "policy = %x\n", *(DWORD*)ppolicy);
|
||||
CoTaskMemFree(ppolicy);
|
||||
|
||||
IInternetHostSecurityManager_Release(sec_mgr);
|
||||
}
|
||||
|
||||
|
@ -1995,6 +2073,8 @@ static HRESULT WINAPI ActiveScript_SetScriptState(IActiveScript *iface, SCRIPTST
|
|||
}
|
||||
|
||||
hres = IActiveScriptSite_OnStateChange(site, (state = ss));
|
||||
ok(hres == S_OK, "OnStateChange failed: %08x\n", hres);
|
||||
|
||||
return S_OK;
|
||||
}
|
||||
|
||||
|
|
Loading…
Reference in a new issue