xmllite/reader: For elements without a prefix return same string for both local and qualified names.
Signed-off-by: Nikolay Sivov <nsivov@codeweavers.com> Signed-off-by: Alexandre Julliard <julliard@winehq.org>
This commit is contained in:
parent
1e015f1e14
commit
d7057a34b3
|
@ -490,6 +490,7 @@ static void reader_clear_elements(xmlreader *reader)
|
|||
}
|
||||
list_init(&reader->elements);
|
||||
reader_free_strvalued(reader, &reader->empty_element.localname);
|
||||
reader_free_strvalued(reader, &reader->empty_element.qname);
|
||||
reader->is_empty_element = FALSE;
|
||||
}
|
||||
|
||||
|
@ -2227,10 +2228,11 @@ static HRESULT reader_parse_stag(xmlreader *reader, strval *prefix, strval *loca
|
|||
/* skip '/>' */
|
||||
reader_skipn(reader, 2);
|
||||
|
||||
reader_free_strvalued(reader, &element->qname);
|
||||
reader_free_strvalued(reader, &element->localname);
|
||||
|
||||
element->prefix = *prefix;
|
||||
element->qname = *qname;
|
||||
reader_strvaldup(reader, qname, &element->qname);
|
||||
reader_strvaldup(reader, local, &element->localname);
|
||||
element->position = position;
|
||||
reader_mark_ns_nodes(reader, element);
|
||||
|
@ -2980,6 +2982,7 @@ static HRESULT WINAPI xmlreader_MoveToElement(IXmlReader* iface)
|
|||
static HRESULT WINAPI xmlreader_GetQualifiedName(IXmlReader* iface, LPCWSTR *name, UINT *len)
|
||||
{
|
||||
xmlreader *This = impl_from_IXmlReader(iface);
|
||||
struct element *element;
|
||||
UINT length;
|
||||
|
||||
TRACE("(%p)->(%p %p)\n", This, name, len);
|
||||
|
@ -2998,14 +3001,18 @@ static HRESULT WINAPI xmlreader_GetQualifiedName(IXmlReader* iface, LPCWSTR *nam
|
|||
break;
|
||||
case XmlNodeType_Element:
|
||||
case XmlNodeType_EndElement:
|
||||
if (!This->is_empty_element)
|
||||
element = reader_get_element(This);
|
||||
if (element->prefix.len)
|
||||
{
|
||||
struct element *element = reader_get_element(This);
|
||||
*name = element->qname.str;
|
||||
*len = element->qname.len;
|
||||
break;
|
||||
}
|
||||
/* fallthrough */
|
||||
else
|
||||
{
|
||||
*name = element->localname.str;
|
||||
*len = element->localname.len;
|
||||
}
|
||||
break;
|
||||
default:
|
||||
*name = This->strvalues[StringValue_QualifiedName].str;
|
||||
*len = This->strvalues[StringValue_QualifiedName].len;
|
||||
|
|
|
@ -1494,6 +1494,8 @@ static void test_read_element(void)
|
|||
i = 0;
|
||||
while (IXmlReader_Read(reader, &type) == S_OK)
|
||||
{
|
||||
UINT count;
|
||||
|
||||
ok(type == XmlNodeType_Element || type == XmlNodeType_EndElement ||
|
||||
type == XmlNodeType_Text, "Unexpected node type %d\n", type);
|
||||
|
||||
|
@ -1502,10 +1504,44 @@ static void test_read_element(void)
|
|||
ok(hr == S_OK, "got %08x\n", hr);
|
||||
ok(depth == depths[i], "%u: got depth %u, expected %u\n", i, depth, depths[i]);
|
||||
|
||||
if (type == XmlNodeType_Element || type == XmlNodeType_EndElement)
|
||||
{
|
||||
const WCHAR *prefix;
|
||||
|
||||
prefix = NULL;
|
||||
hr = IXmlReader_GetPrefix(reader, &prefix, NULL);
|
||||
ok(hr == S_OK, "got %08x\n", hr);
|
||||
ok(prefix != NULL, "got %p\n", prefix);
|
||||
|
||||
if (!*prefix)
|
||||
{
|
||||
const WCHAR *local, *qname;
|
||||
|
||||
local = NULL;
|
||||
hr = IXmlReader_GetLocalName(reader, &local, NULL);
|
||||
ok(hr == S_OK, "got %08x\n", hr);
|
||||
ok(local != NULL, "got %p\n", local);
|
||||
|
||||
qname = NULL;
|
||||
hr = IXmlReader_GetQualifiedName(reader, &qname, NULL);
|
||||
ok(hr == S_OK, "got %08x\n", hr);
|
||||
ok(qname != NULL, "got %p\n", qname);
|
||||
|
||||
ok(local == qname, "expected same pointer\n");
|
||||
}
|
||||
}
|
||||
|
||||
if (type == XmlNodeType_EndElement)
|
||||
{
|
||||
count = 1;
|
||||
hr = IXmlReader_GetAttributeCount(reader, &count);
|
||||
ok(hr == S_OK, "got %08x\n", hr);
|
||||
ok(count == 0, "got %u\n", count);
|
||||
}
|
||||
|
||||
if (type == XmlNodeType_Element)
|
||||
{
|
||||
UINT count = 0;
|
||||
|
||||
count = 0;
|
||||
hr = IXmlReader_GetAttributeCount(reader, &count);
|
||||
ok(hr == S_OK, "got %08x\n", hr);
|
||||
|
||||
|
|
Loading…
Reference in New Issue