Author: akhaldi
Date: Sun Sep 24 11:18:47 2017
New Revision: 75951

URL: http://svn.reactos.org/svn/reactos?rev=75951&view=rev
Log:
[XMLLITE_WINETEST] Sync with Wine Staging 2.16. CORE-13762

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?rev=75951&r1=75950&r2=75951&view=diff
==============================================================================
--- trunk/rostests/winetests/xmllite/reader.c   [iso-8859-1] (original)
+++ trunk/rostests/winetests/xmllite/reader.c   [iso-8859-1] Sun Sep 24 
11:18:47 2017
@@ -801,7 +801,6 @@
 {
     XmlNodeType nodetype;
     IXmlReader *reader;
-    IStream *stream;
     HRESULT hr;
 
     hr = CreateXmlReader(&IID_IXmlReader, (void**)&reader, NULL);
@@ -820,12 +819,7 @@
     hr = IXmlReader_Read(reader, &nodetype);
     ok(hr == S_FALSE, "got %08x\n", hr);
 }
-
-    stream = create_stream_on_data("xml", sizeof("xml"));
-
-    hr = IXmlReader_SetInput(reader, (IUnknown *)stream);
-    ok(hr == S_OK, "Expected S_OK, got %08x\n", hr);
-
+    set_input_string(reader, "xml");
     TEST_READER_STATE(reader, XmlReadState_Initial);
 
     nodetype = XmlNodeType_Element;
@@ -843,7 +837,6 @@
     ok(FAILED(hr), "got %08x\n", hr);
     ok(nodetype == XmlNodeType_None, "Unexpected node type %d\n", nodetype);
 
-    IStream_Release(stream);
     IXmlReader_Release(reader);
 }
 
@@ -1287,7 +1280,6 @@
     IXmlReader *reader;
     const WCHAR *str;
     XmlNodeType type;
-    IStream *stream;
     UINT len, count;
     HRESULT hr;
 
@@ -1297,9 +1289,7 @@
     hr = IXmlReader_SetProperty(reader, XmlReaderProperty_DtdProcessing, 
DtdProcessing_Parse);
     ok(hr == S_OK, "got 0x%8x\n", hr);
 
-    stream = create_stream_on_data(test_public_dtd, sizeof(test_public_dtd));
-    hr = IXmlReader_SetInput(reader, (IUnknown*)stream);
-    ok(hr == S_OK, "got %08x\n", hr);
+    set_input_string(reader, test_public_dtd);
 
     read_node(reader, XmlNodeType_DocumentType);
 
@@ -1340,7 +1330,6 @@
     ok(len == lstrlenW(dtdnameW), "got %u\n", len);
     ok(!lstrcmpW(str, dtdnameW), "got %s\n", wine_dbgstr_w(str));
 }
-    IStream_Release(stream);
     IXmlReader_Release(reader);
 }
 
@@ -1354,7 +1343,6 @@
     IXmlReader *reader;
     const WCHAR *str;
     XmlNodeType type;
-    IStream *stream;
     UINT len, count;
     HRESULT hr;
 
@@ -1364,9 +1352,7 @@
     hr = IXmlReader_SetProperty(reader, XmlReaderProperty_DtdProcessing, 
DtdProcessing_Parse);
     ok(hr == S_OK, "got 0x%8x\n", hr);
 
-    stream = create_stream_on_data(test_system_dtd, sizeof(test_system_dtd));
-    hr = IXmlReader_SetInput(reader, (IUnknown*)stream);
-    ok(hr == S_OK, "got %08x\n", hr);
+    set_input_string(reader, test_system_dtd);
 
     read_node(reader, XmlNodeType_DocumentType);
 
@@ -1400,7 +1386,6 @@
 
     read_node(reader, XmlNodeType_Comment);
 
-    IStream_Release(stream);
     IXmlReader_Release(reader);
 }
 
@@ -1714,11 +1699,8 @@
     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);
+
+        set_input_string(reader, test->xml);
 
         type = XmlNodeType_None;
         hr = IXmlReader_Read(reader, &type);
@@ -1764,7 +1746,6 @@
             reader_value(reader, test->value);
         }
 
-        IStream_Release(stream);
         test++;
     }
 
@@ -1791,11 +1772,8 @@
     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);
+
+        set_input_string(reader, test->xml);
 
         type = XmlNodeType_None;
         hr = IXmlReader_Read(reader, &type);
