msxml3: Use our parent doc if we don't have one.
authorAlistair Leslie-Hughes <leslie_alistair@hotmail.com>
Thu, 5 Feb 2009 09:43:59 +0000 (20:43 +1100)
committerAlexandre Julliard <julliard@winehq.org>
Mon, 9 Feb 2009 16:17:09 +0000 (17:17 +0100)
dlls/msxml3/node.c
dlls/msxml3/tests/domdoc.c

index 7baef30..72cc61e 100644 (file)
@@ -387,6 +387,11 @@ static HRESULT get_node(
 
     if ( !out )
         return E_INVALIDARG;
+
+    /* if we dont have a doc, use our parent. */
+    if(node && !node->doc && node->parent)
+        node->doc = node->parent->doc;
+
     *out = create_node( node );
     if (!*out)
         return S_FALSE;
index 584eab3..c70e6ed 100644 (file)
@@ -2404,6 +2404,7 @@ static void test_cloneNode(void )
     long nAttrCnt = 0, nAttrCnt1 = 0;
     IXMLDOMNode *node;
     IXMLDOMNode *node_clone;
+    IXMLDOMNode *node_first;
     HRESULT r;
     BSTR str;
     static const WCHAR szSearch[] = { 'l', 'c', '/', 'p', 'r', 0 };
@@ -2448,6 +2449,20 @@ static void test_cloneNode(void )
         return;
     }
 
+    r = IXMLDOMNode_get_firstChild(node_clone, &node_first);
+    ok( r == S_OK, "ret %08x\n", r );
+    if(r == S_OK)
+    {
+        IXMLDOMDocument *doc2;
+
+        r = IXMLDOMNode_get_ownerDocument(node_clone, &doc2);
+        ok( r == S_OK, "ret %08x\n", r );
+        if(r == S_OK)
+            IXMLDOMDocument_Release(doc2);
+
+        IXMLDOMNode_Release(node_first);
+    }
+
     r = IXMLDOMNode_get_childNodes(node, &pList);
     ok( r == S_OK, "ret %08x\n", r );
     if (pList)
@@ -2496,6 +2511,20 @@ static void test_cloneNode(void )
         return;
     }
 
+    r = IXMLDOMNode_get_firstChild(node_clone, &node_first);
+    ok( r == S_FALSE, "ret %08x\n", r );
+    if(r == S_OK)
+    {
+        IXMLDOMDocument *doc2;
+
+        r = IXMLDOMNode_get_ownerDocument(node_clone, &doc2);
+        ok( r == S_OK, "ret %08x\n", r );
+        if(r == S_OK)
+            IXMLDOMDocument_Release(doc2);
+
+        IXMLDOMNode_Release(node_first);
+    }
+
     r = IXMLDOMNode_get_childNodes(node_clone, &pList);
     ok( r == S_OK, "ret %08x\n", r );
     if (pList)