diff --git a/rostests/winetests/xmllite/CMakeLists.txt b/rostests/winetests/xmllite/CMakeLists.txt index 91e6f983fbf..7bb8b287e61 100644 --- a/rostests/winetests/xmllite/CMakeLists.txt +++ b/rostests/winetests/xmllite/CMakeLists.txt @@ -1,19 +1,10 @@ -add_definitions(-D__ROS_LONG64__) - list(APPEND SOURCE reader.c writer.c testlist.c) -if(NOT MSVC) - # FIXME: http://www.cmake.org/Bug/view.php?id=12998 - #allow_warnings(xmllite_winetest) - set_source_files_properties(${SOURCE} PROPERTIES COMPILE_FLAGS "-Wno-error") -endif() - add_executable(xmllite_winetest ${SOURCE}) -target_link_libraries(xmllite_winetest wine uuid) set_module_type(xmllite_winetest win32cui) -add_importlibs(xmllite_winetest xmllite ole32 msvcrt kernel32 ntdll) +add_importlibs(xmllite_winetest ole32 msvcrt kernel32) add_cd_file(TARGET xmllite_winetest DESTINATION reactos/bin FOR all) diff --git a/rostests/winetests/xmllite/reader.c b/rostests/winetests/xmllite/reader.c index c20553989f4..ed3d6e1652f 100644 --- a/rostests/winetests/xmllite/reader.c +++ b/rostests/winetests/xmllite/reader.c @@ -747,7 +747,6 @@ static void test_read_xmldeclaration(void) hr = IXmlReader_GetDepth(reader, &count); ok(hr == S_OK, "Expected S_OK, got %08x\n", hr); -todo_wine ok(count == 1, "Expected 1, got %d\n", count); hr = IXmlReader_MoveToElement(reader); @@ -776,6 +775,7 @@ struct test_entry { const char *value; HRESULT hr; HRESULT hr_broken; /* this is set to older version results */ + int todo : 1; }; static struct test_entry comment_tests[] = { @@ -1053,18 +1053,16 @@ static void test_read_dtd(void) str = NULL; hr = IXmlReader_GetLocalName(reader, &str, &len); ok(hr == S_OK, "got 0x%08x\n", hr); -todo_wine { ok(len == lstrlenW(sysW), "got %u\n", len); ok(!lstrcmpW(str, sysW), "got %s\n", wine_dbgstr_w(str)); -} + len = 0; str = NULL; hr = IXmlReader_GetValue(reader, &str, &len); ok(hr == S_OK, "got 0x%08x\n", hr); -todo_wine { ok(len == lstrlenW(sysvalW), "got %u\n", len); ok(!lstrcmpW(str, sysvalW), "got %s\n", wine_dbgstr_w(str)); -} + hr = IXmlReader_MoveToElement(reader); ok(hr == S_OK, "got 0x%08x\n", hr); @@ -1072,9 +1070,10 @@ todo_wine { str = NULL; hr = IXmlReader_GetLocalName(reader, &str, &len); ok(hr == S_OK, "got 0x%08x\n", hr); +todo_wine { ok(len == lstrlenW(dtdnameW), "got %u\n", len); ok(!lstrcmpW(str, dtdnameW), "got %s\n", wine_dbgstr_w(str)); - +} len = 0; str = NULL; hr = IXmlReader_GetQualifiedName(reader, &str, &len); @@ -1170,16 +1169,20 @@ static void test_read_element(void) ok(hr == S_OK, "got %08x\n", hr); ok(depth == 0, "got %d\n", depth); + type = XmlNodeType_None; hr = IXmlReader_Read(reader, &type); ok(hr == S_OK, "got %08x\n", hr); + ok(type == XmlNodeType_Element, "got %d\n", type); depth = 1; hr = IXmlReader_GetDepth(reader, &depth); ok(hr == S_OK, "got %08x\n", hr); ok(depth == 0, "got %d\n", depth); + type = XmlNodeType_None; hr = IXmlReader_Read(reader, &type); ok(hr == S_OK, "got %08x\n", hr); + ok(type == XmlNodeType_Element, "got %d\n", type); depth = 0; hr = IXmlReader_GetDepth(reader, &depth); @@ -1322,6 +1325,9 @@ static void test_readvaluechunk(void) static struct test_entry cdata_tests[] = { { "", "", " ]]data ", S_OK }, { "", "", "", "", "\n \n \n\n ", S_OK, S_OK, 1 }, + { "", "", "\n \n\n \n\n ", S_OK, S_OK, 1 }, + { "", "", "\n\n \n\n \n \n\n ", S_OK }, { NULL } }; @@ -1365,6 +1371,265 @@ static void test_read_cdata(void) ok(type == XmlNodeType_CDATA, "got %d for %s\n", type, test->xml); + str_exp = a2w(test->name); + + len = 1; + str = NULL; + hr = IXmlReader_GetLocalName(reader, &str, &len); + ok(hr == S_OK, "got 0x%08x\n", hr); + ok(len == strlen(test->name), "got %u\n", len); + ok(!lstrcmpW(str, str_exp), "got %s\n", wine_dbgstr_w(str)); + + str = NULL; + hr = IXmlReader_GetLocalName(reader, &str, NULL); + ok(hr == S_OK, "got 0x%08x\n", hr); + ok(!lstrcmpW(str, str_exp), "got %s\n", wine_dbgstr_w(str)); + + free_str(str_exp); + + len = 1; + str = NULL; + hr = IXmlReader_GetQualifiedName(reader, &str, &len); + ok(hr == S_OK, "got 0x%08x\n", hr); + ok(len == strlen(test->name), "got %u\n", len); + str_exp = a2w(test->name); + ok(!lstrcmpW(str, str_exp), "got %s\n", wine_dbgstr_w(str)); + free_str(str_exp); + + /* value */ + len = 1; + str = NULL; + hr = IXmlReader_GetValue(reader, &str, &len); + ok(hr == S_OK, "got 0x%08x\n", hr); + + str_exp = a2w(test->value); + if (test->todo) + { + todo_wine { + ok(len == strlen(test->value), "got %u\n", len); + ok(!lstrcmpW(str, str_exp), "got %s\n", wine_dbgstr_w(str)); + } + } + else + { + ok(len == strlen(test->value), "got %u\n", len); + ok(!lstrcmpW(str, str_exp), "got %s\n", wine_dbgstr_w(str)); + } + free_str(str_exp); + } + + IStream_Release(stream); + test++; + } + + IXmlReader_Release(reader); +} + +static struct test_entry text_tests[] = { + { "simple text", "", "simple text", S_OK }, + { "text ]]> text", "", "", WC_E_CDSECTEND }, + { NULL } +}; + +static void test_read_text(void) +{ + struct test_entry *test = text_tests; + IXmlReader *reader; + HRESULT hr; + + hr = pCreateXmlReader(&IID_IXmlReader, (void**)&reader, NULL); + ok(hr == S_OK, "S_OK, got %08x\n", hr); + + while (test->xml) + { + XmlNodeType type; + IStream *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); + + type = XmlNodeType_None; + hr = IXmlReader_Read(reader, &type); + + /* read one more to get to CDATA */ + if (type == XmlNodeType_Element) + { + 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) + { + const WCHAR *str; + WCHAR *str_exp; + UINT len; + + ok(type == XmlNodeType_Text, "got %d for %s\n", type, test->xml); + + str_exp = a2w(test->name); + + len = 1; + str = NULL; + hr = IXmlReader_GetLocalName(reader, &str, &len); + ok(hr == S_OK, "got 0x%08x\n", hr); + ok(len == strlen(test->name), "got %u\n", len); + ok(!lstrcmpW(str, str_exp), "got %s\n", wine_dbgstr_w(str)); + + str = NULL; + hr = IXmlReader_GetLocalName(reader, &str, NULL); + ok(hr == S_OK, "got 0x%08x\n", hr); + ok(!lstrcmpW(str, str_exp), "got %s\n", wine_dbgstr_w(str)); + + free_str(str_exp); + + len = 1; + str = NULL; + hr = IXmlReader_GetQualifiedName(reader, &str, &len); + ok(hr == S_OK, "got 0x%08x\n", hr); + ok(len == strlen(test->name), "got %u\n", len); + str_exp = a2w(test->name); + ok(!lstrcmpW(str, str_exp), "got %s\n", wine_dbgstr_w(str)); + free_str(str_exp); + + /* value */ + len = 1; + str = NULL; + hr = IXmlReader_GetValue(reader, &str, &len); + ok(hr == S_OK, "got 0x%08x\n", hr); + + str_exp = a2w(test->value); + if (test->todo) + { + todo_wine { + ok(len == strlen(test->value), "got %u\n", len); + ok(!lstrcmpW(str, str_exp), "got %s\n", wine_dbgstr_w(str)); + } + } + else + { + ok(len == strlen(test->value), "got %u\n", len); + ok(!lstrcmpW(str, str_exp), "got %s\n", wine_dbgstr_w(str)); + } + free_str(str_exp); + } + + IStream_Release(stream); + test++; + } + + IXmlReader_Release(reader); +} + +struct test_entry_empty { + const char *xml; + BOOL empty; +}; + +static struct test_entry_empty empty_element_tests[] = { + { "", FALSE }, + { "", TRUE }, + { NULL } +}; + +static void test_isemptyelement(void) +{ + struct test_entry_empty *test = empty_element_tests; + IXmlReader *reader; + HRESULT hr; + + hr = pCreateXmlReader(&IID_IXmlReader, (void**)&reader, NULL); + ok(hr == S_OK, "S_OK, got %08x\n", hr); + + while (test->xml) + { + XmlNodeType type; + IStream *stream; + BOOL ret; + + 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); + + type = XmlNodeType_None; + hr = IXmlReader_Read(reader, &type); + ok(hr == S_OK, "got 0x%08x\n", hr); + ok(type == XmlNodeType_Element, "got %d\n", type); + + ret = IXmlReader_IsEmptyElement(reader); + ok(ret == test->empty, "got %d, expected %d. xml=%s\n", ret, test->empty, test->xml); + + IStream_Release(stream); + test++; + } + + IXmlReader_Release(reader); +} + +static struct test_entry attributes_tests[] = { + { "", "attr1", "attrvalue", S_OK }, + { "", "attr1", "a\'\'ttrvalue", S_OK }, + { "", "attr1", "a\"ttrvalue", S_OK }, + { "", "attr1", " ", S_OK }, + { "", "attr1", " ", S_OK }, + { "", "attr1", " ", S_OK }, + { "", "attr1", " val ", S_OK }, + { "", "attr1", " val ", S_OK }, + { "", "attr1", "val ", S_OK }, + { "", "attr1", "val ", S_OK }, + { "", "attr1", "<>&\'\"", S_OK }, + { "", NULL, NULL, WC_E_UNDECLAREDENTITY }, + { "", NULL, NULL, WC_E_XMLCHARACTER }, + { "", NULL, NULL, WC_E_DIGIT, WC_E_SEMICOLON }, + { "", NULL, NULL, WC_E_SEMICOLON }, + { "", NULL, NULL, WC_E_SEMICOLON }, + { "", NULL, NULL, WC_E_HEXDIGIT, WC_E_SEMICOLON }, + { "", NULL, NULL, WC_E_QUOTE }, + { "", NULL, NULL, WC_E_LESSTHAN }, + { "", NULL, NULL, WC_E_SEMICOLON }, + { NULL } +}; + +static void test_read_attribute(void) +{ + struct test_entry *test = attributes_tests; + IXmlReader *reader; + HRESULT hr; + + hr = pCreateXmlReader(&IID_IXmlReader, (void**)&reader, NULL); + ok(hr == S_OK, "S_OK, got %08x\n", hr); + + while (test->xml) + { + XmlNodeType type; + IStream *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); + + 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) + { + const WCHAR *str; + WCHAR *str_exp; + UINT len; + + ok(type == XmlNodeType_Element, "got %d for %s\n", type, test->xml); + + hr = IXmlReader_MoveToFirstAttribute(reader); + ok(hr == S_OK, "got 0x%08x\n", hr); + len = 1; str = NULL; hr = IXmlReader_GetLocalName(reader, &str, &len); @@ -1378,11 +1643,12 @@ static void test_read_cdata(void) str = NULL; hr = IXmlReader_GetQualifiedName(reader, &str, &len); ok(hr == S_OK, "got 0x%08x\n", hr); + todo_wine { ok(len == strlen(test->name), "got %u\n", len); str_exp = a2w(test->name); ok(!lstrcmpW(str, str_exp), "got %s\n", wine_dbgstr_w(str)); free_str(str_exp); - + } /* value */ len = 1; str = NULL; @@ -1417,11 +1683,14 @@ START_TEST(reader) test_reader_create(); test_readerinput(); test_reader_state(); + test_read_attribute(); test_read_cdata(); test_read_comment(); test_read_pi(); test_read_dtd(); test_read_element(); + test_isemptyelement(); + test_read_text(); test_read_full(); test_read_pending(); test_readvaluechunk();