msxml3/tests: Test switching encoding after document is started already.

This commit is contained in:
Nikolay Sivov 2011-12-13 01:00:44 +03:00 committed by Alexandre Julliard
parent 5b533d82d2
commit 302aad9cf9
1 changed files with 52 additions and 7 deletions

View File

@ -2600,26 +2600,30 @@ static void test_mxwriter_stream(void)
static void test_mxwriter_encoding(void) static void test_mxwriter_encoding(void)
{ {
IMXWriter *writer;
ISAXContentHandler *content; ISAXContentHandler *content;
HRESULT hr; IMXWriter *writer;
IStream *stream;
VARIANT dest; VARIANT dest;
HRESULT hr;
HGLOBAL g;
char *ptr;
BSTR s;
hr = CoCreateInstance(&CLSID_MXXMLWriter, NULL, CLSCTX_INPROC_SERVER, hr = CoCreateInstance(&CLSID_MXXMLWriter, NULL, CLSCTX_INPROC_SERVER,
&IID_IMXWriter, (void**)&writer); &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); 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")); 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); hr = ISAXContentHandler_startDocument(content);
ok(hr == S_OK, "startDocument failed: %08x\n", hr); EXPECT_HR(hr, S_OK);
hr = ISAXContentHandler_endDocument(content); 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 /* The content is always re-encoded to UTF-16 when the output is
* retrieved as a BSTR. * 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))); "got wrong content: %s\n", wine_dbgstr_w(V_BSTR(&dest)));
VariantClear(&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, "<a/>", 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); ISAXContentHandler_Release(content);
IMXWriter_Release(writer); IMXWriter_Release(writer);