[2/2] xmllite: Fix reported node type for attributes

Nikolay Sivov nsivov at codeweavers.com
Thu Dec 6 06:27:23 CST 2012


Fix reported node type for attributes
-------------- next part --------------
>From ece200ad8b15dc0d0a4c348aa6ddd50571d8cd9b Mon Sep 17 00:00:00 2001
From: Nikolay Sivov <nsivov at codeweavers.com>
Date: Thu, 6 Dec 2012 16:18:28 +0400
Subject: [PATCH 2/2] Fix reported node type for attributes

---
 dlls/xmllite/reader.c       |    6 +++++-
 dlls/xmllite/tests/reader.c |   16 ++++++++++++++++
 2 files changed, 21 insertions(+), 1 deletion(-)

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);
 }
-- 
1.7.10.4




More information about the wine-patches mailing list