[PATCH 1/1] Some get_attributes() tests

Nikolay Sivov nsivov at codeweavers.com
Wed Mar 9 19:19:29 CST 2011


---
 dlls/msxml3/pi.c           |   26 ++++++-
 dlls/msxml3/tests/domdoc.c |  161 ++++++++++++++++++++++++++------------------
 2 files changed, 117 insertions(+), 70 deletions(-)

diff --git a/dlls/msxml3/pi.c b/dlls/msxml3/pi.c
index b9a2c7e..1766781 100644
--- a/dlls/msxml3/pi.c
+++ b/dlls/msxml3/pi.c
@@ -315,14 +315,32 @@ static HRESULT WINAPI dom_pi_get_nextSibling(
 
 static HRESULT WINAPI dom_pi_get_attributes(
     IXMLDOMProcessingInstruction *iface,
-    IXMLDOMNamedNodeMap** attributeMap)
+    IXMLDOMNamedNodeMap** map)
 {
     dom_pi *This = impl_from_IXMLDOMProcessingInstruction( iface );
+    static const WCHAR xmlW[] = {'x','m','l',0};
+    HRESULT hr;
+    BSTR name;
 
-    TRACE("(%p)->(%p)\n", This, attributeMap);
+    TRACE("(%p)->(%p)\n", This, map);
 
-    *attributeMap = create_nodemap((IXMLDOMNode*)&This->IXMLDOMProcessingInstruction_iface);
-    return S_OK;
+    if (!map) return E_INVALIDARG;
+
+    *map = NULL;
+
+    hr = node_get_nodeName(&This->node, &name);
+    if (hr != S_OK) return hr;
+
+    if (!strcmpW(name, xmlW))
+    {
+        FIXME("not implemented for <?xml..?> declaration\n");
+        SysFreeString(name);
+        return E_NOTIMPL;
+    }
+
+    SysFreeString(name);
+
+    return S_FALSE;
 }
 
 static HRESULT WINAPI dom_pi_insertBefore(
diff --git a/dlls/msxml3/tests/domdoc.c b/dlls/msxml3/tests/domdoc.c
index b606dc1..42fd22a 100644
--- a/dlls/msxml3/tests/domdoc.c
+++ b/dlls/msxml3/tests/domdoc.c
@@ -1089,8 +1089,6 @@ if (0)
     SysFreeString( str );
     if(nodetext)
     {
-        IXMLDOMNamedNodeMap *pAttribs;
-
         r = IXMLDOMText_QueryInterface(nodetext, &IID_IXMLDOMElement, (void**)&element);
         ok(r == E_NOINTERFACE, "ret %08x\n", r );
 
@@ -1103,15 +1101,6 @@ if (0)
         ok(r == S_FALSE, "ret %08x\n", r );
         ok(nodeChild == NULL, "nodeChild not NULL\n");
 
-        /* test get_attributes */
-        r = IXMLDOMText_get_attributes( nodetext, NULL );
-        ok( r == E_INVALIDARG, "get_attributes returned wrong code\n");
-
-        pAttribs = (IXMLDOMNamedNodeMap*)0x1;
-        r = IXMLDOMText_get_attributes( nodetext, &pAttribs);
-        ok(r == S_FALSE, "ret %08x\n", r );
-        ok( pAttribs == NULL, "pAttribs not NULL\n");
-
         /* test length property */
         r = IXMLDOMText_get_length(nodetext, NULL);
         ok(r == E_INVALIDARG, "ret %08x\n", r );
@@ -4258,15 +4247,6 @@ static void test_xmlTypes(void)
     ok(hr == S_FALSE, "ret %08x\n", hr );
     ok(pNextChild == NULL, "pNextChild not NULL\n");
 
-    /* test get_attributes */
-    hr = IXMLDOMDocument_get_attributes( doc, NULL );
-    ok( hr == E_INVALIDARG, "get_attributes returned wrong code\n");
-
-    pAttribs = (void*)0xdeadbeef;
-    hr = IXMLDOMDocument_get_attributes( doc, &pAttribs);
-    ok(hr == S_FALSE, "ret %08x\n", hr );
-    ok( pAttribs == NULL, "pAttribs not NULL\n");
-
     /* test get_dataType */
     V_VT(&v) = VT_EMPTY;
     hr = IXMLDOMDocument_get_dataType(doc, &v);
@@ -4352,15 +4332,6 @@ static void test_xmlTypes(void)
             ok(hr == S_OK, "ret %08x\n", hr );
             if(hr == S_OK)
             {
-                /* test get_attributes */
-                hr = IXMLDOMComment_get_attributes( pComment, NULL );
-                ok( hr == E_INVALIDARG, "get_attributes returned wrong code\n");
-
-                pAttribs = (IXMLDOMNamedNodeMap*)0x1;
-                hr = IXMLDOMComment_get_attributes( pComment, &pAttribs);
-                ok(hr == S_FALSE, "ret %08x\n", hr );
-                ok( pAttribs == NULL, "pAttribs not NULL\n");
-
                 hr = IXMLDOMElement_appendChild(pRoot, (IXMLDOMNode*)pComment, NULL);
                 ok(hr == S_OK, "ret %08x\n", hr );
 
@@ -4710,15 +4681,6 @@ static void test_xmlTypes(void)
                     ok(hr == S_FALSE, "ret %08x\n", hr );
                     ok(pNextChild == NULL, "pNextChild not NULL\n");
 
-                    /* test get_attributes */
-                    hr = IXMLDOMAttribute_get_attributes( pAttribute, NULL );
-                    ok( hr == E_INVALIDARG, "get_attributes returned wrong code\n");
-
-                    pAttribs = (IXMLDOMNamedNodeMap*)0x1;
-                    hr = IXMLDOMAttribute_get_attributes( pAttribute, &pAttribs);
-                    ok(hr == S_FALSE, "ret %08x\n", hr );
-                    ok( pAttribs == NULL, "pAttribs not NULL\n");
-
                     hr = IXMLDOMElement_appendChild(pElement, (IXMLDOMNode*)pAttribute, &pNewChild);
                     ok(hr == E_FAIL, "ret %08x\n", hr );
                     ok(pNewChild == NULL, "pNewChild not NULL\n");
@@ -4812,15 +4774,6 @@ static void test_xmlTypes(void)
                 hr = IXMLDOMElement_appendChild(pRoot, (IXMLDOMNode*)pCDataSec, NULL);
                 ok(hr == S_OK, "ret %08x\n", hr );
 
-                /* get Attribute Tests */
-                hr = IXMLDOMCDATASection_get_attributes(pCDataSec, NULL);
-                ok(hr == E_INVALIDARG, "ret %08x\n", hr );
-
-                pAttribs = (IXMLDOMNamedNodeMap*)0x1;
-                hr = IXMLDOMCDATASection_get_attributes(pCDataSec, &pAttribs);
-                ok(hr == S_FALSE, "ret %08x\n", hr );
-                ok(pAttribs == NULL, "pAttribs != NULL\n");
-
                 hr = IXMLDOMCDATASection_get_nodeName(pCDataSec, &str);
                 ok(hr == S_OK, "ret %08x\n", hr );
                 ok( !lstrcmpW( str, szCDataNodeText ), "incorrect cdata node Name\n");
@@ -5139,15 +5092,6 @@ static void test_xmlTypes(void)
                 hr = IXMLDOMElement_appendChild(pRoot, (IXMLDOMNode*)pDocFrag, NULL);
                 ok(hr == S_OK, "ret %08x\n", hr );
 
-                /* get Attribute Tests */
-                hr = IXMLDOMDocumentFragment_get_attributes(pDocFrag, NULL);
-                ok(hr == E_INVALIDARG, "ret %08x\n", hr );
-
-                pAttribs = (IXMLDOMNamedNodeMap*)0x1;
-                hr = IXMLDOMDocumentFragment_get_attributes(pDocFrag, &pAttribs);
-                ok(hr == S_FALSE, "ret %08x\n", hr );
-                ok(pAttribs == NULL, "pAttribs != NULL\n");
-
                 hr = IXMLDOMDocumentFragment_get_nodeName(pDocFrag, &str);
                 ok(hr == S_OK, "ret %08x\n", hr );
                 ok( !lstrcmpW( str, szDocFragmentText ), "incorrect docfragment node Name\n");
@@ -5192,15 +5136,6 @@ static void test_xmlTypes(void)
                 hr = IXMLDOMElement_appendChild(pRoot, (IXMLDOMNode*)pEntityRef, NULL);
                 ok(hr == S_OK, "ret %08x\n", hr );
 
-                /* get Attribute Tests */
-                hr = IXMLDOMEntityReference_get_attributes(pEntityRef, NULL);
-                ok(hr == E_INVALIDARG, "ret %08x\n", hr );
-
-                pAttribs = (IXMLDOMNamedNodeMap*)0x1;
-                hr = IXMLDOMEntityReference_get_attributes(pEntityRef, &pAttribs);
-                ok(hr == S_FALSE, "ret %08x\n", hr );
-                ok(pAttribs == NULL, "pAttribs != NULL\n");
-
                 /* test get_xml*/
                 hr = IXMLDOMEntityReference_get_xml(pEntityRef, &str);
                 ok(hr == S_OK, "ret %08x\n", hr );
@@ -8364,8 +8299,8 @@ static const get_node_typestring_t get_node_typestring[] = {
 
 static void test_get_nodeTypeString(void)
 {
-    IXMLDOMDocument *doc;
     const get_node_typestring_t *entry = get_node_typestring;
+    IXMLDOMDocument *doc;
     HRESULT hr;
     BSTR str;
 
@@ -8402,6 +8337,99 @@ static void test_get_nodeTypeString(void)
     free_bstrs();
 }
 
+typedef struct _get_attributes_t {
+    DOMNodeType type;
+    HRESULT hr;
+} get_attributes_t;
+
+static const get_attributes_t get_attributes[] = {
+    { NODE_ATTRIBUTE,              S_FALSE },
+    { NODE_TEXT,                   S_FALSE },
+    { NODE_CDATA_SECTION ,         S_FALSE },
+    { NODE_ENTITY_REFERENCE,       S_FALSE },
+    { NODE_PROCESSING_INSTRUCTION, S_FALSE },
+    { NODE_COMMENT,                S_FALSE },
+    { NODE_DOCUMENT_FRAGMENT,      S_FALSE },
+    { 0 }
+};
+
+static void test_get_attributes(void)
+{
+    const get_attributes_t *entry = get_attributes;
+    IXMLDOMNamedNodeMap *map;
+    IXMLDOMDocument *doc;
+    IXMLDOMNode *node;
+    VARIANT_BOOL b;
+    HRESULT hr;
+    BSTR str;
+
+    doc = create_document(&IID_IXMLDOMDocument);
+
+    str = SysAllocString( szComplete3 );
+    hr = IXMLDOMDocument_loadXML(doc, str, &b);
+    SysFreeString(str);
+
+    hr = IXMLDOMDocument_get_attributes(doc, NULL);
+    ok(hr == E_INVALIDARG, "got %08x\n", hr);
+
+    map = (void*)0xdeadbeef;
+    hr = IXMLDOMDocument_get_attributes(doc, &map);
+    ok(hr == S_FALSE, "got %08x\n", hr);
+    ok(map == NULL, "got %p\n", map);
+
+    /* first child is <?xml ?> */
+    hr = IXMLDOMDocument_get_firstChild(doc, &node);
+    ok(hr == S_OK, "got %08x\n", hr);
+
+    hr = IXMLDOMNode_get_attributes(node, &map);
+    todo_wine ok(hr == S_OK, "got %08x\n", hr);
+
+    if (hr == S_OK)
+    {
+        IXMLDOMNode_Release(node);
+
+        node = NULL;
+        hr = IXMLDOMNamedNodeMap_get_item(map, 0, &node);
+        ok(hr == S_OK, "got %08x\n", hr);
+        ok(node != NULL, "got %p\n", node);
+
+        hr = IXMLDOMNode_get_nodeName(node, &str);
+        ok(hr == S_OK, "got %08x\n", hr);
+        ok(!lstrcmpW(str, _bstr_("version")), "got %s\n", wine_dbgstr_w(str));
+        SysFreeString(str);
+
+        IXMLDOMNamedNodeMap_Release(map);
+    }
+
+    IXMLDOMNode_Release(node);
+
+    while (entry->type)
+    {
+        VARIANT var;
+
+        node = NULL;
+
+        V_VT(&var) = VT_I4;
+        V_I4(&var) = entry->type;
+        hr = IXMLDOMDocument_createNode(doc, var, _bstr_("node"), NULL, &node);
+        ok(hr == S_OK, "failed to create node, type %d\n", entry->type);
+
+        hr = IXMLDOMNode_get_attributes(node, NULL);
+        ok(hr == E_INVALIDARG, "got 0x%08x\n", hr);
+
+        map = (void*)0xdeadbeef;
+        hr = IXMLDOMNode_get_attributes(node, &map);
+        ok(hr == entry->hr, "got 0x%08x, expected 0x%08x. node type %d\n",
+            hr, entry->hr, entry->type);
+        ok(map == NULL, "got %p\n", map);
+
+        entry++;
+    }
+
+    IXMLDOMDocument_Release(doc);
+    free_bstrs();
+}
+
 START_TEST(domdoc)
 {
     IXMLDOMDocument *doc;
@@ -8472,6 +8500,7 @@ START_TEST(domdoc)
     test_get_tagName();
     test_get_dataType();
     test_get_nodeTypeString();
+    test_get_attributes();
     test_xsltemplate();
 
     CoUninitialize();
-- 
1.5.6.5


--------------040901090208080008080903--



More information about the wine-patches mailing list