Module: wine Branch: master Commit: e906b136eb17eb42b42313fd5ffd575c870cabcd URL: http://source.winehq.org/git/wine.git/?a=commit;h=e906b136eb17eb42b42313fd5f...
Author: Alistair Leslie-Hughes leslie_alistair@hotmail.com Date: Tue Jan 8 12:43:34 2008 +1100
msxml3: get_attributes not supported for Attribute, CData, Comment, Doc, Doc Frag, Entity and Text Nodes.
---
dlls/msxml3/node.c | 22 ++++++++++++++++++++-- dlls/msxml3/tests/domdoc.c | 38 ++++++++++++++++++++++++++++++++++++++ 2 files changed, 58 insertions(+), 2 deletions(-)
diff --git a/dlls/msxml3/node.c b/dlls/msxml3/node.c index 03d96f5..2a93ab8 100644 --- a/dlls/msxml3/node.c +++ b/dlls/msxml3/node.c @@ -408,8 +408,26 @@ static HRESULT WINAPI xmlnode_get_attributes( { xmlnode *This = impl_from_IXMLDOMNode( iface ); TRACE("%p\n", This); - *attributeMap = create_nodemap( iface ); - return S_OK; + + if (!attributeMap) + return E_INVALIDARG; + + switch( This->node->type ) + { + /* Attribute, CDataSection, Comment, Documents, Documents Fragments, + Entity and Text Nodes does not support get_attributes */ + case XML_ATTRIBUTE_NODE: + case XML_COMMENT_NODE: + case XML_DOCUMENT_NODE: + case XML_DOCUMENT_FRAG_NODE: + case XML_ENTITY_NODE: + case XML_TEXT_NODE: + *attributeMap = NULL; + return S_FALSE; + default: + *attributeMap = create_nodemap( iface ); + return S_OK; + } }
static HRESULT WINAPI xmlnode_insertBefore( diff --git a/dlls/msxml3/tests/domdoc.c b/dlls/msxml3/tests/domdoc.c index 3418ebb..3038858 100644 --- a/dlls/msxml3/tests/domdoc.c +++ b/dlls/msxml3/tests/domdoc.c @@ -512,6 +512,8 @@ static void test_domdoc( void ) ok( r == S_OK, "returns %08x\n", r ); if(nodetext) { + IXMLDOMNamedNodeMap *pAttribs; + /* Text Last Child Checks */ r = IXMLDOMText_get_lastChild(nodetext, NULL); ok(r == E_INVALIDARG, "ret %08x\n", r ); @@ -520,6 +522,15 @@ static void test_domdoc( void ) r = IXMLDOMText_get_lastChild(nodetext, &nodeChild); ok(r == S_FALSE, "ret %08x\n", r ); ok(nodeChild == NULL, "nodeChild not NULL\n"); + + /* test get_attributes */ + r = IXMLDOMText_get_attributes( nodetext, NULL ); + ok( r == E_INVALIDARG, "get_attributes returned wrong code\n"); + + pAttribs = (IXMLDOMNamedNodeMap*)0x1; + r = IXMLDOMText_get_attributes( nodetext, &pAttribs); + ok(r == S_FALSE, "ret %08x\n", r ); + ok( pAttribs == NULL, "pAttribs not NULL\n"); } IXMLDOMText_Release( nodetext ); SysFreeString( str ); @@ -1838,6 +1849,15 @@ static void test_xmlTypes(void) ok(hr == S_FALSE, "ret %08x\n", hr ); ok(pNextChild == NULL, "pNextChild not NULL\n");
+ /* test get_attributes */ + hr = IXMLDOMDocument_get_attributes( doc, NULL ); + ok( hr == E_INVALIDARG, "get_attributes returned wrong code\n"); + + pAttribs = (IXMLDOMNamedNodeMap*)0x1; + hr = IXMLDOMDocument_get_attributes( doc, &pAttribs); + ok(hr == S_FALSE, "ret %08x\n", hr ); + ok( pAttribs == NULL, "pAttribs not NULL\n"); + hr = IXMLDOMDocument_createElement(doc, _bstr_("Testing"), &pRoot); ok(hr == S_OK, "ret %08x\n", hr ); if(hr == S_OK) @@ -1851,6 +1871,15 @@ static void test_xmlTypes(void) ok(hr == S_OK, "ret %08x\n", hr ); if(hr == S_OK) { + /* test get_attributes */ + hr = IXMLDOMComment_get_attributes( pComment, NULL ); + ok( hr == E_INVALIDARG, "get_attributes returned wrong code\n"); + + pAttribs = (IXMLDOMNamedNodeMap*)0x1; + hr = IXMLDOMComment_get_attributes( pComment, &pAttribs); + ok(hr == S_FALSE, "ret %08x\n", hr ); + ok( pAttribs == NULL, "pAttribs not NULL\n"); + hr = IXMLDOMElement_appendChild(pRoot, (IXMLDOMNode*)pComment, NULL); ok(hr == S_OK, "ret %08x\n", hr );
@@ -1909,6 +1938,15 @@ static void test_xmlTypes(void) ok(hr == S_FALSE, "ret %08x\n", hr ); ok(pNextChild == NULL, "pNextChild not NULL\n");
+ /* test get_attributes */ + hr = IXMLDOMAttribute_get_attributes( pAttrubute, NULL ); + ok( hr == E_INVALIDARG, "get_attributes returned wrong code\n"); + + pAttribs = (IXMLDOMNamedNodeMap*)0x1; + hr = IXMLDOMAttribute_get_attributes( pAttrubute, &pAttribs); + ok(hr == S_FALSE, "ret %08x\n", hr ); + ok( pAttribs == NULL, "pAttribs 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");