Module: wine Branch: master Commit: 2896c462450a144ad122953e6ac76b25de0c4bfd URL: http://source.winehq.org/git/wine.git/?a=commit;h=2896c462450a144ad122953e6a...
Author: Alistair Leslie-Hughes leslie_alistair@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");