Thomas Mullaly : msxml3/tests: Added more IMXWriter tests.
Alexandre Julliard
julliard at winehq.org
Tue Aug 23 12:44:56 CDT 2011
Module: wine
Branch: master
Commit: e4b7e9626747dd443deea222ca9fffae73b2d072
URL: http://source.winehq.org/git/wine.git/?a=commit;h=e4b7e9626747dd443deea222ca9fffae73b2d072
Author: Thomas Mullaly <thomas.mullaly at gmail.com>
Date: Fri Aug 12 19:11:54 2011 -0400
msxml3/tests: Added more IMXWriter tests.
---
dlls/msxml3/tests/saxreader.c | 117 +++++++++++++++++++++++++++++++++++++++--
1 files changed, 112 insertions(+), 5 deletions(-)
diff --git a/dlls/msxml3/tests/saxreader.c b/dlls/msxml3/tests/saxreader.c
index ad350db..2713581 100644
--- a/dlls/msxml3/tests/saxreader.c
+++ b/dlls/msxml3/tests/saxreader.c
@@ -713,6 +713,7 @@ typedef struct mxwriter_write_test_t {
const BYTE *data;
DWORD cb;
BOOL null_written;
+ BOOL fail_write;
} mxwriter_write_test;
typedef struct mxwriter_stream_test_t {
@@ -754,6 +755,8 @@ static HRESULT WINAPI istream_Read(IStream *iface, void *pv, ULONG cb, ULONG *pc
static HRESULT WINAPI istream_Write(IStream *iface, const void *pv, ULONG cb, ULONG *pcbWritten)
{
+ BOOL fail = FALSE;
+
ok(pv != NULL, "pv == NULL\n");
if(current_write_test->last) {
@@ -761,6 +764,8 @@ static HRESULT WINAPI istream_Write(IStream *iface, const void *pv, ULONG cb, UL
return E_FAIL;
}
+ fail = current_write_test->fail_write;
+
ok(current_write_test->cb == cb, "Expected %d, but got %d on test %d\n",
current_write_test->cb, cb, current_stream_test_index);
@@ -774,7 +779,7 @@ static HRESULT WINAPI istream_Write(IStream *iface, const void *pv, ULONG cb, UL
if(pcbWritten)
*pcbWritten = cb;
- return S_OK;
+ return fail ? E_FAIL : S_OK;
}
static HRESULT WINAPI istream_Seek(IStream *iface, LARGE_INTEGER dlibMove, DWORD dwOrigin,
@@ -1541,19 +1546,30 @@ static const mxwriter_stream_test mxwriter_stream_tests[] = {
{FALSE,(const BYTE*)szUtf16XML,sizeof(szUtf16XML)},
{TRUE}
}
+ },
+ {
+ VARIANT_TRUE,"UTF-16",
+ {
+ {FALSE,(const BYTE*)szUtf16BOM,sizeof(szUtf16BOM),TRUE,TRUE},
+ {FALSE,(const BYTE*)szUtf16XML,sizeof(szUtf16XML)},
+ {TRUE}
+ }
}
};
static void test_mxwriter_stream(void)
{
+ IMXWriter *writer;
+ ISAXContentHandler *content;
+ HRESULT hr;
+ VARIANT dest;
+ IStream *stream;
+ LARGE_INTEGER pos;
+ ULARGE_INTEGER pos2;
DWORD test_count = sizeof(mxwriter_stream_tests)/sizeof(mxwriter_stream_tests[0]);
for(current_stream_test_index = 0; current_stream_test_index < test_count; ++current_stream_test_index) {
const mxwriter_stream_test *test = mxwriter_stream_tests+current_stream_test_index;
- IMXWriter *writer;
- ISAXContentHandler *content;
- HRESULT hr;
- VARIANT dest;
hr = CoCreateInstance(&CLSID_MXXMLWriter, NULL, CLSCTX_INPROC_SERVER,
&IID_IMXWriter, (void**)&writer);
@@ -1589,6 +1605,96 @@ static void test_mxwriter_stream(void)
current_write_test-test->expected_writes, current_stream_test_index);
}
+ hr = CoCreateInstance(&CLSID_MXXMLWriter, NULL, CLSCTX_INPROC_SERVER,
+ &IID_IMXWriter, (void**)&writer);
+ ok(hr == S_OK, "CoCreateInstance failed: %08x\n", hr);
+
+ hr = CreateStreamOnHGlobal(NULL, TRUE, &stream);
+ ok(hr == S_OK, "CreateStreamOnHGlobal failed: %08x\n", hr);
+
+ hr = IMXWriter_QueryInterface(writer, &IID_ISAXContentHandler, (void**)&content);
+ ok(hr == S_OK, "QueryInterface(ISAXContentHandler) failed: %08x\n", hr);
+
+ hr = IMXWriter_put_encoding(writer, _bstr_("UTF-8"));
+ ok(hr == S_OK, "put_encoding failed: %08x\n", hr);
+
+ V_VT(&dest) = VT_UNKNOWN;
+ V_UNKNOWN(&dest) = (IUnknown*)stream;
+ hr = IMXWriter_put_output(writer, dest);
+ ok(hr == S_OK, "put_output failed: %08x\n", hr);
+
+ hr = ISAXContentHandler_startDocument(content);
+ ok(hr == S_OK, "startDocument failed: %08x\n", hr);
+
+ /* Setting output of the mxwriter causes the current output to be flushed,
+ * and the writer to start over.
+ */
+ V_VT(&dest) = VT_EMPTY;
+ hr = IMXWriter_put_output(writer, dest);
+ ok(hr == S_OK, "put_output failed: %08x\n", hr);
+
+ pos.QuadPart = 0;
+ hr = IStream_Seek(stream, pos, STREAM_SEEK_CUR, &pos2);
+ ok(hr == S_OK, "Seek failed: %08x\n", hr);
+ todo_wine ok(pos2.QuadPart != 0, "expected stream position moved\n");
+
+ hr = ISAXContentHandler_startDocument(content);
+ ok(hr == S_OK, "startDocument failed: %08x\n", hr);
+
+ hr = ISAXContentHandler_endDocument(content);
+ todo_wine ok(hr == S_OK, "endDocument failed: %08x\n", hr);
+
+ V_VT(&dest) = VT_EMPTY;
+ hr = IMXWriter_get_output(writer, &dest);
+ ok(hr == S_OK, "get_output failed: %08x\n", hr);
+ ok(V_VT(&dest) == VT_BSTR, "Expected VT_BSTR, got %d\n", V_VT(&dest));
+ todo_wine ok(!lstrcmpW(_bstr_("<?xml version=\"1.0\" encoding=\"UTF-16\" standalone=\"no\"?>\r\n"), V_BSTR(&dest)),
+ "Got wrong content: %s\n", wine_dbgstr_w(V_BSTR(&dest)));
+ VariantClear(&dest);
+
+ ISAXContentHandler_Release(content);
+ IMXWriter_Release(writer);
+
+ free_bstrs();
+}
+
+static void test_mxwriter_encoding(void)
+{
+ IMXWriter *writer;
+ ISAXContentHandler *content;
+ HRESULT hr;
+ VARIANT dest;
+
+ hr = CoCreateInstance(&CLSID_MXXMLWriter, NULL, CLSCTX_INPROC_SERVER,
+ &IID_IMXWriter, (void**)&writer);
+ ok(hr == S_OK, "CoCreateInstance failed: %08x\n", hr);
+
+ hr = IMXWriter_QueryInterface(writer, &IID_ISAXContentHandler, (void**)&content);
+ ok(hr == S_OK, "QueryInterface(ISAXContentHandler) failed: %08x\n", hr);
+
+ hr = IMXWriter_put_encoding(writer, _bstr_("UTF-8"));
+ ok(hr == S_OK, "put_encoding failed: %08x\n", hr);
+
+ hr = ISAXContentHandler_startDocument(content);
+ ok(hr == S_OK, "startDocument failed: %08x\n", hr);
+
+ hr = ISAXContentHandler_endDocument(content);
+ todo_wine ok(hr == S_OK, "endDocument failed: %08x\n", hr);
+
+ /* The content is always re-encoded to UTF-16 when the output is
+ * retrieved as a BSTR.
+ */
+ V_VT(&dest) = VT_EMPTY;
+ hr = IMXWriter_get_output(writer, &dest);
+ ok(hr == S_OK, "get_output failed: %08x\n", hr);
+ ok(V_VT(&dest) == VT_BSTR, "Expected VT_BSTR, got %d\n", V_VT(&dest));
+ todo_wine ok(!lstrcmpW(_bstr_("<?xml version=\"1.0\" encoding=\"UTF-16\" standalone=\"no\"?>\r\n"), V_BSTR(&dest)),
+ "got wrong content: %s\n", wine_dbgstr_w(V_BSTR(&dest)));
+ VariantClear(&dest);
+
+ ISAXContentHandler_Release(content);
+ IMXWriter_Release(writer);
+
free_bstrs();
}
@@ -1628,6 +1734,7 @@ START_TEST(saxreader)
test_mxwriter_properties();
test_mxwriter_flush();
test_mxwriter_stream();
+ test_mxwriter_encoding();
}
else
win_skip("MXXMLWriter not supported\n");
More information about the wine-cvs
mailing list