@@ -1837,7 +1815,6 @@
             reader_value(reader, test->value);
         }
 
-        IStream_Release(stream);
         test++;
     }
 
@@ -1867,12 +1844,9 @@
     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);
+        set_input_string(reader, test->xml);
 
         type = XmlNodeType_None;
         hr = IXmlReader_Read(reader, &type);
@@ -1882,7 +1856,6 @@
         ret = IXmlReader_IsEmptyElement(reader);
         ok(ret == test->empty, "got %d, expected %d. xml=%s\n", ret, 
test->empty, test->xml);
 
-        IStream_Release(stream);
         test++;
     }
 
@@ -1925,11 +1898,8 @@
     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);
+
+        set_input_string(reader, test->xml);
 
         hr = IXmlReader_Read(reader, NULL);
 
@@ -1967,7 +1937,6 @@
             reader_value(reader, test->value);
         }
 
-        IStream_Release(stream);
         test++;
     }
 
@@ -2024,11 +1993,8 @@
 
     for (i = 0; i < sizeof(prefix_tests)/sizeof(prefix_tests[0]); i++) {
         XmlNodeType type;
-        IStream *stream;
-
-        stream = create_stream_on_data(prefix_tests[i].xml, 
strlen(prefix_tests[i].xml) + 1);
-        hr = IXmlReader_SetInput(reader, (IUnknown *)stream);
-        ok(hr == S_OK, "got %08x\n", hr);
+
+        set_input_string(reader, prefix_tests[i].xml);
 
         hr = IXmlReader_Read(reader, &type);
         ok(hr == S_OK, "Read() failed, %#x\n", hr);
@@ -2056,8 +2022,6 @@
         /* back to the element, check prefix */
         move_to_element(reader);
         reader_prefix(reader, prefix_tests[i].prefix1);
-
-        IStream_Release(stream);
     }
 
     IXmlReader_Release(reader);
@@ -2103,11 +2067,9 @@
     ok(hr == S_OK, "S_OK, got %08x\n", hr);
 
     for (i = 0; i < sizeof(uri_tests)/sizeof(uri_tests[0]); i++) {
-        IStream *stream = create_stream_on_data(uri_tests[i].xml, 
strlen(uri_tests[i].xml) + 1);
         unsigned int j = 0;
 
-        hr = IXmlReader_SetInput(reader, (IUnknown *)stream);
-        ok(hr == S_OK, "got %08x\n", hr);
+        set_input_string(reader, uri_tests[i].xml);
 
         type = ~0u;
         while (IXmlReader_Read(reader, &type) == S_OK) {
@@ -2152,8 +2114,6 @@
             j++;
         }
         ok(type == XmlNodeType_None, "Unexpected node type %d\n", type);
-
-        IStream_Release(stream);
     }
 
     IXmlReader_Release(reader);
@@ -2229,17 +2189,12 @@
 
     for (i = 0; i < sizeof(encoding_testsA)/sizeof(encoding_testsA[0]); i++)
     {
-        stream = create_stream_on_data(encoding_testsA[i], 
strlen(encoding_testsA[i]));
-
-        hr = IXmlReader_SetInput(reader, (IUnknown *)stream);
-        ok(hr == S_OK, "got %08x\n", hr);
+        set_input_string(reader, encoding_testsA[i]);
 
         type = XmlNodeType_None;
         hr = IXmlReader_Read(reader, &type);
         ok(hr == S_OK, "got %08x\n", hr);
         ok(type != XmlNodeType_None, "Unexpected node type %d\n", type);
-
-        IStream_Release(stream);
     }
 
     for (i = 0; i < sizeof(encoding_testsW)/sizeof(encoding_testsW[0]); i++)
@@ -2617,6 +2572,90 @@
     next_attribute(reader);
     ok(name == reader_name(reader, "attr"), "attr pointer changed\n");
     ok(value == reader_value(reader, "value"), "value pointer changed\n");
