From akhaldi@svn.reactos.org Thu Oct 2 09:51:46 2014
From: akhaldi@svn.reactos.org
To: ros-diffs@reactos.org
Subject: [ros-diffs] [akhaldi] 64459: [MSHTML_WINETEST] * Sync with Wine
1.7.27. CORE-8540
Date: Thu, 02 Oct 2014 09:51:45 +0000
Message-ID:
<167036564047.185962.6079760584121069257.generated@iserv.reactos.org>
MIME-Version: 1.0
Content-Type: multipart/mixed; boundary="===============2682200439291166459=="
--===============2682200439291166459==
Content-Type: text/plain; charset="utf-8"
Content-Transfer-Encoding: quoted-printable
Author: akhaldi
Date: Thu Oct 2 09:51:45 2014
New Revision: 64459
URL: http://svn.reactos.org/svn/reactos?rev=3D64459&view=3Drev
Log:
[MSHTML_WINETEST]
* Sync with Wine 1.7.27.
CORE-8540
Modified:
trunk/rostests/winetests/mshtml/activex.c
trunk/rostests/winetests/mshtml/dom.c
trunk/rostests/winetests/mshtml/events.c
trunk/rostests/winetests/mshtml/events.html
trunk/rostests/winetests/mshtml/exectest.html
trunk/rostests/winetests/mshtml/htmldoc.c
trunk/rostests/winetests/mshtml/jstest.html
trunk/rostests/winetests/mshtml/nav_test.html
trunk/rostests/winetests/mshtml/script.c
trunk/rostests/winetests/mshtml/style.c
trunk/rostests/winetests/mshtml/vbtest.html
Modified: trunk/rostests/winetests/mshtml/activex.c
URL: http://svn.reactos.org/svn/reactos/trunk/rostests/winetests/mshtml/activ=
ex.c?rev=3D64459&r1=3D64458&r2=3D64459&view=3Ddiff
=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=
=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=
=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=
=3D=3D=3D
--- trunk/rostests/winetests/mshtml/activex.c [iso-8859-1] (original)
+++ trunk/rostests/winetests/mshtml/activex.c [iso-8859-1] Thu Oct 2 09:51:4=
5 2014
@@ -2702,12 +2702,6 @@
IHTMLDocument5 *doc;
HRESULT hres;
=20
- static const WCHAR xW[] =3D {'x',0};
- static const WCHAR yW[] =3D {'y',0};
-
- if(!lstrcmpW(xW, yW))
- return FALSE;
-
hres =3D CoCreateInstance(&CLSID_HTMLDocument, NULL, CLSCTX_INPROC_SERVE=
R|CLSCTX_INPROC_HANDLER,
&IID_IHTMLDocument5, (void**)&doc);
if(FAILED(hres))
Modified: trunk/rostests/winetests/mshtml/dom.c
URL: http://svn.reactos.org/svn/reactos/trunk/rostests/winetests/mshtml/dom.c=
?rev=3D64459&r1=3D64458&r2=3D64459&view=3Ddiff
=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=
=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=
=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=
=3D=3D=3D
--- trunk/rostests/winetests/mshtml/dom.c [iso-8859-1] (original)
+++ trunk/rostests/winetests/mshtml/dom.c [iso-8859-1] Thu Oct 2 09:51:45 20=
14
@@ -56,7 +56,7 @@
""
""
""
- "
"
+ ""
""
""
"
"
@@ -1142,6 +1142,17 @@
IHTMLElement_Release(elem);
}
=20
+#define test_elem_source_index(a,b) _test_elem_source_index(__LINE__,a,b)
+static void _test_elem_source_index(unsigned line, IHTMLElement *elem, int i=
ndex)
+{
+ LONG l =3D 0xdeadbeef;
+ HRESULT hres;
+
+ hres =3D IHTMLElement_get_sourceIndex(elem, &l);
+ ok_(__FILE__,line)(hres =3D=3D S_OK, "get_sourceIndex failed: %08x\n", h=
res);
+ ok_(__FILE__,line)(l =3D=3D index, "sourceIndex =3D %d, expected %d\n", =
l, index);
+}
+
#define get_doc_node(d) _get_doc_node(__LINE__,d)
static IHTMLDocument2 *_get_doc_node(unsigned line, IHTMLDocument2 *doc)
{
@@ -1741,6 +1752,8 @@
IHTMLWindow2_Release(window);
ok_(__FILE__,line) (hres =3D=3D S_OK, "get_Option failed: %08x\n", hres);
=20
+ test_disp((IUnknown*)factory, &IID_IHTMLOptionElementFactory, "[object]"=
);
+
V_VT(&text) =3D VT_BSTR;
V_BSTR(&text) =3D a2bstr(txt);
V_VT(&value) =3D VT_BSTR;
@@ -2103,14 +2116,37 @@
IHTMLElement_Release(elem);
}
=20
+#define get_elem_col_item_idx(a,b) _get_elem_col_item_idx(__LINE__,a,b)
+static IHTMLElement *_get_elem_col_item_idx(unsigned line, IHTMLElementColle=
ction *col, int i)
+{
+ VARIANT name, index;
+ IHTMLElement *elem;
+ IDispatch *disp;
+ HRESULT hres;
+
+ V_VT(&index) =3D VT_EMPTY;
+ V_VT(&name) =3D VT_I4;
+ V_I4(&name) =3D i;
+ hres =3D IHTMLElementCollection_item(col, name, index, &disp);
+ ok_(__FILE__,line)(hres =3D=3D S_OK, "item failed: %08x\n", hres);
+ ok_(__FILE__,line)(disp !=3D NULL, "disp =3D=3D NULL\n");
+
+ elem =3D _get_elem_iface(line, (IUnknown*)disp);
+ IDispatch_Release(disp);
+ return elem;
+}
+
#define test_elem_collection(c,t,l) _test_elem_collection(__LINE__,c,t,l)
static void _test_elem_collection(unsigned line, IUnknown *unk,
const elem_type_t *elem_types, LONG exlen)
{
IHTMLElementCollection *col;
+ IEnumVARIANT *enum_var;
+ IUnknown *enum_unk;
+ ULONG fetched;
LONG len;
DWORD i;
- VARIANT name, index;
+ VARIANT name, index, v, vs[5];
IDispatch *disp, *disp2;
HRESULT hres;
=20
@@ -2127,6 +2163,13 @@
len =3D exlen;
=20
V_VT(&index) =3D VT_EMPTY;
+
+ hres =3D IHTMLElementCollection_get__newEnum(col, &enum_unk);
+ ok_(__FILE__,line)(hres =3D=3D S_OK, "_newEnum failed: %08x\n", hres);
+
+ hres =3D IUnknown_QueryInterface(enum_unk, &IID_IEnumVARIANT, (void**)&e=
num_var);
+ IUnknown_Release(enum_unk);
+ ok_(__FILE__,line)(hres =3D=3D S_OK, "Could not get IEnumVARIANT iface: =
%08x\n", hres);
=20
for(i=3D0; i 2 ? len-2 : 0);
+ ok_(__FILE__,line)(hres =3D=3D S_OK, "Skip failed: %08x\n", hres);
+
+ memset(vs, 0, sizeof(vs));
+ fetched =3D 0;
+ hres =3D IEnumVARIANT_Next(enum_var, sizeof(vs)/sizeof(*vs), vs, &fetche=
d);
+ ok_(__FILE__,line)(hres =3D=3D S_FALSE, "Next failed: %08x\n", hres);
+ ok_(__FILE__,line)(fetched =3D=3D (len > 2 ? 2 : len), "fetched =3D %d\n=
", fetched);
+ if(len) {
+ ok_(__FILE__,line)(V_VT(vs) =3D=3D VT_DISPATCH && V_DISPATCH(vs), "V=
_VT(vs[0]) =3D %d\n", V_VT(vs));
+ IDispatch_Release(V_DISPATCH(vs));
+ }
+ if(len > 1) {
+ ok_(__FILE__,line)(V_VT(vs+1) =3D=3D VT_DISPATCH && V_DISPATCH(vs+1)=
, "V_VT(vs[1]) =3D %d\n", V_VT(vs+1));
+ IDispatch_Release(V_DISPATCH(vs+1));
+ }
+
+ hres =3D IEnumVARIANT_Reset(enum_var);
+ ok_(__FILE__,line)(hres =3D=3D S_OK, "Reset failed: %08x\n", hres);
+
+ hres =3D IEnumVARIANT_Skip(enum_var, len+1);
+ ok_(__FILE__,line)(hres =3D=3D S_FALSE, "Skip failed: %08x\n", hres);
+
+ IEnumVARIANT_Release(enum_var);
=20
V_VT(&name) =3D VT_I4;
V_I4(&name) =3D len;
@@ -2226,20 +2321,8 @@
=20
HeapFree(GetProcessHeap(), 0, types);
=20
- if(ret) {
- IDispatch *disp;
- VARIANT v;
-
- V_VT(&v) =3D VT_I4;
- V_I4(&v) =3D 0;
- disp =3D NULL;
- hres =3D IHTMLElementCollection_item(col, v, v, &disp);
- ok(hres =3D=3D S_OK, "item failed: %08x\n", hres);
- ok(disp !=3D NULL, "disp =3D=3D NULL\n");
- *ret =3D _get_elem_iface(line, (IUnknown*)disp);
- IDispatch_Release(disp);
- }
-
+ if(ret)
+ *ret =3D get_elem_col_item_idx(col, 0);
IHTMLElementCollection_Release(col);
}
=20
@@ -2497,6 +2580,24 @@
_test_elem3_get_disabled(line, (IUnknown*)select, exb);
}
=20
+static void test_select_remove(IHTMLSelectElement *select)
+{
+ HRESULT hres;
+
+ hres =3D IHTMLSelectElement_remove(select, 3);
+ ok(hres =3D=3D S_OK, "remove failed: %08x, expected S_OK\n", hres);
+ test_select_length(select, 2);
+
+ hres =3D IHTMLSelectElement_remove(select, -1);
+ todo_wine
+ ok(hres =3D=3D E_INVALIDARG, "remove failed: %08x, expected E_INVALIDARG=
\n", hres);
+ test_select_length(select, 2);
+
+ hres =3D IHTMLSelectElement_remove(select, 0);
+ ok(hres =3D=3D S_OK, "remove failed:%08x\n", hres);
+ test_select_length(select, 1);
+}
+
#define test_text_length(u,l) _test_text_length(__LINE__,u,l)
static void _test_text_length(unsigned line, IUnknown *unk, LONG l)
{
@@ -2701,6 +2802,24 @@
_test_img_alt(line, unk, alt);
}
=20
+#define test_img_align(u,a) _test_img_align(__LINE__,u,a)
+static void _test_img_align(unsigned line, IUnknown *unk, const char *align)
+{
+ IHTMLImgElement *img =3D _get_img_iface(line, unk);
+ BSTR tmp;
+ HRESULT hres;
+
+ tmp =3D a2bstr(align);
+ hres =3D IHTMLImgElement_put_align(img, tmp);
+ ok_(__FILE__,line) (hres =3D=3D S_OK, "put_align failed: %08x\n", hres);
+ SysFreeString(tmp);
+
+ hres =3D IHTMLImgElement_get_align(img, &tmp);
+ ok_(__FILE__,line) (hres =3D=3D S_OK, "put_align failed: %08x\n", hres);
+ ok_(__FILE__,line) (!strcmp_wa(tmp, align), "Expect %s, got %s\n", align=
, wine_dbgstr_w(tmp));
+ SysFreeString(tmp);
+}
+
#define test_img_name(u, c) _test_img_name(__LINE__,u, c)
static void _test_img_name(unsigned line, IUnknown *unk, const char *pValue)
{
@@ -2725,6 +2844,25 @@
hres =3D IHTMLImgElement_get_complete(img, &b);
ok_(__FILE__,line) (hres =3D=3D S_OK, "get_complete failed: %08x\n", hre=
s);
ok_(__FILE__,line) (b =3D=3D exb, "complete =3D %x, expected %x\n", b, e=
xb);
+ IHTMLImgElement_Release(img);
+}
+
+#define test_img_isMap(u, c) _test_img_isMap(__LINE__,u, c)
+static void _test_img_isMap(unsigned line, IUnknown *unk, VARIANT_BOOL v)
+{
+ IHTMLImgElement *img =3D _get_img_iface(line, unk);
+ VARIANT_BOOL b =3D 100;
+ HRESULT hres;
+
+ hres =3D IHTMLImgElement_put_isMap(img, v);
+ ok_(__FILE__,line) (hres =3D=3D S_OK, "put_isMap failed: %08x\n", hres);
+
+ hres =3D IHTMLImgElement_get_isMap(img, &b);
+ ok_(__FILE__,line) (hres =3D=3D S_OK, "get_isMap failed: %08x\n", hres);
+ ok_(__FILE__,line) (b =3D=3D v, "isMap =3D %x, expected %x\n", b, v);
+
+ hres =3D IHTMLImgElement_get_isMap(img, NULL);
+ ok_(__FILE__,line) (hres =3D=3D E_INVALIDARG, "ret =3D %08x, expected E_=
INVALIDARG\n", hres);
IHTMLImgElement_Release(img);
}
=20
@@ -2950,6 +3088,65 @@
ok_(__FILE__,line)(specified =3D=3D expected, "specified =3D %x, expecte=
d %x\n", specified, expected);
}
=20
+#define test_elem_id(e,i) _test_elem_id(__LINE__,e,i)
+static void _test_elem_id(unsigned line, IUnknown *unk, const char *exid)
+{
+ IHTMLElement *elem =3D _get_elem_iface(line, unk);
+ BSTR id =3D (void*)0xdeadbeef;
+ HRESULT hres;
+
+ hres =3D IHTMLElement_get_id(elem, &id);
+ IHTMLElement_Release(elem);
+ ok_(__FILE__,line) (hres =3D=3D S_OK, "get_id failed: %08x\n", hres);
+
+ if(exid)
+ ok_(__FILE__,line) (!strcmp_wa(id, exid), "unexpected id %s\n", wine=
_dbgstr_w(id));
+ else
+ ok_(__FILE__,line) (!id, "id=3D%s\n", wine_dbgstr_w(id));
+
+ SysFreeString(id);
+}
+
+#define test_elem_put_id(u,i) _test_elem_put_id(__LINE__,u,i)
+static void _test_elem_put_id(unsigned line, IUnknown *unk, const char *new_=
id)
+{
+ IHTMLElement *elem =3D _get_elem_iface(line, unk);
+ BSTR tmp =3D a2bstr(new_id);
+ HRESULT hres;
+
+ hres =3D IHTMLElement_put_id(elem, tmp);
+ IHTMLElement_Release(elem);
+ SysFreeString(tmp);
+ ok_(__FILE__,line) (hres =3D=3D S_OK, "put_id failed: %08x\n", hres);
+
+ _test_elem_id(line, unk, new_id);
+}
+
+static void test_contenteditable(IUnknown *unk)
+{
+ IHTMLElement3 *elem3 =3D get_elem3_iface(unk);
+ HRESULT hres;
+ BSTR str, strDefault;
+
+ hres =3D IHTMLElement3_get_contentEditable(elem3, &strDefault);
+ ok(hres =3D=3D S_OK, "get_contentEditable failed: 0x%08x\n", hres);
+
+ str =3D a2bstr("true");
+ hres =3D IHTMLElement3_put_contentEditable(elem3, str);
+ ok(hres =3D=3D S_OK, "put_contentEditable(%s) failed: 0x%08x\n", wine_db=
gstr_w(str), hres);
+ SysFreeString(str);
+ hres =3D IHTMLElement3_get_contentEditable(elem3, &str);
+ ok(hres =3D=3D S_OK, "get_contentEditable failed: 0x%08x\n", hres);
+ ok(!strcmp_wa(str, "true"), "Got %s, expected %s\n", wine_dbgstr_w(str),=
"true");
+
+ /* Restore origin contentEditable */
+ hres =3D IHTMLElement3_put_contentEditable(elem3, strDefault);
+ ok(hres =3D=3D S_OK, "put_contentEditable(%s) failed: 0x%08x\n", wine_db=
gstr_w(strDefault), hres);
+ SysFreeString(strDefault);
+
+ IHTMLElement3_Release(elem3);
+}
+
#define test_input_type(i,t) _test_input_type(__LINE__,i,t)
static void _test_input_type(unsigned line, IHTMLInputElement *input, const =
char *extype)
{
@@ -3102,6 +3299,45 @@
IHTMLInputElement_Release(input);
}
=20
+#define test_input_get_form(o, t) _test_input_get_form(__LINE__, o, t)
+static void _test_input_get_form(unsigned line, IUnknown *unk, const char *i=
d)
+{
+ IHTMLInputElement *input;
+ IHTMLFormElement *form;
+ IHTMLElement *elem;
+ HRESULT hres;
+
+ ok_(__FILE__,line) (unk !=3D NULL, "unk is NULL!\n");
+ hres =3D IUnknown_QueryInterface(unk, &IID_IHTMLInputElement, (void**)&i=
nput);
+ ok_(__FILE__,line) (hres =3D=3D S_OK, "Could not get IHTMLInputElement: =
%08x\n", hres);
+ ok_(__FILE__,line) (input !=3D NULL, "input =3D=3D NULL\n");
+ if(FAILED(hres) || input =3D=3D NULL)
+ return;
+
+ hres =3D IHTMLInputElement_get_form(input, &form);
+ ok_(__FILE__, line) (hres =3D=3D S_OK, "get_form failed: %08x\n", hres);
+ ok_(__FILE__, line) (form !=3D NULL, "form =3D=3D NULL\n");
+ if(FAILED(hres) || form =3D=3D NULL){
+ IHTMLInputElement_Release(input);
+ return;
+ }
+
+ hres =3D IHTMLFormElement_QueryInterface(form, &IID_IHTMLElement, (void =
**)&elem);
+ ok_(__FILE__, line) (hres =3D=3D S_OK, "QueryInterface(IID_IHTMLElement)=
failed: %08x\n", hres);
+ ok_(__FILE__, line) (elem !=3D NULL, "elem =3D=3D NULL\n");
+ if(FAILED(hres) || elem =3D=3D NULL){
+ IHTMLInputElement_Release(input);
+ IHTMLFormElement_Release(form);
+ return;
+ }
+
+ _test_elem_id(line, (IUnknown*)elem, id);
+
+ IHTMLInputElement_Release(input);
+ IHTMLFormElement_Release(form);
+ IHTMLElement_Release(elem);
+}
+
#define test_input_put_value(o,v) _test_input_put_value(__LINE__,o,v)
static void _test_input_put_value(unsigned line, IUnknown *unk, const char *=
val)
{
@@ -3195,6 +3431,43 @@
_test_input_src(line, input, src);
}
=20
+#define test_input_set_size(u,s,r) _test_input_set_size(__LINE__,u,s,r)
+static void _test_input_set_size(unsigned line, IHTMLInputElement *input, LO=
NG size, HRESULT exret)
+{
+ HRESULT hres;
+
+ hres =3D IHTMLInputElement_put_size(input, size);
+ ok_(__FILE__,line) (hres =3D=3D exret, "Expect ret =3D %08x, got: %08x\n=
", exret, hres);
+}
+
+#define test_input_get_size(u,s) _test_input_get_size(__LINE__,u,s)
+static void _test_input_get_size(unsigned line, IHTMLInputElement *input, LO=
NG exsize)
+{
+ HRESULT hres;
+ LONG size;
+
+ hres =3D IHTMLInputElement_get_size(input, &size);
+ ok_(__FILE__,line) (hres =3D=3D S_OK, "get_size failed: %08x\n", hres);
+ ok_(__FILE__,line) (size =3D=3D exsize, "Expect %d, got %d\n", exsize, s=
ize);
+
+ hres =3D IHTMLInputElement_get_size(input, NULL);
+ ok_(__FILE__,line) (hres =3D=3D E_INVALIDARG, "Expect ret E_INVALIDARG, =
got: %08x\n", hres);
+}
+
+#define test_input_readOnly(u,b) _test_input_readOnly(__LINE__,u,b)
+static void _test_input_readOnly(unsigned line, IHTMLInputElement *input, VA=
RIANT_BOOL v)
+{
+ HRESULT hres;
+ VARIANT_BOOL b =3D 100;
+
+ hres =3D IHTMLInputElement_put_readOnly(input, v);
+ ok_(__FILE__,line)(hres =3D=3D S_OK, "put readOnly failed: %08x\n", hres=
);
+
+ hres =3D IHTMLInputElement_get_readOnly(input, &b);
+ ok_(__FILE__,line)(hres =3D=3D S_OK, "get readOnly failed: %08x\n", hres=
);
+ ok_(__FILE__,line)(v =3D=3D b, "Expect %x, got %x\n", v, b);
+}
+
#define test_elem_class(u,c) _test_elem_class(__LINE__,u,c)
static void _test_elem_class(unsigned line, IUnknown *unk, const char *excla=
ss)
{
@@ -3355,40 +3628,6 @@
_test_elem_class(line, unk, class);
}
=20
-#define test_elem_id(e,i) _test_elem_id(__LINE__,e,i)
-static void _test_elem_id(unsigned line, IUnknown *unk, const char *exid)
-{
- IHTMLElement *elem =3D _get_elem_iface(line, unk);
- BSTR id =3D (void*)0xdeadbeef;
- HRESULT hres;
-
- hres =3D IHTMLElement_get_id(elem, &id);
- IHTMLElement_Release(elem);
- ok_(__FILE__,line) (hres =3D=3D S_OK, "get_id failed: %08x\n", hres);
-
- if(exid)
- ok_(__FILE__,line) (!strcmp_wa(id, exid), "unexpected id %s\n", wine=
_dbgstr_w(id));
- else
- ok_(__FILE__,line) (!id, "id=3D%s\n", wine_dbgstr_w(id));
-
- SysFreeString(id);
-}
-
-#define test_elem_put_id(u,i) _test_elem_put_id(__LINE__,u,i)
-static void _test_elem_put_id(unsigned line, IUnknown *unk, const char *new_=
id)
-{
- IHTMLElement *elem =3D _get_elem_iface(line, unk);
- BSTR tmp =3D a2bstr(new_id);
- HRESULT hres;
-
- hres =3D IHTMLElement_put_id(elem, tmp);
- IHTMLElement_Release(elem);
- SysFreeString(tmp);
- ok_(__FILE__,line) (hres =3D=3D S_OK, "put_id failed: %08x\n", hres);
-
- _test_elem_id(line, unk, new_id);
-}
-
#define test_elem_title(u,t) _test_elem_title(__LINE__,u,t)
static void _test_elem_title(unsigned line, IUnknown *unk, const char *extit=
le)
{
@@ -3657,13 +3896,44 @@
IHTMLFormElement_Release(form);
}
=20
+#define test_form_reset(a) _test_form_reset(__LINE__,a)
+static void _test_form_reset(unsigned line, IUnknown *unk)
+{
+ IHTMLFormElement *form =3D _get_form_iface(line, unk);
+ HRESULT hres;
+
+ hres =3D IHTMLFormElement_reset(form);
+ ok_(__FILE__,line)(hres =3D=3D S_OK, "reset failed: %08x\n", hres);
+
+ IHTMLFormElement_Release(form);
+}
+
+static void test_form_target(IUnknown *unk)
+{
+ IHTMLFormElement *form =3D get_form_iface(unk);
+ HRESULT hres;
+ BSTR str;
+ static const char target[] =3D "_blank";
+
+ str =3D a2bstr(target);
+ hres =3D IHTMLFormElement_put_target(form, str);
+ ok(hres =3D=3D S_OK, "put_target(%s) failed: %08x\n", target, hres);
+ SysFreeString(str);
+
+ hres =3D IHTMLFormElement_get_target(form, &str);
+ ok(hres =3D=3D S_OK, "get_target failed: %08x\n", hres);
+ ok(!strcmp_wa(str, target), "Expected %s, got %s\n", target, wine_dbgstr=
_w(str));
+ SysFreeString(str);
+
+ IHTMLFormElement_Release(form);
+}
+
#define test_meta_name(a,b) _test_meta_name(__LINE__,a,b)
static void _test_meta_name(unsigned line, IUnknown *unk, const char *exname)
{
IHTMLMetaElement *meta;
BSTR name =3D NULL;
HRESULT hres;
-
=20
meta =3D _get_metaelem_iface(line, unk);
hres =3D IHTMLMetaElement_get_name(meta, &name);
@@ -3680,7 +3950,6 @@
BSTR content =3D NULL;
HRESULT hres;
=20
-
meta =3D _get_metaelem_iface(line, unk);
hres =3D IHTMLMetaElement_get_content(meta, &content);
ok_(__FILE__,line)(hres =3D=3D S_OK, "get_content failed: %08x\n", hres);
@@ -3696,7 +3965,6 @@
BSTR val =3D NULL;
HRESULT hres;
=20
-
meta =3D _get_metaelem_iface(line, unk);
hres =3D IHTMLMetaElement_get_httpEquiv(meta, &val);
ok_(__FILE__,line)(hres =3D=3D S_OK, "get_httpEquiv failed: %08x\n", hre=
s);
@@ -3705,6 +3973,59 @@
IHTMLMetaElement_Release(meta);
}
=20
+#define test_meta_charset(a,b) _test_meta_charset(__LINE__,a,b)
+static void _test_meta_charset(unsigned line, IUnknown *unk, const char *exv=
al)
+{
+ IHTMLMetaElement *meta;
+ BSTR val =3D NULL;
+ HRESULT hres;
+
+ meta =3D _get_metaelem_iface(line, unk);
+ hres =3D IHTMLMetaElement_get_charset(meta, &val);
+ ok_(__FILE__,line)(hres =3D=3D S_OK, "get_charset failed: %08x\n", hres);
+ if(exval)
+ ok_(__FILE__,line)(!strcmp_wa(val, exval), "charset =3D %s, expected=
%s\n", wine_dbgstr_w(val), exval);
+ else
+ ok_(__FILE__,line)(!val, "charset =3D %s, expected NULL\n", wine_dbg=
str_w(val));
+ SysFreeString(val);
+ IHTMLMetaElement_Release(meta);
+}
+
+#define set_meta_charset(a,b) _set_meta_charset(__LINE__,a,b)
+static void _set_meta_charset(unsigned line, IUnknown *unk, const char *vala)
+{
+ BSTR val =3D a2bstr(vala);
+ IHTMLMetaElement *meta;
+ HRESULT hres;
+
+ meta =3D _get_metaelem_iface(line, unk);
+ hres =3D IHTMLMetaElement_put_charset(meta, val);
+ ok_(__FILE__,line)(hres =3D=3D S_OK, "put_charset failed: %08x\n", hres);
+ SysFreeString(val);
+ IHTMLMetaElement_Release(meta);
+
+ _test_meta_charset(line, unk, vala);
+}
+
+#define test_link_media(a,b) _test_link_media(__LINE__,a,b)
+static void _test_link_media(unsigned line, IHTMLElement *elem, const char *=
exval)
+{
+ IHTMLLinkElement *link =3D _get_link_iface(line, (IUnknown*)elem);
+ HRESULT hres;
+ BSTR str;
+
+ str =3D a2bstr(exval);
+ hres =3D IHTMLLinkElement_put_media(link, str);
+ ok_(__FILE__,line)(hres =3D=3D S_OK, "put_media(%s) failed: %08x\n", exv=
al, hres);
+ SysFreeString(str);
+
+ hres =3D IHTMLLinkElement_get_media(link, &str);
+ ok_(__FILE__,line)(hres =3D=3D S_OK, "get_media failed: %08x\n", hres);
+ ok_(__FILE__,line)(!strcmp_wa(str, exval), "got %s, expected %s\n", wine=
_dbgstr_w(str), exval);
+ SysFreeString(str);
+ IHTMLLinkElement_Release(link);
+}
+
#define test_link_disabled(a,b) _test_link_disabled(__LINE__,a,b)
static void _test_link_disabled(unsigned line, IHTMLElement *elem, VARIANT_B=
OOL v)
{
@@ -3760,6 +4081,37 @@
SysFreeString(str);
IHTMLLinkElement_Release(link);
_test_link_rel(line, elem, v);
+}
+
+#define test_link_rev(a,b) _test_link_rev(__LINE__,a,b)
+static void _test_link_rev(unsigned line, IHTMLElement *elem, const char *v)
+{
+ IHTMLLinkElement *link =3D _get_link_iface(line, (IUnknown*)elem);
+ BSTR rev;
+ HRESULT hres;
+
+ hres =3D IHTMLLinkElement_get_rev(link, &rev);
+ ok_(__FILE__,line)(hres =3D=3D S_OK, "get_rev failed: %08x\n", hres);
+ if(v)
+ ok_(__FILE__,line)(!strcmp_wa(rev, v), "rev =3D %s, expected %s\n", =
wine_dbgstr_w(rev), v);
+ else
+ ok_(__FILE__,line)(!rev, "rev =3D %s, expected NULL\n", wine_dbgstr_=
w(rev));
+
+ IHTMLLinkElement_Release(link);
+}
+
+#define link_put_rev(a,b) _link_put_rev(__LINE__,a,b)
+static void _link_put_rev(unsigned line, IHTMLElement *elem, const char *v)
+{
+ IHTMLLinkElement *link =3D _get_link_iface(line, (IUnknown*)elem);
+ BSTR str =3D a2bstr(v);
+ HRESULT hres;
+
+ hres =3D IHTMLLinkElement_put_rev(link, str);
+ ok_(__FILE__,line)(hres =3D=3D S_OK, "put_disabled failed: %08x\n", hres=
);
+ SysFreeString(str);
+ IHTMLLinkElement_Release(link);
+ _test_link_rev(line, elem, v);
}
=20
#define test_link_type(a,b) _test_link_type(__LINE__,a,b)
@@ -3884,8 +4236,17 @@
HRESULT hres;
=20
hres =3D IHTMLDOMAttribute_get_nodeValue(attr, v);
- ok_(__FILE__,line) (hres =3D=3D S_OK, "get_nodeValue failed: %08x, expec=
ted VT_BSTR\n", hres);
+ ok_(__FILE__,line) (hres =3D=3D S_OK, "get_nodeValue failed: %08x\n", hr=
es);
ok_(__FILE__,line) (V_VT(v) =3D=3D vt, "vt=3D%d, expected %d\n", V_VT(v)=
, vt);
+}
+
+#define put_attr_node_value(a,b) _put_attr_node_value(__LINE__,a,b)
+static void _put_attr_node_value(unsigned line, IHTMLDOMAttribute *attr, VAR=
IANT v)
+{
+ HRESULT hres;
+
+ hres =3D IHTMLDOMAttribute_put_nodeValue(attr, v);
+ ok_(__FILE__,line) (hres =3D=3D S_OK, "put_nodeValue failed: %08x\n", hr=
es);
}
=20
#define get_window_doc(e) _get_window_doc(__LINE__,e)
@@ -4237,6 +4598,7 @@
=20
test_select_multiple(select, VARIANT_FALSE);
test_select_set_multiple(select, VARIANT_TRUE);
+ test_select_remove(select);
}
=20
static void test_form_item(IHTMLElement *elem)
@@ -4890,6 +5252,25 @@
}
}
=20
+#define test_table_length(t,l) _test_table_length(__LINE__,t,l)
+static void _test_table_length(unsigned line, IHTMLTable *table, LONG expect)
+{
+ IHTMLElementCollection *col;
+ HRESULT hres;
+ LONG len;
+
+ hres =3D IHTMLTable_get_rows(table, &col);
+ ok_(__FILE__,line)(hres =3D=3D S_OK, "get_rows failed: %08x\n", hres);
+ ok_(__FILE__,line)(col !=3D NULL, "col =3D NULL\n");
+ if (hres !=3D S_OK || col =3D=3D NULL)
+ return;
+ hres =3D IHTMLElementCollection_get_length(col, &len);
+ ok_(__FILE__,line)(hres =3D=3D S_OK, "get_length failed: %08x\n", hres);
+ ok_(__FILE__,line)(len =3D=3D expect, "Expect %d, got %d\n", expect, len=
);
+
+ IHTMLElementCollection_Release(col);
+}
+
static void test_navigator(IHTMLDocument2 *doc)
{
IHTMLWindow2 *window;
@@ -5116,9 +5497,16 @@
IHTMLElement *elem;
IHTMLDocument3 *doc3;
HRESULT hres;
+ BSTR bstr;
=20
hres =3D IHTMLDocument2_QueryInterface(doc, &IID_IHTMLDocument3, (void**=
)&doc3);
ok(hres =3D=3D S_OK, "QueryInterface(IID_IHTMLDocument3) failed: %08x\n"=
, hres);
+
+ hres =3D IHTMLDocument2_toString(doc, &bstr);
+ ok(hres =3D=3D S_OK, "toString failed: %08x\n", hres);
+ ok(!strcmp_wa(bstr, "[object]"),
+ "toString returned %s, expected [object]\n", wine_dbgstr_w(bstr)=
);
+ SysFreeString(bstr);
=20
hres =3D IHTMLDocument3_get_documentElement(doc3, &elem);
IHTMLDocument3_Release(doc3);
@@ -5239,7 +5627,7 @@
=20
hres =3D IHTMLBodyElement_get_bgColor(body, &vbg);
ok(hres =3D=3D S_OK, "get_bgColor failed: %08x\n", hres);
- ok(V_VT(&vDefaultbg) =3D=3D VT_BSTR, "V_VT(&vDefaultbg) !=3D VT_BSTR\n");
+ ok(V_VT(&vbg) =3D=3D VT_BSTR, "V_VT(&vbg) !=3D VT_BSTR\n");
ok(!strcmp_wa(V_BSTR(&vbg), "#ff0000"), "Unexpected bgcolor %s\n", wine_=
dbgstr_w(V_BSTR(&vbg)));
VariantClear(&vbg);
=20
@@ -5368,6 +5756,33 @@
IHTMLWindow2_Release(window);
}
=20
+static void test_dom_implementation(IHTMLDocument2 *doc)
+{
+ IHTMLDocument5 *doc5 =3D get_htmldoc5_iface((IUnknown*)doc);
+ IHTMLDOMImplementation *dom_implementation;
+ VARIANT_BOOL b;
+ VARIANT v;
+ BSTR str;
+ HRESULT hres;
+
+ hres =3D IHTMLDocument5_get_implementation(doc5, &dom_implementation);
+ IHTMLDocument5_Release(doc5);
+ ok(hres =3D=3D S_OK, "get_implementation failed: %08x\n", hres);
+ ok(dom_implementation !=3D NULL, "dom_implementation =3D=3D NULL\n");
+
+ str =3D a2bstr("test");
+ V_VT(&v) =3D VT_BSTR;
+ V_BSTR(&v) =3D a2bstr("1.0");
+ b =3D 100;
+ hres =3D IHTMLDOMImplementation_hasFeature(dom_implementation, str, v, &=
b);
+ SysFreeString(str);
+ VariantClear(&v);
+ ok(hres =3D=3D S_OK, "hasFeature failed: %08x\n", hres);
+ ok(!b, "hasFeature returned %x\n", b);
+
+ IHTMLDOMImplementation_Release(dom_implementation);
+}
+
static void test_defaults(IHTMLDocument2 *doc)
{
IHTMLStyleSheetsCollection *stylesheetcol;
@@ -5502,6 +5917,7 @@
=20
test_default_selection(doc);
test_doc_title(doc, "");
+ test_dom_implementation(doc);
}
=20
#define test_button_name(a,b) _test_button_name(__LINE__,a,b)
@@ -5571,6 +5987,57 @@
set_button_name(elem, "button name");
}
=20
+#define test_tr_possess(e,r,l,i) _test_tr_possess(__LINE__,e,r,l,i)
+static void _test_tr_possess(unsigned line, IHTMLElement *elem,
+ IHTMLTableRow *row, LONG len, const char *id)
+{
+ IHTMLElementCollection *col;
+ IDispatch *disp;
+ HRESULT hres;
+ LONG lval;
+ VARIANT var;
+
+ hres =3D IHTMLTableRow_get_cells(row, &col);
+ ok_(__FILE__, line)(hres =3D=3D S_OK, "get_cells failed: %08x\n", hres);
+ ok_(__FILE__, line)(col !=3D NULL, "get_cells returned NULL\n");
+
+ hres =3D IHTMLElementCollection_get_length(col, &lval);
+ ok_(__FILE__, line)(hres =3D=3D S_OK, "get length failed: %08x\n", hres);
+ ok_(__FILE__, line)(lval =3D=3D len, "expected len =3D %d, got %d\n", le=
n, lval);
+
+ V_VT(&var) =3D VT_BSTR;
+ V_BSTR(&var) =3D a2bstr(id);
+ hres =3D IHTMLElementCollection_tags(col, var, &disp);
+ ok_(__FILE__, line)(hres =3D=3D S_OK, "search by tags(%s) failed: %08x\n=
", id, hres);
+ ok_(__FILE__, line)(disp !=3D NULL, "disp =3D=3D NULL\n");
+
+ VariantClear(&var);
+ IDispatch_Release(disp);
+ IHTMLElementCollection_Release(col);
+}
+
+static void test_tr_modify(IHTMLElement *elem, IHTMLTableRow *row)
+{
+ HRESULT hres;
+ IDispatch *disp;
+ IHTMLTableCell *cell;
+
+ hres =3D IHTMLTableRow_deleteCell(row, 0);
+ ok(hres =3D=3D S_OK, "deleteCell failed: %08x\n", hres);
+ test_tr_possess(elem, row, 1, "td2");
+
+ hres =3D IHTMLTableRow_insertCell(row, 0, &disp);
+ ok(hres =3D=3D S_OK, "insertCell failed: %08x\n", hres);
+ ok(disp !=3D NULL, "disp =3D=3D NULL\n");
+ hres =3D IDispatch_QueryInterface(disp, &IID_IHTMLTableCell, (void **)&c=
ell);
+ ok(hres =3D=3D S_OK, "Could not get IID_IHTMLTableCell interface: %08x\n=
", hres);
+ ok(cell !=3D NULL, "cell =3D=3D NULL\n");
+ if (SUCCEEDED(hres))
+ IHTMLTableCell_Release(cell);
+ test_tr_possess(elem, row, 2, "td2");
+ IDispatch_Release(disp);
+}
+
static void test_tr_elem(IHTMLElement *elem)
{
IHTMLElementCollection *col;
@@ -5642,7 +6109,7 @@
=20
hres =3D IHTMLTableRow_get_bgColor(row, &vbg);
ok(hres =3D=3D S_OK, "get_bgColor failed: %08x\n", hres);
- ok(V_VT(&vDefaultbg) =3D=3D VT_BSTR, "V_VT(&vDefaultbg) !=3D VT_BSTR\n");
+ ok(V_VT(&vbg) =3D=3D VT_BSTR, "V_VT(&vbg) !=3D VT_BSTR\n");
ok(!strcmp_wa(V_BSTR(&vbg), "#ff0000"), "Unexpected bgcolor %s\n", wine_=
dbgstr_w(V_BSTR(&vbg)));
VariantClear(&vbg);
=20
@@ -5654,7 +6121,7 @@
=20
hres =3D IHTMLTableRow_get_bgColor(row, &vbg);
ok(hres =3D=3D S_OK, "get_bgColor failed: %08x\n", hres);
- ok(V_VT(&vDefaultbg) =3D=3D VT_BSTR, "V_VT(&vDefaultbg) !=3D VT_BSTR\n");
+ ok(V_VT(&vbg) =3D=3D VT_BSTR, "V_VT(&vbg) !=3D VT_BSTR\n");
ok(!strcmp_wa(V_BSTR(&vbg), "#ff0000"), "Unexpected bgcolor %s\n", wine_=
dbgstr_w(V_BSTR(&vbg)));
VariantClear(&vbg);
=20
@@ -5663,7 +6130,78 @@
ok(hres =3D=3D S_OK, "put_bgColor failed: %08x\n", hres);
VariantClear(&vDefaultbg);
=20
+ test_tr_modify(elem, row);
+
IHTMLTableRow_Release(row);
+}
+
+static void test_td_elem(IHTMLElement *elem)
+{
+ IHTMLTableCell *cell;
+ HRESULT hres;
+ LONG lval;
+ BSTR str;
+ VARIANT vbg, vDefaultbg;
+
+ hres =3D IHTMLElement_QueryInterface(elem, &IID_IHTMLTableCell, (void**)=
&cell);
+ ok(hres =3D=3D S_OK, "Could not get IHTMLTableRow iface: %08x\n", hres);
+ if(FAILED(hres))
+ return;
+
+ lval =3D 0xdeadbeef;
+ hres =3D IHTMLTableCell_get_cellIndex(cell, &lval);
+ ok(hres =3D=3D S_OK, "get cellIndex failed: %08x\n", hres);
+ ok(lval =3D=3D 1, "Expected 1, got %d\n", lval);
+
+ str =3D a2bstr("left");
+ hres =3D IHTMLTableCell_put_align(cell, str);
+ ok(hres =3D=3D S_OK, "put_align failed: %08x\n", hres);
+ SysFreeString(str);
+
+ str =3D NULL;
+ hres =3D IHTMLTableCell_get_align(cell, &str);
+ ok(hres =3D=3D S_OK, "get_align failed: %08x\n", hres);
+ ok(str !=3D NULL, "str is NULL\n");
+ if (str !=3D NULL && hres =3D=3D S_OK) {
+ ok(!strcmp_wa(str, "left"), "got %s\n", wine_dbgstr_w(str));
+ SysFreeString(str);
+ }
+
+ hres =3D IHTMLTableCell_get_bgColor(cell, &vDefaultbg);
+ ok(hres =3D=3D S_OK, "get_bgColor failed: %08x\n", hres);
+ ok(V_VT(&vDefaultbg) =3D=3D VT_BSTR, "bstr !=3D NULL\n");
+ ok(!V_BSTR(&vDefaultbg), "V_BSTR(bgColor) =3D %s\n", wine_dbgstr_w(V_BST=
R(&vDefaultbg)));
+
+ V_VT(&vbg) =3D VT_BSTR;
+ V_BSTR(&vbg) =3D a2bstr("red");
+ hres =3D IHTMLTableCell_put_bgColor(cell, vbg);
+ ok(hres =3D=3D S_OK, "put_bgColor failed: %08x\n", hres);
+ VariantClear(&vbg);
+
+ hres =3D IHTMLTableCell_get_bgColor(cell, &vbg);
+ ok(hres =3D=3D S_OK, "get_bgColor failed: %08x\n", hres);
+ ok(V_VT(&vbg) =3D=3D VT_BSTR, "V_VT(&vbg) !=3D 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) =3D VT_I4;
+ V_I4(&vbg) =3D 0xff0000;
+ hres =3D IHTMLTableCell_put_bgColor(cell, vbg);
+ ok(hres =3D=3D S_OK, "put_bgColor failed: %08x\n", hres);
+ VariantClear(&vbg);
+
+ hres =3D IHTMLTableCell_get_bgColor(cell, &vbg);
+ ok(hres =3D=3D S_OK, "get_bgColor failed: %08x\n", hres);
+ ok(V_VT(&vbg) =3D=3D VT_BSTR, "V_VT(&vbg) !=3D 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 =3D IHTMLTableCell_put_bgColor(cell, vDefaultbg);
+ ok(hres =3D=3D S_OK, "put_bgColor failed: %08x\n", hres);
+ VariantClear(&vDefaultbg);
+
+ IHTMLTableCell_Release(cell);
}
=20
static void test_label_elem(IHTMLElement *elem)
@@ -5721,10 +6259,45 @@
VariantClear(&v);
}
=20
+static void test_table_modify(IHTMLTable *table)
+{
+ IDispatch *disp;
+ IHTMLTableRow *row;
+ HRESULT hres;
+ LONG index;
+
+ test_table_length(table, 2);
+
+ hres =3D IHTMLTable_insertRow(table, 0, &disp);
+ ok(hres =3D=3D S_OK, "insertRow failed: %08x\n", hres);
+ ok(disp !=3D NULL, "disp =3D=3D NULL\n");
+ test_table_length(table, 3);
+ if (hres !=3D S_OK || disp =3D=3D NULL)
+ return;
+
+ hres =3D IDispatch_QueryInterface(disp, &IID_IHTMLTableRow, (void**)&row=
);
+ IDispatch_Release(disp);
+
+ ok(hres =3D=3D S_OK, "QueryInterface failed: %08x\n", hres);
+ ok(row !=3D NULL, "row =3D=3D NULL\n");
+
+ index =3D 0xdeadbeef;
+ hres =3D IHTMLTableRow_get_rowIndex(row, &index);
+ ok(hres =3D=3D S_OK, "get_rowIndex failed: %08x\n", hres);
+ ok(index =3D=3D 0, "index =3D %d, expected 0\n", index);
+
+ IHTMLTableRow_Release(row);
+
+ hres =3D IHTMLTable_deleteRow(table, 0);
+ ok(hres =3D=3D S_OK, "deleteRow failed: %08x\n", hres);
+ test_table_length(table, 2);
+}
+
static void test_table_elem(IHTMLElement *elem)
{
IHTMLElementCollection *col;
IHTMLTable *table;
+ IHTMLTable3 *table3;
IHTMLDOMNode *node;
VARIANT v;
HRESULT hres;
@@ -5737,6 +6310,11 @@
=20
hres =3D IHTMLElement_QueryInterface(elem, &IID_IHTMLTable, (void**)&tab=
le);
ok(hres =3D=3D S_OK, "Could not get IHTMLTable iface: %08x\n", hres);
+ if(FAILED(hres))
+ return;
+
+ hres =3D IHTMLElement_QueryInterface(elem, &IID_IHTMLTable3, (void**)&ta=
ble3);
+ ok(hres =3D=3D S_OK, "Could not get IHTMLTable3 iface: %08x\n", hres);
if(FAILED(hres))
return;
=20
@@ -5808,7 +6386,7 @@
=20
hres =3D IHTMLTable_get_bgColor(table, &vbg);
ok(hres =3D=3D S_OK, "get_bgColor failed: %08x\n", hres);
- ok(V_VT(&vDefaultbg) =3D=3D VT_BSTR, "V_VT(&vDefaultbg) !=3D VT_BSTR\n");
+ ok(V_VT(&vbg) =3D=3D VT_BSTR, "V_VT(&vbg) !=3D VT_BSTR\n");
ok(!strcmp_wa(V_BSTR(&vbg), "#ff0000"), "Unexpected bgcolor %s\n", wine_=
dbgstr_w(V_BSTR(&vbg)));
VariantClear(&vbg);
=20
@@ -5820,7 +6398,7 @@
=20
hres =3D IHTMLTable_get_bgColor(table, &vbg);
ok(hres =3D=3D S_OK, "get_bgColor failed: %08x\n", hres);
- ok(V_VT(&vDefaultbg) =3D=3D VT_BSTR, "V_VT(&vDefaultbg) !=3D VT_BSTR\n");
+ ok(V_VT(&vbg) =3D=3D VT_BSTR, "V_VT(&vbg) !=3D VT_BSTR\n");
ok(!strcmp_wa(V_BSTR(&vbg), "#ff0000"), "Unexpected bgcolor %s\n", wine_=
dbgstr_w(V_BSTR(&vbg)));
VariantClear(&vbg);
=20
@@ -5829,6 +6407,76 @@
ok(hres =3D=3D S_OK, "put_bgColor failed: %08x\n", hres);
VariantClear(&vDefaultbg);
=20
+ V_VT(&v) =3D VT_BSTR;
+ V_BSTR(&v) =3D a2bstr("11");
+ hres =3D IHTMLTable_put_width(table, v);
+ ok(hres =3D=3D S_OK, "put_width =3D %08x\n", hres);
+ VariantClear(&v);
+ IHTMLTable_get_width(table, &v);
+ ok(hres =3D=3D S_OK, "get_width =3D %08x\n", hres);
+ ok(!strcmp_wa(V_BSTR(&v), "11"), "Expected 11, got %s\n", wine_dbgstr_w(=
V_BSTR(&v)));
+ VariantClear(&v);
+
+ V_VT(&v) =3D VT_BSTR;
+ V_BSTR(&v) =3D a2bstr("11.9");
+ hres =3D IHTMLTable_put_width(table, v);
+ ok(hres =3D=3D S_OK, "put_width =3D %08x\n", hres);
+ VariantClear(&v);
+ IHTMLTable_get_width(table, &v);
+ ok(hres =3D=3D S_OK, "get_width =3D %08x\n", hres);
+ ok(!strcmp_wa(V_BSTR(&v), "11"), "Expected 11, got %s\n", wine_dbgstr_w(=
V_BSTR(&v)));
+ VariantClear(&v);
+
+ V_VT(&v) =3D VT_BSTR;
+ V_BSTR(&v) =3D a2bstr("40.2%");
+ hres =3D IHTMLTable_put_width(table, v);
+ ok(hres =3D=3D S_OK, "put_width =3D %08x\n", hres);
+ VariantClear(&v);
+ IHTMLTable_get_width(table, &v);
+ ok(hres =3D=3D S_OK, "get_width =3D %08x\n", hres);
+ ok(!strcmp_wa(V_BSTR(&v), "40.2%"), "Expected 40.2%%, got %s\n", wine_db=
gstr_w(V_BSTR(&v)));
+ VariantClear(&v);
+
+ V_VT(&v) =3D VT_I4;
+ V_I4(&v) =3D 11;
+ hres =3D IHTMLTable_put_width(table, v);
+ ok(hres =3D=3D S_OK, "put_width =3D %08x\n", hres);
+ IHTMLTable_get_width(table, &v);
+ ok(hres =3D=3D S_OK, "get_width =3D %08x\n", hres);
+ ok(!strcmp_wa(V_BSTR(&v), "11"), "Expected 11, got %s\n", wine_dbgstr_w(=
V_BSTR(&v)));
+ VariantClear(&v);
+
+ V_VT(&v) =3D VT_R8;
+ V_R8(&v) =3D 11.9;
+ hres =3D IHTMLTable_put_width(table, v);
+ ok(hres =3D=3D S_OK, "put_width =3D %08x\n", hres);
+ IHTMLTable_get_width(table, &v);
+ ok(hres =3D=3D S_OK, "get_width =3D %08x\n", hres);
+ ok(!strcmp_wa(V_BSTR(&v), "11"), "Expected 11, got %s\n", wine_dbgstr_w(=
V_BSTR(&v)));
+ VariantClear(&v);
+
+
+ bstr =3D a2bstr("box");
+ hres =3D IHTMLTable_put_frame(table, bstr);
+ ok(hres =3D=3D S_OK, "put_frame =3D %08x\n", hres);
+ SysFreeString(bstr);
+ hres =3D IHTMLTable_get_frame(table, &bstr);
+ ok(hres =3D=3D S_OK, "get_frame =3D %08x\n", hres);
+ ok(!strcmp_wa(bstr, "box"), "Expected box, got %s\n", wine_dbgstr_w(bstr=
));
+ SysFreeString(bstr);
+
+ test_table_modify(table);
+ bstr =3D a2bstr("summary");
+ hres =3D IHTMLTable3_put_summary(table3, bstr);
+ ok(hres =3D=3D S_OK, "put_summary =3D %08x\n", hres);
+ SysFreeString(bstr);
+
+ hres =3D IHTMLTable3_get_summary(table3, &bstr);
+ ok(hres =3D=3D S_OK, "get_summary =3D %08x\n", hres);
+ ok(!strcmp_wa(bstr, "summary"), "Expected summary, got %s\n", wine_dbgst=
r_w(bstr));
+ SysFreeString(bstr);
+
+ IHTMLTable3_Release(table3);
IHTMLTable_Release(table);
}
=20
@@ -6087,6 +6735,8 @@
hres =3D IHTMLStyleSheet_get_rules(stylesheet, &col);
ok(hres =3D=3D S_OK, "get_rules failed: %08x\n", hres);
ok(col !=3D NULL, "col =3D=3D NULL\n");
+
+ test_disp2((IUnknown*)col, &DIID_DispHTMLStyleSheetRulesCollection, &IID=
_IHTMLStyleSheetRulesCollection, "[object]");
IHTMLStyleSheetRulesCollection_Release(col);
=20
href =3D (void*)0xdeadbeef;
@@ -6180,7 +6830,55 @@
IDispatchEx_Release(dispex);
}
=20
-
+static void test_enum_children(IUnknown *unk, unsigned len)
+{
+ IEnumVARIANT *enum_var;
+ ULONG i, fetched;
+ VARIANT v;
+ HRESULT hres;
+
+ hres =3D IUnknown_QueryInterface(unk, &IID_IEnumVARIANT, (void**)&enum_v=
ar);
+ ok(hres =3D=3D S_OK, "Could not get IEnumVARIANT iface: %08x\n", hres);
+
+ for(i=3D0; i 2 ? len-2 : 0);
+ ok(hres =3D=3D S_OK, "Skip failed: %08x\n", hres);
+
+ hres =3D IEnumVARIANT_Reset(enum_var);
+ ok(hres =3D=3D S_OK, "Reset failed: %08x\n", hres);
+
+ hres =3D IEnumVARIANT_Skip(enum_var, len+1);
+ ok(hres =3D=3D S_FALSE, "Skip failed: %08x\n", hres);
+
+ IEnumVARIANT_Release(enum_var);
+}
=20
static void test_elems(IHTMLDocument2 *doc)
{
@@ -6239,6 +6937,15 @@
ok(hres =3D=3D S_OK, "get_all failed: %08x\n", hres);
test_elem_collection((IUnknown*)col, all_types, sizeof(all_types)/sizeof=
(all_types[0]));
test_elem_col_item(col, "x", item_types, sizeof(item_types)/sizeof(item_=
types[0]));
+
+ elem =3D get_elem_col_item_idx(col, 0);
+ test_elem_source_index(elem, 0);
+ IHTMLElement_Release(elem);
+
+ elem =3D get_elem_col_item_idx(col, 3);
+ test_elem_source_index(elem, 3);
+ IHTMLElement_Release(elem);
+
IHTMLElementCollection_Release(col);
=20
hres =3D IHTMLDocument2_get_images(doc, &collection);
@@ -6337,10 +7044,12 @@
test_elem_contains(elem, elem3, VARIANT_FALSE);
test_elem_contains(elem, elem2, VARIANT_FALSE);
test_elem_contains(elem, elem, VARIANT_TRUE);
+ test_elem_contains(elem, NULL, VARIANT_FALSE);
IHTMLElement_Release(elem2);
=20
elem2 =3D test_elem_get_parent((IUnknown*)elem3);
ok(elem2 =3D=3D NULL, "elem2 !=3D NULL\n");
+ test_elem_source_index(elem3, 0);
IHTMLElement_Release(elem3);
=20
test_elem_getelembytag((IUnknown*)elem, ET_OPTION, 2, NULL);
@@ -6405,8 +7114,10 @@
ok(hres =3D=3D S_OK, "get_type failed: %08x\n", hres);
ok(type =3D=3D NULL, "Unexpected type %s\n", wine_dbgstr_w(type)=
);
=20
- hres =3D IHTMLScriptElement_put_type (script, a2bstr ("text/java=
script"));
+ type =3D a2bstr("text/javascript");
+ hres =3D IHTMLScriptElement_put_type (script, type);
ok(hres =3D=3D S_OK, "put_type failed: %08x\n", hres);
+ SysFreeString(type);
hres =3D IHTMLScriptElement_get_type(script, &type);
ok(hres =3D=3D S_OK, "get_type failed: %08x\n", hres);
ok(!strcmp_wa(type, "text/javascript"), "Unexpected type %s\n", =
wine_dbgstr_w(type));
@@ -6482,12 +7193,24 @@
test_input_src(input, NULL);
test_input_set_src(input, "about:blank");
=20
+ test_input_set_size(input, 15, S_OK);
+ test_input_get_size(input, 15);
+ test_input_set_size(input, -100, CTL_E_INVALIDPROPERTYVALUE);
+ test_input_get_size(input, 15);
+ test_input_set_size(input, 0, CTL_E_INVALIDPROPERTYVALUE);
+ test_input_get_size(input, 15);
+
+ test_input_readOnly(input, VARIANT_TRUE);
+ test_input_readOnly(input, VARIANT_FALSE);
+
IHTMLInputElement_Release(input);
IHTMLElement_Release(elem);
}
=20
elem =3D get_elem_by_id(doc, "imgid", TRUE);
if(elem) {
+ test_img_align((IUnknown*)elem, "left");
+ test_img_name((IUnknown*)elem, "WineImg");
test_img_src((IUnknown*)elem, "", NULL);
test_img_set_src((IUnknown*)elem, "about:blank");
test_img_src((IUnknown*)elem, "about:blank", NULL);
@@ -6495,6 +7218,8 @@
test_img_set_alt((IUnknown*)elem, "alt test");
test_img_name((IUnknown*)elem, "WineImg");
test_img_complete(elem, VARIANT_FALSE);
+ test_img_isMap((IUnknown*)elem, VARIANT_TRUE);
+ test_img_isMap((IUnknown*)elem, VARIANT_FALSE);
IHTMLElement_Release(elem);
}
=20
@@ -6502,6 +7227,7 @@
if(elem) {
test_dynamic_properties(elem);
test_attr_collection(elem);
+ test_contenteditable((IUnknown*)elem);
IHTMLElement_Release(elem);
}
=20
@@ -6525,6 +7251,13 @@
ok(elem !=3D NULL, "elem =3D=3D NULL\n");
if(elem) {
test_label_elem(elem);
+ IHTMLElement_Release(elem);
+ }
+
+ elem =3D get_doc_elem_by_id(doc, "td2");
+ ok(elem !=3D NULL, "elem =3D=3D NULL\n");
+ if(elem) {
+ test_td_elem(elem);
IHTMLElement_Release(elem);
}
=20
@@ -6609,6 +7342,8 @@
test_meta_name((IUnknown*)elem, "meta name");
test_meta_content((IUnknown*)elem, "text/html; charset=3Dutf-8");
test_meta_httpequiv((IUnknown*)elem, "Content-Type");
+ test_meta_charset((IUnknown*)elem, NULL);
+ set_meta_charset((IUnknown*)elem, "utf-8");
IHTMLElement_Release(elem);
}
=20
@@ -6640,6 +7375,7 @@
child_col =3D get_child_nodes((IUnknown*)elem);
ok(child_col !=3D NULL, "child_coll =3D=3D NULL\n");
if(child_col) {
+ IUnknown *enum_unk;
LONG length =3D 0;
=20
test_disp((IUnknown*)child_col, &DIID_DispDOMChildrenCollection, "[o=
bject]");
@@ -6690,6 +7426,13 @@
ok(hres =3D=3D E_INVALIDARG, "item failed: %08x, expected E_INVALIDA=
RG\n", hres);
=20
test_child_col_disp(child_col);
+
+ hres =3D IHTMLDOMChildrenCollection_get__newEnum(child_col, &enum_un=
k);
+ ok(hres =3D=3D S_OK, "get__newEnum failed: %08x\n", hres);
+
+ test_enum_children(enum_unk, length);
+
+ IUnknown_Release(enum_unk);
=20
IHTMLDOMChildrenCollection_Release(child_col);
}
@@ -6814,12 +7557,31 @@
ok(!strcmp_wa(V_BSTR(&v), "divid"), "V_BSTR(v) =3D %s\n", wine_dbgstr_w(=
V_BSTR(&v)));
VariantClear(&v);
=20
+ V_VT(&v) =3D VT_BSTR;
+ V_BSTR(&v) =3D a2bstr("divid2");
+ put_attr_node_value(attr, v);
+
+ get_attr_node_value(attr, &v, VT_BSTR);
+ ok(!strcmp_wa(V_BSTR(&v), "divid2"), "V_BSTR(v) =3D %s\n", wine_dbgstr_w=
(V_BSTR(&v)));
+ VariantClear(&v);
+
IHTMLDOMAttribute_Release(attr);
=20
attr =3D get_elem_attr_node((IUnknown*)elem, "emptyattr", TRUE);
get_attr_node_value(attr, &v, VT_BSTR);
ok(!V_BSTR(&v), "V_BSTR(v) =3D %s\n", wine_dbgstr_w(V_BSTR(&v)));
VariantClear(&v);
+
+ V_VT(&v) =3D VT_BSTR;
+ V_BSTR(&v) =3D a2bstr("newvalue");
+ put_attr_node_value(attr, v);
+ VariantClear(&v);
+
+ attr =3D get_elem_attr_node((IUnknown*)elem, "emptyattr", TRUE);
+ get_attr_node_value(attr, &v, VT_BSTR);
+ ok(!strcmp_wa(V_BSTR(&v), "newvalue"), "V_BSTR(v) =3D %s\n", wine_dbgstr=
_w(V_BSTR(&v)));
+ VariantClear(&v);
+
test_attr_specified(attr, VARIANT_TRUE);
IHTMLDOMAttribute_Release(attr);
=20
@@ -6830,6 +7592,14 @@
get_attr_node_value(attr, &v, VT_I4);
ok(V_I4(&v) =3D=3D 100, "V_I4(v) =3D %d\n", V_I4(&v));
test_attr_specified(attr, VARIANT_TRUE);
+
+ V_VT(&v) =3D VT_I4;
+ V_I4(&v) =3D 150;
+ put_attr_node_value(attr, v);
+
+ get_attr_node_value(attr, &v, VT_I4);
+ ok(V_I4(&v) =3D=3D 150, "V_I4(v) =3D %d\n", V_I4(&v));
+
IHTMLDOMAttribute_Release(attr);
=20
attr =3D get_elem_attr_node((IUnknown*)elem, "tabIndex", TRUE);
@@ -6925,10 +7695,13 @@
if(elem) {
test_link_disabled(elem, VARIANT_FALSE);
test_link_rel(elem, "stylesheet");
+ test_link_rev(elem, NULL);
test_link_type(elem, "text/css");
test_link_href(elem, "about:blank");
+ test_link_media(elem, "all");
link_put_disabled(elem, VARIANT_TRUE);
link_put_rel(elem, "prev");
+ link_put_rev(elem, "next");
link_put_type(elem, "text/plain");
link_put_href(elem, "about:prev");
IHTMLElement_Release(elem);
@@ -6974,7 +7747,7 @@
test_insert_adjacent_elems(doc, div);
=20
test_elem_set_innerhtml((IUnknown*)div,
- "