[PATCH 0/5] MR10183: msxml/tests: Extend PI test with newlines.
Signed-off-by: Nikolay Sivov <nsivov@codeweavers.com> -- https://gitlab.winehq.org/wine/wine/-/merge_requests/10183
From: Nikolay Sivov <nsivov@codeweavers.com> Signed-off-by: Nikolay Sivov <nsivov@codeweavers.com> --- dlls/msxml3/tests/saxreader.c | 8 ++++---- dlls/msxml4/tests/saxreader.c | 16 +++++++--------- dlls/msxml6/tests/saxreader.c | 20 +++++--------------- 3 files changed, 16 insertions(+), 28 deletions(-) diff --git a/dlls/msxml3/tests/saxreader.c b/dlls/msxml3/tests/saxreader.c index 8a747362776..fdcd83a2362 100644 --- a/dlls/msxml3/tests/saxreader.c +++ b/dlls/msxml3/tests/saxreader.c @@ -762,7 +762,7 @@ static const char test3_cdata_xml[] = "<?xml version=\"1.0\" ?><a><![CDATA[Some text data]]></a>"; static const char test_pi_xml[] = -"<?xml version=\"1.0\" ?><a><?t some text ?></a>"; +"<?xml version=\"1.0\" ?><a><?t some t\rex\r\nt ?></a>"; static const char test_chardata_xml[] = "<?xml version=\"1.0\" ?><a>\nabc<b>de\nf</b>gh\n</a>"; @@ -962,8 +962,8 @@ static struct call_entry pi_test[] = { CH_PUTDOCUMENTLOCATOR, 0, 0, S_OK }, { CH_STARTDOCUMENT, 0, 0, S_OK }, { CH_STARTELEMENT, 1, 26, S_OK, L"", L"a", L"a" }, - { CH_PROCESSINGINSTRUCTION, 1, 30, S_OK, L"t", L"some text " }, - { CH_ENDELEMENT, 1, 44, S_OK, L"", L"a", L"a" }, + { CH_PROCESSINGINSTRUCTION, 1, 30, S_OK, L"t", L"some t\nex\nt " }, + { CH_ENDELEMENT, 3, 7, S_OK, L"", L"a", L"a" }, { CH_ENDDOCUMENT, 0, 0, S_OK }, { CH_ENDTEST } }; @@ -2556,7 +2556,7 @@ static void test_saxreader_pi(void) hr = ISAXXMLReader_parse(reader, var); ok(hr == S_OK, "Unexpected hr %#lx.\n", hr); sprintf(seqname, "%s: pi test", table->name); - ok_sequence(sequences, CONTENT_HANDLER_INDEX, test_seq, seqname, FALSE); + ok_sequence(sequences, CONTENT_HANDLER_INDEX, test_seq, seqname, TRUE); VariantClear(&var); ISAXXMLReader_Release(reader); diff --git a/dlls/msxml4/tests/saxreader.c b/dlls/msxml4/tests/saxreader.c index 76cda76b99e..004bad49e17 100644 --- a/dlls/msxml4/tests/saxreader.c +++ b/dlls/msxml4/tests/saxreader.c @@ -745,7 +745,7 @@ static const char test3_cdata_xml[] = "<?xml version=\"1.0\" ?><a><![CDATA[Some text data]]></a>"; static const char test_pi_xml[] = -"<?xml version=\"1.0\" ?><a><?t some text ?></a>"; +"<?xml version=\"1.0\" ?><a><?t some t\rex\r\nt ?></a>"; static const char test_chardata_xml[] = "<?xml version=\"1.0\" ?><a>\nabc<b>de\nf</b>gh\n</a>"; @@ -933,14 +933,14 @@ static struct call_entry attribute_norm_alt[] = { { CH_ENDTEST } }; -static struct call_entry pi_test_v4[] = +static struct call_entry pi_test[] = { { CH_PUTDOCUMENTLOCATOR, 1, 0, S_OK }, { CH_STARTDOCUMENT, 1, 22, S_OK }, { CH_STARTELEMENT, 1, 25, S_OK, L"", L"a", L"a" }, - { CH_PROCESSINGINSTRUCTION, 1, 41, S_OK, L"t", L"some text " }, - { CH_ENDELEMENT, 1, 45, S_OK, L"", L"a", L"a" }, - { CH_ENDDOCUMENT, 1, 45, S_OK }, + { CH_PROCESSINGINSTRUCTION, 3, 4, S_OK, L"t", L"some t\nex\nt " }, + { CH_ENDELEMENT, 3, 8, S_OK, L"", L"a", L"a" }, + { CH_ENDDOCUMENT, 3, 8, S_OK }, { CH_ENDTEST } }; @@ -2398,7 +2398,6 @@ static void test_saxreader_cdata(void) static void test_saxreader_pi(void) { - struct call_entry *test_seq; ISAXXMLReader *reader; VARIANT var; HRESULT hr; @@ -2417,11 +2416,10 @@ static void test_saxreader_pi(void) V_VT(&var) = VT_UNKNOWN; V_UNKNOWN(&var) = (IUnknown *)create_test_stream(test_pi_xml, -1); - test_seq = pi_test_v4; - set_expected_seq(test_seq); + 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, test_seq, "pi test", FALSE); + ok_sequence(sequences, CONTENT_HANDLER_INDEX, pi_test, "pi test", TRUE); VariantClear(&var); ISAXXMLReader_Release(reader); diff --git a/dlls/msxml6/tests/saxreader.c b/dlls/msxml6/tests/saxreader.c index dd99d936f57..c8d2b6bd5f6 100644 --- a/dlls/msxml6/tests/saxreader.c +++ b/dlls/msxml6/tests/saxreader.c @@ -697,7 +697,7 @@ static const char test3_cdata_xml[] = "<?xml version=\"1.0\" ?><a><![CDATA[Some text data]]></a>"; static const char test_pi_xml[] = -"<?xml version=\"1.0\" ?><a><?t some text ?></a>"; +"<?xml version=\"1.0\" ?><a><?t some t\rex\r\nt ?></a>"; static const char test_chardata_xml[] = "<?xml version=\"1.0\" ?><a>\nabc<b>de\nf</b>gh\n</a>"; @@ -4004,9 +4004,9 @@ static struct call_entry pi_test[] = { CH_PUTDOCUMENTLOCATOR, 1, 0, S_OK }, { CH_STARTDOCUMENT, 1, 22, S_OK }, { CH_STARTELEMENT, 1, 25, S_OK, L"", L"a", L"a" }, - { CH_PROCESSINGINSTRUCTION, 1, 41, S_OK, L"t", L"some text " }, - { CH_ENDELEMENT, 1, 45, S_OK, L"", L"a", L"a" }, - { CH_ENDDOCUMENT, 1, 45, S_OK }, + { CH_PROCESSINGINSTRUCTION, 3, 4, S_OK, L"t", L"some t\nex\nt " }, + { CH_ENDELEMENT, 3, 8, S_OK, L"", L"a", L"a" }, + { CH_ENDDOCUMENT, 3, 8, S_OK }, { CH_ENDTEST } }; @@ -4804,16 +4804,6 @@ static void test_saxreader(void) hr = ISAXXMLReader_putEntityResolver(reader, NULL); ok(hr == S_OK || broken(hr == E_FAIL), "Unexpected hr %#lx.\n", hr); - /* PI */ - V_VT(&var) = VT_UNKNOWN; - V_UNKNOWN(&var) = (IUnknown *)create_test_stream(test_pi_xml, -1); - test_seq = pi_test; - 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, "pi test 1", FALSE); - VariantClear(&var); - ISAXXMLReader_Release(reader); free_bstrs(); @@ -5184,7 +5174,7 @@ static void test_saxreader_pi(void) 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", FALSE); + ok_sequence(sequences, CONTENT_HANDLER_INDEX, pi_test, "pi test 1", TRUE); VariantClear(&var); ISAXXMLReader_Release(reader); -- GitLab https://gitlab.winehq.org/wine/wine/-/merge_requests/10183
From: Nikolay Sivov <nsivov@codeweavers.com> Signed-off-by: Nikolay Sivov <nsivov@codeweavers.com> --- dlls/msxml3/saxreader.c | 12 ++++++++++-- dlls/msxml3/tests/saxreader.c | 6 +++--- dlls/msxml4/tests/saxreader.c | 2 +- dlls/msxml6/tests/saxreader.c | 2 +- 4 files changed, 15 insertions(+), 7 deletions(-) diff --git a/dlls/msxml3/saxreader.c b/dlls/msxml3/saxreader.c index 0321f18750f..89e76add533 100644 --- a/dlls/msxml3/saxreader.c +++ b/dlls/msxml3/saxreader.c @@ -3947,8 +3947,16 @@ static void saxreader_parse_pi(struct saxlocator *locator) return; } - saxreader_string_append(locator, &buffer, &ch, 1); - saxreader_skip(locator, 1); + if (saxreader_cmp(locator, L"\r\n") + || saxreader_cmp(locator, L"\r")) + { + saxreader_string_append(locator, &buffer, L"\n", 1); + } + else + { + saxreader_string_append(locator, &buffer, &ch, 1); + saxreader_skip(locator, 1); + } ch = *saxreader_get_ptr_noread(locator); } diff --git a/dlls/msxml3/tests/saxreader.c b/dlls/msxml3/tests/saxreader.c index fdcd83a2362..c5a73a8d254 100644 --- a/dlls/msxml3/tests/saxreader.c +++ b/dlls/msxml3/tests/saxreader.c @@ -2556,7 +2556,7 @@ static void test_saxreader_pi(void) hr = ISAXXMLReader_parse(reader, var); ok(hr == S_OK, "Unexpected hr %#lx.\n", hr); sprintf(seqname, "%s: pi test", table->name); - ok_sequence(sequences, CONTENT_HANDLER_INDEX, test_seq, seqname, TRUE); + ok_sequence(sequences, CONTENT_HANDLER_INDEX, test_seq, seqname, FALSE); VariantClear(&var); ISAXXMLReader_Release(reader); @@ -3137,7 +3137,7 @@ static void test_saxreader_normalize_line_breaks(void) set_expected_seq(normalize_line_breaks_pi_seq); hr = ISAXXMLReader_parse(reader, var); ok(hr == S_OK, "Unexpected hr %#lx.\n", hr); - ok_sequence(sequences, CONTENT_HANDLER_INDEX, normalize_line_breaks_pi_seq, "Normalize line breaks: PI", TRUE); + ok_sequence(sequences, CONTENT_HANDLER_INDEX, normalize_line_breaks_pi_seq, "Normalize line breaks: PI", FALSE); /* Disable normalization */ hr = ISAXXMLReader_putFeature(reader, L"normalize-line-breaks", VARIANT_FALSE); @@ -3182,7 +3182,7 @@ static void test_saxreader_normalize_line_breaks(void) set_expected_seq(normalize_line_breaks_off_pi_seq); hr = ISAXXMLReader_parse(reader, var); ok(hr == S_OK, "Unexpected hr %#lx.\n", hr); - ok_sequence(sequences, CONTENT_HANDLER_INDEX, normalize_line_breaks_off_pi_seq, "Normalize line breaks (off): PI", FALSE); + ok_sequence(sequences, CONTENT_HANDLER_INDEX, normalize_line_breaks_off_pi_seq, "Normalize line breaks (off): PI", TRUE); ISAXXMLReader_Release(reader); table++; diff --git a/dlls/msxml4/tests/saxreader.c b/dlls/msxml4/tests/saxreader.c index 004bad49e17..75e6782b5af 100644 --- a/dlls/msxml4/tests/saxreader.c +++ b/dlls/msxml4/tests/saxreader.c @@ -2419,7 +2419,7 @@ static void test_saxreader_pi(void) 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", TRUE); + ok_sequence(sequences, CONTENT_HANDLER_INDEX, pi_test, "pi test", FALSE); VariantClear(&var); ISAXXMLReader_Release(reader); diff --git a/dlls/msxml6/tests/saxreader.c b/dlls/msxml6/tests/saxreader.c index c8d2b6bd5f6..a56b27d4916 100644 --- a/dlls/msxml6/tests/saxreader.c +++ b/dlls/msxml6/tests/saxreader.c @@ -5174,7 +5174,7 @@ static void test_saxreader_pi(void) 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); + ok_sequence(sequences, CONTENT_HANDLER_INDEX, pi_test, "pi test 1", FALSE); VariantClear(&var); ISAXXMLReader_Release(reader); -- GitLab https://gitlab.winehq.org/wine/wine/-/merge_requests/10183
From: Nikolay Sivov <nsivov@codeweavers.com> Signed-off-by: Nikolay Sivov <nsivov@codeweavers.com> --- dlls/msxml3/saxreader.c | 16 +++++++++++++--- dlls/msxml3/tests/saxreader.c | 16 ++++++++-------- dlls/msxml4/tests/saxreader.c | 2 +- dlls/msxml6/tests/saxreader.c | 2 +- 4 files changed, 23 insertions(+), 13 deletions(-) diff --git a/dlls/msxml3/saxreader.c b/dlls/msxml3/saxreader.c index 89e76add533..94a7415cba0 100644 --- a/dlls/msxml3/saxreader.c +++ b/dlls/msxml3/saxreader.c @@ -3728,9 +3728,19 @@ static BSTR saxreader_parse_attvalue(struct saxlocator *locator) } else { - ch = *saxreader_get_ptr_noread(locator); - saxreader_string_append(locator, &buffer, &ch, 1); - saxreader_skip(locator, 1); + if (saxreader_cmp(locator, L"\r\n") + || saxreader_cmp(locator, L"\r") + || saxreader_cmp(locator, L"\n") + || saxreader_cmp(locator, L"\t")) + { + saxreader_string_append(locator, &buffer, L" ", 1); + } + else + { + ch = *saxreader_get_ptr_noread(locator); + saxreader_string_append(locator, &buffer, &ch, 1); + saxreader_skip(locator, 1); + } } } diff --git a/dlls/msxml3/tests/saxreader.c b/dlls/msxml3/tests/saxreader.c index c5a73a8d254..58dd1c8cd2e 100644 --- a/dlls/msxml3/tests/saxreader.c +++ b/dlls/msxml3/tests/saxreader.c @@ -2969,7 +2969,7 @@ static struct call_entry normalize_line_breaks_off_text_seq[] = static struct attribute_entry normalize_line_breaks_attrs[] = { - { L"", L"attr", L"attr", L"a b" }, + { L"", L"attr", L"attr", L"a b c d" }, { NULL } }; @@ -2977,8 +2977,8 @@ static struct call_entry normalize_line_breaks_attr_seq[] = { { CH_PUTDOCUMENTLOCATOR, 0, 0, S_OK }, { CH_STARTDOCUMENT, 0, 0, S_OK }, - { CH_STARTELEMENT, 2, 5, S_OK, L"", L"e", L"e", normalize_line_breaks_attrs }, - { CH_ENDELEMENT, 2, 7, S_OK, L"", L"e", L"e" }, + { CH_STARTELEMENT, 3, 5, S_OK, L"", L"e", L"e", normalize_line_breaks_attrs }, + { CH_ENDELEMENT, 3, 7, S_OK, L"", L"e", L"e" }, { CH_ENDDOCUMENT, 0, 0, S_OK }, { CH_ENDTEST } }; @@ -3049,8 +3049,8 @@ static struct call_entry normalize_line_breaks_off_pi_seq[] = { CH_PUTDOCUMENTLOCATOR, 0, 0, S_OK }, { CH_STARTDOCUMENT, 0, 0, S_OK }, { CH_STARTELEMENT, 1, 4, S_OK, L"", L"e", L"e" }, - { CH_PROCESSINGINSTRUCTION, 1, 9, S_OK, L"pi", L"ab\rc " }, - { CH_ENDELEMENT, 2, 7, S_OK, L"", L"e", L"e" }, + { CH_PROCESSINGINSTRUCTION, 1, 9, S_OK, L"pi", L"ab\rc \r\nd " }, + { CH_ENDELEMENT, 3, 7, S_OK, L"", L"e", L"e" }, { CH_ENDDOCUMENT, 0, 0, S_OK }, { CH_ENDTEST } }; @@ -3109,7 +3109,7 @@ static void test_saxreader_normalize_line_breaks(void) /* Attribute values */ V_VT(&var) = VT_BSTR; - V_BSTR(&var) = _bstr_("<e attr=\"a\rb\" ></e>"); + V_BSTR(&var) = _bstr_("<e attr=\"a\rb\nc\r\nd\" ></e>"); set_expected_seq(normalize_line_breaks_attr_seq); hr = ISAXXMLReader_parse(reader, var); ok(hr == S_OK, "Unexpected hr %#lx.\n", hr); @@ -3154,7 +3154,7 @@ static void test_saxreader_normalize_line_breaks(void) /* Attribute values */ V_VT(&var) = VT_BSTR; - V_BSTR(&var) = _bstr_("<e attr=\"a\rb\" ></e>"); + V_BSTR(&var) = _bstr_("<e attr=\"a\rb\nc\r\nd\" ></e>"); set_expected_seq(normalize_line_breaks_attr_seq); hr = ISAXXMLReader_parse(reader, var); ok(hr == S_OK, "Unexpected hr %#lx.\n", hr); @@ -3178,7 +3178,7 @@ static void test_saxreader_normalize_line_breaks(void) /* PI */ V_VT(&var) = VT_BSTR; - V_BSTR(&var) = _bstr_("<e><?pi ab\rc ?></e>"); + V_BSTR(&var) = _bstr_("<e><?pi ab\rc \r\nd ?></e>"); set_expected_seq(normalize_line_breaks_off_pi_seq); hr = ISAXXMLReader_parse(reader, var); ok(hr == S_OK, "Unexpected hr %#lx.\n", hr); diff --git a/dlls/msxml4/tests/saxreader.c b/dlls/msxml4/tests/saxreader.c index 75e6782b5af..8859e858eee 100644 --- a/dlls/msxml4/tests/saxreader.c +++ b/dlls/msxml4/tests/saxreader.c @@ -2311,7 +2311,7 @@ static void test_saxreader(void) 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, "attribute value normalization", TRUE); + ok_sequence(sequences, CONTENT_HANDLER_INDEX, test_seq, "attribute value normalization", FALSE); IStream_Release(stream); resolver = (void*)0xdeadbeef; diff --git a/dlls/msxml6/tests/saxreader.c b/dlls/msxml6/tests/saxreader.c index a56b27d4916..4ecec94b9fc 100644 --- a/dlls/msxml6/tests/saxreader.c +++ b/dlls/msxml6/tests/saxreader.c @@ -4793,7 +4793,7 @@ static void test_saxreader(void) 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, "attribute value normalization", TRUE); + ok_sequence(sequences, CONTENT_HANDLER_INDEX, test_seq, "attribute value normalization", FALSE); IStream_Release(stream); resolver = (void*)0xdeadbeef; -- GitLab https://gitlab.winehq.org/wine/wine/-/merge_requests/10183
From: Nikolay Sivov <nsivov@codeweavers.com> Signed-off-by: Nikolay Sivov <nsivov@codeweavers.com> --- dlls/msxml3/saxreader.c | 61 +++++++++++++++++++++++++++-------- dlls/msxml3/tests/saxreader.c | 9 ++---- dlls/msxml4/tests/saxreader.c | 3 -- dlls/msxml6/tests/saxreader.c | 2 -- 4 files changed, 51 insertions(+), 24 deletions(-) diff --git a/dlls/msxml3/saxreader.c b/dlls/msxml3/saxreader.c index 94a7415cba0..21610450fca 100644 --- a/dlls/msxml3/saxreader.c +++ b/dlls/msxml3/saxreader.c @@ -313,6 +313,7 @@ enum saxreader_feature UseInlineSchema = 0x00001000, UseSchemaLocation = 0x00002000, LexicalHandlerParEntities = 0x00004000, + NormalizeLineBreaks = 0x00008000, FeatureForceDWord = 0xffffffff, }; @@ -329,6 +330,7 @@ static const struct saxreader_feature_pair saxreader_feature_map[] = { { LexicalHandlerParEntities, L"http://xml.org/sax/features/lexical-handler/parameter-entities" }, { NamespacePrefixes, L"http://xml.org/sax/features/namespace-prefixes" }, { Namespaces, L"http://xml.org/sax/features/namespaces" }, + { NormalizeLineBreaks, L"normalize-line-breaks" }, { ProhibitDTD, L"prohibit-dtd" }, { SchemaValidation, L"schema-validation" }, }; @@ -3957,8 +3959,8 @@ static void saxreader_parse_pi(struct saxlocator *locator) return; } - if (saxreader_cmp(locator, L"\r\n") - || saxreader_cmp(locator, L"\r")) + if (locator->saxreader->features & NormalizeLineBreaks + && (saxreader_cmp(locator, L"\r\n") || saxreader_cmp(locator, L"\r"))) { saxreader_string_append(locator, &buffer, L"\n", 1); } @@ -4003,10 +4005,18 @@ static void saxreader_parse_comment(struct saxlocator *locator) } else { - saxreader_string_append(locator, &buffer, &ch, 1); + if (locator->saxreader->features & NormalizeLineBreaks + && (saxreader_cmp(locator, L"\r\n") || saxreader_cmp(locator, L"\r"))) + { + saxreader_string_append(locator, &buffer, L"\n", 1); + } + else + { + saxreader_string_append(locator, &buffer, &ch, 1); + saxreader_skip(locator, 1); + } } - saxreader_skip(locator, 1); ch = *saxreader_get_ptr_noread(locator); } @@ -4257,10 +4267,19 @@ static void saxreader_parse_chardata(struct saxlocator *locator) return; } - if (locator->saxreader->version >= MSXML4) - saxreader_parse_characters_newparser(locator, &context); + if (locator->saxreader->features & NormalizeLineBreaks) + { + if (locator->saxreader->version >= MSXML4) + saxreader_parse_characters_newparser(locator, &context); + else + saxreader_parse_characters(locator, &context); + } else - saxreader_parse_characters(locator, &context); + { + saxreader_string_append(locator, &context.buffer, &context.ch, 1); + saxreader_skip(locator, 1); + context.ch = *saxreader_get_ptr(locator); + } } free(context.buffer.data); @@ -4303,10 +4322,19 @@ static void saxreader_parse_cdata(struct saxlocator *locator) return saxlocator_end_cdata(locator, &context.position); } - if (locator->saxreader->version >= MSXML4) - saxreader_parse_characters_newparser(locator, &context); + if (locator->saxreader->features & NormalizeLineBreaks) + { + if (locator->saxreader->version >= MSXML4) + saxreader_parse_characters_newparser(locator, &context); + else + saxreader_parse_characters(locator, &context); + } else - saxreader_parse_characters(locator, &context); + { + saxreader_string_append(locator, &context.buffer, &context.ch, 1); + saxreader_skip(locator, 1); + context.ch = *saxreader_get_ptr(locator); + } } free(context.buffer.data); @@ -5994,11 +6022,14 @@ static HRESULT WINAPI isaxxmlreader_getFeature(ISAXXMLReader *iface, const WCHAR if (reader->version < MSXML4 && (feature == ExhaustiveErrors || feature == SchemaValidation)) return E_INVALIDARG; + if (feature == NormalizeLineBreaks && reader->version >= MSXML4) + return E_INVALIDARG; if (feature == Namespaces || feature == NamespacePrefixes || feature == ExhaustiveErrors || - feature == SchemaValidation) + feature == SchemaValidation || + feature == NormalizeLineBreaks) return get_feature_value(reader, feature, value); FIXME("%p, %s, %p stub\n", iface, debugstr_w(name), value); @@ -6014,11 +6045,15 @@ static HRESULT WINAPI isaxxmlreader_putFeature(ISAXXMLReader *iface, const WCHAR feature = get_saxreader_feature(name); + if (feature == NormalizeLineBreaks && reader->version >= MSXML4) + return E_INVALIDARG; + /* accepted cases */ if ((feature == ExhaustiveErrors && value == VARIANT_FALSE) || (feature == SchemaValidation && value == VARIANT_FALSE) || feature == Namespaces || - feature == NamespacePrefixes) + feature == NamespacePrefixes || + feature == NormalizeLineBreaks) { return set_feature_value(reader, feature, value); } @@ -6193,7 +6228,7 @@ HRESULT SAXXMLReader_create(MSXML_VERSION version, void **obj) reader->IVBSAXXMLReader_iface.lpVtbl = &vbsaxxmlreadervtbl; reader->ISAXXMLReader_iface.lpVtbl = &saxxmlreadervtbl; reader->refcount = 1; - reader->features = Namespaces | NamespacePrefixes; + reader->features = Namespaces | NamespacePrefixes | NormalizeLineBreaks; reader->version = version; reader->empty_bstr = SysAllocString(L""); diff --git a/dlls/msxml3/tests/saxreader.c b/dlls/msxml3/tests/saxreader.c index 58dd1c8cd2e..e4b9e88d5e1 100644 --- a/dlls/msxml3/tests/saxreader.c +++ b/dlls/msxml3/tests/saxreader.c @@ -3085,9 +3085,7 @@ static void test_saxreader_normalize_line_breaks(void) v = VARIANT_FALSE; hr = ISAXXMLReader_getFeature(reader, L"normalize-line-breaks", &v); - todo_wine ok(hr == S_OK, "Unexpected hr %#lx.\n", hr); - todo_wine ok(v == VARIANT_TRUE, "Unexpected value %d.\n", v); hr = ISAXXMLReader_putContentHandler(reader, &contentHandler); @@ -3141,7 +3139,6 @@ static void test_saxreader_normalize_line_breaks(void) /* Disable normalization */ hr = ISAXXMLReader_putFeature(reader, L"normalize-line-breaks", VARIANT_FALSE); - todo_wine ok(hr == S_OK, "Unexpected hr %#lx.\n", hr); /* Text content */ @@ -3150,7 +3147,7 @@ static void test_saxreader_normalize_line_breaks(void) set_expected_seq(normalize_line_breaks_off_text_seq); hr = ISAXXMLReader_parse(reader, var); ok(hr == S_OK, "Unexpected hr %#lx.\n", hr); - ok_sequence(sequences, CONTENT_HANDLER_INDEX, normalize_line_breaks_off_text_seq, "Normalize line breaks (off): text", TRUE); + ok_sequence(sequences, CONTENT_HANDLER_INDEX, normalize_line_breaks_off_text_seq, "Normalize line breaks (off): text", FALSE); /* Attribute values */ V_VT(&var) = VT_BSTR; @@ -3174,7 +3171,7 @@ static void test_saxreader_normalize_line_breaks(void) set_expected_seq(normalize_line_breaks_off_cdata_seq); hr = ISAXXMLReader_parse(reader, var); ok(hr == S_OK, "Unexpected hr %#lx.\n", hr); - ok_sequence(sequences, CONTENT_HANDLER_INDEX, normalize_line_breaks_off_cdata_seq, "Normalize line breaks (off): cdata", TRUE); + ok_sequence(sequences, CONTENT_HANDLER_INDEX, normalize_line_breaks_off_cdata_seq, "Normalize line breaks (off): cdata", FALSE); /* PI */ V_VT(&var) = VT_BSTR; @@ -3182,7 +3179,7 @@ static void test_saxreader_normalize_line_breaks(void) set_expected_seq(normalize_line_breaks_off_pi_seq); hr = ISAXXMLReader_parse(reader, var); ok(hr == S_OK, "Unexpected hr %#lx.\n", hr); - ok_sequence(sequences, CONTENT_HANDLER_INDEX, normalize_line_breaks_off_pi_seq, "Normalize line breaks (off): PI", TRUE); + ok_sequence(sequences, CONTENT_HANDLER_INDEX, normalize_line_breaks_off_pi_seq, "Normalize line breaks (off): PI", FALSE); ISAXXMLReader_Release(reader); table++; diff --git a/dlls/msxml4/tests/saxreader.c b/dlls/msxml4/tests/saxreader.c index 8859e858eee..5169f54f53a 100644 --- a/dlls/msxml4/tests/saxreader.c +++ b/dlls/msxml4/tests/saxreader.c @@ -2871,16 +2871,13 @@ static void test_saxreader_normalize_line_breaks(void) v = 123; hr = ISAXXMLReader_getFeature(reader, L"normalize-line-breaks", &v); - todo_wine ok(hr == E_INVALIDARG, "Unexpected hr %#lx.\n", hr); ok(v == 123, "Unexpected value %d.\n", v); hr = ISAXXMLReader_putFeature(reader, L"normalize-line-breaks", VARIANT_FALSE); - todo_wine ok(hr == E_INVALIDARG, "Unexpected hr %#lx.\n", hr); hr = ISAXXMLReader_putFeature(reader, L"normalize-line-breaks", VARIANT_TRUE); - todo_wine ok(hr == E_INVALIDARG, "Unexpected hr %#lx.\n", hr); ISAXXMLReader_Release(reader); diff --git a/dlls/msxml6/tests/saxreader.c b/dlls/msxml6/tests/saxreader.c index 4ecec94b9fc..91bbbf7ab17 100644 --- a/dlls/msxml6/tests/saxreader.c +++ b/dlls/msxml6/tests/saxreader.c @@ -4820,12 +4820,10 @@ static void test_saxreader_normalize_line_breaks(void) v = 123; hr = ISAXXMLReader_getFeature(reader, L"normalize-line-breaks", &v); - todo_wine ok(hr == E_INVALIDARG, "Unexpected hr %#lx.\n", hr); ok(v == 123, "Unexpected value %d.\n", v); hr = ISAXXMLReader_putFeature(reader, L"normalize-line-breaks", VARIANT_FALSE); - todo_wine ok(hr == E_INVALIDARG, "Unexpected hr %#lx.\n", hr); ISAXXMLReader_Release(reader); -- GitLab https://gitlab.winehq.org/wine/wine/-/merge_requests/10183
From: Nikolay Sivov <nsivov@codeweavers.com> Signed-off-by: Nikolay Sivov <nsivov@codeweavers.com> --- dlls/msxml3/tests/saxreader.c | 35 ++++++++++++++++++++++++++++++----- dlls/msxml4/tests/saxreader.c | 25 +++++++++++++++++++++++++ dlls/msxml6/tests/saxreader.c | 25 +++++++++++++++++++++++++ 3 files changed, 80 insertions(+), 5 deletions(-) diff --git a/dlls/msxml3/tests/saxreader.c b/dlls/msxml3/tests/saxreader.c index e4b9e88d5e1..16f4448a75c 100644 --- a/dlls/msxml3/tests/saxreader.c +++ b/dlls/msxml3/tests/saxreader.c @@ -3190,6 +3190,35 @@ static void test_saxreader_normalize_line_breaks(void) free_bstrs(); } +static void test_saxreader_exhaustive_errors(void) +{ + static const GUID *classes[] = { &CLSID_SAXXMLReader, &CLSID_SAXXMLReader30 }; + ISAXXMLReader *reader; + VARIANT_BOOL v; + HRESULT hr; + + for (int i = 0; i < ARRAYSIZE(classes); ++i) + { + hr = CoCreateInstance(classes[i], NULL, CLSCTX_INPROC_SERVER, &IID_ISAXXMLReader, (void **)&reader); + ok(hr == S_OK, "Unexpected hr %#lx.\n", hr); + + v = 123; + hr = ISAXXMLReader_getFeature(reader, L"exhaustive-errors", &v); + ok(hr == E_INVALIDARG, "Unexpected hr %#lx.\n", hr); + ok(v == 123, "Unexpected value %d.\n", v); + + hr = ISAXXMLReader_putFeature(reader, L"exhaustive-errors", VARIANT_TRUE); + todo_wine + ok(hr == E_INVALIDARG, "Unexpected hr %#lx.\n", hr); + + hr = ISAXXMLReader_putFeature(reader, L"exhaustive-errors", VARIANT_FALSE); + todo_wine + ok(hr == E_INVALIDARG, "Unexpected hr %#lx.\n", hr); + + ISAXXMLReader_Release(reader); + } +} + struct feature_ns_entry_t { const GUID *guid; const char *clsid; @@ -3229,11 +3258,6 @@ static void test_saxreader_features(void) continue; } - value = 123; - hr = ISAXXMLReader_getFeature(reader, L"exhaustive-errors", &value); - ok(hr == E_INVALIDARG, "Failed to get feature value, hr %#lx.\n", hr); - ok(value == 123, "Unexpected value %d.\n", value); - value = 123; hr = ISAXXMLReader_getFeature(reader, L"schema-validation", &value); ok(hr == E_INVALIDARG, "Failed to get feature value, hr %#lx.\n", hr); @@ -6404,6 +6428,7 @@ START_TEST(saxreader) test_saxreader_properties(); test_saxreader_max_xml_size(); test_saxreader_normalize_line_breaks(); + test_saxreader_exhaustive_errors(); test_saxreader_features(); test_saxreader_encoding(); test_saxreader_dispex(); diff --git a/dlls/msxml4/tests/saxreader.c b/dlls/msxml4/tests/saxreader.c index 5169f54f53a..0749146a5c6 100644 --- a/dlls/msxml4/tests/saxreader.c +++ b/dlls/msxml4/tests/saxreader.c @@ -2883,6 +2883,30 @@ static void test_saxreader_normalize_line_breaks(void) ISAXXMLReader_Release(reader); } +static void test_saxreader_exhaustive_errors(void) +{ + ISAXXMLReader *reader; + VARIANT_BOOL v; + HRESULT hr; + + hr = CoCreateInstance(&CLSID_SAXXMLReader40, NULL, CLSCTX_INPROC_SERVER, &IID_ISAXXMLReader, (void **)&reader); + ok(hr == S_OK, "Unexpected hr %#lx.\n", hr); + + v = VARIANT_TRUE; + hr = ISAXXMLReader_getFeature(reader, L"exhaustive-errors", &v); + ok(hr == S_OK, "Unexpected hr %#lx.\n", hr); + ok(v == VARIANT_FALSE, "Unexpected value %d.\n", v); + + hr = ISAXXMLReader_putFeature(reader, L"exhaustive-errors", VARIANT_TRUE); + todo_wine + ok(hr == S_OK, "Unexpected hr %#lx.\n", hr); + + hr = ISAXXMLReader_putFeature(reader, L"exhaustive-errors", VARIANT_FALSE); + ok(hr == S_OK, "Unexpected hr %#lx.\n", hr); + + ISAXXMLReader_Release(reader); +} + static void test_saxreader_features(void) { static const WCHAR *feature_names[] = @@ -5754,6 +5778,7 @@ START_TEST(saxreader) test_saxreader_properties(); test_saxreader_max_xml_size(); test_saxreader_normalize_line_breaks(); + test_saxreader_exhaustive_errors(); test_saxreader_features(); test_saxreader_encoding(); test_saxreader_dispex(); diff --git a/dlls/msxml6/tests/saxreader.c b/dlls/msxml6/tests/saxreader.c index 91bbbf7ab17..847d71ac149 100644 --- a/dlls/msxml6/tests/saxreader.c +++ b/dlls/msxml6/tests/saxreader.c @@ -4829,6 +4829,30 @@ static void test_saxreader_normalize_line_breaks(void) ISAXXMLReader_Release(reader); } +static void test_saxreader_exhaustive_errors(void) +{ + ISAXXMLReader *reader; + VARIANT_BOOL v; + HRESULT hr; + + hr = CoCreateInstance(&CLSID_SAXXMLReader60, NULL, CLSCTX_INPROC_SERVER, &IID_ISAXXMLReader, (void **)&reader); + ok(hr == S_OK, "Unexpected hr %#lx.\n", hr); + + v = VARIANT_TRUE; + hr = ISAXXMLReader_getFeature(reader, L"exhaustive-errors", &v); + ok(hr == S_OK, "Unexpected hr %#lx.\n", hr); + ok(v == VARIANT_FALSE, "Unexpected value %d.\n", v); + + hr = ISAXXMLReader_putFeature(reader, L"exhaustive-errors", VARIANT_TRUE); + todo_wine + ok(hr == S_OK, "Unexpected hr %#lx.\n", hr); + + hr = ISAXXMLReader_putFeature(reader, L"exhaustive-errors", VARIANT_FALSE); + ok(hr == S_OK, "Unexpected hr %#lx.\n", hr); + + ISAXXMLReader_Release(reader); +} + static const WCHAR *feature_names[] = { L"http://xml.org/sax/features/namespaces", @@ -5313,6 +5337,7 @@ START_TEST(saxreader) test_saxreader_properties(); test_saxreader_max_xml_size(); test_saxreader_normalize_line_breaks(); + test_saxreader_exhaustive_errors(); test_saxreader_features(); test_saxreader_encoding(); test_saxreader_dispex(); -- GitLab https://gitlab.winehq.org/wine/wine/-/merge_requests/10183
participants (2)
-
Nikolay Sivov -
Nikolay Sivov (@nsivov)