+
+    IXmlReader_Release(reader);
+}
+
+static void test_attribute_by_name(void)
+{
+    static const char *xml = "<a><elem xmlns=\"myns\" a=\"value a\" b=\"value 
b\" xmlns:ns=\"ns uri\" "
+        "ns:c=\"value c\" c=\"value c2\"/></a>";
+    static const WCHAR xmlns_uriW[] = 
{'h','t','t','p',':','/','/','w','w','w','.','w','3','.','o','r','g','/',
+        '2','0','0','0','/','x','m','l','n','s','/',0};
+    static const WCHAR nsuriW[] = {'n','s',' ','u','r','i',0};
+    static const WCHAR xmlnsW[] = {'x','m','l','n','s',0};
+    static const WCHAR mynsW[] = {'m','y','n','s',0};
+    static const WCHAR nsW[] = {'n','s',0};
+    static const WCHAR emptyW[] = {0};
+    static const WCHAR aW[] = {'a',0};
+    static const WCHAR bW[] = {'b',0};
+    static const WCHAR cW[] = {'c',0};
+    IXmlReader *reader;
+    HRESULT hr;
+
+    hr = CreateXmlReader(&IID_IXmlReader, (void **)&reader, NULL);
+    ok(hr == S_OK, "Failed to create reader, hr %#x.\n", hr);
+
+    set_input_string(reader, xml);
+
+    hr = IXmlReader_MoveToAttributeByName(reader, NULL, NULL);
+    ok(hr == E_INVALIDARG || broken(hr == S_FALSE) /* WinXP */, "Unexpected hr 
%#x.\n", hr);
+
+    hr = IXmlReader_MoveToAttributeByName(reader, emptyW, NULL);
+    ok(hr == S_FALSE, "Unexpected hr %#x.\n", hr);
+
+    read_node(reader, XmlNodeType_Element);
+
+    hr = IXmlReader_MoveToAttributeByName(reader, emptyW, NULL);
+    ok(hr == S_FALSE, "Unexpected hr %#x.\n", hr);
+
+    read_node(reader, XmlNodeType_Element);
+
+    hr = IXmlReader_MoveToAttributeByName(reader, NULL, NULL);
+    ok(hr == E_INVALIDARG, "Unexpected hr %#x.\n", hr);
+
+    hr = IXmlReader_MoveToAttributeByName(reader, NULL, xmlns_uriW);
+    ok(hr == E_INVALIDARG, "Unexpected hr %#x.\n", hr);
+
+    hr = IXmlReader_MoveToAttributeByName(reader, emptyW, xmlns_uriW);
+    ok(hr == S_FALSE, "Unexpected hr %#x.\n", hr);
+
+    hr = IXmlReader_MoveToAttributeByName(reader, xmlnsW, NULL);
+    ok(hr == S_FALSE, "Unexpected hr %#x.\n", hr);
+
+    hr = IXmlReader_MoveToAttributeByName(reader, xmlnsW, xmlns_uriW);
+    ok(hr == S_OK, "Unexpected hr %#x.\n", hr);
+    reader_value(reader, "myns");
+
+    hr = IXmlReader_MoveToAttributeByName(reader, aW, NULL);
+    ok(hr == S_OK, "Unexpected hr %#x.\n", hr);
+    reader_value(reader, "value a");
+
+    hr = IXmlReader_MoveToAttributeByName(reader, bW, NULL);
+    ok(hr == S_OK, "Unexpected hr %#x.\n", hr);
+    reader_value(reader, "value b");
+
+    hr = IXmlReader_MoveToAttributeByName(reader, aW, mynsW);
+    ok(hr == S_FALSE, "Unexpected hr %#x.\n", hr);
+
+    hr = IXmlReader_MoveToAttributeByName(reader, nsW, NULL);
+    ok(hr == S_FALSE, "Unexpected hr %#x.\n", hr);
+
+    hr = IXmlReader_MoveToAttributeByName(reader, nsW, xmlns_uriW);
+    ok(hr == S_OK, "Unexpected hr %#x.\n", hr);
+    reader_value(reader, "ns uri");
+
+    hr = IXmlReader_MoveToAttributeByName(reader, bW, emptyW);
+    ok(hr == S_OK, "Unexpected hr %#x.\n", hr);
+    reader_value(reader, "value b");
+
+    hr = IXmlReader_MoveToAttributeByName(reader, cW, NULL);
+    ok(hr == S_OK, "Unexpected hr %#x.\n", hr);
+    reader_value(reader, "value c2");
+
+    hr = IXmlReader_MoveToAttributeByName(reader, cW, nsuriW);
+    ok(hr == S_OK, "Unexpected hr %#x.\n", hr);
+    reader_value(reader, "value c");
 
     IXmlReader_Release(reader);
 }
@@ -2648,4 +2687,5 @@
     test_max_element_depth();
     test_reader_position();
     test_string_pointers();
-}
+    test_attribute_by_name();
+}

