Jacek Caban : mshtml: Added IHTMLElement::put_id implementation.

Alexandre Julliard julliard at winehq.org
Wed Jun 18 12:56:08 CDT 2008


Module: wine
Branch: master
Commit: 148a7d50c552aaa4b20bc05f3354c1955672c103
URL:    http://source.winehq.org/git/wine.git/?a=commit;h=148a7d50c552aaa4b20bc05f3354c1955672c103

Author: Jacek Caban <jacek at 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);




More information about the wine-cvs mailing list