From: Nikolay Sivov nsivov@codeweavers.com
Signed-off-by: Nikolay Sivov nsivov@codeweavers.com --- dlls/xmllite/tests/writer.c | 25 +++++++++++++++++++++++++ dlls/xmllite/writer.c | 2 ++ 2 files changed, 27 insertions(+)
diff --git a/dlls/xmllite/tests/writer.c b/dlls/xmllite/tests/writer.c index 72ca7309355..f01f6194a4d 100644 --- a/dlls/xmllite/tests/writer.c +++ b/dlls/xmllite/tests/writer.c @@ -2131,6 +2131,30 @@ static void test_WriteWhitespace(void) IXmlWriter_Release(writer); }
+static void test_WriteProcessingInstruction(void) +{ + IXmlWriter *writer; + IStream *stream; + HRESULT hr; + + hr = CreateXmlWriter(&IID_IXmlWriter, (void **)&writer, NULL); + ok(hr == S_OK, "Unexpected hr %#lx.\n", hr); + + stream = writer_set_output(writer); + + hr = IXmlWriter_WriteStartElement(writer, NULL, L"w", NULL); + ok(hr == S_OK, "Unexpected hr %#lx.\n", hr); + hr = IXmlWriter_WriteProcessingInstruction(writer, L"pi", L"content"); + ok(hr == S_OK, "Unexpected hr %#lx.\n", hr); + + hr = IXmlWriter_Flush(writer); + ok(hr == S_OK, "Failed to flush, hr %#lx.\n", hr); + CHECK_OUTPUT(stream, "<w><?pi content?>"); + IStream_Release(stream); + + IXmlWriter_Release(writer); +} + START_TEST(writer) { test_writer_create(); @@ -2154,4 +2178,5 @@ START_TEST(writer) test_WriteString(); test_WriteDocType(); test_WriteWhitespace(); + test_WriteProcessingInstruction(); } diff --git a/dlls/xmllite/writer.c b/dlls/xmllite/writer.c index 99dfff3c918..1df4c1dc922 100644 --- a/dlls/xmllite/writer.c +++ b/dlls/xmllite/writer.c @@ -1500,6 +1500,8 @@ static HRESULT WINAPI xmlwriter_WriteProcessingInstruction(IXmlWriter *iface, LP return WR_E_INVALIDACTION; break; case XmlWriterState_ElemStarted: + writer_close_starttag(This); + break; case XmlWriterState_DocClosed: return WR_E_INVALIDACTION; default: