Module: wine Branch: master Commit: 78cf4e30b5709cae05794c47a7947f7e051b3c95 URL: http://source.winehq.org/git/wine.git/?a=commit;h=78cf4e30b5709cae05794c47a7...
Author: Jacek Caban jacek@codeweavers.com Date: Thu Apr 29 18:28:38 2010 +0200
mshtml: Added IHTMLSelectElement::put_length implementation.
---
dlls/mshtml/htmlselect.c | 11 +++++++++-- dlls/mshtml/tests/dom.c | 39 +++++++++++++++++++++++++++++++++++---- 2 files changed, 44 insertions(+), 6 deletions(-)
diff --git a/dlls/mshtml/htmlselect.c b/dlls/mshtml/htmlselect.c index 6698606..0fc21c4 100644 --- a/dlls/mshtml/htmlselect.c +++ b/dlls/mshtml/htmlselect.c @@ -364,8 +364,15 @@ static HRESULT WINAPI HTMLSelectElement_remove(IHTMLSelectElement *iface, LONG i static HRESULT WINAPI HTMLSelectElement_put_length(IHTMLSelectElement *iface, LONG v) { HTMLSelectElement *This = HTMLSELECT_THIS(iface); - FIXME("(%p)->(%d)\n", This, v); - return E_NOTIMPL; + nsresult nsres; + + TRACE("(%p)->(%d)\n", This, v); + + nsres = nsIDOMHTMLSelectElement_SetLength(This->nsselect, v); + if(NS_FAILED(nsres)) + ERR("SetLength failed: %08x\n", nsres); + + return S_OK; }
static HRESULT WINAPI HTMLSelectElement_get_length(IHTMLSelectElement *iface, LONG *p) diff --git a/dlls/mshtml/tests/dom.c b/dlls/mshtml/tests/dom.c index c6f5479..4bcaf2a 100644 --- a/dlls/mshtml/tests/dom.c +++ b/dlls/mshtml/tests/dom.c @@ -673,6 +673,17 @@ static IHTMLAnchorElement *_get_anchor_iface(unsigned line, IUnknown *unk) return anchor; }
+#define get_select_iface(u) _get_select_iface(__LINE__,u) +static IHTMLSelectElement *_get_select_iface(unsigned line, IUnknown *unk) +{ + IHTMLSelectElement *select; + HRESULT hres; + + hres = IUnknown_QueryInterface(unk, &IID_IHTMLSelectElement, (void**)&select); + ok_(__FILE__,line) (hres == S_OK, "Could not get IHTMLSelectElement: %08x\n", hres); + return select; +} + #define get_text_iface(u) _get_text_iface(__LINE__,u) static IHTMLDOMTextNode *_get_text_iface(unsigned line, IUnknown *unk) { @@ -1275,6 +1286,18 @@ static void _test_select_length(unsigned line, IHTMLSelectElement *select, LONG ok_(__FILE__,line) (len == length, "len=%d, expected %d\n", len, length); }
+#define test_select_put_length(s,l) _test_select_put_length(__LINE__,s,l) +static void _test_select_put_length(unsigned line, IUnknown *unk, LONG length) +{ + IHTMLSelectElement *select = _get_select_iface(line, unk); + HRESULT hres; + + hres = IHTMLSelectElement_put_length(select, length); + ok_(__FILE__,line) (hres == S_OK, "put_length failed: %08x\n", hres); + _test_select_length(line, select, length); + IHTMLSelectElement_Release(select); +} + #define test_select_selidx(s,i) _test_select_selidx(__LINE__,s,i) static void _test_select_selidx(unsigned line, IHTMLSelectElement *select, LONG index) { @@ -5553,12 +5576,9 @@ static void test_elems(IHTMLDocument2 *doc)
elem = get_elem_by_id(doc, "s", TRUE); if(elem) { - IHTMLSelectElement *select; + IHTMLSelectElement *select = get_select_iface((IUnknown*)elem); IHTMLDocument2 *doc_node, *elem_doc;
- hres = IHTMLElement_QueryInterface(elem, &IID_IHTMLSelectElement, (void**)&select); - ok(hres == S_OK, "Could not get IHTMLSelectElement interface: %08x\n", hres); - test_select_elem(select);
test_elem_title((IUnknown*)select, NULL); @@ -5854,6 +5874,17 @@ static void test_elems(IHTMLDocument2 *doc)
IHTMLDocument3_Release(doc3);
+ elem = get_elem_by_id(doc, "s", TRUE); + if(elem) { + static const elem_type_t select_types[] = { ET_OPTION, ET_OPTION, ET_OPTION }; + + test_select_put_length((IUnknown*)elem, 3); + test_elem_all((IUnknown*)elem, select_types, sizeof(select_types)/sizeof(*select_types)); + test_select_put_length((IUnknown*)elem, 1); + test_elem_all((IUnknown*)elem, select_types, 1); + IHTMLElement_Release(elem); + } + window = get_doc_window(doc); test_window_name(window, NULL); set_window_name(window, "test name");