Module: wine Branch: master Commit: d2737dde801b55a1feb4d7d489082d3ced33f2fc URL: http://source.winehq.org/git/wine.git/?a=commit;h=d2737dde801b55a1feb4d7d489...
Author: Nikolay Sivov nsivov@codeweavers.com Date: Wed May 14 11:52:13 2014 +0400
xmllite/writer: Implement GetProperty().
---
dlls/xmllite/reader.c | 6 ++--- dlls/xmllite/tests/writer.c | 23 +++++++++++++++++++ dlls/xmllite/writer.c | 52 ++++++++++++++++++++++++++++++++++++++++--- 3 files changed, 75 insertions(+), 6 deletions(-)
diff --git a/dlls/xmllite/reader.c b/dlls/xmllite/reader.c index 6e3f9cd..deb2d2e 100644 --- a/dlls/xmllite/reader.c +++ b/dlls/xmllite/reader.c @@ -123,7 +123,7 @@ static const char *debugstr_nodetype(XmlNodeType nodetype) return type_names[nodetype]; }
-static const char *debugstr_prop(XmlReaderProperty prop) +static const char *debugstr_reader_prop(XmlReaderProperty prop) { static const char * const prop_names[] = { @@ -2537,7 +2537,7 @@ static HRESULT WINAPI xmlreader_GetProperty(IXmlReader* iface, UINT property, LO { xmlreader *This = impl_from_IXmlReader(iface);
- TRACE("(%p)->(%s %p)\n", This, debugstr_prop(property), value); + TRACE("(%p)->(%s %p)\n", This, debugstr_reader_prop(property), value);
if (!value) return E_INVALIDARG;
@@ -2561,7 +2561,7 @@ static HRESULT WINAPI xmlreader_SetProperty(IXmlReader* iface, UINT property, LO { xmlreader *This = impl_from_IXmlReader(iface);
- TRACE("(%p)->(%s %lu)\n", This, debugstr_prop(property), value); + TRACE("(%p)->(%s %lu)\n", This, debugstr_reader_prop(property), value);
switch (property) { diff --git a/dlls/xmllite/tests/writer.c b/dlls/xmllite/tests/writer.c index b5935c1..738844f 100644 --- a/dlls/xmllite/tests/writer.c +++ b/dlls/xmllite/tests/writer.c @@ -71,6 +71,7 @@ static void test_writer_create(void) { HRESULT hr; IXmlWriter *writer; + LONG_PTR value;
/* crashes native */ if (0) @@ -81,6 +82,28 @@ static void test_writer_create(void)
hr = pCreateXmlWriter(&IID_IXmlWriter, (void**)&writer, NULL); ok(hr == S_OK, "Expected S_OK, got %08x\n", hr); + + /* check default properties values */ + value = 0; + hr = IXmlWriter_GetProperty(writer, XmlWriterProperty_ByteOrderMark, &value); + ok(hr == S_OK, "Expected S_OK, got %08x\n", hr); + ok(value == TRUE, "got %ld\n", value); + + value = TRUE; + hr = IXmlWriter_GetProperty(writer, XmlWriterProperty_Indent, &value); + ok(hr == S_OK, "Expected S_OK, got %08x\n", hr); + ok(value == FALSE, "got %ld\n", value); + + value = TRUE; + hr = IXmlWriter_GetProperty(writer, XmlWriterProperty_OmitXmlDeclaration, &value); + ok(hr == S_OK, "Expected S_OK, got %08x\n", hr); + ok(value == FALSE, "got %ld\n", value); + + value = XmlConformanceLevel_Auto; + hr = IXmlWriter_GetProperty(writer, XmlWriterProperty_ConformanceLevel, &value); + ok(hr == S_OK, "Expected S_OK, got %08x\n", hr); + ok(value == XmlConformanceLevel_Document, "got %ld\n", value); + IXmlWriter_Release(writer); }
diff --git a/dlls/xmllite/writer.c b/dlls/xmllite/writer.c index a58164b..2432602 100644 --- a/dlls/xmllite/writer.c +++ b/dlls/xmllite/writer.c @@ -52,6 +52,10 @@ typedef struct _xmlwriter LONG ref; IMalloc *imalloc; xmlwriteroutput *output; + BOOL indent; + BOOL bom; + BOOL omitxmldecl; + XmlConformanceLevel conformance; } xmlwriter;
static inline xmlwriter *impl_from_IXmlWriter(IXmlWriter *iface) @@ -64,6 +68,23 @@ static inline xmlwriteroutput *impl_from_IXmlWriterOutput(IXmlWriterOutput *ifac return CONTAINING_RECORD(iface, xmlwriteroutput, IXmlWriterOutput_iface); }
+static const char *debugstr_writer_prop(XmlWriterProperty prop) +{ + static const char * const prop_names[] = + { + "MultiLanguage", + "Indent", + "ByteOrderMark", + "OmitXmlDeclaration", + "ConformanceLevel" + }; + + if (prop > _XmlWriterProperty_Last) + return wine_dbg_sprintf("unknown property=%d", prop); + + return prop_names[prop]; +} + /* writer output memory allocation functions */ static inline void *writeroutput_alloc(xmlwriteroutput *output, size_t len) { @@ -191,13 +212,34 @@ static HRESULT WINAPI xmlwriter_SetOutput(IXmlWriter *iface, IUnknown *output) return writeroutput_query_for_stream(This->output); }
-static HRESULT WINAPI xmlwriter_GetProperty(IXmlWriter *iface, UINT nProperty, LONG_PTR *ppValue) +static HRESULT WINAPI xmlwriter_GetProperty(IXmlWriter *iface, UINT property, LONG_PTR *value) { xmlwriter *This = impl_from_IXmlWriter(iface);
- FIXME("%p %u %p\n", This, nProperty, ppValue); + TRACE("(%p)->(%s %p)\n", This, debugstr_writer_prop(property), value);
- return E_NOTIMPL; + if (!value) return E_INVALIDARG; + + switch (property) + { + case XmlWriterProperty_Indent: + *value = This->indent; + break; + case XmlWriterProperty_ByteOrderMark: + *value = This->bom; + break; + case XmlWriterProperty_OmitXmlDeclaration: + *value = This->omitxmldecl; + break; + case XmlWriterProperty_ConformanceLevel: + *value = This->conformance; + break; + default: + FIXME("Unimplemented property (%u)\n", property); + return E_NOTIMPL; + } + + return S_OK; }
static HRESULT WINAPI xmlwriter_SetProperty(IXmlWriter *iface, UINT nProperty, LONG_PTR pValue) @@ -567,6 +609,10 @@ HRESULT WINAPI CreateXmlWriter(REFIID riid, void **obj, IMalloc *imalloc) writer->imalloc = imalloc; if (imalloc) IMalloc_AddRef(imalloc); writer->output = NULL; + writer->indent = FALSE; + writer->bom = TRUE; + writer->omitxmldecl = FALSE; + writer->conformance = XmlConformanceLevel_Document;
*obj = &writer->IXmlWriter_iface;