[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