Nikolay Sivov : xmllite: Support streams starting with comments, simplify tests.
Alexandre Julliard
julliard at winehq.org
Mon Jan 7 13:42:20 CST 2013
Module: wine
Branch: master
Commit: 4c0f142e9283add7bd841bc86bc9574b2e4a2cc3
URL: http://source.winehq.org/git/wine.git/?a=commit;h=4c0f142e9283add7bd841bc86bc9574b2e4a2cc3
Author: Nikolay Sivov <nsivov at codeweavers.com>
Date: Sun Jan 6 02:42:02 2013 +0400
xmllite: Support streams starting with comments, simplify tests.
---
dlls/xmllite/reader.c | 8 +++-
dlls/xmllite/tests/reader.c | 76 +++++++++++++++++++-----------------------
2 files changed, 40 insertions(+), 44 deletions(-)
diff --git a/dlls/xmllite/reader.c b/dlls/xmllite/reader.c
index 8940a0e..5ca0350 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 },
More information about the wine-cvs
mailing list