Modified: trunk/rostests/winetests/xmllite/writer.c
URL: 
http://svn.reactos.org/svn/reactos/trunk/rostests/winetests/xmllite/writer.c?rev=75951&r1=75950&r2=75951&view=diff
==============================================================================
--- trunk/rostests/winetests/xmllite/writer.c   [iso-8859-1] (original)
+++ trunk/rostests/winetests/xmllite/writer.c   [iso-8859-1] Sun Sep 24 
11:18:47 2017
@@ -39,6 +39,8 @@
 #include <initguid.h>
 DEFINE_GUID(IID_IXmlWriterOutput, 0xc1131708, 0x0f59, 0x477f, 0x93, 0x59, 
0x7d, 0x33, 0x24, 0x51, 0xbc, 0x1a);
 
+static const WCHAR aW[] = {'a',0};
+
 #define EXPECT_REF(obj, ref) _expect_ref((IUnknown *)obj, ref, __LINE__)
 static void _expect_ref(IUnknown *obj, ULONG ref, int line)
 {
@@ -46,6 +48,25 @@
     IUnknown_AddRef(obj);
     refcount = IUnknown_Release(obj);
     ok_(__FILE__, line)(refcount == ref, "expected refcount %d, got %d\n", 
ref, refcount);
+}
+
+static void check_output_raw(IStream *stream, const void *expected, SIZE_T 
size, int line)
+{
+    SIZE_T content_size;
+    HGLOBAL hglobal;
+    HRESULT hr;
+    char *ptr;
+
+    hr = GetHGlobalFromStream(stream, &hglobal);
+    ok_(__FILE__, line)(hr == S_OK, "Failed to get the stream handle, hr 
%#x.\n", hr);
+
+    content_size = GlobalSize(hglobal);
+    ok_(__FILE__, line)(size <= content_size, "Unexpected test output 
size.\n");
+    ptr = GlobalLock(hglobal);
+    if (size <= content_size)
+        ok_(__FILE__, line)(!memcmp(expected, ptr, size), "Unexpected output 
content.\n");
+
+    GlobalUnlock(hglobal);
 }
 
 static void check_output(IStream *stream, const char *expected, BOOL todo, int 
line)
@@ -74,6 +95,15 @@
 }
 #define CHECK_OUTPUT(stream, expected) check_output(stream, expected, FALSE, 
__LINE__)
 #define CHECK_OUTPUT_TODO(stream, expected) check_output(stream, expected, 
TRUE, __LINE__)
+#define CHECK_OUTPUT_RAW(stream, expected, size) check_output_raw(stream, 
expected, size, __LINE__)
+
+static void writer_set_property(IXmlWriter *writer, XmlWriterProperty property)
+{
+    HRESULT hr;
+
+    hr = IXmlWriter_SetProperty(writer, property, TRUE);
+    ok(hr == S_OK, "Failed to set writer property, hr %#x.\n", hr);
+}
 
 /* used to test all Write* methods for consistent error state */
 static void check_writer_state(IXmlWriter *writer, HRESULT exp_hr)
@@ -292,11 +322,93 @@
     IXmlWriter_Release(writer);
 }
 
