[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