From: Nikolay Sivov <nsivov@codeweavers.com> Signed-off-by: Nikolay Sivov <nsivov@codeweavers.com> --- dlls/msxml3/tests/saxreader.c | 90 ++++++++++++++++++++- dlls/msxml6/tests/saxreader.c | 147 +++++++++++++++++++++++----------- 2 files changed, 187 insertions(+), 50 deletions(-) diff --git a/dlls/msxml3/tests/saxreader.c b/dlls/msxml3/tests/saxreader.c index f5f998fbfec..0d529ba9a70 100644 --- a/dlls/msxml3/tests/saxreader.c +++ b/dlls/msxml3/tests/saxreader.c @@ -2328,7 +2328,6 @@ static void test_saxreader(void) HANDLE file; static const CHAR testXmlA[] = "test.xml"; IXMLDOMDocument *doc; - char seqname[50]; VARIANT_BOOL v; while (table->clsid) @@ -2665,17 +2664,58 @@ static void test_saxreader(void) hr = ISAXXMLReader_putEntityResolver(reader, NULL); ok(hr == S_OK || broken(hr == E_FAIL), "Unexpected hr %#lx.\n", hr); + ISAXXMLReader_Release(reader); + table++; + } + + free_bstrs(); +} + +static void test_saxreader_cdata(void) +{ + const struct msxmlsupported_data_t *table = reader_support_data; + ISAXXMLReader *reader = NULL; + char seqname[50]; + IStream *stream; + VARIANT var; + HRESULT hr; + + while (table->clsid) + { + struct call_entry *test_seq; + + if (!is_clsid_supported(table->clsid, reader_support_data)) + { + table++; + continue; + } + + hr = CoCreateInstance(table->clsid, NULL, CLSCTX_INPROC_SERVER, &IID_ISAXXMLReader, (void **)&reader); + ok(hr == S_OK, "Unexpected hr %#lx.\n", hr); + g_reader = reader; + + if (IsEqualGUID(table->clsid, &CLSID_SAXXMLReader40)) + msxml_version = 4; + else + msxml_version = 0; + + hr = ISAXXMLReader_putContentHandler(reader, &contentHandler); + ok(hr == S_OK, "Unexpected hr %#lx.\n", hr); + + hr = ISAXXMLReader_putErrorHandler(reader, &errorHandler); + ok(hr == S_OK, "Unexpected hr %#lx.\n", hr); + /* CDATA sections */ init_saxlexicalhandler(&lexicalhandler, S_OK); V_VT(&var) = VT_UNKNOWN; - V_UNKNOWN(&var) = (IUnknown*)&lexicalhandler.ISAXLexicalHandler_iface; + V_UNKNOWN(&var) = (IUnknown *)&lexicalhandler.ISAXLexicalHandler_iface; hr = ISAXXMLReader_putProperty(reader, L"http://xml.org/sax/properties/lexical-handler", var); ok(hr == S_OK, "Unexpected hr %#lx.\n", hr); stream = create_test_stream(test_cdata_xml, -1); V_VT(&var) = VT_UNKNOWN; - V_UNKNOWN(&var) = (IUnknown*)stream; + V_UNKNOWN(&var) = (IUnknown *)stream; if (IsEqualGUID(table->clsid, &CLSID_SAXXMLReader40)) test_seq = cdata_test_alt; @@ -2711,7 +2751,7 @@ static void test_saxreader(void) /* 3. CDATA sections */ stream = create_test_stream(test3_cdata_xml, -1); V_VT(&var) = VT_UNKNOWN; - V_UNKNOWN(&var) = (IUnknown*)stream; + V_UNKNOWN(&var) = (IUnknown *)stream; if (IsEqualGUID(table->clsid, &CLSID_SAXXMLReader40)) test_seq = cdata_test3_alt; @@ -2726,6 +2766,46 @@ static void test_saxreader(void) IStream_Release(stream); + ISAXXMLReader_Release(reader); + table++; + } + + free_bstrs(); +} + +static void test_saxreader_pi(void) +{ + const struct msxmlsupported_data_t *table = reader_support_data; + ISAXXMLReader *reader; + char seqname[50]; + VARIANT var; + HRESULT hr; + + while (table->clsid) + { + struct call_entry *test_seq; + + if (!is_clsid_supported(table->clsid, reader_support_data)) + { + table++; + continue; + } + + hr = CoCreateInstance(table->clsid, NULL, CLSCTX_INPROC_SERVER, &IID_ISAXXMLReader, (void**)&reader); + ok(hr == S_OK, "Unexpected hr %#lx.\n", hr); + g_reader = reader; + + if (IsEqualGUID(table->clsid, &CLSID_SAXXMLReader40)) + msxml_version = 4; + else + msxml_version = 0; + + hr = ISAXXMLReader_putContentHandler(reader, &contentHandler); + ok(hr == S_OK, "Unexpected hr %#lx.\n", hr); + + hr = ISAXXMLReader_putErrorHandler(reader, &errorHandler); + ok(hr == S_OK, "Unexpected hr %#lx.\n", hr); + /* PI */ V_VT(&var) = VT_UNKNOWN; V_UNKNOWN(&var) = (IUnknown *)create_test_stream(test_pi_xml, -1); @@ -6348,6 +6428,8 @@ START_TEST(saxreader) test_saxreader_encoding(); test_saxreader_dispex(); test_saxreader_vb_content_handler(); + test_saxreader_cdata(); + test_saxreader_pi(); test_saxreader_dtd(); /* MXXMLWriter tests */ diff --git a/dlls/msxml6/tests/saxreader.c b/dlls/msxml6/tests/saxreader.c index 39498f553c3..0a64f6b1eb8 100644 --- a/dlls/msxml6/tests/saxreader.c +++ b/dlls/msxml6/tests/saxreader.c @@ -4803,52 +4803,6 @@ static void test_saxreader(void) hr = ISAXXMLReader_putEntityResolver(reader, NULL); ok(hr == S_OK || broken(hr == E_FAIL), "Unexpected hr %#lx.\n", hr); - /* CDATA sections */ - init_saxlexicalhandler(&lexicalhandler, S_OK); - - V_VT(&var) = VT_UNKNOWN; - V_UNKNOWN(&var) = (IUnknown*)&lexicalhandler.ISAXLexicalHandler_iface; - hr = ISAXXMLReader_putProperty(reader, L"http://xml.org/sax/properties/lexical-handler", var); - ok(hr == S_OK, "Unexpected hr %#lx.\n", hr); - - stream = create_test_stream(test_cdata_xml, -1); - V_VT(&var) = VT_UNKNOWN; - V_UNKNOWN(&var) = (IUnknown*)stream; - - test_seq = cdata_test_alt; - set_expected_seq(test_seq); - hr = ISAXXMLReader_parse(reader, var); - ok(hr == S_OK, "Unexpected hr %#lx.\n", hr); - ok_sequence(sequences, CONTENT_HANDLER_INDEX, test_seq, "cdata test", TRUE); - - IStream_Release(stream); - - /* 2. CDATA sections */ - stream = create_test_stream(test2_cdata_xml, -1); - V_VT(&var) = VT_UNKNOWN; - V_UNKNOWN(&var) = (IUnknown*)stream; - - test_seq = cdata_test2_alt; - set_expected_seq(test_seq); - hr = ISAXXMLReader_parse(reader, var); - ok(hr == S_OK, "Unexpected hr %#lx.\n", hr); - ok_sequence(sequences, CONTENT_HANDLER_INDEX, test_seq, "cdata test 2", TRUE); - - IStream_Release(stream); - - /* 3. CDATA sections */ - stream = create_test_stream(test3_cdata_xml, -1); - V_VT(&var) = VT_UNKNOWN; - V_UNKNOWN(&var) = (IUnknown*)stream; - - test_seq = cdata_test3_alt; - set_expected_seq(test_seq); - hr = ISAXXMLReader_parse(reader, var); - ok(hr == S_OK, "Unexpected hr %#lx.\n", hr); - ok_sequence(sequences, CONTENT_HANDLER_INDEX, test_seq, "cdata test 3", TRUE); - - IStream_Release(stream); - /* PI */ V_VT(&var) = VT_UNKNOWN; V_UNKNOWN(&var) = (IUnknown *)create_test_stream(test_pi_xml, -1); @@ -5042,6 +4996,105 @@ static void test_saxreader_vb_content_handler(void) free_bstrs(); } +static void test_saxreader_cdata(void) +{ + struct call_entry *test_seq; + ISAXXMLReader *reader; + IStream *stream; + VARIANT var; + HRESULT hr; + + hr = CoCreateInstance(&CLSID_SAXXMLReader60, NULL, CLSCTX_INPROC_SERVER, &IID_ISAXXMLReader, (void**)&reader); + ok(hr == S_OK, "Unexpected hr %#lx.\n", hr); + g_reader = reader; + + hr = ISAXXMLReader_putContentHandler(reader, &contentHandler); + ok(hr == S_OK, "Unexpected hr %#lx.\n", hr); + + hr = ISAXXMLReader_putErrorHandler(reader, &errorHandler); + ok(hr == S_OK, "Unexpected hr %#lx.\n", hr); + + /* CDATA sections */ + init_saxlexicalhandler(&lexicalhandler, S_OK); + + V_VT(&var) = VT_UNKNOWN; + V_UNKNOWN(&var) = (IUnknown*)&lexicalhandler.ISAXLexicalHandler_iface; + hr = ISAXXMLReader_putProperty(reader, L"http://xml.org/sax/properties/lexical-handler", var); + ok(hr == S_OK, "Unexpected hr %#lx.\n", hr); + + stream = create_test_stream(test_cdata_xml, -1); + V_VT(&var) = VT_UNKNOWN; + V_UNKNOWN(&var) = (IUnknown *)stream; + + test_seq = cdata_test_alt; + set_expected_seq(test_seq); + hr = ISAXXMLReader_parse(reader, var); + ok(hr == S_OK, "Unexpected hr %#lx.\n", hr); + ok_sequence(sequences, CONTENT_HANDLER_INDEX, test_seq, "cdata test", TRUE); + + IStream_Release(stream); + + /* 2. CDATA sections */ + stream = create_test_stream(test2_cdata_xml, -1); + V_VT(&var) = VT_UNKNOWN; + V_UNKNOWN(&var) = (IUnknown *)stream; + + test_seq = cdata_test2_alt; + set_expected_seq(test_seq); + hr = ISAXXMLReader_parse(reader, var); + ok(hr == S_OK, "Unexpected hr %#lx.\n", hr); + ok_sequence(sequences, CONTENT_HANDLER_INDEX, test_seq, "cdata test 2", TRUE); + + IStream_Release(stream); + + /* 3. CDATA sections */ + stream = create_test_stream(test3_cdata_xml, -1); + V_VT(&var) = VT_UNKNOWN; + V_UNKNOWN(&var) = (IUnknown *)stream; + + test_seq = cdata_test3_alt; + set_expected_seq(test_seq); + hr = ISAXXMLReader_parse(reader, var); + ok(hr == S_OK, "Unexpected hr %#lx.\n", hr); + ok_sequence(sequences, CONTENT_HANDLER_INDEX, test_seq, "cdata test 3", TRUE); + + IStream_Release(stream); + + ISAXXMLReader_Release(reader); + + free_bstrs(); +} + +static void test_saxreader_pi(void) +{ + ISAXXMLReader *reader; + VARIANT var; + HRESULT hr; + + hr = CoCreateInstance(&CLSID_SAXXMLReader60, NULL, CLSCTX_INPROC_SERVER, &IID_ISAXXMLReader, (void**)&reader); + ok(hr == S_OK, "Unexpected hr %#lx.\n", hr); + g_reader = reader; + + hr = ISAXXMLReader_putContentHandler(reader, &contentHandler); + ok(hr == S_OK, "Unexpected hr %#lx.\n", hr); + + hr = ISAXXMLReader_putErrorHandler(reader, &errorHandler); + ok(hr == S_OK, "Unexpected hr %#lx.\n", hr); + + /* PI */ + V_VT(&var) = VT_UNKNOWN; + V_UNKNOWN(&var) = (IUnknown *)create_test_stream(test_pi_xml, -1); + set_expected_seq(pi_test); + hr = ISAXXMLReader_parse(reader, var); + ok(hr == S_OK, "Unexpected hr %#lx.\n", hr); + ok_sequence(sequences, CONTENT_HANDLER_INDEX, pi_test, "pi test 1", TRUE); + VariantClear(&var); + + ISAXXMLReader_Release(reader); + + free_bstrs(); +} + START_TEST(saxreader) { HRESULT hr; @@ -5061,6 +5114,8 @@ START_TEST(saxreader) test_saxreader_encoding(); test_saxreader_dispex(); test_saxreader_vb_content_handler(); + test_saxreader_cdata(); + test_saxreader_pi(); } if (is_class_supported(&CLSID_MXXMLWriter60)) -- GitLab https://gitlab.winehq.org/wine/wine/-/merge_requests/10172