Module: wine Branch: master Commit: 061fee45c0606dceadd3ff3af81193072b9e21a2 URL: http://source.winehq.org/git/wine.git/?a=commit;h=061fee45c0606dceadd3ff3af8...
Author: Jacek Caban jacek@codeweavers.com Date: Tue May 11 17:56:58 2010 +0200
mshtml: Added IHTMLTextAreaElement::put_value implementation.
---
dlls/mshtml/htmltextarea.c | 24 ++++++++++++---- dlls/mshtml/tests/dom.c | 63 +++++++++++++++++++++++++++++++++++++++---- 2 files changed, 75 insertions(+), 12 deletions(-)
diff --git a/dlls/mshtml/htmltextarea.c b/dlls/mshtml/htmltextarea.c index 9ded8ac..afa9c8f 100644 --- a/dlls/mshtml/htmltextarea.c +++ b/dlls/mshtml/htmltextarea.c @@ -105,8 +105,20 @@ static HRESULT WINAPI HTMLTextAreaElement_get_type(IHTMLTextAreaElement *iface, static HRESULT WINAPI HTMLTextAreaElement_put_value(IHTMLTextAreaElement *iface, BSTR v) { HTMLTextAreaElement *This = HTMLTXTAREA_THIS(iface); - FIXME("(%p)->(%s)\n", This, debugstr_w(v)); - return E_NOTIMPL; + nsAString value_str; + nsresult nsres; + + TRACE("(%p)->(%s)\n", This, debugstr_w(v)); + + nsAString_InitDepend(&value_str, v); + nsres = nsIDOMHTMLTextAreaElement_SetValue(This->nstextarea, &value_str); + nsAString_Finish(&value_str); + if(NS_FAILED(nsres)) { + ERR("SetValue failed: %08x\n", nsres); + return E_FAIL; + } + + return S_OK; }
static HRESULT WINAPI HTMLTextAreaElement_get_value(IHTMLTextAreaElement *iface, BSTR *p) @@ -115,6 +127,7 @@ static HRESULT WINAPI HTMLTextAreaElement_get_value(IHTMLTextAreaElement *iface, nsAString value_str; const PRUnichar *value; nsresult nsres; + HRESULT hres = S_OK;
TRACE("(%p)->(%p)\n", This, p);
@@ -123,15 +136,14 @@ static HRESULT WINAPI HTMLTextAreaElement_get_value(IHTMLTextAreaElement *iface, nsres = nsIDOMHTMLTextAreaElement_GetValue(This->nstextarea, &value_str); if(NS_SUCCEEDED(nsres)) { nsAString_GetData(&value_str, &value); - *p = SysAllocString(value); + *p = *value ? SysAllocString(value) : NULL; }else { ERR("GetValue failed: %08x\n", nsres); + hres = E_FAIL; }
nsAString_Finish(&value_str); - - TRACE("%s\n", debugstr_w(*p)); - return S_OK; + return hres; }
static HRESULT WINAPI HTMLTextAreaElement_put_name(IHTMLTextAreaElement *iface, BSTR v) diff --git a/dlls/mshtml/tests/dom.c b/dlls/mshtml/tests/dom.c index ad5fb26..a66b13c 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_textarea_iface(u) _get_textarea_iface(__LINE__,u) +static IHTMLTextAreaElement *_get_textarea_iface(unsigned line, IUnknown *unk) +{ + IHTMLTextAreaElement *textarea; + HRESULT hres; + + hres = IUnknown_QueryInterface(unk, &IID_IHTMLTextAreaElement, (void**)&textarea); + ok_(__FILE__,line) (hres == S_OK, "Could not get IHTMLTextAreaElement: %08x\n", hres); + return textarea; +} + #define get_select_iface(u) _get_select_iface(__LINE__,u) static IHTMLSelectElement *_get_select_iface(unsigned line, IUnknown *unk) { @@ -1156,6 +1167,38 @@ static void _test_option_put_selected(unsigned line, IHTMLOptionElement *option, _test_option_selected(line, option, b); }
+#define test_textarea_value(t,v) _test_textarea_value(__LINE__,t,v) +static void _test_textarea_value(unsigned line, IUnknown *unk, const char *exval) +{ + IHTMLTextAreaElement *textarea = _get_textarea_iface(line, unk); + BSTR value = (void*)0xdeadbeef; + HRESULT hres; + + hres = IHTMLTextAreaElement_get_value(textarea, &value); + IHTMLTextAreaElement_Release(textarea); + ok_(__FILE__,line)(hres == S_OK, "get_value failed: %08x\n", hres); + if(exval) + ok_(__FILE__,line)(!strcmp_wa(value, exval), "value = %s, expected %s\n", wine_dbgstr_w(value), exval); + else + ok_(__FILE__,line)(!value, "value = %p\n", value); + SysFreeString(value); +} + +#define test_textarea_put_value(t,v) _test_textarea_put_value(__LINE__,t,v) +static void _test_textarea_put_value(unsigned line, IUnknown *unk, const char *value) +{ + IHTMLTextAreaElement *textarea = _get_textarea_iface(line, unk); + BSTR tmp = a2bstr(value); + HRESULT hres; + + hres = IHTMLTextAreaElement_put_value(textarea, tmp); + IHTMLTextAreaElement_Release(textarea); + ok_(__FILE__,line)(hres == S_OK, "put_value failed: %08x\n", hres); + SysFreeString(tmp); + + _test_textarea_value(line, unk, value); +} + #define test_comment_text(c,t) _test_comment_text(__LINE__,c,t) static void _test_comment_text(unsigned line, IUnknown *unk, const char *extext) { @@ -6004,29 +6047,37 @@ static void test_elems(IHTMLDocument2 *doc)
static void test_elems2(IHTMLDocument2 *doc) { - IHTMLElement *elem, *elem2; + IHTMLElement *elem, *elem2, *div;
static const elem_type_t outer_types[] = { ET_BR, ET_A };
- elem = get_doc_elem_by_id(doc, "divid"); + div = get_doc_elem_by_id(doc, "divid");
- test_elem_set_innerhtml((IUnknown*)elem, "<div id="innerid"></div>"); + test_elem_set_innerhtml((IUnknown*)div, "<div id="innerid"></div>"); elem2 = get_doc_elem_by_id(doc, "innerid"); ok(elem2 != NULL, "elem2 == NULL\n"); test_elem_set_outerhtml((IUnknown*)elem2, "<br><a href="about:blank" id="aid">a</a>"); - test_elem_all((IUnknown*)elem, outer_types, sizeof(outer_types)/sizeof(*outer_types)); + test_elem_all((IUnknown*)div, outer_types, sizeof(outer_types)/sizeof(*outer_types)); IHTMLElement_Release(elem2);
elem2 = get_doc_elem_by_id(doc, "aid"); ok(elem2 != NULL, "elem2 == NULL\n"); test_elem_set_outerhtml((IUnknown*)elem2, ""); - test_elem_all((IUnknown*)elem, outer_types, 1); + test_elem_all((IUnknown*)div, outer_types, 1); IHTMLElement_Release(elem2);
- IHTMLElement_Release(elem); + test_elem_set_innerhtml((IUnknown*)div, "<textarea id="ta"></textarea>"); + elem = get_elem_by_id(doc, "ta", TRUE); + if(elem) { + test_textarea_value((IUnknown*)elem, NULL); + test_textarea_put_value((IUnknown*)elem, "test"); + IHTMLElement_Release(elem); + } + + IHTMLElement_Release(div); }
static void test_create_elems(IHTMLDocument2 *doc)