From 1d4d1068cd9f5f5164df47d0a85ea85ab2ca3369 Mon Sep 17 00:00:00 2001 From: Piotr Caban Date: Tue, 23 Aug 2011 11:33:37 +0200 Subject: [PATCH] mshtml/tests: Added dynamic properties accessing tests. --- dlls/mshtml/tests/dom.c | 53 ++++++++++++++++++++++++++++++++++++++++- 1 file changed, 52 insertions(+), 1 deletion(-) diff --git a/dlls/mshtml/tests/dom.c b/dlls/mshtml/tests/dom.c index b0e3f84fece..7d0b0489275 100644 --- a/dlls/mshtml/tests/dom.c +++ b/dlls/mshtml/tests/dom.c @@ -55,6 +55,7 @@ static const char elem_test_str[] = "" "" "
" + "
" ""; static const char elem_test2_str[] = "test" @@ -2338,6 +2339,49 @@ static void _test_img_name(unsigned line, IUnknown *unk, const char *pValue) SysFreeString(sName); } +static void test_dynamic_properties(IHTMLElement *elem) +{ + static const WCHAR attr1W[] = {'a','t','t','r','1',0}; + IDispatchEx *dispex; + BSTR name, attr1 = SysAllocString(attr1W); + VARIANT_BOOL succ; + VARIANT val; + int checked_no = 0; + DISPID id = DISPID_STARTENUM; + HRESULT hres; + + hres = IHTMLElement_QueryInterface(elem, &IID_IDispatchEx, (void**)&dispex); + ok(hres == S_OK, "QueryInterface failed: %08x\n", hres); + + hres = IHTMLElement_removeAttribute(elem, attr1, 0, &succ); + ok(hres == S_OK, "removeAttribute failed: %08x\n", hres); + ok(succ, "removeAttribute set succ to FALSE\n"); + + while(1) { + hres = IDispatchEx_GetNextDispID(dispex, fdexEnumAll, id, &id); + ok(hres==S_OK || hres==S_FALSE, "GetNextDispID failed: %08x\n", hres); + if(hres != S_OK) + break; + + hres = IDispatchEx_GetMemberName(dispex, id, &name); + ok(hres == S_OK, "GetMemberName failed: %08x\n", hres); + + if(!strcmp_wa(name, "attr1")) + ok(0, "attr1 should be removed\n"); + else if(!strcmp_wa(name, "attr2") || !strcmp_wa(name, "attr3")) + checked_no++; + SysFreeString(name); + } + ok(checked_no == 2, "checked_no=%d, expected 2\n", checked_no); + IDispatchEx_Release(dispex); + + V_VT(&val) = VT_BSTR; + V_BSTR(&val) = attr1; + hres = IHTMLElement_setAttribute(elem, attr1, val, 0); + ok(hres == S_OK, "setAttribute failed: %08x\n", hres); + SysFreeString(attr1); +} + #define test_input_type(i,t) _test_input_type(__LINE__,i,t) static void _test_input_type(unsigned line, IHTMLInputElement *input, const char *extype) { @@ -4664,7 +4708,8 @@ static void test_elems(IHTMLDocument2 *doc) ET_EMBED, ET_IMG, ET_IFRAME, - ET_FORM + ET_FORM, + ET_DIV }; static const elem_type_t item_types[] = { @@ -4911,6 +4956,12 @@ static void test_elems(IHTMLDocument2 *doc) IHTMLElement_Release(elem); } + elem = get_elem_by_id(doc, "attr", TRUE); + if(elem) { + test_dynamic_properties(elem); + IHTMLElement_Release(elem); + } + elem = get_elem_by_id(doc, "styleid", TRUE); if(elem) { test_style_media((IUnknown*)elem, NULL);