Nikolay Sivov : xmllite: Fix reported node type for attributes.
Alexandre Julliard
julliard at winehq.org
Thu Dec 6 16:25:10 CST 2012
Module: wine
Branch: master
Commit: 201b1c2aba3832fe45c03f04378e6fe2c3db266d
URL: http://source.winehq.org/git/wine.git/?a=commit;h=201b1c2aba3832fe45c03f04378e6fe2c3db266d
Author: Nikolay Sivov <nsivov at codeweavers.com>
Date: Thu Dec 6 16:18:28 2012 +0400
xmllite: Fix reported node type for attributes.
---
dlls/xmllite/reader.c | 6 +++++-
dlls/xmllite/tests/reader.c | 16 ++++++++++++++++
2 files changed, 21 insertions(+), 1 deletions(-)
diff --git a/dlls/xmllite/reader.c b/dlls/xmllite/reader.c
index ec7fe37..8ec2eae 100644
--- a/dlls/xmllite/reader.c
+++ b/dlls/xmllite/reader.c
@@ -937,7 +937,11 @@ static HRESULT WINAPI xmlreader_GetNodeType(IXmlReader* iface, XmlNodeType *node
{
xmlreader *This = impl_from_IXmlReader(iface);
TRACE("(%p)->(%p)\n", This, node_type);
- *node_type = This->nodetype;
+
+ /* When we're on attribute always return attribute type, container node type is kept.
+ Note that container is not necessarily an element, and attribute doesn't mean it's
+ an attribute in XML spec terms. */
+ *node_type = This->attr ? XmlNodeType_Attribute : This->nodetype;
return This->state == XmlReadState_Closed ? S_FALSE : S_OK;
}
diff --git a/dlls/xmllite/tests/reader.c b/dlls/xmllite/tests/reader.c
index 099c8fb..852f3d4 100644
--- a/dlls/xmllite/tests/reader.c
+++ b/dlls/xmllite/tests/reader.c
@@ -642,6 +642,12 @@ todo_wine
/* check attributes */
hr = IXmlReader_MoveToNextAttribute(reader);
ok(hr == S_OK, "got %08x\n", hr);
+
+ type = XmlNodeType_None;
+ hr = IXmlReader_GetNodeType(reader, &type);
+ ok(hr == S_OK, "got %08x\n", hr);
+ ok(type == XmlNodeType_Attribute, "got %d\n", type);
+
ok_pos(reader, 1, 7, -1, 55, TRUE);
/* try to move from last attribute */
@@ -652,6 +658,11 @@ todo_wine
hr = IXmlReader_MoveToNextAttribute(reader);
ok(hr == S_FALSE, "got %08x\n", hr);
+ type = XmlNodeType_None;
+ hr = IXmlReader_GetNodeType(reader, &type);
+ ok(hr == S_OK, "got %08x\n", hr);
+ ok(type == XmlNodeType_Attribute, "got %d\n", type);
+
hr = IXmlReader_MoveToFirstAttribute(reader);
ok(hr == S_OK, "got %08x\n", hr);
ok_pos(reader, 1, 7, -1, 55, TRUE);
@@ -672,6 +683,11 @@ todo_wine {
hr = IXmlReader_MoveToElement(reader);
ok(hr == S_OK, "got %08x\n", hr);
+ type = XmlNodeType_None;
+ hr = IXmlReader_GetNodeType(reader, &type);
+ ok(hr == S_OK, "got %08x\n", hr);
+ ok(type == XmlNodeType_XmlDeclaration, "got %d\n", type);
+
IStream_Release(stream);
IXmlReader_Release(reader);
}
More information about the wine-cvs
mailing list