[PATCH] Implement get_dataType
Alistair Leslie-Hughes
leslie_alistair at hotmail.com
Sun Jan 13 19:44:56 CST 2008
---
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..dc5258f 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..b91a2d1 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 )
@@ -1857,6 +1871,12 @@ static void test_xmlTypes(void)
hr = IXMLDOMDocument_get_attributes( doc, &pAttribs);
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 );
@@ -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);
}
@@ -1913,6 +1938,11 @@ static void test_xmlTypes(void)
ok(hr == S_OK, "ret %08x\n", hr );
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);
@@ -1970,6 +2000,11 @@ static void test_xmlTypes(void)
ok(hr == S_OK, "ret %08x\n", hr );
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);
--
1.5.3.7
--------------080001090105070609060905--
More information about the wine-patches
mailing list