[2/3] xmllite: Support streams starting with comments, simplify tests

Nikolay Sivov nsivov at codeweavers.com
Mon Jan 7 03:13:54 CST 2013


Support streams starting with comments, simplify tests
-------------- next part --------------
>From bee01e22643540c336dc18eea1174aec2ebb5012 Mon Sep 17 00:00:00 2001
From: Nikolay Sivov <nsivov at codeweavers.com>
Date: Sun, 6 Jan 2013 02:42:02 +0400
Subject: [PATCH 2/3] Support streams starting with comments, simplify tests

---
 dlls/xmllite/reader.c       |    8 +++--
 dlls/xmllite/tests/reader.c |   72 +++++++++++++++++++------------------------
 2 files changed, 38 insertions(+), 42 deletions(-)

diff --git a/dlls/xmllite/reader.c b/dlls/xmllite/reader.c
index b8c3ba4..28bbc48 100644
--- a/dlls/xmllite/reader.c
+++ b/dlls/xmllite/reader.c
@@ -403,7 +403,9 @@ static HRESULT readerinput_detectencoding(xmlreaderinput *readerinput, xml_encod
 {
     encoded_buffer *buffer = &readerinput->buffer->encoded;
     static char startA[] = {'<','?'};
+    static char commentA[] = {'<','!'};
     static WCHAR startW[] = {'<','?'};
+    static WCHAR commentW[] = {'<','!'};
     static char utf8bom[] = {0xef,0xbb,0xbf};
     static char utf16lebom[] = {0xff,0xfe};
 
@@ -413,9 +415,11 @@ static HRESULT readerinput_detectencoding(xmlreaderinput *readerinput, xml_encod
 
     /* try start symbols if we have enough data to do that, input buffer should contain
        first chunk already */
-    if (!memcmp(buffer->data, startA, sizeof(startA)))
+    if (!memcmp(buffer->data, startA, sizeof(startA)) ||
+        !memcmp(buffer->data, commentA, sizeof(commentA)))
         *enc = XmlEncoding_UTF8;
-    else if (!memcmp(buffer->data, startW, sizeof(startW)))
+    else if (!memcmp(buffer->data, startW, sizeof(startW)) ||
+             !memcmp(buffer->data, commentW, sizeof(commentW)))
         *enc = XmlEncoding_UTF16;
     /* try with BOM now */
     else if (!memcmp(buffer->data, utf8bom, sizeof(utf8bom)))
diff --git a/dlls/xmllite/tests/reader.c b/dlls/xmllite/tests/reader.c
index 7709e25..9f44ba6 100644
--- a/dlls/xmllite/tests/reader.c
+++ b/dlls/xmllite/tests/reader.c
@@ -701,61 +701,53 @@ todo_wine {
     IXmlReader_Release(reader);
 }
 
-static const char xml_comment[] = "\xef\xbb\xbf<!-- comment -->";
-static const char xml_comment1[] = "\xef\xbb\xbf<!-- - comment-->";
-static const char xml_comment2[] = "\xef\xbb\xbf<!-- -- comment-->";
+struct test_entry {
+    const char *xml;
+    HRESULT hr;
+    HRESULT hr_broken; /* this is set to older version results */
+};
+
+static struct test_entry comment_tests[] = {
+    { "<!-- comment -->", S_OK },
+    { "<!-- - comment-->", S_OK },
+    { "<!-- -- comment-->", WC_E_COMMENT, WC_E_GREATERTHAN },
+    { NULL }
+};
 
 static void test_read_comment(void)
 {
-    HRESULT hr;
-    IStream *stream;
+    struct test_entry *test = comment_tests;
     IXmlReader *reader;
-    XmlNodeType type;
+    HRESULT hr;
 
     hr = pCreateXmlReader(&IID_IXmlReader, (void**)&reader, NULL);
     ok(hr == S_OK, "S_OK, got %08x\n", hr);
 
-    stream = create_stream_on_data(xml_comment, sizeof(xml_comment));
-    hr = IXmlReader_SetInput(reader, (IUnknown*)stream);
-    ok(hr == S_OK, "got %08x\n", hr);
-
-    type = XmlNodeType_None;
-    hr = IXmlReader_Read(reader, &type);
-    ok(hr == S_OK, "got %08x\n", hr);
-    ok(type == XmlNodeType_Comment, "got %d\n", type);
-
-    IStream_Release(stream);
-
-    stream = create_stream_on_data(xml_comment1, sizeof(xml_comment1));
-    hr = IXmlReader_SetInput(reader, (IUnknown*)stream);
-    ok(hr == S_OK, "got %08x\n", hr);
-
-    type = XmlNodeType_None;
-    hr = IXmlReader_Read(reader, &type);
-    ok(hr == S_OK, "got %08x\n", hr);
-    ok(type == XmlNodeType_Comment, "got %d\n", type);
+    while (test->xml)
+    {
+        XmlNodeType type;
+        IStream *stream;
 
-    IStream_Release(stream);
+        stream = create_stream_on_data(test->xml, strlen(test->xml)+1);
+        hr = IXmlReader_SetInput(reader, (IUnknown*)stream);
+        ok(hr == S_OK, "got %08x\n", hr);
 
-    stream = create_stream_on_data(xml_comment2, sizeof(xml_comment2));
-    hr = IXmlReader_SetInput(reader, (IUnknown*)stream);
-    ok(hr == S_OK, "got %08x\n", hr);
+        type = XmlNodeType_None;
+        hr = IXmlReader_Read(reader, &type);
+        if (test->hr_broken)
+            ok(hr == test->hr || broken(hr == test->hr_broken), "got %08x for %s\n", hr, test->xml);
+        else
+            ok(hr == test->hr, "got %08x for %s\n", hr, test->xml);
+        if (hr == S_OK)
+            ok(type == XmlNodeType_Comment, "got %d for %s\n", type, test->xml);
 
-    type = XmlNodeType_None;
-    hr = IXmlReader_Read(reader, &type);
-    ok(hr == WC_E_COMMENT || broken(hr == WC_E_GREATERTHAN), "got %08x\n", hr);
-    ok(type == XmlNodeType_None, "got %d\n", type);
-    IStream_Release(stream);
+        IStream_Release(stream);
+        test++;
+    }
 
     IXmlReader_Release(reader);
 }
 
-struct test_entry {
-    const char *xml;
-    HRESULT hr;
-    HRESULT hr_broken; /* this is set to older version results */
-};
-
 static struct test_entry pi_tests[] = {
     { "<?pi?>", S_OK },
     { "<?pi ?>", S_OK },
-- 
1.7.10.4




More information about the wine-patches mailing list