+static void test_invalid_output_encoding(IXmlWriter *writer, IUnknown *output)
+{
+    HRESULT hr;
+
+    hr = IXmlWriter_SetOutput(writer, output);
+    ok(hr == S_OK, "Failed to set output, hr %#x.\n", hr);
+
+    /* TODO: WriteAttributes */
+
+    hr = IXmlWriter_WriteAttributeString(writer, NULL, aW, NULL, aW);
+    ok(hr == MX_E_ENCODING, "Unexpected hr %#x.\n", hr);
+
+    hr = IXmlWriter_WriteCData(writer, aW);
+    ok(hr == MX_E_ENCODING, "Unexpected hr %#x.\n", hr);
+
+    hr = IXmlWriter_WriteCharEntity(writer, 0x100);
+    ok(hr == MX_E_ENCODING, "Unexpected hr %#x.\n", hr);
+
+    hr = IXmlWriter_WriteChars(writer, aW, 1);
+    ok(hr == MX_E_ENCODING, "Unexpected hr %#x.\n", hr);
+
+    hr = IXmlWriter_WriteComment(writer, aW);
+    ok(hr == MX_E_ENCODING, "Unexpected hr %#x.\n", hr);
+
+    /* TODO: WriteDocType */
+
+    hr = IXmlWriter_WriteElementString(writer, NULL, aW, NULL, NULL);
+    ok(hr == MX_E_ENCODING, "Unexpected hr %#x.\n", hr);
+
+    hr = IXmlWriter_WriteEndDocument(writer);
+    ok(hr == MX_E_ENCODING, "Unexpected hr %#x.\n", hr);
+
+    hr = IXmlWriter_WriteEndElement(writer);
+    ok(hr == MX_E_ENCODING, "Unexpected hr %#x.\n", hr);
+
+    hr = IXmlWriter_WriteEntityRef(writer, aW);
+    ok(hr == MX_E_ENCODING, "Unexpected hr %#x.\n", hr);
+
+    hr = IXmlWriter_WriteFullEndElement(writer);
+    ok(hr == MX_E_ENCODING, "Unexpected hr %#x.\n", hr);
+
+    hr = IXmlWriter_WriteName(writer, aW);
+    ok(hr == MX_E_ENCODING, "Unexpected hr %#x.\n", hr);
+
+    hr = IXmlWriter_WriteNmToken(writer, aW);
+    ok(hr == MX_E_ENCODING, "Unexpected hr %#x.\n", hr);
+
+    /* TODO: WriteNode */
+    /* TODO: WriteNodeShallow */
+
+    hr = IXmlWriter_WriteProcessingInstruction(writer, aW, aW);
+    ok(hr == MX_E_ENCODING, "Unexpected hr %#x.\n", hr);
+
+    hr = IXmlWriter_WriteQualifiedName(writer, aW, NULL);
+    ok(hr == MX_E_ENCODING, "Unexpected hr %#x.\n", hr);
+
+    hr = IXmlWriter_WriteRaw(writer, aW);
+    ok(hr == MX_E_ENCODING, "Unexpected hr %#x.\n", hr);
+
+    hr = IXmlWriter_WriteRawChars(writer, aW, 1);
+    ok(hr == MX_E_ENCODING, "Unexpected hr %#x.\n", hr);
+
+    hr = IXmlWriter_WriteStartDocument(writer, XmlStandalone_Yes);
+    ok(hr == MX_E_ENCODING, "Unexpected hr %#x.\n", hr);
+
+    hr = IXmlWriter_WriteStartElement(writer, NULL, aW, NULL);
+    ok(hr == MX_E_ENCODING, "Unexpected hr %#x.\n", hr);
+
+    hr = IXmlWriter_WriteString(writer, aW);
+    ok(hr == MX_E_ENCODING, "Unexpected hr %#x.\n", hr);
+
+    /* TODO: WriteSurrogateCharEntity */
+    /* ???TODO: WriteWhitespace */
+
+    hr = IXmlWriter_Flush(writer);
+    ok(hr == S_OK, "Failed to flush, hr %#x.\n", hr);
+}
+
 static void test_writeroutput(void)
 {
     static const WCHAR utf16W[] = {'u','t','f','-','1','6',0};
     static const WCHAR usasciiW[] = {'u','s','-','a','s','c','i','i',0};
+    static const WCHAR dummyW[] = {'d','u','m','m','y',0};
+    static const WCHAR utf16_outputW[] = {0xfeff,'<','a'};
     IXmlWriterOutput *output;
+    IXmlWriter *writer;
+    IStream *stream;
     IUnknown *unk;
     HRESULT hr;
 
@@ -339,6 +451,59 @@
     hr = CreateXmlWriterOutputWithEncodingName(&testoutput, NULL, usasciiW, 
&output);
     ok(hr == S_OK, "got %08x\n", hr);
     IUnknown_Release(output);
+
+    /* Output with codepage 1200. */
+    hr = CreateXmlWriter(&IID_IXmlWriter, (void **)&writer, NULL);
+    ok(hr == S_OK, "Failed to create writer, hr %#x.\n", hr);
+
+    hr = CreateStreamOnHGlobal(NULL, TRUE, &stream);
+    ok(hr == S_OK, "Failed to create stream, hr %#x.\n", hr);
+
+    hr = CreateXmlWriterOutputWithEncodingCodePage((IUnknown *)stream, NULL, 
1200, &output);
+    ok(hr == S_OK, "Failed to create writer output, hr %#x.\n", hr);
+
+    hr = IXmlWriter_SetOutput(writer, output);
+    ok(hr == S_OK, "Failed to set writer output, hr %#x.\n", hr);
+
+    hr = IXmlWriter_WriteStartElement(writer, NULL, aW, NULL);
+    ok(hr == S_OK, "Write failed, hr %#x.\n", hr);
+
+    hr = IXmlWriter_Flush(writer);
+    ok(hr == S_OK, "Failed to flush, hr %#x.\n", hr);
+
+    CHECK_OUTPUT_RAW(stream, utf16_outputW, sizeof(utf16_outputW));
+
+    IStream_Release(stream);
+
+    /* Create output with meaningless code page value. */
+    hr = CreateStreamOnHGlobal(NULL, TRUE, &stream);
+    ok(hr == S_OK, "Failed to create stream, hr %#x.\n", hr);
+
+    output = NULL;
+    hr = CreateXmlWriterOutputWithEncodingCodePage((IUnknown *)stream, NULL, 
~0u, &output);
+    ok(hr == S_OK, "Failed to create writer output, hr %#x.\n", hr);
+
+    test_invalid_output_encoding(writer, output);
+    CHECK_OUTPUT(stream, "");
+
+    IStream_Release(stream);
+    IUnknown_Release(output);
+
+    /* Same, with invalid encoding name. */
+    hr = CreateStreamOnHGlobal(NULL, TRUE, &stream);
+    ok(hr == S_OK, "got 0x%08x\n", hr);
+
+    output = NULL;
+    hr = CreateXmlWriterOutputWithEncodingName((IUnknown *)stream, NULL, 
dummyW, &output);
+    ok(hr == S_OK, "got %08x\n", hr);
+
+    test_invalid_output_encoding(writer, output);
+    CHECK_OUTPUT(stream, "");
+
+    IStream_Release(stream);
+    IUnknown_Release(output);
+
+    IXmlWriter_Release(writer);
 }
 
 static void test_writestartdocument(void)
