Alistair Leslie-Hughes : msxml3: previousSibling not supported for Attribute, Document and Document Fragment Nodes.

Alexandre Julliard julliard at winehq.org
Wed Jan 9 07:02:09 CST 2008


Module: wine
Branch: master
Commit: 2896c462450a144ad122953e6ac76b25de0c4bfd
URL:    http://source.winehq.org/git/wine.git/?a=commit;h=2896c462450a144ad122953e6ac76b25de0c4bfd

Author: Alistair Leslie-Hughes <leslie_alistair at hotmail.com>
Date:   Tue Jan  8 11:34:29 2008 +1100

msxml3: previousSibling not supported for Attribute, Document and Document Fragment Nodes.

---

 dlls/msxml3/node.c         |   18 +++++++++++++++++-
 dlls/msxml3/tests/domdoc.c |   18 ++++++++++++++++++
 2 files changed, 35 insertions(+), 1 deletions(-)

diff --git a/dlls/msxml3/node.c b/dlls/msxml3/node.c
index dae9130..03d96f5 100644
--- a/dlls/msxml3/node.c
+++ b/dlls/msxml3/node.c
@@ -359,7 +359,23 @@ static HRESULT WINAPI xmlnode_get_previousSibling(
     IXMLDOMNode** previousSibling)
 {
     xmlnode *This = impl_from_IXMLDOMNode( iface );
-    return get_node( This, "previous", This->node->prev, previousSibling );
+
+    TRACE("%p\n", This );
+
+    if (!previousSibling)
+        return E_INVALIDARG;
+
+    switch( This->node->type )
+    {
+    /* Attribute, Document and Document Fragment Nodes do not support previousSibling */
+    case XML_DOCUMENT_NODE:
+    case XML_DOCUMENT_FRAG_NODE:
+    case XML_ATTRIBUTE_NODE:
+        *previousSibling = NULL;
+        return S_FALSE;
+    default:
+        return get_node( This, "previous", This->node->prev, previousSibling );
+    }
 }
 
 static HRESULT WINAPI xmlnode_get_nextSibling(
diff --git a/dlls/msxml3/tests/domdoc.c b/dlls/msxml3/tests/domdoc.c
index 910c044..3418ebb 100644
--- a/dlls/msxml3/tests/domdoc.c
+++ b/dlls/msxml3/tests/domdoc.c
@@ -1829,6 +1829,15 @@ static void test_xmlTypes(void)
     ok(hr == S_FALSE, "ret %08x\n", hr );
     ok(pNextChild == NULL, "pDocChild not NULL\n");
 
+    /* test previous Sibling */
+    hr = IXMLDOMDocument_get_previousSibling(doc, NULL);
+    ok(hr == E_INVALIDARG, "ret %08x\n", hr );
+
+    pNextChild = (IXMLDOMNode *)0x1;
+    hr = IXMLDOMDocument_get_previousSibling(doc, &pNextChild);
+    ok(hr == S_FALSE, "ret %08x\n", hr );
+    ok(pNextChild == NULL, "pNextChild not NULL\n");
+
     hr = IXMLDOMDocument_createElement(doc, _bstr_("Testing"), &pRoot);
     ok(hr == S_OK, "ret %08x\n", hr );
     if(hr == S_OK)
@@ -1891,6 +1900,15 @@ static void test_xmlTypes(void)
                     ok(hr == S_FALSE, "ret %08x\n", hr );
                     ok(pNextChild == NULL, "pNextChild not NULL\n");
 
+                    /* test Previous Sibling*/
+                    hr = IXMLDOMAttribute_get_previousSibling(pAttrubute, NULL);
+                    ok(hr == E_INVALIDARG, "ret %08x\n", hr );
+
+                    pNextChild = (IXMLDOMNode *)0x1;
+                    hr = IXMLDOMAttribute_get_previousSibling(pAttrubute, &pNextChild);
+                    ok(hr == S_FALSE, "ret %08x\n", hr );
+                    ok(pNextChild == NULL, "pNextChild not NULL\n");
+
                     hr = IXMLDOMElement_appendChild(pElement, (IXMLDOMNode*)pAttrubute, &pNewChild);
                     ok(hr == E_FAIL, "ret %08x\n", hr );
                     ok(pNewChild == NULL, "pNewChild not NULL\n");




More information about the wine-cvs mailing list