[PATCH] Implement ownerDocument

Alistair Leslie-Hughes leslie_alistair at hotmail.com
Tue Jan 22 18:07:59 CST 2008


---
 dlls/msxml3/node.c         |   22 ++++++++++++++++++++--
 dlls/msxml3/tests/domdoc.c |   23 +++++++++++++++++++++--
 2 files changed, 41 insertions(+), 4 deletions(-)

diff --git a/dlls/msxml3/node.c b/dlls/msxml3/node.c
index 9d43c09..bc7a2a0 100644
--- a/dlls/msxml3/node.c
+++ b/dlls/msxml3/node.c
@@ -602,8 +602,26 @@ static HRESULT WINAPI xmlnode_get_ownerDocument(
     IXMLDOMNode *iface,
     IXMLDOMDocument** DOMDocument)
 {
-    FIXME("\n");
-    return E_NOTIMPL;
+    HRESULT hr = S_OK;
+    xmlnode *This = impl_from_IXMLDOMNode( iface );
+    TRACE("\n");
+    
+    if(!DOMDocument)
+        return E_INVALIDARG;
+        
+    *DOMDocument = NULL;
+    
+    switch( This->node->type )
+    {
+    case XML_DOCUMENT_NODE:
+        hr = S_FALSE;
+        break;
+    default:              
+        *DOMDocument = (IXMLDOMDocument*)create_basic_node( (xmlNodePtr)This->node->doc, NULL );

+        break;
+    }
+    
+    return hr;
 }
 
 static HRESULT WINAPI xmlnode_cloneNode(
diff --git a/dlls/msxml3/tests/domdoc.c b/dlls/msxml3/tests/domdoc.c
index 4507d08..8802053 100644
--- a/dlls/msxml3/tests/domdoc.c
+++ b/dlls/msxml3/tests/domdoc.c
@@ -687,10 +687,9 @@ static void test_domnode( void )
     {
         owner = NULL;
         r = IXMLDOMNode_get_ownerDocument( element, &owner );
-        todo_wine {
         ok( r == S_OK, "get_ownerDocument return code\n");
-        }
         ok( owner != doc, "get_ownerDocument return\n");
+        IXMLDOMDocument_Release(owner);
 
         type = NODE_INVALID;
         r = IXMLDOMNode_get_nodeType( element, &type);
@@ -1869,6 +1868,7 @@ static void test_cloneNode(void )
 static void test_xmlTypes(void)
 {
     IXMLDOMDocument *doc = NULL;
+    IXMLDOMDocument *docOwner = NULL;
     IXMLDOMElement *pRoot;
     HRESULT hr;
     IXMLDOMComment *pComment;
@@ -1923,6 +1923,25 @@ static void test_xmlTypes(void)
     ok(hr == S_OK, "ret %08x\n", hr );
     ok( !lstrcmpW( str, _bstr_("document") ), "incorrect nodeTypeString string\n");
     SysFreeString(str);
+    
+    /* test ownerDocument */
+    hr = IXMLDOMDocument_get_ownerDocument(doc, NULL);
+    ok(hr == E_INVALIDARG, "ret %08x\n", hr );
+    
+    hr = IXMLDOMDocument_get_ownerDocument(doc, &docOwner);
+    ok(hr == S_FALSE, "ret %08x\n", hr );
+    ok(docOwner == NULL, "ownerDocument return a value\n");    
+    if(docOwner != NULL)
+    {
+        str = NULL;
+        hr = IXMLDOMDocument_get_nodeName( docOwner, &str );
+        ok ( hr == S_OK, "get_nodeName wrong code\n");
+        ok ( str != NULL, "str is null\n");
+        ok( !lstrcmpW( str, szDocument ), "incorrect nodeName\n");
+        SysFreeString( str );
+        
+        IXMLDOMDocument_Release(docOwner);
+    }
 
     /* test implementation */
     hr = IXMLDOMDocument_get_implementation(doc, NULL);
-- 
1.5.3.7


--------------000608090609060504000305--




More information about the wine-patches mailing list