Nikolay Sivov : xmllite/writer: Implement GetProperty().
Alexandre Julliard
julliard at winehq.org
Wed May 14 15:39:05 CDT 2014
Module: wine
Branch: master
Commit: d2737dde801b55a1feb4d7d489082d3ced33f2fc
URL: http://source.winehq.org/git/wine.git/?a=commit;h=d2737dde801b55a1feb4d7d489082d3ced33f2fc
Author: Nikolay Sivov <nsivov at 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;
More information about the wine-cvs
mailing list