Alistair Leslie-Hughes : msxml3: lastChild not supported for CDATASection, Comment, PI and Text Nodes.
Alexandre Julliard
julliard at winehq.org
Wed Jan 9 07:02:08 CST 2008
Module: wine
Branch: master
Commit: 91ad27ea25c5714173688478a605e09ccb95e361
URL: http://source.winehq.org/git/wine.git/?a=commit;h=91ad27ea25c5714173688478a605e09ccb95e361
Author: Alistair Leslie-Hughes <leslie_alistair at hotmail.com>
Date: Tue Jan 8 10:28:57 2008 +1100
msxml3: lastChild not supported for CDATASection, Comment, PI and Text Nodes.
---
dlls/msxml3/node.c | 19 ++++++++++++++++++-
dlls/msxml3/tests/domdoc.c | 23 +++++++++++++++++++++++
2 files changed, 41 insertions(+), 1 deletions(-)
diff --git a/dlls/msxml3/node.c b/dlls/msxml3/node.c
index 9b4c4f0..dae9130 100644
--- a/dlls/msxml3/node.c
+++ b/dlls/msxml3/node.c
@@ -334,7 +334,24 @@ static HRESULT WINAPI xmlnode_get_lastChild(
IXMLDOMNode** lastChild)
{
xmlnode *This = impl_from_IXMLDOMNode( iface );
- return get_node( This, "lastChild", This->node->last, lastChild );
+
+ TRACE("%p\n", This );
+
+ if (!lastChild)
+ return E_INVALIDARG;
+
+ switch( This->node->type )
+ {
+ /* CDATASection, Comment, PI and Text Nodes do not support lastChild */
+ case XML_TEXT_NODE:
+ case XML_CDATA_SECTION_NODE:
+ case XML_PI_NODE:
+ case XML_COMMENT_NODE:
+ *lastChild = NULL;
+ return S_FALSE;
+ default:
+ return get_node( This, "lastChild", This->node->last, lastChild );
+ }
}
static HRESULT WINAPI xmlnode_get_previousSibling(
diff --git a/dlls/msxml3/tests/domdoc.c b/dlls/msxml3/tests/domdoc.c
index 777a815..272dfb6 100644
--- a/dlls/msxml3/tests/domdoc.c
+++ b/dlls/msxml3/tests/domdoc.c
@@ -347,6 +347,7 @@ static void test_domdoc( void )
IXMLDOMText *nodetext = NULL;
IXMLDOMComment *node_comment = NULL;
IXMLDOMAttribute *node_attr = NULL;
+ IXMLDOMNode *nodeChild = NULL;
VARIANT_BOOL b;
VARIANT var;
BSTR str;
@@ -508,6 +509,17 @@ static void test_domdoc( void )
ok( r == E_INVALIDARG, "returns %08x\n", r );
r = IXMLDOMDocument_createTextNode(doc, str, &nodetext);
ok( r == S_OK, "returns %08x\n", r );
+ if(nodetext)
+ {
+ /* Text Last Child Checks */
+ r = IXMLDOMText_get_lastChild(nodetext, NULL);
+ ok(r == E_INVALIDARG, "ret %08x\n", r );
+
+ nodeChild = (IXMLDOMNode*)0x1;
+ r = IXMLDOMText_get_lastChild(nodetext, &nodeChild);
+ ok(r == S_FALSE, "ret %08x\n", r );
+ ok(nodeChild == NULL, "nodeChild not NULL\n");
+ }
IXMLDOMText_Release( nodetext );
SysFreeString( str );
@@ -516,6 +528,17 @@ static void test_domdoc( void )
ok( r == E_INVALIDARG, "returns %08x\n", r );
r = IXMLDOMDocument_createComment(doc, szComment, &node_comment);
ok( r == S_OK, "returns %08x\n", r );
+ if(node_comment)
+ {
+ /* Last Child Checks */
+ r = IXMLDOMComment_get_lastChild(node_comment, NULL);
+ ok(r == E_INVALIDARG, "ret %08x\n", r );
+
+ nodeChild = (IXMLDOMNode*)0x1;
+ r = IXMLDOMComment_get_lastChild(node_comment, &nodeChild);
+ ok(r == S_FALSE, "ret %08x\n", r );
+ ok(nodeChild == NULL, "pLastChild not NULL\n");
+ }
IXMLDOMText_Release( node_comment );
/* test Create Attribute */
More information about the wine-cvs
mailing list