Gabriel Ivăncescu : mshtml: Implement nextElementSibling for Elements.

Alexandre Julliard julliard at winehq.org
Wed Jul 27 16:17:08 CDT 2022


Module: wine
Branch: master
Commit: 67f182bf7805484636d0f9e5c59080f59dd0c2d7
URL:    https://gitlab.winehq.org/wine/wine/-/commit/67f182bf7805484636d0f9e5c59080f59dd0c2d7

Author: Gabriel Ivăncescu <gabrielopcode at gmail.com>
Date:   Wed Jul 27 21:33:35 2022 +0300

mshtml: Implement nextElementSibling for Elements.

Signed-off-by: Gabriel Ivăncescu <gabrielopcode at gmail.com>

---

 dlls/mshtml/htmlelem.c   | 26 ++++++++++++++++++++++++--
 dlls/mshtml/tests/dom.js |  5 +++++
 2 files changed, 29 insertions(+), 2 deletions(-)

diff --git a/dlls/mshtml/htmlelem.c b/dlls/mshtml/htmlelem.c
index 29e5d859243..5eced270c3c 100644
--- a/dlls/mshtml/htmlelem.c
+++ b/dlls/mshtml/htmlelem.c
@@ -6560,8 +6560,30 @@ static HRESULT WINAPI ElementTraversal_get_previousElementSibling(IElementTraver
 static HRESULT WINAPI ElementTraversal_get_nextElementSibling(IElementTraversal *iface, IHTMLElement **p)
 {
     HTMLElement *This = impl_from_IElementTraversal(iface);
-    FIXME("(%p)->(%p)\n", This, p);
-    return E_NOTIMPL;
+    nsIDOMElement *nselem = NULL;
+    HTMLElement *elem;
+    HRESULT hres;
+
+    TRACE("(%p)->(%p)\n", This, p);
+
+    if(!This->dom_element) {
+        *p = NULL;
+        return S_OK;
+    }
+
+    nsIDOMElement_GetNextElementSibling(This->dom_element, &nselem);
+    if(!nselem) {
+        *p = NULL;
+        return S_OK;
+    }
+
+    hres = get_element(nselem, &elem);
+    nsIDOMElement_Release(nselem);
+    if(FAILED(hres))
+        return hres;
+
+    *p = &elem->IHTMLElement_iface;
+    return S_OK;
 }
 
 static HRESULT WINAPI ElementTraversal_get_childElementCount(IElementTraversal *iface, LONG *p)
diff --git a/dlls/mshtml/tests/dom.js b/dlls/mshtml/tests/dom.js
index bd6fbf3793b..e164c9502ff 100644
--- a/dlls/mshtml/tests/dom.js
+++ b/dlls/mshtml/tests/dom.js
@@ -94,12 +94,17 @@ sync_test("ElementTraversal", function() {
             "div.firstElementChild.outerHTML = " + div.firstElementChild.outerHTML);
     ok(div.lastElementChild.outerHTML === "<div>text</div>",
             "div.lastElementChild.outerHTML = " + div.lastElementChild.outerHTML);
+    ok(div.firstElementChild.nextElementSibling.outerHTML === "<script>/* */</script>",
+            "div.firstElementChild.nextElementSibling.outerHTML = " + div.firstElementChild.nextElementSibling.outerHTML);
+    ok(div.lastElementChild.nextElementSibling === null,
+            "div.lastElementChild.nextElementSibling = " + div.lastElementChild.nextElementSibling);
 
     div.innerHTML = "abc";
     ok(div.firstElementChild === null, "div.firstElementChild = " + div.firstElementChild);
     ok(div.lastElementChild === null, "div.lastElementChild = " + div.lastElementChild);
 
     ok(!("firstElementChild" in document), "firstElementChild found in document");
+    ok(!("nextElementSibling" in document), "nextElementSibling found in document");
 });
 
 sync_test("head", function() {




More information about the wine-cvs mailing list