Author: akhaldi Date: Tue Apr 22 11:25:33 2014 New Revision: 62869
URL: http://svn.reactos.org/svn/reactos?rev=62869&view=rev Log: [XMLLITE_WINETEST] * Sync with Wine 1.7.17. CORE-8080
Modified: trunk/rostests/winetests/xmllite/reader.c trunk/rostests/winetests/xmllite/writer.c
Modified: trunk/rostests/winetests/xmllite/reader.c URL: http://svn.reactos.org/svn/reactos/trunk/rostests/winetests/xmllite/reader.c... ============================================================================== --- trunk/rostests/winetests/xmllite/reader.c [iso-8859-1] (original) +++ trunk/rostests/winetests/xmllite/reader.c [iso-8859-1] Tue Apr 22 11:25:33 2014 @@ -45,17 +45,6 @@ BOOL hint, LPCWSTR base_uri, IXmlReaderInput **ppInput); -static const char *debugstr_guid(REFIID riid) -{ - static char buf[50]; - - sprintf(buf, "{%08X-%04X-%04X-%02X%02X-%02X%02X%02X%02X%02X%02X}", - riid->Data1, riid->Data2, riid->Data3, riid->Data4[0], - riid->Data4[1], riid->Data4[2], riid->Data4[3], riid->Data4[4], - riid->Data4[5], riid->Data4[6], riid->Data4[7]); - - return buf; -}
static WCHAR *a2w(const char *str) { @@ -71,6 +60,7 @@ }
static const char xmldecl_full[] = "\xef\xbb\xbf<?xml version=\"1.0\" encoding=\"UTF-8\" standalone=\"yes\"?>\n"; +static const char xmldecl_short[] = "<?xml version=\"1.0\"?><RegistrationInfo/>";
static IStream *create_stream_on_data(const char *data, int size) { @@ -94,11 +84,11 @@ }
static void ok_pos_(IXmlReader *reader, int line, int pos, int line_broken, - int pos_broken, int todo, int _line_) + int pos_broken, BOOL todo, int _line_) { UINT l, p; HRESULT hr; - int broken_state; + BOOL broken_state;
hr = IXmlReader_GetLineNumber(reader, &l); ok_(__FILE__, _line_)(hr == S_OK, "Expected S_OK, got %08x\n", hr); @@ -106,7 +96,7 @@ ok_(__FILE__, _line_)(hr == S_OK, "Expected S_OK, got %08x\n", hr);
if (line_broken == -1 && pos_broken == -1) - broken_state = 0; + broken_state = FALSE; else broken_state = broken((line_broken == -1 ? line : line_broken) == l && (pos_broken == -1 ? pos : pos_broken) == p); @@ -156,7 +146,7 @@
static input_iids_t input_iids;
-static void ok_iids_(const input_iids_t *iids, const IID **expected, const IID **exp_broken, int todo, int line) +static void ok_iids_(const input_iids_t *iids, const IID **expected, const IID **exp_broken, BOOL todo, int line) { int i = 0, size = 0;
@@ -174,7 +164,7 @@ for (i = 0; i < size; i++) { ok_(__FILE__, line)(IsEqualGUID(&iids->iids[i], expected[i]) || (exp_broken ? broken(IsEqualGUID(&iids->iids[i], exp_broken[i])) : FALSE), - "Wrong IID(%d), got (%s)\n", i, debugstr_guid(&iids->iids[i])); + "Wrong IID(%d), got %s\n", i, wine_dbgstr_guid(&iids->iids[i])); } } #define ok_iids(got, exp, brk, todo) ok_iids_(got, exp, brk, todo, __LINE__) @@ -247,18 +237,18 @@ }
static void test_read_state_(IXmlReader *reader, XmlReadState expected, - XmlReadState exp_broken, int todo, int line) -{ - XmlReadState state; + XmlReadState exp_broken, BOOL todo, int line) +{ + LONG_PTR state; HRESULT hr; - int broken_state; + BOOL broken_state;
state = -1; /* invalid value */ - hr = IXmlReader_GetProperty(reader, XmlReaderProperty_ReadState, (LONG_PTR*)&state); + hr = IXmlReader_GetProperty(reader, XmlReaderProperty_ReadState, &state); ok_(__FILE__, line)(hr == S_OK, "Expected S_OK, got %08x\n", hr);
if (exp_broken == -1) - broken_state = 0; + broken_state = FALSE; else broken_state = broken(exp_broken == state);
@@ -647,7 +637,7 @@ ok(hr == E_INVALIDARG, "Expected E_INVALIDARG, got %08x\n", hr);
/* attempt to read on closed reader */ - test_read_state(reader, XmlReadState_Closed, -1, 0); + test_read_state(reader, XmlReadState_Closed, -1, FALSE); if (0) { /* newer versions crash here, probably cause no input was set */ @@ -659,11 +649,24 @@
static void test_read_xmldeclaration(void) { + static const WCHAR xmlW[] = {'x','m','l',0}; + static const WCHAR RegistrationInfoW[] = {'R','e','g','i','s','t','r','a','t','i','o','n','I','n','f','o',0}; + static const struct + { + WCHAR name[12]; + WCHAR val[12]; + } name_val[] = + { + { {'v','e','r','s','i','o','n',0}, {'1','.','0',0} }, + { {'e','n','c','o','d','i','n','g',0}, {'U','T','F','-','8',0} }, + { {'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; + UINT count = 0, len, i; + BOOL ret; const WCHAR *val;
hr = pCreateXmlReader(&IID_IXmlReader, (LPVOID*)&reader, NULL); @@ -704,7 +707,7 @@ "Expected XmlNodeType_XmlDeclaration, got %s\n", type_to_str(type)); /* new version 1.2.x and 1.3.x properly update position for <?xml ?> */ ok_pos(reader, 1, 3, -1, 55, TRUE); - test_read_state(reader, XmlReadState_Interactive, -1, 0); + test_read_state(reader, XmlReadState_Interactive, -1, FALSE);
hr = IXmlReader_GetValue(reader, &val, NULL); ok(hr == S_OK, "got %08x\n", hr); @@ -744,6 +747,24 @@ hr = IXmlReader_GetAttributeCount(reader, &count); ok(hr == S_OK, "got %08x\n", hr); ok(count == 3, "Expected 3, got %d\n", count); + + for (i = 0; i < count; i++) + { + len = 0; + hr = IXmlReader_GetLocalName(reader, &val, &len); + ok(hr == S_OK, "got %08x\n", hr); + ok(len == lstrlenW(name_val[i].name), "expected %u, got %u\n", lstrlenW(name_val[i].name), len); + ok(!lstrcmpW(name_val[i].name, val), "expected %s, got %s\n", wine_dbgstr_w(name_val[i].name), wine_dbgstr_w(val)); + + len = 0; + hr = IXmlReader_GetValue(reader, &val, &len); + ok(hr == S_OK, "got %08x\n", hr); + ok(len == lstrlenW(name_val[i].val), "expected %u, got %u\n", lstrlenW(name_val[i].val), len); + ok(!lstrcmpW(name_val[i].val, val), "expected %s, got %s\n", wine_dbgstr_w(name_val[i].val), wine_dbgstr_w(val)); + + hr = IXmlReader_MoveToNextAttribute(reader); + ok(hr == (i < count - 1) ? S_OK : S_FALSE, "got %08x\n", hr); + }
hr = IXmlReader_GetDepth(reader, &count); ok(hr == S_OK, "Expected S_OK, got %08x\n", hr); @@ -766,6 +787,83 @@ ok(type == XmlNodeType_None, "got %d\n", type); } 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); + + type = -1; + hr = IXmlReader_Read(reader, &type); + ok(hr == S_OK, "expected S_OK, got %08x\n", hr); + ok(type == XmlNodeType_XmlDeclaration, "expected XmlDeclaration, got %s\n", type_to_str(type)); + ok_pos(reader, 1, 3, 1, 21, TRUE); + test_read_state(reader, XmlReadState_Interactive, -1, TRUE); + + hr = IXmlReader_GetAttributeCount(reader, &count); + ok(hr == S_OK, "expected S_OK, got %08x\n", hr); + ok(count == 1, "expected 1, got %d\n", count); + + ret = IXmlReader_IsEmptyElement(reader); + ok(!ret, "element should not be empty\n"); + + hr = IXmlReader_GetValue(reader, &val, NULL); + ok(hr == S_OK, "expected S_OK, got %08x\n", hr); + ok(*val == 0, "got %s\n", wine_dbgstr_w(val)); + + hr = IXmlReader_GetLocalName(reader, &val, NULL); + ok(hr == S_OK, "expected S_OK, got %08x\n", hr); +todo_wine + ok(!lstrcmpW(val, xmlW), "got %s\n", wine_dbgstr_w(val)); + + /* check attributes */ + hr = IXmlReader_MoveToNextAttribute(reader); + ok(hr == S_OK, "expected S_OK, got %08x\n", hr); + + type = -1; + hr = IXmlReader_GetNodeType(reader, &type); + ok(hr == S_OK, "expected S_OK, got %08x\n", hr); + ok(type == XmlNodeType_Attribute, "got %d\n", type); + ok_pos(reader, 1, 7, 1, 21, TRUE); + + /* try to move from last attribute */ + hr = IXmlReader_MoveToNextAttribute(reader); + ok(hr == S_FALSE, "expected S_FALSE, got %08x\n", hr); + + type = -1; + hr = IXmlReader_Read(reader, &type); + ok(hr == S_OK, "expected S_OK, got %08x\n", hr); + ok(type == XmlNodeType_Element, "expected Element, got %s\n", type_to_str(type)); + ok_pos(reader, 1, 23, 1, 40, TRUE); + test_read_state(reader, XmlReadState_Interactive, -1, TRUE); + + hr = IXmlReader_GetAttributeCount(reader, &count); + ok(hr == S_OK, "expected S_OK, got %08x\n", hr); + ok(count == 0, "expected 0, got %d\n", count); + + ret = IXmlReader_IsEmptyElement(reader); + ok(ret, "element should be empty\n"); + + hr = IXmlReader_GetValue(reader, &val, NULL); + ok(hr == S_OK, "expected S_OK, got %08x\n", hr); +todo_wine + ok(*val == 0, "got %s\n", wine_dbgstr_w(val)); + + hr = IXmlReader_GetLocalName(reader, &val, NULL); + ok(hr == S_OK, "expected S_OK, got %08x\n", hr); + ok(!lstrcmpW(val, RegistrationInfoW), "got %s\n", wine_dbgstr_w(val)); + + 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); +todo_wine + ok(type == XmlNodeType_None, "expected None, got %s\n", type_to_str(type)); + ok_pos(reader, 1, 41, -1, -1, TRUE); + test_read_state(reader, XmlReadState_Error, -1, TRUE); + + IStream_Release(stream); IXmlReader_Release(reader); }
@@ -775,7 +873,7 @@ const char *value; HRESULT hr; HRESULT hr_broken; /* this is set to older version results */ - int todo : 1; + BOOL todo; };
static struct test_entry comment_tests[] = { @@ -860,6 +958,7 @@ { "<?pi ?>", "pi", "", S_OK }, { "<?pi pi data?>", "pi", "pi data", S_OK }, { "<?pi pi data ?>", "pi", "pi data ", S_OK }, + { "<?pi data ?>", "pi", "data ", S_OK }, { "<?pi:pi?>", NULL, NULL, NC_E_NAMECOLON, WC_E_NAMECHARACTER }, { "<?:pi ?>", NULL, NULL, WC_E_PI, WC_E_NAMECHARACTER }, { "<?-pi ?>", NULL, NULL, WC_E_PI, WC_E_NAMECHARACTER }, @@ -948,9 +1047,13 @@ " \t \r \n" "<!-- comment4 -->" "<a>" + "\r\n\t" "<b/>" + "text" "<!-- comment -->" + "text2" "<?pi pibody ?>" + "\r\n" "</a>" ;
@@ -964,9 +1067,13 @@ XmlNodeType_Whitespace, XmlNodeType_Comment, XmlNodeType_Element, + XmlNodeType_Whitespace, XmlNodeType_Element, + XmlNodeType_Text, XmlNodeType_Comment, + XmlNodeType_Text, XmlNodeType_ProcessingInstruction, + XmlNodeType_Whitespace, XmlNodeType_EndElement, XmlNodeType_None } @@ -996,6 +1103,15 @@ ok(test->types[i] != XmlNodeType_None, "%d: unexpected end of test data\n", i); if (test->types[i] == XmlNodeType_None) break; ok(type == test->types[i], "%d: got wrong type %d, expected %d\n", i, type, test->types[i]); + if (type == XmlNodeType_Whitespace) + { + const WCHAR *ptr; + UINT len = 0; + + hr = IXmlReader_GetValue(reader, &ptr, &len); + ok(hr == S_OK, "%d: GetValue failed 0x%08x\n", i, hr); + ok(len > 0, "%d: wrong value length %d\n", i, len); + } hr = IXmlReader_Read(reader, &type); i++; } @@ -1325,8 +1441,8 @@ static struct test_entry cdata_tests[] = { { "<a><![CDATA[ ]]data ]]></a>", "", " ]]data ", S_OK }, { "<a><![CDATA[<![CDATA[ data ]]]]></a>", "", "<![CDATA[ data ]]", S_OK }, - { "<a><![CDATA[\n \r\n \n\n ]]></a>", "", "\n \n \n\n ", S_OK, S_OK, 1 }, - { "<a><![CDATA[\r \r\r\n \n\n ]]></a>", "", "\n \n\n \n\n ", S_OK, S_OK, 1 }, + { "<a><![CDATA[\n \r\n \n\n ]]></a>", "", "\n \n \n\n ", S_OK, S_OK, TRUE }, + { "<a><![CDATA[\r \r\r\n \n\n ]]></a>", "", "\n \n\n \n\n ", S_OK, S_OK, TRUE }, { "<a><![CDATA[\r\r \n\r \r \n\n ]]></a>", "", "\n\n \n\n \n \n\n ", S_OK }, { NULL } }; @@ -1669,16 +1785,8 @@
START_TEST(reader) { - HRESULT r; - - r = CoInitialize( NULL ); - ok( r == S_OK, "failed to init com\n"); - if (!init_pointers()) - { - CoUninitialize(); return; - }
test_reader_create(); test_readerinput(); @@ -1695,6 +1803,4 @@ test_read_pending(); test_readvaluechunk(); test_read_xmldeclaration(); - - CoUninitialize(); -} +}
Modified: trunk/rostests/winetests/xmllite/writer.c URL: http://svn.reactos.org/svn/reactos/trunk/rostests/winetests/xmllite/writer.c... ============================================================================== --- trunk/rostests/winetests/xmllite/writer.c [iso-8859-1] (original) +++ trunk/rostests/winetests/xmllite/writer.c [iso-8859-1] Tue Apr 22 11:25:33 2014 @@ -22,6 +22,7 @@ #define _INC_WINDOWS #define COM_NO_WINDOWS_H
+#define CONST_VTABLE #define COBJMACROS
#include <stdarg.h> @@ -34,7 +35,44 @@ #include <xmllite.h> #include <wine/test.h>
+#include <initguid.h> +DEFINE_GUID(IID_IXmlWriterOutput, 0xc1131708, 0x0f59, 0x477f, 0x93, 0x59, 0x7d, 0x33, 0x24, 0x51, 0xbc, 0x1a); + static HRESULT (WINAPI *pCreateXmlWriter)(REFIID riid, void **ppvObject, IMalloc *pMalloc); +static HRESULT (WINAPI *pCreateXmlWriterOutputWithEncodingName)(IUnknown *stream, + IMalloc *imalloc, + LPCWSTR encoding_name, + IXmlWriterOutput **output); + +static HRESULT WINAPI testoutput_QueryInterface(IUnknown *iface, REFIID riid, void **obj) +{ + if (IsEqualGUID(riid, &IID_IUnknown)) { + *obj = iface; + return S_OK; + } + else { + ok(0, "unknown riid=%s\n", wine_dbgstr_guid(riid)); + return E_NOINTERFACE; + } +} + +static ULONG WINAPI testoutput_AddRef(IUnknown *iface) +{ + return 2; +} + +static ULONG WINAPI testoutput_Release(IUnknown *iface) +{ + return 1; +} + +static const IUnknownVtbl testoutputvtbl = { + testoutput_QueryInterface, + testoutput_AddRef, + testoutput_Release +}; + +static IUnknown testoutput = { &testoutputvtbl };
static void test_writer_create(void) { @@ -50,10 +88,7 @@
hr = pCreateXmlWriter(&IID_IXmlWriter, (LPVOID*)&writer, NULL); ok(hr == S_OK, "Expected S_OK, got %08x\n", hr); - if(hr == S_OK) - { - IXmlWriter_Release(writer); - } + IXmlWriter_Release(writer); }
static BOOL init_pointers(void) @@ -69,25 +104,34 @@
#define MAKEFUNC(f) if (!(p##f = (void*)GetProcAddress(mod, #f))) return FALSE; MAKEFUNC(CreateXmlWriter); + MAKEFUNC(CreateXmlWriterOutputWithEncodingName); #undef MAKEFUNC
return TRUE; }
+static void test_writeroutput(void) +{ + static const WCHAR utf16W[] = {'u','t','f','-','1','6',0}; + IXmlWriterOutput *output; + IUnknown *unk; + HRESULT hr; + + hr = pCreateXmlWriterOutputWithEncodingName(&testoutput, NULL, utf16W, &output); + ok(hr == S_OK, "got %08x\n", hr); + unk = NULL; + hr = IUnknown_QueryInterface(output, &IID_IXmlWriterOutput, (void**)&unk); + ok(hr == S_OK, "got %08x\n", hr); + ok(unk != NULL, "got %p\n", unk); + /* releasing 'unk' crashes on native */ + IUnknown_Release(output); +} + START_TEST(writer) { - HRESULT r; - - r = CoInitialize( NULL ); - ok( r == S_OK, "failed to init com\n"); - if (!init_pointers()) - { - CoUninitialize(); return; - }
test_writer_create(); - - CoUninitialize(); + test_writeroutput(); }