>From 3f91c3b0eca3c4486a5b09c0d008c5f06e461fd7 Mon Sep 17 00:00:00 2001 From: Alistair Leslie-Hughes Date: Fri, 18 Feb 2011 14:03:41 +1100 Subject: [PATCH] Implement IHTMLAnchorElement get/put target To: wine-patches --- dlls/mshtml/htmlanchor.c | 36 ++++++++++++++++++++++++++++++++---- dlls/mshtml/tests/dom.c | 42 ++++++++++++++++++++++++++++++++++++++++++ 2 files changed, 74 insertions(+), 4 deletions(-) diff --git a/dlls/mshtml/htmlanchor.c b/dlls/mshtml/htmlanchor.c index ae3dd18..96d27fa 100644 --- a/dlls/mshtml/htmlanchor.c +++ b/dlls/mshtml/htmlanchor.c @@ -144,15 +144,43 @@ static HRESULT WINAPI HTMLAnchorElement_get_href(IHTMLAnchorElement *iface, BSTR static HRESULT WINAPI HTMLAnchorElement_put_target(IHTMLAnchorElement *iface, BSTR v) { HTMLAnchorElement *This = impl_from_IHTMLAnchorElement(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 = nsIDOMHTMLAnchorElement_SetTarget(This->nsanchor, &nsstr); + nsAString_Finish(&nsstr); + if(NS_FAILED(nsres)) + return E_FAIL; + + return S_OK; } static HRESULT WINAPI HTMLAnchorElement_get_target(IHTMLAnchorElement *iface, BSTR *p) { HTMLAnchorElement *This = impl_from_IHTMLAnchorElement(iface); - FIXME("(%p)->(%p)\n", This, p); - return E_NOTIMPL; + nsAString target_str; + nsresult nsres; + HRESULT hres = S_OK; + + TRACE("(%p)->(%p)\n", This, p); + + nsAString_Init(&target_str, NULL); + nsres = nsIDOMHTMLAnchorElement_GetTarget(This->nsanchor, &target_str); + if(NS_SUCCEEDED(nsres)) { + const PRUnichar *target; + + nsAString_GetData(&target_str, &target); + *p = *target ? SysAllocString(target) : NULL; + }else { + ERR("GetHref failed: %08x\n", nsres); + hres = E_FAIL; + } + + nsAString_Finish(&target_str); + return hres; } static HRESULT WINAPI HTMLAnchorElement_put_rel(IHTMLAnchorElement *iface, BSTR v) diff --git a/dlls/mshtml/tests/dom.c b/dlls/mshtml/tests/dom.c index 06743d2..bc71bdb 100644 --- a/dlls/mshtml/tests/dom.c +++ b/dlls/mshtml/tests/dom.c @@ -1183,6 +1183,36 @@ static void _test_anchor_put_href(unsigned line, IUnknown *unk, const char *exhr _test_disp_value(line, unk, exhref); } +#define test_anchor_get_target(a,h) _test_anchor_get_target(__LINE__,a,h) +static void _test_anchor_get_target(unsigned line, IUnknown *unk, const char *target) +{ + IHTMLAnchorElement *anchor = _get_anchor_iface(line, unk); + BSTR str; + HRESULT hres; + + hres = IHTMLAnchorElement_get_target(anchor, &str); + ok_(__FILE__,line)(hres == S_OK, "get_target failed: %08x\n", hres); + if(target) + ok_(__FILE__,line)(!strcmp_wa(str, target), "target = %s, expected %s\n", wine_dbgstr_w(str), target); + else + ok_(__FILE__,line)(str == NULL, "target = %s, expected NULL\n", wine_dbgstr_w(str)); + SysFreeString(str); +} + +#define test_anchor_put_target(a,h) _test_anchor_put_target(__LINE__,a,h) +static void _test_anchor_put_target(unsigned line, IUnknown *unk, const char *target) +{ + IHTMLAnchorElement *anchor = _get_anchor_iface(line, unk); + BSTR str; + HRESULT hres; + + str = target ? a2bstr(target) : NULL; + hres = IHTMLAnchorElement_put_target(anchor, str); + ok_(__FILE__,line)(hres == S_OK, "put_target failed: %08x\n", hres); + SysFreeString(str); +} + + #define test_option_text(o,t) _test_option_text(__LINE__,o,t) static void _test_option_text(unsigned line, IHTMLOptionElement *option, const char *text) { @@ -6504,6 +6534,18 @@ static void test_elems(IHTMLDocument2 *doc) /* Restore the href */ test_anchor_put_href((IUnknown*)elem, "http://test/"); test_anchor_href((IUnknown*)elem, "http://test/"); + + /* target */ + test_anchor_get_target((IUnknown*)elem, NULL); + + /* Change the target */ + test_anchor_put_target((IUnknown*)elem, "wine"); + test_anchor_get_target((IUnknown*)elem, "wine"); + + /* Restore the target */ + test_anchor_put_target((IUnknown*)elem, NULL); + test_anchor_get_target((IUnknown*)elem, NULL); + IHTMLElement_Release(elem); } -- 1.7.1