Zhenbo Li : mshtml: Add IHTMLSelectElement::size property implementation.

Alexandre Julliard julliard at wine.codeweavers.com
Fri Aug 7 10:57:43 CDT 2015


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

Author: Zhenbo Li <litimetal at gmail.com>
Date:   Fri Aug  7 18:12:27 2015 +0800

mshtml: Add IHTMLSelectElement::size property implementation.

---

 dlls/mshtml/htmlselect.c | 30 ++++++++++++++++++++++++++----
 dlls/mshtml/tests/dom.c  | 33 +++++++++++++++++++++++++++++++++
 2 files changed, 59 insertions(+), 4 deletions(-)

diff --git a/dlls/mshtml/htmlselect.c b/dlls/mshtml/htmlselect.c
index ebac427..152d855 100644
--- a/dlls/mshtml/htmlselect.c
+++ b/dlls/mshtml/htmlselect.c
@@ -142,15 +142,37 @@ static HRESULT WINAPI HTMLSelectElement_Invoke(IHTMLSelectElement *iface, DISPID
 static HRESULT WINAPI HTMLSelectElement_put_size(IHTMLSelectElement *iface, LONG v)
 {
     HTMLSelectElement *This = impl_from_IHTMLSelectElement(iface);
-    FIXME("(%p)->(%d)\n", This, v);
-    return E_NOTIMPL;
+    nsresult nsres;
+
+    TRACE("(%p)->(%d)\n", This, v);
+    if(v < 0)
+        return CTL_E_INVALIDPROPERTYVALUE;
+
+    nsres = nsIDOMHTMLSelectElement_SetSize(This->nsselect, v);
+    if(NS_FAILED(nsres)) {
+        ERR("SetSize failed: %08x\n", nsres);
+        return E_FAIL;
+    }
+    return S_OK;
 }
 
 static HRESULT WINAPI HTMLSelectElement_get_size(IHTMLSelectElement *iface, LONG *p)
 {
     HTMLSelectElement *This = impl_from_IHTMLSelectElement(iface);
-    FIXME("(%p)->(%p)\n", This, p);
-    return E_NOTIMPL;
+    DWORD val;
+    nsresult nsres;
+
+    TRACE("(%p)->(%p)\n", This, p);
+    if(!p)
+        return E_INVALIDARG;
+
+    nsres = nsIDOMHTMLSelectElement_GetSize(This->nsselect, &val);
+    if(NS_FAILED(nsres)) {
+        ERR("GetSize failed: %08x\n", nsres);
+        return E_FAIL;
+    }
+    *p = val;
+    return S_OK;
 }
 
 static HRESULT WINAPI HTMLSelectElement_put_multiple(IHTMLSelectElement *iface, VARIANT_BOOL v)
diff --git a/dlls/mshtml/tests/dom.c b/dlls/mshtml/tests/dom.c
index f5dee76..02eeb78 100644
--- a/dlls/mshtml/tests/dom.c
+++ b/dlls/mshtml/tests/dom.c
@@ -2193,6 +2193,30 @@ static void _test_select_set_multiple(unsigned line, IHTMLSelectElement *select,
     _test_select_multiple(line, select, val);
 }
 
+#define test_select_size(s,v) _test_select_size(__LINE__,s,v)
+static void _test_select_size(unsigned line, IHTMLSelectElement *select, LONG exval)
+{
+    HRESULT hres;
+    LONG val;
+
+    hres = IHTMLSelectElement_get_size(select, NULL);
+    ok_(__FILE__,line) (hres == E_INVALIDARG, "got %08x, expected E_INVALIDARG\n", hres);
+
+    val = 0xdeadbeef;
+    hres = IHTMLSelectElement_get_size(select, &val);
+    ok_(__FILE__,line) (hres == S_OK, "get_size failed: %08x\n", hres);
+    ok_(__FILE__,line) (val == exval, "size = %d, expected %d\n", val, exval);
+}
+
+#define test_select_set_size(s,v,e) _test_select_set_size(__LINE__,s,v,e)
+static void _test_select_set_size(unsigned line, IHTMLSelectElement *select, LONG val, HRESULT exhres)
+{
+    HRESULT hres;
+
+    hres = IHTMLSelectElement_put_size(select, val);
+    ok_(__FILE__,line) (hres == exhres, "put_size(%d) got %08x, expect %08x\n", val, hres, exhres);
+}
+
 #define test_range_text(r,t) _test_range_text(__LINE__,r,t)
 static void _test_range_text(unsigned line, IHTMLTxtRange *range, const char *extext)
 {
@@ -4882,6 +4906,15 @@ static void test_select_elem(IHTMLSelectElement *select)
     test_select_set_value(select, "val1");
     test_select_value(select, "val1");
 
+    test_select_size(select, 0);
+    test_select_set_size(select, 1, S_OK);
+    test_select_size(select, 1);
+
+    test_select_set_size(select, -1, CTL_E_INVALIDPROPERTYVALUE);
+    test_select_size(select, 1);
+    test_select_set_size(select, 3, S_OK);
+    test_select_size(select, 3);
+
     test_select_get_disabled(select, VARIANT_FALSE);
     test_select_set_disabled(select, VARIANT_TRUE);
     test_select_set_disabled(select, VARIANT_FALSE);




More information about the wine-cvs mailing list