Module: wine Branch: master Commit: 588f27dae9b90ed7e735f73498face3ea68b9fd7 URL: http://source.winehq.org/git/wine.git/?a=commit;h=588f27dae9b90ed7e735f73498...
Author: Nikolay Sivov nsivov@codeweavers.com Date: Wed Nov 16 00:19:28 2011 +0300
msxml3: Properly return node prefix from get_prefix().
---
dlls/msxml3/entityref.c | 4 +- dlls/msxml3/node.c | 9 +--- dlls/msxml3/tests/domdoc.c | 99 ++++++++++++++++++++++++++++++++------------ 3 files changed, 77 insertions(+), 35 deletions(-)
diff --git a/dlls/msxml3/entityref.c b/dlls/msxml3/entityref.c index 79b53be..091b3d7 100644 --- a/dlls/msxml3/entityref.c +++ b/dlls/msxml3/entityref.c @@ -531,8 +531,8 @@ static HRESULT WINAPI entityref_get_prefix( BSTR* prefix) { entityref *This = impl_from_IXMLDOMEntityReference( iface ); - TRACE("(%p)->(%p)\n", This, prefix); - return node_get_prefix( &This->node, prefix ); + FIXME("(%p)->(%p): stub\n", This, prefix); + return return_null_bstr( prefix ); }
static HRESULT WINAPI entityref_get_baseName( diff --git a/dlls/msxml3/node.c b/dlls/msxml3/node.c index 3a104cd..923a0c2 100644 --- a/dlls/msxml3/node.c +++ b/dlls/msxml3/node.c @@ -1074,17 +1074,14 @@ HRESULT node_get_namespaceURI(xmlnode *This, BSTR *namespaceURI)
HRESULT node_get_prefix(xmlnode *This, BSTR *prefix) { - xmlNsPtr *ns; + xmlNsPtr ns = This->node->ns;
if (!prefix) return E_INVALIDARG;
*prefix = NULL;
- if ((ns = xmlGetNsList(This->node->doc, This->node))) - { - if (ns[0]->prefix) *prefix = bstr_from_xmlChar( ns[0]->prefix ); - xmlFree(ns); - } + if (ns && ns->prefix) + *prefix = bstr_from_xmlChar(ns->prefix);
TRACE("prefix: %s\n", debugstr_w(*prefix));
diff --git a/dlls/msxml3/tests/domdoc.c b/dlls/msxml3/tests/domdoc.c index eb1270d..bad088f 100644 --- a/dlls/msxml3/tests/domdoc.c +++ b/dlls/msxml3/tests/domdoc.c @@ -6960,21 +6960,21 @@ static void test_testTransforms(void) free_bstrs(); }
-static void test_Namespaces(void) +static void test_namespaces(void) { - static const CHAR szNamespacesXML[] = + static const CHAR namespaces_xmlA[] = "<?xml version=\"1.0\"?>\n" "<XMI xmi.version="1.1" xmlns:Model="http://omg.org/mof.Model/1.3%5C%22%3E" " <XMI.content>" - " <Model:Package name="WinePackage" />" + " <Model:Package name="WinePackage" Model:name2="name2 attr" />" " </XMI.content>" "</XMI>";
IXMLDOMDocument *doc; IXMLDOMElement *elem; IXMLDOMNode *node; - IXMLDOMNode *pNode2 = NULL; - VARIANT_BOOL bSucc; + + VARIANT_BOOL b; VARIANT var; HRESULT hr; BSTR str; @@ -6982,44 +6982,66 @@ static void test_Namespaces(void) doc = create_document(&IID_IXMLDOMDocument); if (!doc) return;
- hr = IXMLDOMDocument_loadXML(doc, _bstr_(szNamespacesXML), &bSucc); - ok(hr == S_OK, "ret %08x\n", hr ); - ok(bSucc == VARIANT_TRUE, "Expected VARIANT_TRUE got VARIANT_FALSE\n"); + hr = IXMLDOMDocument_loadXML(doc, _bstr_(namespaces_xmlA), &b); + EXPECT_HR(hr, S_OK); + ok(b == VARIANT_TRUE, "got %d\n", b);
hr = IXMLDOMDocument_selectSingleNode(doc, _bstr_("//XMI.content"), &node ); - ok(hr == S_OK, "ret %08x\n", hr ); + EXPECT_HR(hr, S_OK); if(hr == S_OK) { - hr = IXMLDOMNode_get_firstChild( node, &pNode2 ); - ok( hr == S_OK, "ret %08x\n", hr ); - ok( pNode2 != NULL, "pNode2 == NULL\n"); + IXMLDOMAttribute *attr; + IXMLDOMNode *node2; + + hr = IXMLDOMNode_get_firstChild(node, &node2); + EXPECT_HR(hr, S_OK); + ok(node2 != NULL, "got %p\n", node2);
/* Test get_prefix */ - hr = IXMLDOMNode_get_prefix(pNode2, NULL); - ok( hr == E_INVALIDARG, "ret %08x\n", hr ); + hr = IXMLDOMNode_get_prefix(node2, NULL); + EXPECT_HR(hr, E_INVALIDARG); /* NOTE: Need to test that arg2 gets cleared on Error. */
- hr = IXMLDOMNode_get_prefix(pNode2, &str); - ok( hr == S_OK, "ret %08x\n", hr ); - ok( !lstrcmpW( str, _bstr_("Model")), "incorrect prefix string\n"); + hr = IXMLDOMNode_get_prefix(node2, &str); + EXPECT_HR(hr, S_OK); + ok( !lstrcmpW( str, _bstr_("Model")), "got %s\n", wine_dbgstr_w(str)); SysFreeString(str);
- hr = IXMLDOMNode_get_nodeName(pNode2, &str); - ok( hr == S_OK, "ret %08x\n", hr ); - todo_wine ok( !lstrcmpW( str, _bstr_("Model:Package")), "incorrect nodeName string\n"); + hr = IXMLDOMNode_get_nodeName(node2, &str); + EXPECT_HR(hr, S_OK); + todo_wine ok(!lstrcmpW( str, _bstr_("Model:Package")), "got %s\n", wine_dbgstr_w(str)); SysFreeString(str);
/* Test get_namespaceURI */ - hr = IXMLDOMNode_get_namespaceURI(pNode2, NULL); - ok( hr == E_INVALIDARG, "ret %08x\n", hr ); + hr = IXMLDOMNode_get_namespaceURI(node2, NULL); + EXPECT_HR(hr, E_INVALIDARG); /* NOTE: Need to test that arg2 gets cleared on Error. */
- hr = IXMLDOMNode_get_namespaceURI(pNode2, &str); - ok( hr == S_OK, "ret %08x\n", hr ); - ok( !lstrcmpW( str, _bstr_("http://omg.org/mof.Model/1.3")), "incorrect namespaceURI string\n"); + hr = IXMLDOMNode_get_namespaceURI(node2, &str); + EXPECT_HR(hr, S_OK); + ok(!lstrcmpW( str, _bstr_("http://omg.org/mof.Model/1.3")), "got %s\n", wine_dbgstr_w(str)); + SysFreeString(str); + + hr = IXMLDOMNode_QueryInterface(node2, &IID_IXMLDOMElement, (void**)&elem); + EXPECT_HR(hr, S_OK); + + hr = IXMLDOMElement_getAttributeNode(elem, _bstr_("Model:name2"), &attr); + EXPECT_HR(hr, S_OK); + + hr = IXMLDOMAttribute_get_nodeName(attr, &str); + EXPECT_HR(hr, S_OK); + todo_wine ok(!lstrcmpW( str, _bstr_("Model:name2")), "got %s\n", wine_dbgstr_w(str)); SysFreeString(str);
- IXMLDOMNode_Release(pNode2); + hr = IXMLDOMAttribute_get_prefix(attr, &str); + EXPECT_HR(hr, S_OK); + ok(!lstrcmpW( str, _bstr_("Model")), "got %s\n", wine_dbgstr_w(str)); + SysFreeString(str); + + IXMLDOMAttribute_Release(attr); + IXMLDOMElement_Release(elem); + + IXMLDOMNode_Release(node2); IXMLDOMNode_Release(node); }
@@ -8579,6 +8601,10 @@ todo_wine { free_bstrs(); }
+static const char get_prefix_doc[] = + "<?xml version=\"1.0\" ?>" + "<a xmlns:ns1="ns1 href" />"; + static void test_get_prefix(void) { IXMLDOMDocumentFragment *fragment; @@ -8586,6 +8612,7 @@ static void test_get_prefix(void) IXMLDOMElement *element; IXMLDOMComment *comment; IXMLDOMDocument *doc; + VARIANT_BOOL b; HRESULT hr; BSTR str;
@@ -8672,6 +8699,24 @@ static void test_get_prefix(void)
IXMLDOMElement_Release(element);
+ hr = IXMLDOMDocument_loadXML(doc, _bstr_(get_prefix_doc), &b); + EXPECT_HR(hr, S_OK); + + hr = IXMLDOMDocument_get_documentElement(doc, &element); + EXPECT_HR(hr, S_OK); + + str = (void*)0xdeadbeef; + hr = IXMLDOMElement_get_prefix(element, &str); + EXPECT_HR(hr, S_FALSE); + ok(str == NULL, "got %p\n", str); + + str = (void*)0xdeadbeef; + hr = IXMLDOMElement_get_namespaceURI(element, &str); +todo_wine { + EXPECT_HR(hr, S_FALSE); + ok(str == NULL, "got %s\n", wine_dbgstr_w(str)); +} + IXMLDOMDocument_Release(doc); free_bstrs(); } @@ -10741,7 +10786,7 @@ START_TEST(domdoc) test_nodeTypeTests(); test_save(); test_testTransforms(); - test_Namespaces(); + test_namespaces(); test_FormattingXML(); test_nodeTypedValue(); test_TransformWithLoadingLocalFile();