msxml3: Fix IXMLDOMNode::get_prefix() for empty prefix.

This commit is contained in:
Nikolay Sivov 2010-09-14 09:00:02 +04:00 committed by Alexandre Julliard
parent 8d055c7854
commit 154c0828bf
2 changed files with 56 additions and 11 deletions

View File

@ -1429,8 +1429,7 @@ static HRESULT WINAPI xmlnode_get_prefix(
BSTR* prefixString)
{
xmlnode *This = impl_from_IXMLDOMNode( iface );
HRESULT hr = S_FALSE;
xmlNsPtr *pNSList;
xmlNsPtr *ns;
TRACE("(%p)->(%p)\n", This, prefixString );
@ -1439,16 +1438,15 @@ static HRESULT WINAPI xmlnode_get_prefix(
*prefixString = NULL;
pNSList = xmlGetNsList(This->node->doc, This->node);
if(pNSList)
if ((ns = xmlGetNsList(This->node->doc, This->node)))
{
*prefixString = bstr_from_xmlChar( pNSList[0]->prefix );
xmlFree(pNSList);
hr = S_OK;
if (ns[0]->prefix) *prefixString = bstr_from_xmlChar( ns[0]->prefix );
xmlFree(ns);
}
return hr;
TRACE("prefix %s\n", debugstr_w(*prefixString));
return *prefixString ? S_OK : S_FALSE;
}
static HRESULT WINAPI xmlnode_get_baseName(

View File

@ -6103,8 +6103,8 @@ static void test_createNode(void)
ok( hr == S_OK, "got 0x%08x\n", hr);
prefix = (void*)0xdeadbeef;
hr = IXMLDOMNode_get_prefix(node, &prefix);
todo_wine ok( hr == S_FALSE, "got 0x%08x\n", hr);
todo_wine ok(prefix == 0, "expected empty prefix, got %p\n", prefix);
ok( hr == S_FALSE, "got 0x%08x\n", hr);
ok(prefix == 0, "expected empty prefix, got %p\n", prefix);
hr = IXMLDOMNode_QueryInterface(node, &IID_IXMLDOMElement, (void**)&elem);
ok( hr == S_OK, "got 0x%08x\n", hr);
@ -6118,6 +6118,7 @@ static void test_createNode(void)
hr = IXMLDOMElement_get_namespaceURI(elem, &str);
ok( hr == S_OK, "got 0x%08x\n", hr);
ok( lstrcmpW(str, _bstr_("http://winehq.org/default")) == 0, "expected default namespace\n");
SysFreeString(str);
IXMLDOMElement_Release(elem);
IXMLDOMNode_Release(node);
@ -6126,6 +6127,51 @@ static void test_createNode(void)
free_bstrs();
}
static void test_get_prefix(void)
{
IXMLDOMDocument *doc;
IXMLDOMElement *element;
HRESULT hr;
BSTR str;
doc = create_document(&IID_IXMLDOMDocument);
if (!doc) return;
/* no prefix */
hr = IXMLDOMDocument_createElement(doc, _bstr_("elem"), &element);
ok( hr == S_OK, "got 0x%08x\n", hr);
hr = IXMLDOMElement_get_prefix(element, NULL);
ok( hr == E_INVALIDARG, "got 0x%08x\n", hr);
str = (void*)0xdeadbeef;
hr = IXMLDOMElement_get_prefix(element, &str);
ok( hr == S_FALSE, "got 0x%08x\n", hr);
ok( str == 0, "got %p\n", str);
IXMLDOMElement_Release(element);
/* with prefix */
hr = IXMLDOMDocument_createElement(doc, _bstr_("a:elem"), &element);
ok( hr == S_OK, "got 0x%08x\n", hr);
str = (void*)0xdeadbeef;
hr = IXMLDOMElement_get_prefix(element, &str);
ok( hr == S_OK, "got 0x%08x\n", hr);
ok( lstrcmpW(str, _bstr_("a")) == 0, "expected prefix \"a\"\n");
SysFreeString(str);
str = (void*)0xdeadbeef;
hr = IXMLDOMElement_get_namespaceURI(element, &str);
todo_wine ok( hr == S_FALSE, "got 0x%08x\n", hr);
todo_wine ok( str == 0, "got %p\n", str);
IXMLDOMElement_Release(element);
IXMLDOMDocument_Release(doc);
free_bstrs();
}
START_TEST(domdoc)
{
IXMLDOMDocument *doc;
@ -6182,6 +6228,7 @@ START_TEST(domdoc)
test_setAttributeNode();
test_put_dataType();
test_createNode();
test_get_prefix();
CoUninitialize();
}