Jacek Caban : mshtml: Added IHTMLInputElement:: defaultValue property implementation.

Alexandre Julliard julliard at winehq.org
Wed Nov 28 14:14:06 CST 2012


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

Author: Jacek Caban <jacek at codeweavers.com>
Date:   Wed Nov 28 16:57:24 2012 +0100

mshtml: Added IHTMLInputElement::defaultValue property implementation.

---

 dlls/mshtml/htmlinput.c |   26 ++++++++++++++++++---
 dlls/mshtml/tests/dom.c |   56 +++++++++++++++++++++++++++++++++++++++++++++++
 2 files changed, 78 insertions(+), 4 deletions(-)

diff --git a/dlls/mshtml/htmlinput.c b/dlls/mshtml/htmlinput.c
index 4d25c41..fb0e80b 100644
--- a/dlls/mshtml/htmlinput.c
+++ b/dlls/mshtml/htmlinput.c
@@ -355,15 +355,33 @@ static HRESULT WINAPI HTMLInputElement_get_onselect(IHTMLInputElement *iface, VA
 static HRESULT WINAPI HTMLInputElement_put_defaultValue(IHTMLInputElement *iface, BSTR v)
 {
     HTMLInputElement *This = impl_from_IHTMLInputElement(iface);
-    FIXME("(%p)->(%s)\n", This, debugstr_w(v));
-    return E_NOTIMPL;
+    nsAString nsstr;
+    nsresult nsres;
+
+    TRACE("(%p)->(%s)\n", This, debugstr_w(v));
+
+    nsAString_InitDepend(&nsstr, v);
+    nsres = nsIDOMHTMLInputElement_SetDefaultValue(This->nsinput, &nsstr);
+    nsAString_Finish(&nsstr);
+    if(NS_FAILED(nsres)) {
+        ERR("SetValue failed: %08x\n", nsres);
+        return E_FAIL;
+    }
+
+    return S_OK;
 }
 
 static HRESULT WINAPI HTMLInputElement_get_defaultValue(IHTMLInputElement *iface, BSTR *p)
 {
     HTMLInputElement *This = impl_from_IHTMLInputElement(iface);
-    FIXME("(%p)->(%p)\n", This, p);
-    return E_NOTIMPL;
+    nsAString nsstr;
+    nsresult nsres;
+
+    TRACE("(%p)->(%p)\n", This, p);
+
+    nsAString_Init(&nsstr, NULL);
+    nsres = nsIDOMHTMLInputElement_GetDefaultValue(This->nsinput, &nsstr);
+    return return_nsstr(nsres, &nsstr, p);
 }
 
 static HRESULT WINAPI HTMLInputElement_put_readOnly(IHTMLInputElement *iface, VARIANT_BOOL v)
diff --git a/dlls/mshtml/tests/dom.c b/dlls/mshtml/tests/dom.c
index 6bd7837..d45a1fe 100644
--- a/dlls/mshtml/tests/dom.c
+++ b/dlls/mshtml/tests/dom.c
@@ -2946,6 +2946,49 @@ static void _test_input_put_value(unsigned line, IUnknown *unk, const char *val)
     _test_input_value(line, unk, val);
 }
 
+#define test_input_defaultValue(o,t) _test_input_defaultValue(__LINE__,o,t)
+static void _test_input_defaultValue(unsigned line, IUnknown *unk, const char *exval)
+{
+    IHTMLInputElement *input;
+    BSTR str;
+    HRESULT hres;
+
+    hres = IUnknown_QueryInterface(unk, &IID_IHTMLInputElement, (void**)&input);
+    ok_(__FILE__,line) (hres == S_OK, "Could not get IHTMLInputElement: %08x\n", hres);
+    if(FAILED(hres))
+        return;
+
+    hres = IHTMLInputElement_get_defaultValue(input, &str);
+    ok_(__FILE__,line) (hres == S_OK, "get_defaultValue failed: %08x\n", hres);
+    if(exval)
+        ok_(__FILE__,line) (!strcmp_wa(str, exval), "defaultValue=%s\n", wine_dbgstr_w(str));
+    else
+        ok_(__FILE__,line) (!str, "exval != NULL\n");
+    SysFreeString(str);
+    IHTMLInputElement_Release(input);
+}
+
+#define test_input_put_defaultValue(o,v) _test_input_put_defaultValue(__LINE__,o,v)
+static void _test_input_put_defaultValue(unsigned line, IUnknown *unk, const char *val)
+{
+    IHTMLInputElement *input;
+    BSTR str;
+    HRESULT hres;
+
+    hres = IUnknown_QueryInterface(unk, &IID_IHTMLInputElement, (void**)&input);
+    ok_(__FILE__,line) (hres == S_OK, "Could not get IHTMLInputElement: %08x\n", hres);
+    if(FAILED(hres))
+        return;
+
+    str = a2bstr(val);
+    hres = IHTMLInputElement_put_defaultValue(input, str);
+    ok_(__FILE__,line) (hres == S_OK, "get_defaultValue failed: %08x\n", hres);
+    SysFreeString(str);
+    IHTMLInputElement_Release(input);
+
+    _test_input_defaultValue(line, unk, val);
+}
+
 #define test_input_src(i,s) _test_input_src(__LINE__,i,s)
 static void _test_input_src(unsigned line, IHTMLInputElement *input, const char *exsrc)
 {
@@ -5882,7 +5925,9 @@ static void test_elems(IHTMLDocument2 *doc)
         test_node_put_value_str((IUnknown*)elem, "test");
         test_node_get_value_str((IUnknown*)elem, NULL);
         test_input_value((IUnknown*)elem, NULL);
+        test_input_defaultValue((IUnknown*)elem, NULL);
         test_input_put_value((IUnknown*)elem, "test");
+        test_input_defaultValue((IUnknown*)elem, NULL);
         test_elem_class((IUnknown*)elem, "testclass");
         test_elem_tabindex((IUnknown*)elem, 2);
         test_elem_set_tabindex((IUnknown*)elem, 3);
@@ -6307,6 +6352,17 @@ static void test_elems2(IHTMLDocument2 *doc)
     }
 
     test_elem_set_innerhtml((IUnknown*)div,
+            "<input value=\"val\" id =\"inputid\"  />");
+    elem = get_elem_by_id(doc, "inputid", TRUE);
+    if(elem) {
+        test_input_defaultValue((IUnknown*)elem, "val");
+        test_input_put_value((IUnknown*)elem, "test");
+        test_input_put_defaultValue((IUnknown*)elem, "new val");
+        test_input_value((IUnknown*)elem, "test");
+        IHTMLElement_Release(elem);
+    }
+
+    test_elem_set_innerhtml((IUnknown*)div,
             "<form id=\"form\"><input type=\"button\" /><div><input type=\"text\" /></div></textarea>");
     elem = get_elem_by_id(doc, "form", TRUE);
     if(elem) {




More information about the wine-cvs mailing list