Module: wine Branch: master Commit: eebc40f2b3935819584a20187af2e6f782270838 URL: http://source.winehq.org/git/wine.git/?a=commit;h=eebc40f2b3935819584a20187a...
Author: Jacek Caban jacek@codeweavers.com Date: Thu Nov 14 16:17:02 2013 +0100
mshtml: Added IHTMLSelectElement::multiple property implementation.
---
dlls/mshtml/htmlselect.c | 21 +++++++++++++++++---- dlls/mshtml/tests/dom.c | 25 +++++++++++++++++++++++++ 2 files changed, 42 insertions(+), 4 deletions(-)
diff --git a/dlls/mshtml/htmlselect.c b/dlls/mshtml/htmlselect.c index 0f1ad8c..aef0bf0 100644 --- a/dlls/mshtml/htmlselect.c +++ b/dlls/mshtml/htmlselect.c @@ -156,15 +156,28 @@ static HRESULT WINAPI HTMLSelectElement_get_size(IHTMLSelectElement *iface, LONG static HRESULT WINAPI HTMLSelectElement_put_multiple(IHTMLSelectElement *iface, VARIANT_BOOL v) { HTMLSelectElement *This = impl_from_IHTMLSelectElement(iface); - FIXME("(%p)->(%x)\n", This, v); - return E_NOTIMPL; + nsresult nsres; + + TRACE("(%p)->(%x)\n", This, v); + + nsres = nsIDOMHTMLSelectElement_SetMultiple(This->nsselect, !!v); + assert(nsres == NS_OK); + return S_OK; }
static HRESULT WINAPI HTMLSelectElement_get_multiple(IHTMLSelectElement *iface, VARIANT_BOOL *p) { HTMLSelectElement *This = impl_from_IHTMLSelectElement(iface); - FIXME("(%p)->(%p)\n", This, p); - return E_NOTIMPL; + cpp_bool val; + nsresult nsres; + + TRACE("(%p)->(%p)\n", This, p); + + nsres = nsIDOMHTMLSelectElement_GetMultiple(This->nsselect, &val); + assert(nsres == NS_OK); + + *p = val ? VARIANT_TRUE : VARIANT_FALSE; + return S_OK; }
static HRESULT WINAPI HTMLSelectElement_put_name(IHTMLSelectElement *iface, BSTR v) diff --git a/dlls/mshtml/tests/dom.c b/dlls/mshtml/tests/dom.c index e43c754..cf72873 100644 --- a/dlls/mshtml/tests/dom.c +++ b/dlls/mshtml/tests/dom.c @@ -1943,6 +1943,28 @@ static void _test_select_type(unsigned line, IHTMLSelectElement *select, const c SysFreeString(type); }
+#define test_select_multiple(s,t) _test_select_multiple(__LINE__,s,t) +static void _test_select_multiple(unsigned line, IHTMLSelectElement *select, VARIANT_BOOL exmultiple) +{ + VARIANT_BOOL b = 100; + HRESULT hres; + + hres = IHTMLSelectElement_get_multiple(select, &b); + ok_(__FILE__,line) (hres == S_OK, "get_multiple failed: %08x\n", hres); + ok_(__FILE__,line) (b == exmultiple, "multiple=%x, expected %x\n", b, exmultiple); +} + +#define test_select_set_multiple(s,v) _test_select_set_multiple(__LINE__,s,v) +static void _test_select_set_multiple(unsigned line, IHTMLSelectElement *select, VARIANT_BOOL val) +{ + HRESULT hres; + + hres = IHTMLSelectElement_put_multiple(select, val); + ok_(__FILE__,line) (hres == S_OK, "put_multiple failed: %08x\n", hres); + + _test_select_multiple(line, select, val); +} + #define test_range_text(r,t) _test_range_text(__LINE__,r,t) static void _test_range_text(unsigned line, IHTMLTxtRange *range, const char *extext) { @@ -4212,6 +4234,9 @@ static void test_select_elem(IHTMLSelectElement *select) ok(iface_cmp((IUnknown*)disp, (IUnknown*)disp2), "disp != disp2\n"); IDispatch_Release(disp2); IDispatch_Release(disp); + + test_select_multiple(select, VARIANT_FALSE); + test_select_set_multiple(select, VARIANT_TRUE); }
static void test_form_item(IHTMLElement *elem)