@@ -483,8 +648,7 @@
 
     stream = writer_set_output(writer);
 
-    hr = IXmlWriter_SetProperty(writer, XmlWriterProperty_OmitXmlDeclaration, 
TRUE);
-    ok(hr == S_OK, "got 0x%08x\n", hr);
+    writer_set_property(writer, XmlWriterProperty_OmitXmlDeclaration);
 
     hr = IXmlWriter_WriteStartDocument(writer, XmlStandalone_Yes);
     ok(hr == S_OK, "got 0x%08x\n", hr);
@@ -548,7 +712,6 @@
     static const WCHAR versionW[] = 
{'v','e','r','s','i','o','n','=','"','1','.','0','"',0};
     static const WCHAR utf16W[] = {'u','t','f','-','1','6',0};
     static const WCHAR xmlW[] = {'x','m','l',0};
-    static const WCHAR aW[] = {'a',0};
     IXmlWriterOutput *output;
     unsigned char *ptr;
     IXmlWriter *writer;
@@ -565,8 +728,7 @@
     hr = CreateXmlWriter(&IID_IXmlWriter, (void**)&writer, NULL);
     ok(hr == S_OK, "Expected S_OK, got %08x\n", hr);
 
-    hr = IXmlWriter_SetProperty(writer, XmlWriterProperty_OmitXmlDeclaration, 
TRUE);
-    ok(hr == S_OK, "got 0x%08x\n", hr);
+    writer_set_property(writer, XmlWriterProperty_OmitXmlDeclaration);
 
     hr = IXmlWriter_SetOutput(writer, output);
     ok(hr == S_OK, "got 0x%08x\n", hr);
@@ -650,6 +812,8 @@
     hr = IXmlWriter_SetOutput(writer, output);
     ok(hr == S_OK, "got 0x%08x\n", hr);
 
+    writer_set_property(writer, XmlWriterProperty_Indent);
+
     hr = IXmlWriter_WriteElementString(writer, NULL, aW, NULL, NULL);
     ok(hr == S_OK, "got 0x%08x\n", hr);
 
@@ -660,7 +824,8 @@
     ok(hr == S_OK, "got 0x%08x\n", hr);
 
     ptr = GlobalLock(hglobal);
