Alistair Leslie-Hughes : msxml3: Implement get_dataType.

Alexandre Julliard julliard at winehq.org
Mon Jan 14 09:33:37 CST 2008


Module: wine
Branch: master
Commit: e989d48f43a43a2ff6ffdb911ed24d196eef932d
URL:    http://source.winehq.org/git/wine.git/?a=commit;h=e989d48f43a43a2ff6ffdb911ed24d196eef932d

Author: Alistair Leslie-Hughes <leslie_alistair at hotmail.com>
Date:   Mon Jan 14 12:44:56 2008 +1100

msxml3: Implement get_dataType.

---

 dlls/msxml3/node.c         |   44 ++++++++++++++++++++++++++++++++++++++++++--
 dlls/msxml3/tests/domdoc.c |   35 +++++++++++++++++++++++++++++++++++
 2 files changed, 77 insertions(+), 2 deletions(-)

diff --git a/dlls/msxml3/node.c b/dlls/msxml3/node.c
index 2a93ab8..c0d9076 100644
--- a/dlls/msxml3/node.c
+++ b/dlls/msxml3/node.c
@@ -736,8 +736,48 @@ static HRESULT WINAPI xmlnode_get_dataType(
     IXMLDOMNode *iface,
     VARIANT* dataTypeName)
 {
-    FIXME("\n");
-    return E_NOTIMPL;
+    xmlnode *This = impl_from_IXMLDOMNode( iface );
+    xmlChar *pVal;
+
+    TRACE("iface %p\n", iface);
+
+    if(!dataTypeName)
+        return E_INVALIDARG;
+
+    /* CDATA Section, Comment, Document, Document Fragment,
+        Entity, Notation, PI, and Text Node are non-typed. */
+    V_BSTR(dataTypeName) = NULL;
+    V_VT(dataTypeName) = VT_NULL;
+
+    switch ( This->node->type )
+    {
+    case XML_ATTRIBUTE_NODE:
+        FIXME("NODE_ATTRIBUTE_NODE should return a valid value.\n");
+        break;
+    case XML_ELEMENT_NODE:
+        pVal = xmlGetNsProp(This->node, (xmlChar*)"dt",
+                            (xmlChar*)"urn:schemas-microsoft-com:datatypes");
+        if (pVal)
+        {
+            V_VT(dataTypeName) = VT_BSTR;
+            V_BSTR(dataTypeName) = bstr_from_xmlChar( pVal );
+            xmlFree(pVal);
+        }
+        break;
+    case XML_ENTITY_REF_NODE:
+        FIXME("XML_ENTITY_REF_NODE should return a valid value.\n");
+        break;
+    default:
+        TRACE("Type %d returning NULL\n", This->node->type);
+    }
+
+    /* non-typed nodes return S_FALSE */
+    if(V_VT(dataTypeName) == VT_NULL)
+    {
+        return S_FALSE;
+    }
+
+    return S_OK;
 }
 
 static HRESULT WINAPI xmlnode_put_dataType(
diff --git a/dlls/msxml3/tests/domdoc.c b/dlls/msxml3/tests/domdoc.c
index 19a3dc1..5535bed 100644
--- a/dlls/msxml3/tests/domdoc.c
+++ b/dlls/msxml3/tests/domdoc.c
@@ -531,6 +531,13 @@ static void test_domdoc( void )
         r = IXMLDOMText_get_attributes( nodetext, &pAttribs);
         ok(r == S_FALSE, "ret %08x\n", r );
         ok( pAttribs == NULL, "pAttribs not NULL\n");
+
+        /* test get_dataType */
+        r = IXMLDOMText_get_dataType(nodetext, &var);
+        ok(r == S_FALSE, "ret %08x\n", r );
+        ok( V_VT(&var) == VT_NULL, "incorrect dataType type\n");
+        VariantClear(&var);
+
         IXMLDOMText_Release( nodetext );
     }
     SysFreeString( str );
@@ -582,6 +589,12 @@ static void test_domdoc( void )
         r = IXMLDOMProcessingInstruction_get_lastChild(nodePI, &nodeChild);
         ok(r == S_FALSE, "ret %08x\n", r );
         ok(nodeChild == NULL, "nodeChild not NULL\n");
+
+        r = IXMLDOMProcessingInstruction_get_dataType(nodePI, &var);
+        ok(r == S_FALSE, "ret %08x\n", r );
+        ok( V_VT(&var) == VT_NULL, "incorrect dataType type\n");
+        VariantClear(&var);
+
         IXMLDOMProcessingInstruction_Release(nodePI);
     }
 
@@ -1828,6 +1841,7 @@ static void test_xmlTypes(void)
     IXMLDOMNamedNodeMap *pAttribs;
     BSTR str;
     IXMLDOMNode *pNextChild = (IXMLDOMNode *)0x1;   /* Used for testing Siblings */
+    VARIANT v;
 
     hr = CoCreateInstance( &CLSID_DOMDocument, NULL, CLSCTX_INPROC_SERVER, &IID_IXMLDOMDocument2, (LPVOID*)&doc );
     if( hr != S_OK )
@@ -1858,6 +1872,12 @@ static void test_xmlTypes(void)
     ok(hr == S_FALSE, "ret %08x\n", hr );
     ok( pAttribs == NULL, "pAttribs not NULL\n");
 
+    /* test get_dataType */
+    hr = IXMLDOMDocument_get_dataType(doc, &v);
+    ok(hr == S_FALSE, "ret %08x\n", hr );
+    ok( V_VT(&v) == VT_NULL, "incorrect dataType type\n");
+    VariantClear(&v);
+
     hr = IXMLDOMDocument_createElement(doc, _bstr_("Testing"), &pRoot);
     ok(hr == S_OK, "ret %08x\n", hr );
     if(hr == S_OK)
@@ -1893,6 +1913,11 @@ static void test_xmlTypes(void)
                 ok( !lstrcmpW( str, szCommentXML ), "incorrect comment xml\n");
                 SysFreeString(str);
 
+                hr = IXMLDOMComment_get_dataType(pComment, &v);
+                ok(hr == S_FALSE, "ret %08x\n", hr );
+                ok( V_VT(&v) == VT_NULL, "incorrect dataType type\n");
+                VariantClear(&v);
+
                 IXMLDOMComment_Release(pComment);
             }
 
@@ -1914,6 +1939,11 @@ static void test_xmlTypes(void)
                 ok( !lstrcmpW( str, szElementXML ), "incorrect element xml\n");
                 SysFreeString(str);
 
+                hr = IXMLDOMElement_get_dataType(pElement, &v);
+                ok(hr == S_FALSE, "ret %08x\n", hr );
+                ok( V_VT(&v) == VT_NULL, "incorrect dataType type\n");
+                VariantClear(&v);
+
                  /* Attribute */
                 hr = IXMLDOMDocument_createAttribute(doc, szAttribute, &pAttrubute);
                 ok(hr == S_OK, "ret %08x\n", hr );
@@ -1971,6 +2001,11 @@ static void test_xmlTypes(void)
                     ok( !lstrcmpW( str, szAttributeXML ), "incorrect attribute xml\n");
                     SysFreeString(str);
 
+                    hr = IXMLDOMAttribute_get_dataType(pAttrubute, &v);
+                    ok(hr == S_FALSE, "ret %08x\n", hr );
+                    ok( V_VT(&v) == VT_NULL, "incorrect dataType type\n");
+                    VariantClear(&v);
+
                     IXMLDOMAttribute_Release(pAttrubute);
 
                     /* Check Element again with the Add Attribute*/




More information about the wine-cvs mailing list