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