Module: wine Branch: master Commit: 201b1c2aba3832fe45c03f04378e6fe2c3db266d URL: http://source.winehq.org/git/wine.git/?a=commit;h=201b1c2aba3832fe45c03f0437...
Author: Nikolay Sivov nsivov@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); }