[PATCH v2 1/3] xmllite/tests: Extract nul-character test from XML declaration test.

Jeff Smith whydoubt at gmail.com
Thu Dec 5 13:40:10 CST 2019


The comments in the XML declaration test suggest that it is supposed to
be to checking for failure when no element follows the XML declaration.
However, the error being tested for is due to a nul character in the
input stream.

Create a separate test for nul-character errors, and fix the XML
declaration test accordingly.

Signed-off-by: Jeff Smith <whydoubt at gmail.com>
---
 dlls/xmllite/tests/reader.c | 83 +++++++++++++++++++++++++++++--------
 1 file changed, 66 insertions(+), 17 deletions(-)

diff --git a/dlls/xmllite/tests/reader.c b/dlls/xmllite/tests/reader.c
index 41adad1598..40d39c22f5 100644
--- a/dlls/xmllite/tests/reader.c
+++ b/dlls/xmllite/tests/reader.c
@@ -863,7 +863,6 @@ static void test_read_xmldeclaration(void)
         { {'s','t','a','n','d','a','l','o','n','e',0}, {'y','e','s',0} }
     };
     IXmlReader *reader;
-    IStream *stream;
     HRESULT hr;
     XmlNodeType type;
     UINT count = 0, len, i;
@@ -873,10 +872,7 @@ static void test_read_xmldeclaration(void)
     hr = CreateXmlReader(&IID_IXmlReader, (LPVOID*)&reader, NULL);
     ok(hr == S_OK, "Expected S_OK, got %08x\n", hr);
 
-    stream = create_stream_on_data(xmldecl_full, sizeof(xmldecl_full));
-
-    hr = IXmlReader_SetInput(reader, (IUnknown*)stream);
-    ok(hr == S_OK, "Expected S_OK, got %08x\n", hr);
+    set_input_string(reader, xmldecl_full);
 
     hr = IXmlReader_GetAttributeCount(reader, &count);
     ok(hr == S_OK, "got %08x\n", hr);
@@ -968,19 +964,19 @@ static void test_read_xmldeclaration(void)
 
     type = XmlNodeType_XmlDeclaration;
     hr = IXmlReader_Read(reader, &type);
-    /* newer versions return syntax error here cause document is incomplete,
-       it makes more sense than invalid char error */
+    ok(hr == S_OK, "got %08x\n", hr);
+    ok(type == XmlNodeType_Whitespace, "expected XmlNodeType_Whitespace, got %s\n", type_to_str(type));
+
+    type = XmlNodeType_Whitespace;
+    hr = IXmlReader_Read(reader, &type);
 todo_wine {
-    ok(hr == WC_E_SYNTAX || broken(hr == WC_E_XMLCHARACTER), "got 0x%08x\n", hr);
+    ok(hr == WC_E_ROOTELEMENT, "got %08x\n", hr);
     ok(type == XmlNodeType_None, "got %d\n", type);
+    TEST_READER_STATE(reader, XmlReadState_Error);
 }
-    IStream_Release(stream);
 
     /* test short variant */
-    stream = create_stream_on_data(xmldecl_short, sizeof(xmldecl_short));
-
-    hr = IXmlReader_SetInput(reader, (IUnknown *)stream);
-    ok(hr == S_OK, "expected S_OK, got %08x\n", hr);
+    set_input_string(reader, xmldecl_short);
 
     read_node(reader, XmlNodeType_XmlDeclaration);
     TEST_READER_POSITION2(reader, 1, 3, ~0u, 21);
@@ -1027,14 +1023,66 @@ todo_wine {
 
     type = -1;
     hr = IXmlReader_Read(reader, &type);
-todo_wine
-    ok(hr == WC_E_SYNTAX || hr == WC_E_XMLCHARACTER /* XP */, "expected WC_E_SYNTAX, got %08x\n", hr);
+    ok(hr == S_FALSE, "expected S_FALSE, got %08x\n", hr);
     ok(type == XmlNodeType_None, "expected XmlNodeType_None, got %s\n", type_to_str(type));
-    TEST_READER_POSITION(reader, 1, 41);
+
+    IXmlReader_Release(reader);
+}
+
+static void test_read_nul(void)
+{
+    static const char xml_empty[] = "<a/>";
+    static const char xml_ws[] = "<a/> ";
+    static const char xml_comment[] = "<a/><!-- comment -->";
+    IXmlReader *reader;
+    XmlNodeType type;
+    IStream *stream;
+    HRESULT hr;
+
+    hr = CreateXmlReader(&IID_IXmlReader, (LPVOID*)&reader, NULL);
+    ok(hr == S_OK, "Expected S_OK, got %08x\n", hr);
+
+    stream = create_stream_on_data(xml_empty, sizeof(xml_empty));
+    hr = IXmlReader_SetInput(reader, (IUnknown *)stream);
+    ok(hr == S_OK, "got %08x\n", hr);
+    IStream_Release(stream);
+
+    read_node(reader, XmlNodeType_Element);
+
+    type = -1;
+    hr = IXmlReader_Read(reader, &type);
 todo_wine
-    TEST_READER_STATE(reader, XmlReadState_Error);
+    ok(hr == WC_E_SYNTAX, "expected WC_E_SYNTAX, got 0x%08x\n", hr);
+    ok(type == XmlNodeType_None, "expected XmlNodeType_None, got %s\n", type_to_str(type));
 
+    stream = create_stream_on_data(xml_ws, sizeof(xml_ws));
+    hr = IXmlReader_SetInput(reader, (IUnknown *)stream);
+    ok(hr == S_OK, "got %08x\n", hr);
     IStream_Release(stream);
+
+    read_node(reader, XmlNodeType_Element);
+
+    type = -1;
+    hr = IXmlReader_Read(reader, &type);
+todo_wine {
+    ok(hr == WC_E_SYNTAX, "expected WC_E_SYNTAX, got 0x%08x\n", hr);
+    ok(type == XmlNodeType_None, "expected XmlNodeType_None, got %s\n", type_to_str(type));
+}
+
+    stream = create_stream_on_data(xml_comment, sizeof(xml_comment));
+    hr = IXmlReader_SetInput(reader, (IUnknown *)stream);
+    ok(hr == S_OK, "got %08x\n", hr);
+    IStream_Release(stream);
+
+    read_node(reader, XmlNodeType_Element);
+    read_node(reader, XmlNodeType_Comment);
+
+    type = -1;
+    hr = IXmlReader_Read(reader, &type);
+todo_wine
+    ok(hr == WC_E_SYNTAX, "expected WC_E_SYNTAX, got 0x%08x\n", hr);
+    ok(type == XmlNodeType_None, "expected XmlNodeType_None, got %s\n", type_to_str(type));
+
     IXmlReader_Release(reader);
 }
 
@@ -2672,6 +2720,7 @@ START_TEST(reader)
     test_read_pending();
     test_readvaluechunk();
     test_read_xmldeclaration();
+    test_read_nul();
     test_reader_properties();
     test_prefix();
     test_namespaceuri();
-- 
2.23.0




More information about the wine-devel mailing list