Module: wine Branch: master Commit: 148a7d50c552aaa4b20bc05f3354c1955672c103 URL: http://source.winehq.org/git/wine.git/?a=commit;h=148a7d50c552aaa4b20bc05f33...
Author: Jacek Caban jacek@codeweavers.com Date: Wed Jun 18 00:09:25 2008 +0200
mshtml: Added IHTMLElement::put_id implementation.
---
dlls/mshtml/htmlelem.c | 19 +++++++++++++++++-- dlls/mshtml/tests/dom.c | 40 ++++++++++++++++++++++++++++++---------- 2 files changed, 47 insertions(+), 12 deletions(-)
diff --git a/dlls/mshtml/htmlelem.c b/dlls/mshtml/htmlelem.c index 440c523..67a9611 100644 --- a/dlls/mshtml/htmlelem.c +++ b/dlls/mshtml/htmlelem.c @@ -290,8 +290,23 @@ static HRESULT WINAPI HTMLElement_get_className(IHTMLElement *iface, BSTR *p) static HRESULT WINAPI HTMLElement_put_id(IHTMLElement *iface, BSTR v) { HTMLElement *This = HTMLELEM_THIS(iface); - FIXME("(%p)->(%s)\n", This, debugstr_w(v)); - return E_NOTIMPL; + nsAString id_str; + nsresult nsres; + + TRACE("(%p)->(%s)\n", This, debugstr_w(v)); + + if(!This->nselem) { + FIXME("nselem == NULL\n"); + return S_OK; + } + + nsAString_Init(&id_str, v); + nsres = nsIDOMHTMLElement_SetId(This->nselem, &id_str); + nsAString_Finish(&id_str); + if(NS_FAILED(nsres)) + ERR("SetId failed: %08x\n", nsres); + + return S_OK; }
static HRESULT WINAPI HTMLElement_get_id(IHTMLElement *iface, BSTR *p) diff --git a/dlls/mshtml/tests/dom.c b/dlls/mshtml/tests/dom.c index 638a673..27cb3aa 100644 --- a/dlls/mshtml/tests/dom.c +++ b/dlls/mshtml/tests/dom.c @@ -365,6 +365,17 @@ static void _test_disp(unsigned line, IUnknown *unk, const IID *diid) IDispatchEx_Release(dispex); }
+#define get_elem_iface(u) _get_elem_iface(__LINE__,u) +static IHTMLElement *_get_elem_iface(unsigned line, IUnknown *unk) +{ + IHTMLElement *elem; + HRESULT hres; + + hres = IUnknown_QueryInterface(unk, &IID_IHTMLElement, (void**)&elem); + ok_(__FILE__,line) (hres == S_OK, "Coule not get IHTMLElement: %08x\n", hres); + return elem; +} + #define test_node_name(u,n) _test_node_name(__LINE__,u,n) static void _test_node_name(unsigned line, IUnknown *unk, const char *exname) { @@ -386,13 +397,10 @@ static void _test_node_name(unsigned line, IUnknown *unk, const char *exname) #define test_elem_tag(u,n) _test_elem_tag(__LINE__,u,n) static void _test_elem_tag(unsigned line, IUnknown *unk, const char *extag) { - IHTMLElement *elem; + IHTMLElement *elem = _get_elem_iface(line, unk); BSTR tag; HRESULT hres;
- hres = IUnknown_QueryInterface(unk, &IID_IHTMLElement, (void**)&elem); - ok_(__FILE__, line) (hres == S_OK, "QueryInterface(IID_IHTMLElement) failed: %08x\n", hres); - hres = IHTMLElement_get_tagName(elem, &tag); IHTMLElement_Release(elem); ok_(__FILE__, line) (hres == S_OK, "get_tagName failed: %08x\n", hres); @@ -869,13 +877,10 @@ static IHTMLDOMNode *_get_child_item(unsigned line, IHTMLDOMChildrenCollection * #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; + IHTMLElement *elem = _get_elem_iface(line, unk); BSTR id = (void*)0xdeadbeef; HRESULT hres;
- hres = IUnknown_QueryInterface(unk, &IID_IHTMLElement, (void**)&elem); - ok_(__FILE__,line) (hres == S_OK, "Coule not get IHTMLElement: %08x\n", hres); - hres = IHTMLElement_get_id(elem, &id); IHTMLElement_Release(elem); ok_(__FILE__,line) (hres == S_OK, "get_id failed: %08x\n", hres); @@ -888,6 +893,21 @@ static void _test_elem_id(unsigned line, IUnknown *unk, const char *exid) 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 = _get_elem_iface(line, unk); + BSTR tmp = a2bstr(new_id); + HRESULT hres; + + hres = IHTMLElement_put_id(elem, tmp); + IHTMLElement_Release(elem); + SysFreeString(tmp); + ok_(__FILE__,line) (hres == S_OK, "put_id failed: %08x\n", hres); + + _test_elem_id(line, unk, new_id); +} + static void test_elem_col_item(IHTMLElementCollection *col, LPCWSTR n, const elem_type_t *elem_types, long len) { @@ -976,9 +996,8 @@ static IHTMLElement *get_elem_by_id(IHTMLDocument2 *doc, LPCWSTR id, BOOL expect if(!disp) return NULL;
- hres = IDispatch_QueryInterface(disp, &IID_IHTMLElement, (void**)&elem); + elem = get_elem_iface((IUnknown*)disp); IDispatch_Release(disp); - ok(hres == S_OK, "Could not get IHTMLElement interface: %08x\n", hres);
return elem; } @@ -1651,6 +1670,7 @@ static void test_elems(IHTMLDocument2 *doc) ok(hres == S_OK, "Could not get IHTMLInputElement: %08x\n", hres);
test_elem_id((IUnknown*)elem, "in"); + test_elem_put_id((IUnknown*)elem, "newin"); test_input_get_disabled(input, VARIANT_FALSE);
IHTMLInputElement_Release(input);