-    ok(ptr[0] == 0xff && ptr[1] == 0xfe, "got %x,%x\n", ptr[0], ptr[1]);
+    ok(ptr[0] == 0xff && ptr[1] == 0xfe && ptr[2] == '<', "Unexpected output: 
%#x,%#x,%#x\n",
+            ptr[0], ptr[1], ptr[2]);
     GlobalUnlock(hglobal);
 
     IUnknown_Release(output);
@@ -672,7 +837,6 @@
 static void test_writestartelement(void)
 {
     static const WCHAR valueW[] = {'v','a','l','u','e',0};
-    static const char *str = "<a><b>value</b>";
     static const WCHAR aW[] = {'a',0};
     static const WCHAR bW[] = {'b',0};
     IXmlWriter *writer;
@@ -734,10 +898,14 @@
     hr = IXmlWriter_WriteElementString(writer, NULL, bW, NULL, valueW);
     ok(hr == S_OK, "got 0x%08x\n", hr);
 
-    hr = IXmlWriter_Flush(writer);
-    ok(hr == S_OK, "got 0x%08x\n", hr);
-
-    CHECK_OUTPUT(stream, str);
+    hr = IXmlWriter_WriteElementString(writer, NULL, bW, NULL, NULL);
+    ok(hr == S_OK, "got 0x%08x\n", hr);
+
+    hr = IXmlWriter_Flush(writer);
+    ok(hr == S_OK, "got 0x%08x\n", hr);
+
+    CHECK_OUTPUT(stream,
+        "<a><b>value</b><b />");
 
     IStream_Release(stream);
     IXmlWriter_Release(writer);
@@ -848,8 +1016,7 @@
     hr = CreateXmlWriter(&IID_IXmlWriter, (void**)&writer, NULL);
     ok(hr == S_OK, "Expected S_OK, got %08x\n", hr);
 
-    hr = IXmlWriter_SetProperty(writer, XmlWriterProperty_OmitXmlDeclaration, 
TRUE);
-    ok(hr == S_OK, "got 0x%08x\n", hr);
+    writer_set_property(writer, XmlWriterProperty_OmitXmlDeclaration);
 
     hr = IXmlWriter_WriteComment(writer, aW);
     ok(hr == E_UNEXPECTED, "got 0x%08x\n", hr);
@@ -896,8 +1063,7 @@
     hr = CreateXmlWriter(&IID_IXmlWriter, (void**)&writer, NULL);
     ok(hr == S_OK, "Expected S_OK, got %08x\n", hr);
 
-    hr = IXmlWriter_SetProperty(writer, XmlWriterProperty_OmitXmlDeclaration, 
TRUE);
-    ok(hr == S_OK, "got 0x%08x\n", hr);
+    writer_set_property(writer, XmlWriterProperty_OmitXmlDeclaration);
 
     hr = IXmlWriter_WriteCData(writer, aW);
     ok(hr == E_UNEXPECTED, "got 0x%08x\n", hr);
@@ -1095,11 +1261,8 @@
 
     stream = writer_set_output(writer);
 
-    hr = IXmlWriter_SetProperty(writer, XmlWriterProperty_OmitXmlDeclaration, 
TRUE);
-    ok(hr == S_OK, "got 0x%08x\n", hr);
-
-    hr = IXmlWriter_SetProperty(writer, XmlWriterProperty_Indent, TRUE);
-    ok(hr == S_OK, "got 0x%08x\n", hr);
+    writer_set_property(writer, XmlWriterProperty_OmitXmlDeclaration);
+    writer_set_property(writer, XmlWriterProperty_Indent);
 
     hr = IXmlWriter_WriteStartDocument(writer, XmlStandalone_Omit);
     ok(hr == S_OK, "got 0x%08x\n", hr);
@@ -1125,8 +1288,35 @@
         "  <b />\r\n"
         "</a>");
 
