From 201b1c2aba3832fe45c03f04378e6fe2c3db266d Mon Sep 17 00:00:00 2001 From: Nikolay Sivov Date: Thu, 6 Dec 2012 16:18:28 +0400 Subject: [PATCH] xmllite: 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 ec7fe37987d..8ec2eae4331 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 099c8fb6630..852f3d42836 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); }