From: Nikolay Sivov nsivov@codeweavers.com
Signed-off-by: Nikolay Sivov nsivov@codeweavers.com --- dlls/xmllite/tests/writer.c | 19 +++++++++++++++++-- dlls/xmllite/writer.c | 3 +++ 2 files changed, 20 insertions(+), 2 deletions(-)
diff --git a/dlls/xmllite/tests/writer.c b/dlls/xmllite/tests/writer.c index b0ea2a54901..c441e026924 100644 --- a/dlls/xmllite/tests/writer.c +++ b/dlls/xmllite/tests/writer.c @@ -725,7 +725,7 @@ static void test_flush(void) hr = IXmlWriter_SetOutput(writer, NULL); ok(hr == S_OK, "Unexpected hr %#lx.\n", hr);
- CHECK_OUTPUT_TODO(stream, "<a />"); + CHECK_OUTPUT(stream, "<a />"); IStream_Release(stream);
/* Switching to different output. */ @@ -737,11 +737,26 @@ static void test_flush(void) CHECK_OUTPUT(stream, "");
stream2 = writer_set_output(writer); - CHECK_OUTPUT_TODO(stream, "<m:a xmlns:m="uri" />"); + CHECK_OUTPUT(stream, "<m:a xmlns:m="uri" />"); IStream_Release(stream2);
IStream_Release(stream);
+ /* Setting same output again */ + stream = writer_set_output(writer); + + hr = IXmlWriter_WriteStartElement(writer, L"m", L"a", L"uri"); + ok(hr == S_OK, "Unexpected hr %#lx.\n", hr); + + CHECK_OUTPUT(stream, ""); + + hr = IXmlWriter_SetOutput(writer, (IUnknown *)stream); + ok(hr == S_OK, "Unexpected hr %#lx.\n", hr); + + CHECK_OUTPUT(stream, "<m:a xmlns:m="uri" />"); + + IStream_Release(stream); + /* Direct flush with open element */ stream = writer_set_output(writer);
diff --git a/dlls/xmllite/writer.c b/dlls/xmllite/writer.c index 764db383231..c96b8ee374d 100644 --- a/dlls/xmllite/writer.c +++ b/dlls/xmllite/writer.c @@ -859,6 +859,9 @@ static HRESULT WINAPI xmlwriter_SetOutput(IXmlWriter *iface, IUnknown *output)
TRACE("(%p)->(%p)\n", This, output);
+ writer_end_elements(This); + writeroutput_flush_stream(This->output); + if (This->output) { writeroutput_release_stream(This->output); IUnknown_Release(&This->output->IXmlWriterOutput_iface);