From 302aad9cf978694eb1c0bce99875f9bd303c0f8c Mon Sep 17 00:00:00 2001 From: Nikolay Sivov Date: Tue, 13 Dec 2011 01:00:44 +0300 Subject: [PATCH] msxml3/tests: Test switching encoding after document is started already. --- dlls/msxml3/tests/saxreader.c | 59 ++++++++++++++++++++++++++++++++++++++----- 1 file changed, 52 insertions(+), 7 deletions(-) diff --git a/dlls/msxml3/tests/saxreader.c b/dlls/msxml3/tests/saxreader.c index 7b3feea8948..fab4cd1a1b4 100644 --- a/dlls/msxml3/tests/saxreader.c +++ b/dlls/msxml3/tests/saxreader.c @@ -2600,26 +2600,30 @@ static void test_mxwriter_stream(void) static void test_mxwriter_encoding(void) { - IMXWriter *writer; ISAXContentHandler *content; - HRESULT hr; + IMXWriter *writer; + IStream *stream; VARIANT dest; + HRESULT hr; + HGLOBAL g; + char *ptr; + BSTR s; hr = CoCreateInstance(&CLSID_MXXMLWriter, NULL, CLSCTX_INPROC_SERVER, &IID_IMXWriter, (void**)&writer); - ok(hr == S_OK, "CoCreateInstance failed: %08x\n", hr); + EXPECT_HR(hr, S_OK); hr = IMXWriter_QueryInterface(writer, &IID_ISAXContentHandler, (void**)&content); - ok(hr == S_OK, "QueryInterface(ISAXContentHandler) failed: %08x\n", hr); + EXPECT_HR(hr, S_OK); hr = IMXWriter_put_encoding(writer, _bstr_("UTF-8")); - ok(hr == S_OK, "put_encoding failed: %08x\n", hr); + EXPECT_HR(hr, S_OK); hr = ISAXContentHandler_startDocument(content); - ok(hr == S_OK, "startDocument failed: %08x\n", hr); + EXPECT_HR(hr, S_OK); hr = ISAXContentHandler_endDocument(content); - ok(hr == S_OK, "endDocument failed: %08x\n", hr); + EXPECT_HR(hr, S_OK); /* The content is always re-encoded to UTF-16 when the output is * retrieved as a BSTR. @@ -2632,6 +2636,47 @@ static void test_mxwriter_encoding(void) "got wrong content: %s\n", wine_dbgstr_w(V_BSTR(&dest))); VariantClear(&dest); + /* switch encoding when something is written already */ + hr = CreateStreamOnHGlobal(NULL, TRUE, &stream); + EXPECT_HR(hr, S_OK); + + V_VT(&dest) = VT_UNKNOWN; + V_UNKNOWN(&dest) = (IUnknown*)stream; + hr = IMXWriter_put_output(writer, dest); + EXPECT_HR(hr, S_OK); + + hr = IMXWriter_put_encoding(writer, _bstr_("UTF-8")); + EXPECT_HR(hr, S_OK); + + /* write empty element */ + hr = ISAXContentHandler_startElement(content, _bstr_(""), 0, _bstr_(""), 0, _bstr_("a"), 1, NULL); + EXPECT_HR(hr, S_OK); + + hr = ISAXContentHandler_endElement(content, _bstr_(""), 0, _bstr_(""), 0, _bstr_("a"), 1); + EXPECT_HR(hr, S_OK); + + /* switch */ + hr = IMXWriter_put_encoding(writer, _bstr_("UTF-16")); + EXPECT_HR(hr, S_OK); + + hr = IMXWriter_flush(writer); + EXPECT_HR(hr, S_OK); + + hr = GetHGlobalFromStream(stream, &g); + EXPECT_HR(hr, S_OK); + + ptr = GlobalLock(g); + ok(!strncmp(ptr, "", 4), "got %c%c%c%c\n", ptr[0],ptr[1],ptr[2],ptr[3]); + GlobalUnlock(g); + + /* so output is unaffected, encoding name is stored however */ + hr = IMXWriter_get_encoding(writer, &s); + EXPECT_HR(hr, S_OK); + ok(!lstrcmpW(s, _bstr_("UTF-16")), "got %s\n", wine_dbgstr_w(s)); + SysFreeString(s); + + IStream_Release(stream); + ISAXContentHandler_Release(content); IMXWriter_Release(writer); -- 2.11.4.GIT