Module: wine Branch: master Commit: 4c0f142e9283add7bd841bc86bc9574b2e4a2cc3 URL: http://source.winehq.org/git/wine.git/?a=commit;h=4c0f142e9283add7bd841bc86b...
Author: Nikolay Sivov nsivov@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 },