[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