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