From 4e908f65fb067d3c8094788e4eb99288282c2e93 Mon Sep 17 00:00:00 2001 From: Alistair Leslie-Hughes Date: Tue, 8 Jan 2008 09:59:01 +1100 Subject: [PATCH] msxml3: nextSibling not supported for Attribute, Document and Document Fragment Nodes. --- dlls/msxml3/node.c | 18 +++++++++++++++++- dlls/msxml3/tests/domdoc.c | 17 +++++++++++++++++ 2 files changed, 34 insertions(+), 1 deletion(-) diff --git a/dlls/msxml3/node.c b/dlls/msxml3/node.c index 8b17589a58b..9b4c4f0f06c 100644 --- a/dlls/msxml3/node.c +++ b/dlls/msxml3/node.c @@ -350,7 +350,23 @@ static HRESULT WINAPI xmlnode_get_nextSibling( IXMLDOMNode** nextSibling) { xmlnode *This = impl_from_IXMLDOMNode( iface ); - return get_node( This, "next", This->node->next, nextSibling ); + + 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; + default: + return get_node( This, "next", This->node->next, nextSibling ); + } } static HRESULT WINAPI xmlnode_get_attributes( diff --git a/dlls/msxml3/tests/domdoc.c b/dlls/msxml3/tests/domdoc.c index 67897e353e9..777a815a852 100644 --- a/dlls/msxml3/tests/domdoc.c +++ b/dlls/msxml3/tests/domdoc.c @@ -1767,11 +1767,19 @@ 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 ); if(hr == S_OK) @@ -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"); -- 2.11.4.GIT