-    IXmlWriter_Release(writer);
-    IStream_Release(stream);
+    IStream_Release(stream);
+
+    /* WriteElementString */
+    stream = writer_set_output(writer);
+
+    hr = IXmlWriter_WriteStartElement(writer, NULL, aW, NULL);
+    ok(hr == S_OK, "Unexpected hr %#x.\n", hr);
+
+    hr = IXmlWriter_WriteElementString(writer, NULL, bW, NULL, NULL);
+    ok(hr == S_OK, "Unexpected hr %#x.\n", hr);
+
+    hr = IXmlWriter_WriteElementString(writer, NULL, bW, NULL, NULL);
+    ok(hr == S_OK, "Unexpected hr %#x.\n", hr);
+
+    hr = IXmlWriter_WriteEndElement(writer);
+    ok(hr == S_OK, "Unexpected hr %#x.\n", hr);
+
+    hr = IXmlWriter_Flush(writer);
+    ok(hr == S_OK, "Unexpected hr %#x.\n", hr);
+
+    CHECK_OUTPUT(stream,
+        "<a>\r\n"
+        "  <b />\r\n"
+        "  <b />\r\n"
+        "</a>");
+
+    IStream_Release(stream);
+
+    IXmlWriter_Release(writer);
 }
 
 static void test_WriteAttributeString(void)
@@ -1147,8 +1337,7 @@
 
     stream = writer_set_output(writer);
 
-    hr = IXmlWriter_SetProperty(writer, XmlWriterProperty_OmitXmlDeclaration, 
TRUE);
-    ok(hr == S_OK, "got 0x%08x\n", hr);
+    writer_set_property(writer, XmlWriterProperty_OmitXmlDeclaration);
 
     hr = IXmlWriter_WriteStartDocument(writer, XmlStandalone_Omit);
     ok(hr == S_OK, "got 0x%08x\n", hr);
@@ -1227,11 +1416,8 @@
     /* standalone element */
     stream = writer_set_output(writer);
 
-    hr = IXmlWriter_SetProperty(writer, XmlWriterProperty_OmitXmlDeclaration, 
TRUE);
-    ok(hr == S_OK, "got 0x%08x\n", hr);
-
-    hr = IXmlWriter_SetProperty(writer, XmlWriterProperty_Indent, TRUE);
-    ok(hr == S_OK, "got 0x%08x\n", hr);
+    writer_set_property(writer, XmlWriterProperty_OmitXmlDeclaration);
+    writer_set_property(writer, XmlWriterProperty_Indent);
 
     hr = IXmlWriter_WriteStartDocument(writer, XmlStandalone_Omit);
     ok(hr == S_OK, "got 0x%08x\n", hr);
@@ -1255,11 +1441,8 @@
     /* nested elements */
     stream = writer_set_output(writer);
 
-    hr = IXmlWriter_SetProperty(writer, XmlWriterProperty_OmitXmlDeclaration, 
TRUE);
-    ok(hr == S_OK, "got 0x%08x\n", hr);
-
-    hr = IXmlWriter_SetProperty(writer, XmlWriterProperty_Indent, TRUE);
-    ok(hr == S_OK, "got 0x%08x\n", hr);
+    writer_set_property(writer, XmlWriterProperty_OmitXmlDeclaration);
+    writer_set_property(writer, XmlWriterProperty_Indent);
 
     hr = IXmlWriter_WriteStartDocument(writer, XmlStandalone_Omit);
     ok(hr == S_OK, "got 0x%08x\n", hr);
@@ -1301,8 +1484,7 @@
     /* without indentation */
     stream = writer_set_output(writer);
 
-    hr = IXmlWriter_SetProperty(writer, XmlWriterProperty_OmitXmlDeclaration, 
TRUE);
-    ok(hr == S_OK, "got 0x%08x\n", hr);
+    writer_set_property(writer, XmlWriterProperty_OmitXmlDeclaration);
 
     hr = IXmlWriter_WriteStartDocument(writer, XmlStandalone_Omit);
     ok(hr == S_OK, "got 0x%08x\n", hr);
@@ -1342,8 +1524,7 @@
     hr = CreateXmlWriter(&IID_IXmlWriter, (void**)&writer, NULL);
     ok(hr == S_OK, "Expected S_OK, got %08x\n", hr);
 
-    hr = IXmlWriter_SetProperty(writer, XmlWriterProperty_OmitXmlDeclaration, 
TRUE);
-    ok(hr == S_OK, "got 0x%08x\n", hr);
+    writer_set_property(writer, XmlWriterProperty_OmitXmlDeclaration);
 
     hr = IXmlWriter_WriteString(writer, aW);
     ok(hr == E_UNEXPECTED, "got 0x%08x\n", hr);


Reply via email to