From 020bf5a18e4f5adfbb641e43b0cb2ef36337d9bc Mon Sep 17 00:00:00 2001 From: Nikolay Sivov Date: Wed, 4 May 2011 11:10:34 +0400 Subject: [PATCH] msxml3: Add support for omitXMLDeclaration() property. --- dlls/msxml3/mxwriter.c | 23 +++++++++++++++++----- dlls/msxml3/tests/saxreader.c | 36 +++++++++++++++++++++++++++++++++++ 2 files changed, 54 insertions(+), 5 deletions(-) diff --git a/dlls/msxml3/mxwriter.c b/dlls/msxml3/mxwriter.c index b48533aaf5a..d2ff775a881 100644 --- a/dlls/msxml3/mxwriter.c +++ b/dlls/msxml3/mxwriter.c @@ -44,7 +44,8 @@ static const char crlfA[] = "\r\n"; typedef enum { - MXWriter_Standalone = 0, + MXWriter_OmitXmlDecl = 0, + MXWriter_Standalone, MXWriter_LastProp } MXWRITER_PROPS; @@ -347,15 +348,24 @@ static HRESULT WINAPI mxwriter_get_standalone(IMXWriter *iface, VARIANT_BOOL *va static HRESULT WINAPI mxwriter_put_omitXMLDeclaration(IMXWriter *iface, VARIANT_BOOL value) { mxwriter *This = impl_from_IMXWriter( iface ); - FIXME("(%p)->(%d)\n", This, value); - return E_NOTIMPL; + + TRACE("(%p)->(%d)\n", This, value); + This->props[MXWriter_OmitXmlDecl] = value; + + return S_OK; } static HRESULT WINAPI mxwriter_get_omitXMLDeclaration(IMXWriter *iface, VARIANT_BOOL *value) { mxwriter *This = impl_from_IMXWriter( iface ); - FIXME("(%p)->(%p)\n", This, value); - return E_NOTIMPL; + + TRACE("(%p)->(%p)\n", This, value); + + if (!value) return E_POINTER; + + *value = This->props[MXWriter_OmitXmlDecl]; + + return S_OK; } static HRESULT WINAPI mxwriter_put_version(IMXWriter *iface, BSTR version) @@ -463,6 +473,8 @@ static HRESULT WINAPI mxwriter_saxcontent_startDocument(ISAXContentHandler *ifac TRACE("(%p)\n", This); + if (This->props[MXWriter_OmitXmlDecl] == VARIANT_TRUE) return S_OK; + /* version */ xmlOutputBufferWriteString(This->buffer, "version); @@ -627,6 +639,7 @@ HRESULT MXWriter_create(IUnknown *pUnkOuter, void **ppObj) This->ISAXContentHandler_iface.lpVtbl = &mxwriter_saxcontent_vtbl; This->ref = 1; + This->props[MXWriter_OmitXmlDecl] = VARIANT_FALSE; This->props[MXWriter_Standalone] = VARIANT_FALSE; This->encoding = SysAllocString(utf16W); This->version = SysAllocString(version10W); diff --git a/dlls/msxml3/tests/saxreader.c b/dlls/msxml3/tests/saxreader.c index 6ae7e3d6ccf..0f732adbc07 100644 --- a/dlls/msxml3/tests/saxreader.c +++ b/dlls/msxml3/tests/saxreader.c @@ -731,6 +731,14 @@ static void test_mxwriter_properties(void) &IID_IMXWriter, (void**)&writer); ok(hr == S_OK, "Expected S_OK, got %08x\n", hr); + hr = IMXWriter_get_omitXMLDeclaration(writer, NULL); + ok(hr == E_POINTER, "got %08x\n", hr); + + b = VARIANT_TRUE; + hr = IMXWriter_get_omitXMLDeclaration(writer, &b); + ok(hr == S_OK, "got %08x\n", hr); + ok(b == VARIANT_FALSE, "got %d\n", b); + hr = IMXWriter_get_standalone(writer, NULL); ok(hr == E_POINTER, "got %08x\n", hr); @@ -918,6 +926,34 @@ static void test_mxwriter_startenddocument(void) ISAXContentHandler_Release(content); IMXWriter_Release(writer); + + /* now with omitted declaration */ + hr = CoCreateInstance(&CLSID_MXXMLWriter, NULL, CLSCTX_INPROC_SERVER, + &IID_IMXWriter, (void**)&writer); + ok(hr == S_OK, "Expected S_OK, got %08x\n", hr); + + hr = IMXWriter_QueryInterface(writer, &IID_ISAXContentHandler, (void**)&content); + ok(hr == S_OK, "got %08x\n", hr); + + hr = IMXWriter_put_omitXMLDeclaration(writer, VARIANT_TRUE); + ok(hr == S_OK, "got %08x\n", hr); + + hr = ISAXContentHandler_startDocument(content); + ok(hr == S_OK, "got %08x\n", hr); + + hr = ISAXContentHandler_endDocument(content); + todo_wine ok(hr == S_OK, "got %08x\n", hr); + + V_VT(&dest) = VT_EMPTY; + hr = IMXWriter_get_output(writer, &dest); + ok(hr == S_OK, "got %08x\n", hr); + ok(V_VT(&dest) == VT_BSTR, "got %d\n", V_VT(&dest)); + ok(!lstrcmpW(_bstr_(""), V_BSTR(&dest)), "got wrong content %s\n", wine_dbgstr_w(V_BSTR(&dest))); + VariantClear(&dest); + + ISAXContentHandler_Release(content); + IMXWriter_Release(writer); + free_bstrs(); }