[PATCH] nextSibling not supported for Attribute, Document and Document Fragment Nodes
Alistair Leslie-Hughes
leslie_alistair at hotmail.com
Mon Jan 7 16:59:01 CST 2008
---
dlls/msxml3/node.c | 20 ++++++++++++++++++++
dlls/msxml3/tests/domdoc.c | 17 +++++++++++++++++
2 files changed, 37 insertions(+), 0 deletions(-)
diff --git a/dlls/msxml3/node.c b/dlls/msxml3/node.c
index 8b17589..771caf4 100644
--- a/dlls/msxml3/node.c
+++ b/dlls/msxml3/node.c
@@ -350,6 +350,26 @@ static HRESULT WINAPI xmlnode_get_nextSibling(
IXMLDOMNode** nextSibling)
{
xmlnode *This = impl_from_IXMLDOMNode( iface );
+
+ TRACE("%p\n", This );
+
+ if (!nextSibling)
+ return E_INVALIDARG;
+
+ switch( This->node->type )
+ {
+ /* Attribute, Document and Document Fragment Nodes do not support nextSibling */
+ case XML_DOCUMENT_NODE:
+ case XML_DOCUMENT_FRAG_NODE:
+ case XML_ATTRIBUTE_NODE:
+ *nextSibling = NULL;
+
+ return S_FALSE;
+ break;
+ default:
+ break;
+ }
+
return get_node( This, "next", This->node->next, nextSibling );
}
diff --git a/dlls/msxml3/tests/domdoc.c b/dlls/msxml3/tests/domdoc.c
index 67897e3..7d33e18 100644
--- a/dlls/msxml3/tests/domdoc.c
+++ b/dlls/msxml3/tests/domdoc.c
@@ -1767,10 +1767,18 @@ static void test_xmlTypes(void)
IXMLDOMAttribute *pAttrubute;
IXMLDOMNamedNodeMap *pAttribs;
BSTR str;
+ IXMLDOMNode *pNextChild = (IXMLDOMNode *)0x1; /* Used for testing Siblings */
hr = CoCreateInstance( &CLSID_DOMDocument, NULL, CLSCTX_INPROC_SERVER, &IID_IXMLDOMDocument2, (LPVOID*)&doc );
if( hr != S_OK )
return;
+
+ hr = IXMLDOMDocument_get_nextSibling(doc, NULL);
+ ok(hr == E_INVALIDARG, "ret %08x\n", hr );
+
+ hr = IXMLDOMDocument_get_nextSibling(doc, &pNextChild);
+ ok(hr == S_FALSE, "ret %08x\n", hr );
+ ok(pNextChild == NULL, "pDocChild not NULL\n");
hr = IXMLDOMDocument_createElement(doc, _bstr_("Testing"), &pRoot);
ok(hr == S_OK, "ret %08x\n", hr );
@@ -1825,6 +1833,15 @@ static void test_xmlTypes(void)
if(hr == S_OK)
{
IXMLDOMNode *pNewChild = (IXMLDOMNode *)0x1;
+
+ hr = IXMLDOMAttribute_get_nextSibling(pAttrubute, NULL);
+ ok(hr == E_INVALIDARG, "ret %08x\n", hr );
+
+ pNextChild = (IXMLDOMNode *)0x1;
+ hr = IXMLDOMAttribute_get_nextSibling(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");
--
1.5.3.7
--------------080507080208080601080807--
More information about the wine-patches
mailing list