mshtml: Added IHTMLElement2::get_tabIndex implementation.
authorJacek Caban <jacek@codeweavers.com>
Tue, 24 Jun 2008 01:02:03 +0000 (20:02 -0500)
committerAlexandre Julliard <julliard@winehq.org>
Tue, 24 Jun 2008 09:53:47 +0000 (11:53 +0200)
dlls/mshtml/htmlelem2.c
dlls/mshtml/tests/dom.c

index fa4457acd0381dd35c3916c151a0b7b58c0b69d5..572841c874fa80eb4224c30cbe67fdf36f8a54e8 100644 (file)
@@ -390,8 +390,27 @@ static HRESULT WINAPI HTMLElement2_put_tabIndex(IHTMLElement2 *iface, short v)
 static HRESULT WINAPI HTMLElement2_get_tabIndex(IHTMLElement2 *iface, short *p)
 {
     HTMLElement *This = HTMLELEM2_THIS(iface);
-    FIXME("(%p)->(%p)\n", This, p);
-    return E_NOTIMPL;
+    nsIDOMNSHTMLElement *nselem;
+    PRInt32 index = 0;
+    nsresult nsres;
+
+    TRACE("(%p)->(%p)\n", This, p);
+
+    nsres = nsIDOMHTMLElement_QueryInterface(This->nselem, &IID_nsIDOMNSHTMLElement, (void**)&nselem);
+    if(NS_FAILED(nsres)) {
+        ERR("Could not get nsIDOMHTMLNSElement: %08x\n", nsres);
+        return E_FAIL;
+    }
+
+    nsres = nsIDOMNSHTMLElement_GetTabIndex(nselem, &index);
+    nsIDOMNSHTMLElement_Release(nselem);
+    if(NS_FAILED(nsres)) {
+        ERR("GetTabIndex failed: %08x\n", nsres);
+        return E_FAIL;
+    }
+
+    *p = index;
+    return S_OK;
 }
 
 static HRESULT WINAPI HTMLElement2_focus(IHTMLElement2 *iface)
index 6ff42010a85beeb28b7b2827a3b19f6cda21d581..65e9de6150634939f87ebed2e24ac825931c951f 100644 (file)
@@ -42,7 +42,7 @@ static const char elem_test_str[] =
     "<html><head><title>test</title><style>.body { margin-right: 0px; }</style>"
     "<body>text test<!-- a comment -->"
     "<a href=\"http://test\" name=\"x\">link</a>"
-    "<input id=\"in\" class=\"testclass\"/>"
+    "<input id=\"in\" class=\"testclass\" tabIndex=\"2\" />"
     "<select id=\"s\"><option id=\"x\">opt1</option><option id=\"y\">opt2</option></select>"
     "<textarea id=\"X\">text text</textarea>"
     "<table><tbody></tbody></table>"
@@ -952,6 +952,19 @@ static void _test_elem_class(unsigned line, IUnknown *unk, const char *exclass)
     SysFreeString(class);
 }
 
+#define test_elem_tabindex(u,i) _test_elem_tabindex(__LINE__,u,i)
+static void _test_elem_tabindex(unsigned line, IUnknown *unk, short exindex)
+{
+    IHTMLElement2 *elem2 = _get_elem2_iface(line, unk);
+    short index = -3;
+    HRESULT hres;
+
+    hres = IHTMLElement2_get_tabIndex(elem2, &index);
+    IHTMLElement2_Release(elem2);
+    ok_(__FILE__,line) (hres == S_OK, "get_tabIndex failed: %08x\n", hres);
+    ok_(__FILE__,line) (index == exindex, "unexpected index %d\n", index);
+}
+
 #define test_elem_set_class(u,c) _test_elem_set_class(__LINE__,u,c)
 static void _test_elem_set_class(unsigned line, IUnknown *unk, const char *class)
 {
@@ -1840,6 +1853,7 @@ static void test_elems(IHTMLDocument2 *doc)
         test_elem_class((IUnknown*)elem, NULL);
         test_elem_set_class((IUnknown*)elem, "cl");
         test_elem_set_class((IUnknown*)elem, NULL);
+        test_elem_tabindex((IUnknown*)elem, 0);
         IHTMLElement_Release(elem);
     }
 
@@ -1901,6 +1915,7 @@ static void test_elems(IHTMLDocument2 *doc)
         test_input_put_value((IUnknown*)elem, "test");
         test_input_value((IUnknown*)elem, NULL);
         test_elem_class((IUnknown*)elem, "testclass");
+        test_elem_tabindex((IUnknown*)elem, 2);
 
         IHTMLInputElement_Release(input);
         IHTMLElement_Release(elem);