[PATCH] Implement get_nodeTypeString
Alistair Leslie-Hughes
leslie_alistair at hotmail.com
Tue Jan 15 23:47:19 CST 2008
---
dlls/msxml3/node.c | 59 ++++++++++++++++++++++++++++++++++++++++++-
dlls/msxml3/tests/domdoc.c | 45 ++++++++++++++++++++++++++++++++-
2 files changed, 101 insertions(+), 3 deletions(-)
diff --git a/dlls/msxml3/node.c b/dlls/msxml3/node.c
index 64e9181..0e4fc9b 100644
--- a/dlls/msxml3/node.c
+++ b/dlls/msxml3/node.c
@@ -646,8 +646,63 @@ static HRESULT WINAPI xmlnode_get_nodeTypeString(
IXMLDOMNode *iface,
BSTR* xmlnodeType)
{
- FIXME("\n");
- return E_NOTIMPL;
+ xmlnode *This = impl_from_IXMLDOMNode( iface );
+ const xmlChar *str;
+
+ TRACE("%p\n", This );
+
+ if (!xmlnodeType)
+ return E_INVALIDARG;
+
+ if ( !This->node )
+ return E_FAIL;
+
+ switch( This->node->type )
+ {
+ case XML_ATTRIBUTE_NODE:
+ str = (const xmlChar*) "attribute";
+ break;
+ case XML_CDATA_SECTION_NODE:
+ str = (const xmlChar*) "cdatasection";
+ break;
+ case XML_COMMENT_NODE:
+ str = (const xmlChar*) "comment";
+ break;
+ case XML_DOCUMENT_NODE:
+ str = (const xmlChar*) "document";
+ break;
+ case XML_DOCUMENT_FRAG_NODE:
+ str = (const xmlChar*) "documentfragment";
+ break;
+ case XML_ELEMENT_NODE:
+ str = (const xmlChar*) "element";
+ break;
+ case XML_ENTITY_NODE:
+ str = (const xmlChar*) "entity";
+ break;
+ case XML_ENTITY_REF_NODE:
+ str = (const xmlChar*) "entityreference";
+ break;
+ case XML_NOTATION_NODE:
+ str = (const xmlChar*) "notation";
+ break;
+ case XML_PI_NODE:
+ str = (const xmlChar*) "processinginstruction";
+ break;
+ case XML_TEXT_NODE:
+ str = (const xmlChar*) "text";
+ break;
+ default:
+ FIXME("nodeName not mapped correctly (%d)\n", This->node->type);
+ str = This->node->name;
+ break;
+ }
+
+ *xmlnodeType = bstr_from_xmlChar( str );
+ if (!*xmlnodeType)
+ return S_FALSE;
+
+ return S_OK;
}
static HRESULT WINAPI xmlnode_get_text(
diff --git a/dlls/msxml3/tests/domdoc.c b/dlls/msxml3/tests/domdoc.c
index 522bfe2..1a9018a 100644
--- a/dlls/msxml3/tests/domdoc.c
+++ b/dlls/msxml3/tests/domdoc.c
@@ -549,6 +549,12 @@ static void test_domdoc( void )
ok(r == S_FALSE, "ret %08x\n", r );
ok( V_VT(&var) == VT_NULL, "incorrect dataType type\n");
VariantClear(&var);
+
+ /* test nodeTypeString */
+ r = IXMLDOMText_get_nodeTypeString(nodetext, &str);
+ ok(r == S_OK, "ret %08x\n", r );
+ ok( !lstrcmpW( str, _bstr_("text") ), "incorrect nodeTypeString string\n");
+ SysFreeString(str);
IXMLDOMText_Release( nodetext );
}
@@ -569,7 +575,8 @@ static void test_domdoc( void )
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 );
+
+ IXMLDOMComment_Release( node_comment );
}
/* test Create Attribute */
@@ -606,6 +613,12 @@ static void test_domdoc( void )
ok(r == S_FALSE, "ret %08x\n", r );
ok( V_VT(&var) == VT_NULL, "incorrect dataType type\n");
VariantClear(&var);
+
+ /* test nodeTypeString */
+ r = IXMLDOMProcessingInstruction_get_nodeTypeString(nodePI, &str);
+ ok(r == S_OK, "ret %08x\n", r );
+ ok( !lstrcmpW( str, _bstr_("processinginstruction") ), "incorrect nodeTypeString string\n");
+ SysFreeString(str);
IXMLDOMProcessingInstruction_Release(nodePI);
}
@@ -1897,6 +1910,12 @@ static void test_xmlTypes(void)
ok(hr == S_FALSE, "ret %08x\n", hr );
ok( V_VT(&v) == VT_NULL, "incorrect dataType type\n");
VariantClear(&v);
+
+ /* test nodeTypeString */
+ hr = IXMLDOMDocument_get_nodeTypeString(doc, &str);
+ ok(hr == S_OK, "ret %08x\n", hr );
+ ok( !lstrcmpW( str, _bstr_("document") ), "incorrect nodeTypeString string\n");
+ SysFreeString(str);
hr = IXMLDOMDocument_createElement(doc, _bstr_("Testing"), &pRoot);
ok(hr == S_OK, "ret %08x\n", hr );
@@ -1919,6 +1938,12 @@ static void test_xmlTypes(void)
hr = IXMLDOMComment_get_attributes( pComment, &pAttribs);
ok(hr == S_FALSE, "ret %08x\n", hr );
ok( pAttribs == NULL, "pAttribs not NULL\n");
+
+ /* test nodeTypeString */
+ hr = IXMLDOMComment_get_nodeTypeString(pComment, &str);
+ ok(hr == S_OK, "ret %08x\n", hr );
+ ok( !lstrcmpW( str, _bstr_("comment") ), "incorrect nodeTypeString string\n");
+ SysFreeString(str);
hr = IXMLDOMElement_appendChild(pRoot, (IXMLDOMNode*)pComment, NULL);
ok(hr == S_OK, "ret %08x\n", hr );
@@ -1948,6 +1973,12 @@ static void test_xmlTypes(void)
{
hr = IXMLDOMElement_appendChild(pRoot, (IXMLDOMNode*)pElement, NULL);
ok(hr == S_OK, "ret %08x\n", hr );
+
+ /* test nodeTypeString */
+ hr = IXMLDOMDocument_get_nodeTypeString(pElement, &str);
+ ok(hr == S_OK, "ret %08x\n", hr );
+ ok( !lstrcmpW( str, _bstr_("element") ), "incorrect nodeTypeString string\n");
+ SysFreeString(str);
hr = IXMLDOMElement_get_nodeName(pElement, &str);
ok(hr == S_OK, "ret %08x\n", hr );
@@ -2015,6 +2046,12 @@ static void test_xmlTypes(void)
ok(hr == S_OK, "ret %08x\n", hr );
ok( !lstrcmpW( str, szAttribute ), "incorrect attribute node Name\n");
SysFreeString(str);
+
+ /* test nodeTypeString */
+ hr = IXMLDOMAttribute_get_nodeTypeString(pAttrubute, &str);
+ ok(hr == S_OK, "ret %08x\n", hr );
+ ok( !lstrcmpW( str, _bstr_("attribute") ), "incorrect nodeTypeString string\n");
+ SysFreeString(str);
hr = IXMLDOMAttribute_get_xml(pAttrubute, &str);
ok(hr == S_OK, "ret %08x\n", hr );
@@ -2091,6 +2128,12 @@ static void test_xmlTypes(void)
ok(hr == S_FALSE, "ret %08x\n", hr );
ok( V_VT(&v) == VT_NULL, "incorrect dataType type\n");
VariantClear(&v);
+
+ /* test nodeTypeString */
+ hr = IXMLDOMCDATASection_get_nodeTypeString(pCDataSec, &str);
+ ok(hr == S_OK, "ret %08x\n", hr );
+ ok( !lstrcmpW( str, _bstr_("cdatasection") ), "incorrect nodeTypeString string\n");
+ SysFreeString(str);
IXMLDOMCDATASection_Release(pCDataSec);
}
--
1.5.3.7
--------------010000080405020909060904--
More information about the wine-patches
mailing list