[PATCH] xmllite/tests: Use wide string literals for the writer tests.

Nikolay Sivov nsivov at codeweavers.com
Tue Apr 5 10:58:19 CDT 2022


Signed-off-by: Nikolay Sivov <nsivov at codeweavers.com>
---
 dlls/xmllite/tests/writer.c | 674 ++++++++++++++----------------------
 1 file changed, 266 insertions(+), 408 deletions(-)

diff --git a/dlls/xmllite/tests/writer.c b/dlls/xmllite/tests/writer.c
index 2f6edb26d16..3e1c362664e 100644
--- a/dlls/xmllite/tests/writer.c
+++ b/dlls/xmllite/tests/writer.c
@@ -32,8 +32,6 @@
 #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)
 {
@@ -92,19 +90,6 @@ static void check_output(IStream *stream, const char *expected, BOOL todo, int l
 #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 WCHAR *strdupAtoW(const char *str)
-{
-    WCHAR *ret = NULL;
-    DWORD len;
-
-    if (!str) return ret;
-    len = MultiByteToWideChar(CP_ACP, 0, str, -1, NULL, 0);
-    ret = malloc(len * sizeof(WCHAR));
-    if (ret)
-        MultiByteToWideChar(CP_ACP, 0, str, -1, ret, len);
-    return ret;
-}
-
 static void writer_set_property(IXmlWriter *writer, XmlWriterProperty property)
 {
     HRESULT hr;
@@ -116,30 +101,29 @@ static void writer_set_property(IXmlWriter *writer, XmlWriterProperty property)
 /* used to test all Write* methods for consistent error state */
 static void check_writer_state(IXmlWriter *writer, HRESULT exp_hr)
 {
-    static const WCHAR aW[] = {'a',0};
     HRESULT hr;
 
     /* FIXME: add WriteAttributes */
 
-    hr = IXmlWriter_WriteAttributeString(writer, NULL, aW, NULL, aW);
+    hr = IXmlWriter_WriteAttributeString(writer, NULL, L"a", NULL, L"a");
     ok(hr == exp_hr, "Unexpected hr %#lx, expected %#lx.\n", hr, exp_hr);
 
-    hr = IXmlWriter_WriteCData(writer, aW);
+    hr = IXmlWriter_WriteCData(writer, L"a");
     ok(hr == exp_hr, "Unexpected hr %#lx, expected %#lx.\n", hr, exp_hr);
 
-    hr = IXmlWriter_WriteCharEntity(writer, aW[0]);
+    hr = IXmlWriter_WriteCharEntity(writer, 'a');
     ok(hr == exp_hr, "Unexpected hr %#lx, expected %#lx.\n", hr, exp_hr);
 
-    hr = IXmlWriter_WriteChars(writer, aW, 1);
+    hr = IXmlWriter_WriteChars(writer, L"a", 1);
     ok(hr == exp_hr, "Unexpected hr %#lx, expected %#lx.\n", hr, exp_hr);
 
-    hr = IXmlWriter_WriteComment(writer, aW);
+    hr = IXmlWriter_WriteComment(writer, L"a");
     ok(hr == exp_hr, "Unexpected hr %#lx, expected %#lx.\n", hr, exp_hr);
 
-    hr = IXmlWriter_WriteDocType(writer, aW, NULL, NULL, NULL);
+    hr = IXmlWriter_WriteDocType(writer, L"a", NULL, NULL, NULL);
     ok(hr == exp_hr, "Unexpected hr %#lx, expected %#lx.\n", hr, exp_hr);
 
-    hr = IXmlWriter_WriteElementString(writer, NULL, aW, NULL, aW);
+    hr = IXmlWriter_WriteElementString(writer, NULL, L"a", NULL, L"a");
     ok(hr == exp_hr, "Unexpected hr %#lx, expected %#lx.\n", hr, exp_hr);
 
     hr = IXmlWriter_WriteEndDocument(writer);
@@ -148,40 +132,40 @@ static void check_writer_state(IXmlWriter *writer, HRESULT exp_hr)
     hr = IXmlWriter_WriteEndElement(writer);
     ok(hr == exp_hr, "Unexpected hr %#lx, expected %#lx.\n", hr, exp_hr);
 
-    hr = IXmlWriter_WriteEntityRef(writer, aW);
+    hr = IXmlWriter_WriteEntityRef(writer, L"a");
     ok(hr == exp_hr, "Unexpected hr %#lx, expected %#lx.\n", hr, exp_hr);
 
     hr = IXmlWriter_WriteFullEndElement(writer);
     ok(hr == exp_hr, "Unexpected hr %#lx, expected %#lx.\n", hr, exp_hr);
 
-    hr = IXmlWriter_WriteName(writer, aW);
+    hr = IXmlWriter_WriteName(writer, L"a");
     ok(hr == exp_hr, "Unexpected hr %#lx, expected %#lx.\n", hr, exp_hr);
 
-    hr = IXmlWriter_WriteNmToken(writer, aW);
+    hr = IXmlWriter_WriteNmToken(writer, L"a");
     ok(hr == exp_hr, "Unexpected hr %#lx, expected %#lx.\n", hr, exp_hr);
 
     /* FIXME: add WriteNode */
     /* FIXME: add WriteNodeShallow */
 
-    hr = IXmlWriter_WriteProcessingInstruction(writer, aW, aW);
+    hr = IXmlWriter_WriteProcessingInstruction(writer, L"a", L"a");
     ok(hr == exp_hr, "Unexpected hr %#lx., expected %#lx.\n", hr, exp_hr);
 
-    hr = IXmlWriter_WriteQualifiedName(writer, aW, NULL);
+    hr = IXmlWriter_WriteQualifiedName(writer, L"a", NULL);
     ok(hr == exp_hr, "Unexpected hr %#lx., expected %#lx.\n", hr, exp_hr);
 
-    hr = IXmlWriter_WriteRaw(writer, aW);
+    hr = IXmlWriter_WriteRaw(writer, L"a");
     ok(hr == exp_hr, "Unexpected hr %#lx., expected %#lx.\n", hr, exp_hr);
 
-    hr = IXmlWriter_WriteRawChars(writer, aW, 1);
+    hr = IXmlWriter_WriteRawChars(writer, L"a", 1);
     ok(hr == exp_hr, "Unexpected hr %#lx., expected %#lx.\n", hr, exp_hr);
 
     hr = IXmlWriter_WriteStartDocument(writer, XmlStandalone_Omit);
     ok(hr == exp_hr, "Unexpected hr %#lx., expected %#lx.\n", hr, exp_hr);
 
-    hr = IXmlWriter_WriteStartElement(writer, NULL, aW, NULL);
+    hr = IXmlWriter_WriteStartElement(writer, NULL, L"a", NULL);
     ok(hr == exp_hr, "Unexpected hr %#lx., expected %#lx.\n", hr, exp_hr);
 
-    hr = IXmlWriter_WriteString(writer, aW);
+    hr = IXmlWriter_WriteString(writer, L"a");
     ok(hr == exp_hr, "Unexpected hr %#lx., expected %#lx.\n", hr, exp_hr);
 
     /* FIXME: add WriteSurrogateCharEntity */
@@ -340,25 +324,25 @@ static void test_invalid_output_encoding(IXmlWriter *writer, IUnknown *output)
 
     /* TODO: WriteAttributes */
 
-    hr = IXmlWriter_WriteAttributeString(writer, NULL, aW, NULL, aW);
+    hr = IXmlWriter_WriteAttributeString(writer, NULL, L"a", NULL, L"a");
     ok(hr == MX_E_ENCODING, "Unexpected hr %#lx.\n", hr);
 
-    hr = IXmlWriter_WriteCData(writer, aW);
+    hr = IXmlWriter_WriteCData(writer, L"a");
     ok(hr == MX_E_ENCODING, "Unexpected hr %#lx.\n", hr);
 
     hr = IXmlWriter_WriteCharEntity(writer, 0x100);
     ok(hr == MX_E_ENCODING, "Unexpected hr %#lx.\n", hr);
 
-    hr = IXmlWriter_WriteChars(writer, aW, 1);
+    hr = IXmlWriter_WriteChars(writer, L"a", 1);
     ok(hr == MX_E_ENCODING, "Unexpected hr %#lx.\n", hr);
 
-    hr = IXmlWriter_WriteComment(writer, aW);
+    hr = IXmlWriter_WriteComment(writer, L"a");
     ok(hr == MX_E_ENCODING, "Unexpected hr %#lx.\n", hr);
 
-    hr = IXmlWriter_WriteDocType(writer, aW, NULL, NULL, NULL);
+    hr = IXmlWriter_WriteDocType(writer, L"a", NULL, NULL, NULL);
     ok(hr == MX_E_ENCODING, "Unexpected hr %#lx.\n", hr);
 
-    hr = IXmlWriter_WriteElementString(writer, NULL, aW, NULL, NULL);
+    hr = IXmlWriter_WriteElementString(writer, NULL, L"a", NULL, NULL);
     ok(hr == MX_E_ENCODING, "Unexpected hr %#lx.\n", hr);
 
     hr = IXmlWriter_WriteEndDocument(writer);
@@ -367,40 +351,40 @@ static void test_invalid_output_encoding(IXmlWriter *writer, IUnknown *output)
     hr = IXmlWriter_WriteEndElement(writer);
     ok(hr == MX_E_ENCODING, "Unexpected hr %#lx.\n", hr);
 
-    hr = IXmlWriter_WriteEntityRef(writer, aW);
+    hr = IXmlWriter_WriteEntityRef(writer, L"a");
     ok(hr == MX_E_ENCODING, "Unexpected hr %#lx.\n", hr);
 
     hr = IXmlWriter_WriteFullEndElement(writer);
     ok(hr == MX_E_ENCODING, "Unexpected hr %#lx.\n", hr);
 
-    hr = IXmlWriter_WriteName(writer, aW);
+    hr = IXmlWriter_WriteName(writer, L"a");
     ok(hr == MX_E_ENCODING, "Unexpected hr %#lx.\n", hr);
 
-    hr = IXmlWriter_WriteNmToken(writer, aW);
+    hr = IXmlWriter_WriteNmToken(writer, L"a");
     ok(hr == MX_E_ENCODING, "Unexpected hr %#lx.\n", hr);
 
     /* TODO: WriteNode */
     /* TODO: WriteNodeShallow */
 
-    hr = IXmlWriter_WriteProcessingInstruction(writer, aW, aW);
+    hr = IXmlWriter_WriteProcessingInstruction(writer, L"a", L"a");
     ok(hr == MX_E_ENCODING, "Unexpected hr %#lx.\n", hr);
 
-    hr = IXmlWriter_WriteQualifiedName(writer, aW, NULL);
+    hr = IXmlWriter_WriteQualifiedName(writer, L"a", NULL);
     ok(hr == MX_E_ENCODING, "Unexpected hr %#lx.\n", hr);
 
-    hr = IXmlWriter_WriteRaw(writer, aW);
+    hr = IXmlWriter_WriteRaw(writer, L"a");
     ok(hr == MX_E_ENCODING, "Unexpected hr %#lx.\n", hr);
 
-    hr = IXmlWriter_WriteRawChars(writer, aW, 1);
+    hr = IXmlWriter_WriteRawChars(writer, L"a", 1);
     ok(hr == MX_E_ENCODING, "Unexpected hr %#lx.\n", hr);
 
     hr = IXmlWriter_WriteStartDocument(writer, XmlStandalone_Yes);
     ok(hr == MX_E_ENCODING, "Unexpected hr %#lx.\n", hr);
 
-    hr = IXmlWriter_WriteStartElement(writer, NULL, aW, NULL);
+    hr = IXmlWriter_WriteStartElement(writer, NULL, L"a", NULL);
     ok(hr == MX_E_ENCODING, "Unexpected hr %#lx.\n", hr);
 
-    hr = IXmlWriter_WriteString(writer, aW);
+    hr = IXmlWriter_WriteString(writer, L"a");
     ok(hr == MX_E_ENCODING, "Unexpected hr %#lx.\n", hr);
 
     /* TODO: WriteSurrogateCharEntity */
@@ -412,9 +396,6 @@ static void test_invalid_output_encoding(IXmlWriter *writer, IUnknown *output)
 
 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;
@@ -428,7 +409,7 @@ static void test_writeroutput(void)
     EXPECT_REF(output, 1);
     IUnknown_Release(output);
 
-    hr = CreateXmlWriterOutputWithEncodingName(&testoutput, NULL, utf16W, &output);
+    hr = CreateXmlWriterOutputWithEncodingName(&testoutput, NULL, L"utf-16", &output);
     ok(hr == S_OK, "Unexpected hr %#lx.\n", hr);
     unk = NULL;
     hr = IUnknown_QueryInterface(output, &IID_IXmlWriterOutput, (void**)&unk);
@@ -458,7 +439,7 @@ static void test_writeroutput(void)
 
     /* create with us-ascii */
     output = NULL;
-    hr = CreateXmlWriterOutputWithEncodingName(&testoutput, NULL, usasciiW, &output);
+    hr = CreateXmlWriterOutputWithEncodingName(&testoutput, NULL, L"us-ascii", &output);
     ok(hr == S_OK, "Unexpected hr %#lx.\n", hr);
     IUnknown_Release(output);
 
@@ -475,7 +456,7 @@ static void test_writeroutput(void)
     hr = IXmlWriter_SetOutput(writer, output);
     ok(hr == S_OK, "Failed to set writer output, hr %#lx.\n", hr);
 
-    hr = IXmlWriter_WriteStartElement(writer, NULL, aW, NULL);
+    hr = IXmlWriter_WriteStartElement(writer, NULL, L"a", NULL);
     ok(hr == S_OK, "Write failed, hr %#lx.\n", hr);
 
     hr = IXmlWriter_Flush(writer);
@@ -505,7 +486,7 @@ static void test_writeroutput(void)
     ok(hr == S_OK, "Unexpected hr %#lx.\n", hr);
 
     output = NULL;
-    hr = CreateXmlWriterOutputWithEncodingName((IUnknown *)stream, NULL, dummyW, &output);
+    hr = CreateXmlWriterOutputWithEncodingName((IUnknown *)stream, NULL, L"dummy", &output);
     ok(hr == S_OK, "Unexpected hr %#lx.\n", hr);
 
     test_invalid_output_encoding(writer, output);
@@ -522,9 +503,6 @@ static void test_writestartdocument(void)
     static const char fullprolog[] = "<?xml version=\"1.0\" encoding=\"UTF-8\" standalone=\"yes\"?>";
     static const char *prologversion2 = "<?xml version=\"1.0\" encoding=\"uS-asCii\"?>";
     static const char prologversion[] = "<?xml version=\"1.0\"?>";
-    static const WCHAR versionW[] = {'v','e','r','s','i','o','n','=','"','1','.','0','"',0};
-    static const WCHAR usasciiW[] = {'u','S','-','a','s','C','i','i',0};
-    static const WCHAR xmlW[] = {'x','m','l',0};
     IXmlWriterOutput *output;
     IXmlWriter *writer;
     IStream *stream;
@@ -537,7 +515,7 @@ static void test_writestartdocument(void)
     hr = IXmlWriter_WriteStartDocument(writer, XmlStandalone_Yes);
     ok(hr == E_UNEXPECTED, "Unexpected hr %#lx.\n", hr);
 
-    hr = IXmlWriter_WriteProcessingInstruction(writer, xmlW, versionW);
+    hr = IXmlWriter_WriteProcessingInstruction(writer, L"xml", L"version=\"1.0\"");
     ok(hr == E_UNEXPECTED, "Unexpected hr %#lx.\n", hr);
 
     hr = IXmlWriter_Flush(writer);
@@ -565,7 +543,7 @@ static void test_writestartdocument(void)
     /* now add PI manually, and try to start a document */
     stream = writer_set_output(writer);
 
-    hr = IXmlWriter_WriteProcessingInstruction(writer, xmlW, versionW);
+    hr = IXmlWriter_WriteProcessingInstruction(writer, L"xml", L"version=\"1.0\"");
     ok(hr == S_OK, "Unexpected hr %#lx.\n", hr);
 
     hr = IXmlWriter_WriteStartDocument(writer, XmlStandalone_Yes);
@@ -575,7 +553,7 @@ static void test_writestartdocument(void)
     ok(hr == WR_E_INVALIDACTION, "Unexpected hr %#lx.\n", hr);
 
     /* another attempt to add 'xml' PI */
-    hr = IXmlWriter_WriteProcessingInstruction(writer, xmlW, versionW);
+    hr = IXmlWriter_WriteProcessingInstruction(writer, L"xml", L"version=\"1.0\"");
     ok(hr == WR_E_INVALIDACTION, "Unexpected hr %#lx.\n", hr);
 
     hr = IXmlWriter_Flush(writer);
@@ -591,7 +569,7 @@ static void test_writestartdocument(void)
     ok(hr == S_OK, "Unexpected hr %#lx.\n", hr);
 
     output = NULL;
-    hr = CreateXmlWriterOutputWithEncodingName((IUnknown *)stream, NULL, usasciiW, &output);
+    hr = CreateXmlWriterOutputWithEncodingName((IUnknown *)stream, NULL, L"uS-asCii", &output);
     ok(hr == S_OK, "Unexpected hr %#lx.\n", hr);
 
     hr = CreateXmlWriter(&IID_IXmlWriter, (void **)&writer, NULL);
@@ -646,8 +624,6 @@ static void test_flush(void)
 static void test_omitxmldeclaration(void)
 {
     static const char prologversion[] = "<?xml version=\"1.0\"?>";
-    static const WCHAR versionW[] = {'v','e','r','s','i','o','n','=','"','1','.','0','"',0};
-    static const WCHAR xmlW[] = {'x','m','l',0};
     IXmlWriter *writer;
     HGLOBAL hglobal;
     IStream *stream;
@@ -683,7 +659,7 @@ static void test_omitxmldeclaration(void)
     /* now add PI manually, and try to start a document */
     stream = writer_set_output(writer);
 
-    hr = IXmlWriter_WriteProcessingInstruction(writer, xmlW, versionW);
+    hr = IXmlWriter_WriteProcessingInstruction(writer, L"xml", L"version=\"1.0\"");
     ok(hr == S_OK, "Unexpected hr %#lx.\n", hr);
 
     hr = IXmlWriter_Flush(writer);
@@ -708,7 +684,7 @@ static void test_omitxmldeclaration(void)
     CHECK_OUTPUT(stream, prologversion);
 
     /* another attempt to add 'xml' PI */
-    hr = IXmlWriter_WriteProcessingInstruction(writer, xmlW, versionW);
+    hr = IXmlWriter_WriteProcessingInstruction(writer, L"xml", L"version=\"1.0\"");
     ok(hr == WR_E_INVALIDACTION, "Unexpected hr %#lx.\n", hr);
 
     hr = IXmlWriter_Flush(writer);
@@ -723,9 +699,6 @@ static void test_bom(void)
     static const WCHAR piW[] = {0xfeff,'<','?','x','m','l',' ','v','e','r','s','i','o','n','=','"','1','.','0','"','?','>'};
     static const WCHAR aopenW[] = {0xfeff,'<','a'};
     static const WCHAR afullW[] = {0xfeff,'<','a',' ','/','>'};
-    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 bomW[] = {0xfeff};
     IXmlWriterOutput *output;
     IXmlWriter *writer;
@@ -736,7 +709,7 @@ static void test_bom(void)
     hr = CreateStreamOnHGlobal(NULL, TRUE, &stream);
     ok(hr == S_OK, "Unexpected hr %#lx.\n", hr);
 
-    hr = CreateXmlWriterOutputWithEncodingName((IUnknown*)stream, NULL, utf16W, &output);
+    hr = CreateXmlWriterOutputWithEncodingName((IUnknown*)stream, NULL, L"utf-16", &output);
     ok(hr == S_OK, "Unexpected hr %#lx.\n", hr);
 
     hr = CreateXmlWriter(&IID_IXmlWriter, (void**)&writer, NULL);
@@ -763,13 +736,13 @@ static void test_bom(void)
     hr = CreateStreamOnHGlobal(NULL, TRUE, &stream);
     ok(hr == S_OK, "Unexpected hr %#lx.\n", hr);
 
-    hr = CreateXmlWriterOutputWithEncodingName((IUnknown*)stream, NULL, utf16W, &output);
+    hr = CreateXmlWriterOutputWithEncodingName((IUnknown*)stream, NULL, L"utf-16", &output);
     ok(hr == S_OK, "Unexpected hr %#lx.\n", hr);
 
     hr = IXmlWriter_SetOutput(writer, output);
     ok(hr == S_OK, "Unexpected hr %#lx.\n", hr);
 
-    hr = IXmlWriter_WriteProcessingInstruction(writer, xmlW, versionW);
+    hr = IXmlWriter_WriteProcessingInstruction(writer, L"xml", L"version=\"1.0\"");
     ok(hr == S_OK, "Unexpected hr %#lx.\n", hr);
 
     hr = IXmlWriter_Flush(writer);
@@ -784,13 +757,13 @@ static void test_bom(void)
     hr = CreateStreamOnHGlobal(NULL, TRUE, &stream);
     ok(hr == S_OK, "Unexpected hr %#lx.\n", hr);
 
-    hr = CreateXmlWriterOutputWithEncodingName((IUnknown*)stream, NULL, utf16W, &output);
+    hr = CreateXmlWriterOutputWithEncodingName((IUnknown*)stream, NULL, L"utf-16", &output);
     ok(hr == S_OK, "Unexpected hr %#lx.\n", hr);
 
     hr = IXmlWriter_SetOutput(writer, output);
     ok(hr == S_OK, "Unexpected hr %#lx.\n", hr);
 
-    hr = IXmlWriter_WriteStartElement(writer, NULL, aW, NULL);
+    hr = IXmlWriter_WriteStartElement(writer, NULL, L"a", NULL);
     ok(hr == S_OK, "Unexpected hr %#lx.\n", hr);
 
     hr = IXmlWriter_Flush(writer);
@@ -805,7 +778,7 @@ static void test_bom(void)
     hr = CreateStreamOnHGlobal(NULL, TRUE, &stream);
     ok(hr == S_OK, "Unexpected hr %#lx.\n", hr);
 
-    hr = CreateXmlWriterOutputWithEncodingName((IUnknown*)stream, NULL, utf16W, &output);
+    hr = CreateXmlWriterOutputWithEncodingName((IUnknown*)stream, NULL, L"utf-16", &output);
     ok(hr == S_OK, "Unexpected hr %#lx.\n", hr);
 
     hr = IXmlWriter_SetOutput(writer, output);
@@ -813,7 +786,7 @@ static void test_bom(void)
 
     writer_set_property(writer, XmlWriterProperty_Indent);
 
-    hr = IXmlWriter_WriteElementString(writer, NULL, aW, NULL, NULL);
+    hr = IXmlWriter_WriteElementString(writer, NULL, L"a", NULL, NULL);
     ok(hr == S_OK, "Unexpected hr %#lx.\n", hr);
 
     hr = IXmlWriter_Flush(writer);
@@ -830,67 +803,13 @@ static void test_bom(void)
     IXmlWriter_Release(writer);
 }
 
-static HRESULT write_start_element(IXmlWriter *writer, const char *prefix, const char *local,
-        const char *uri)
-{
-    WCHAR *prefixW, *localW, *uriW;
-    HRESULT hr;
-
-    prefixW = strdupAtoW(prefix);
-    localW = strdupAtoW(local);
-    uriW = strdupAtoW(uri);
-
-    hr = IXmlWriter_WriteStartElement(writer, prefixW, localW, uriW);
-
-    free(prefixW);
-    free(localW);
-    free(uriW);
-
-    return hr;
-}
-
-static HRESULT write_element_string(IXmlWriter *writer, const char *prefix, const char *local,
-        const char *uri, const char *value)
-{
-    WCHAR *prefixW, *localW, *uriW, *valueW;
-    HRESULT hr;
-
-    prefixW = strdupAtoW(prefix);
-    localW = strdupAtoW(local);
-    uriW = strdupAtoW(uri);
-    valueW = strdupAtoW(value);
-
-    hr = IXmlWriter_WriteElementString(writer, prefixW, localW, uriW, valueW);
-
-    free(prefixW);
-    free(localW);
-    free(uriW);
-    free(valueW);
-
-    return hr;
-}
-
-static HRESULT write_string(IXmlWriter *writer, const char *str)
-{
-    WCHAR *strW;
-    HRESULT hr;
-
-    strW = strdupAtoW(str);
-
-    hr = IXmlWriter_WriteString(writer, strW);
-
-    free(strW);
-
-    return hr;
-}
-
 static void test_WriteStartElement(void)
 {
     static const struct
     {
-        const char *prefix;
-        const char *local;
-        const char *uri;
+        const WCHAR *prefix;
+        const WCHAR *local;
+        const WCHAR *uri;
         const char *output;
         const char *output_partial;
         HRESULT hr;
@@ -899,22 +818,21 @@ static void test_WriteStartElement(void)
     }
     start_element_tests[] =
     {
-        { "prefix", "local", "uri", "<prefix:local xmlns:prefix=\"uri\" />", "<prefix:local" },
-        { NULL, "local", "uri", "<local xmlns=\"uri\" />", "<local" },
-        { "", "local", "uri", "<local xmlns=\"uri\" />", "<local" },
-        { "", "local", "uri", "<local xmlns=\"uri\" />", "<local" },
+        { L"prefix", L"local", L"uri", "<prefix:local xmlns:prefix=\"uri\" />", "<prefix:local" },
+        { NULL, L"local", L"uri", "<local xmlns=\"uri\" />", "<local" },
+        { L"", L"local", L"uri", "<local xmlns=\"uri\" />", "<local" },
+        { L"", L"local", L"uri", "<local xmlns=\"uri\" />", "<local" },
 
-        { "prefix", NULL, NULL, NULL, NULL, E_INVALIDARG },
-        { NULL, NULL, "uri", NULL, NULL, E_INVALIDARG },
+        { L"prefix", NULL, NULL, NULL, NULL, E_INVALIDARG },
+        { NULL, NULL, L"uri", NULL, NULL, E_INVALIDARG },
         { NULL, NULL, NULL, NULL, NULL, E_INVALIDARG },
-        { NULL, "prefix:local", "uri", NULL, NULL, WC_E_NAMECHARACTER },
-        { "pre:fix", "local", "uri", NULL, NULL, WC_E_NAMECHARACTER },
-        { NULL, ":local", "uri", NULL, NULL, WC_E_NAMECHARACTER },
-        { ":", "local", "uri", NULL, NULL, WC_E_NAMECHARACTER },
-        { NULL, "local", "http://www.w3.org/2000/xmlns/", NULL, NULL, WR_E_XMLNSPREFIXDECLARATION },
-        { "prefix", "local", "http://www.w3.org/2000/xmlns/", NULL, NULL, WR_E_XMLNSURIDECLARATION },
+        { NULL, L"prefix:local", L"uri", NULL, NULL, WC_E_NAMECHARACTER },
+        { L"pre:fix", L"local", L"uri", NULL, NULL, WC_E_NAMECHARACTER },
+        { NULL, L":local", L"uri", NULL, NULL, WC_E_NAMECHARACTER },
+        { L":", L"local", L"uri", NULL, NULL, WC_E_NAMECHARACTER },
+        { NULL, L"local", L"http://www.w3.org/2000/xmlns/", NULL, NULL, WR_E_XMLNSPREFIXDECLARATION },
+        { L"prefix", L"local", L"http://www.w3.org/2000/xmlns/", NULL, NULL, WR_E_XMLNSURIDECLARATION },
     };
-    static const WCHAR aW[] = {'a',0};
     IXmlWriter *writer;
     IStream *stream;
     unsigned int i;
@@ -923,12 +841,12 @@ static void test_WriteStartElement(void)
     hr = CreateXmlWriter(&IID_IXmlWriter, (void**)&writer, NULL);
     ok(hr == S_OK, "Unexpected hr %#lx.\n", hr);
 
-    hr = write_start_element(writer, NULL, "a", NULL);
+    hr = IXmlWriter_WriteStartElement(writer, NULL, L"a", NULL);
     ok(hr == E_UNEXPECTED, "Unexpected hr %#lx.\n", hr);
 
     stream = writer_set_output(writer);
 
-    hr = write_start_element(writer, NULL, "a", NULL);
+    hr = IXmlWriter_WriteStartElement(writer, NULL, L"a", NULL);
     ok(hr == S_OK, "Unexpected hr %#lx.\n", hr);
 
     hr = IXmlWriter_WriteStartDocument(writer, XmlStandalone_Yes);
@@ -945,7 +863,7 @@ static void test_WriteStartElement(void)
     hr = IXmlWriter_WriteStartElement(writer, NULL, NULL, NULL);
     ok(hr == E_INVALIDARG, "Unexpected hr %#lx.\n", hr);
 
-    hr = IXmlWriter_WriteProcessingInstruction(writer, aW, aW);
+    hr = IXmlWriter_WriteProcessingInstruction(writer, L"a", L"a");
     ok(hr == WR_E_INVALIDACTION, "Unexpected hr %#lx.\n", hr);
 
     IStream_Release(stream);
@@ -955,27 +873,27 @@ static void test_WriteStartElement(void)
     hr = CreateXmlWriter(&IID_IXmlWriter, (void**)&writer, NULL);
     ok(hr == S_OK, "Unexpected hr %#lx.\n", hr);
 
-    hr = write_element_string(writer, NULL, "b", NULL, "value");
+    hr = IXmlWriter_WriteElementString(writer, NULL, L"b", NULL, L"value");
     ok(hr == E_UNEXPECTED, "Unexpected hr %#lx.\n", hr);
 
     stream = writer_set_output(writer);
 
-    hr = write_start_element(writer, "prefix", "a", "uri");
+    hr = IXmlWriter_WriteStartElement(writer, L"prefix", L"a", L"uri");
     ok(hr == S_OK, "Failed to start element, hr %#lx.\n", hr);
 
-    hr = write_element_string(writer, NULL, "b", NULL, "value");
+    hr = IXmlWriter_WriteElementString(writer, NULL, L"b", NULL, L"value");
     ok(hr == S_OK, "Failed to write element string, hr %#lx.\n", hr);
 
-    hr = write_element_string(writer, NULL, "c", NULL, NULL);
+    hr = IXmlWriter_WriteElementString(writer, NULL, L"c", NULL, NULL);
     ok(hr == S_OK, "Failed to write element string, hr %#lx.\n", hr);
 
-    hr = write_start_element(writer, NULL, "d", "uri");
+    hr = IXmlWriter_WriteStartElement(writer, NULL, L"d", L"uri");
     ok(hr == S_OK, "Failed to start element, hr %#lx.\n", hr);
 
-    hr = write_start_element(writer, "", "e", "uri");
+    hr = IXmlWriter_WriteStartElement(writer, L"", L"e", L"uri");
     ok(hr == S_OK, "Failed to start element, hr %#lx.\n", hr);
 
-    hr = write_start_element(writer, "prefix2", "f", "uri");
+    hr = IXmlWriter_WriteStartElement(writer, L"prefix2", L"f", L"uri");
     ok(hr == S_OK, "Failed to start element, hr %#lx.\n", hr);
 
     hr = IXmlWriter_Flush(writer);
@@ -1001,7 +919,7 @@ static void test_WriteStartElement(void)
         hr = IXmlWriter_WriteStartDocument(writer, XmlStandalone_Omit);
         ok(hr == S_OK, "Failed to start document, hr %#lx.\n", hr);
 
-        hr = write_start_element(writer, start_element_tests[i].prefix, start_element_tests[i].local,
+        hr = IXmlWriter_WriteStartElement(writer, start_element_tests[i].prefix, start_element_tests[i].local,
                 start_element_tests[i].uri);
         ok(hr == start_element_tests[i].hr, "%u: unexpected hr %#lx.\n", i, hr);
 
@@ -1031,39 +949,39 @@ static void test_WriteElementString(void)
 {
     static const struct
     {
-        const char *prefix;
-        const char *local;
-        const char *uri;
-        const char *value;
+        const WCHAR *prefix;
+        const WCHAR *local;
+        const WCHAR *uri;
+        const WCHAR *value;
         const char *output;
         HRESULT hr;
         int todo;
     }
     element_string_tests[] =
     {
-        { "prefix", "local", "uri", "value", "<prefix:local xmlns:prefix=\"uri\">value</prefix:local>" },
-        { NULL, "local", "uri", "value", "<local xmlns=\"uri\">value</local>" },
-        { "", "local", "uri", "value", "<local xmlns=\"uri\">value</local>" },
-        { "prefix", "local", "uri", NULL, "<prefix:local xmlns:prefix=\"uri\" />" },
-        { NULL, "local", "uri", NULL, "<local xmlns=\"uri\" />" },
-        { "", "local", "uri", NULL, "<local xmlns=\"uri\" />" },
-        { NULL, "local", NULL, NULL, "<local />" },
-        { "prefix", "local", "uri", "", "<prefix:local xmlns:prefix=\"uri\"></prefix:local>" },
-        { NULL, "local", "uri", "", "<local xmlns=\"uri\"></local>" },
-        { "", "local", "uri", "", "<local xmlns=\"uri\"></local>" },
-        { NULL, "local", NULL, "", "<local></local>" },
-        { "", "local", "http://www.w3.org/2000/xmlns/", NULL, "<local xmlns=\"http://www.w3.org/2000/xmlns/\" />" },
-
-        { "prefix", NULL, NULL, "value", NULL, E_INVALIDARG },
-        { NULL, NULL, "uri", "value", NULL, E_INVALIDARG },
-        { NULL, NULL, NULL, "value", NULL, E_INVALIDARG },
-        { NULL, "prefix:local", "uri", "value", NULL, WC_E_NAMECHARACTER },
-        { NULL, ":local", "uri", "value", NULL, WC_E_NAMECHARACTER },
-        { ":", "local", "uri", "value", NULL, WC_E_NAMECHARACTER },
-        { "prefix", "local", NULL, "value", NULL, WR_E_NSPREFIXWITHEMPTYNSURI },
-        { "prefix", "local", "", "value", NULL, WR_E_NSPREFIXWITHEMPTYNSURI },
-        { NULL, "local", "http://www.w3.org/2000/xmlns/", "value", NULL, WR_E_XMLNSPREFIXDECLARATION },
-        { "prefix", "local", "http://www.w3.org/2000/xmlns/", "value", NULL, WR_E_XMLNSURIDECLARATION },
+        { L"prefix", L"local", L"uri", L"value", "<prefix:local xmlns:prefix=\"uri\">value</prefix:local>" },
+        { NULL, L"local", L"uri", L"value", "<local xmlns=\"uri\">value</local>" },
+        { L"", L"local", L"uri", L"value", "<local xmlns=\"uri\">value</local>" },
+        { L"prefix", L"local", L"uri", NULL, "<prefix:local xmlns:prefix=\"uri\" />" },
+        { NULL, L"local", L"uri", NULL, "<local xmlns=\"uri\" />" },
+        { L"", L"local", L"uri", NULL, "<local xmlns=\"uri\" />" },
+        { NULL, L"local", NULL, NULL, "<local />" },
+        { L"prefix", L"local", L"uri", L"", "<prefix:local xmlns:prefix=\"uri\"></prefix:local>" },
+        { NULL, L"local", L"uri", L"", "<local xmlns=\"uri\"></local>" },
+        { L"", L"local", L"uri", L"", "<local xmlns=\"uri\"></local>" },
+        { NULL, L"local", NULL, L"", "<local></local>" },
+        { L"", L"local", L"http://www.w3.org/2000/xmlns/", NULL, "<local xmlns=\"http://www.w3.org/2000/xmlns/\" />" },
+
+        { L"prefix", NULL, NULL, L"value", NULL, E_INVALIDARG },
+        { NULL, NULL, L"uri", L"value", NULL, E_INVALIDARG },
+        { NULL, NULL, NULL, L"value", NULL, E_INVALIDARG },
+        { NULL, L"prefix:local", L"uri", L"value", NULL, WC_E_NAMECHARACTER },
+        { NULL, L":local", L"uri", L"value", NULL, WC_E_NAMECHARACTER },
+        { L":", L"local", L"uri", L"value", NULL, WC_E_NAMECHARACTER },
+        { L"prefix", L"local", NULL, L"value", NULL, WR_E_NSPREFIXWITHEMPTYNSURI },
+        { L"prefix", L"local", L"", L"value", NULL, WR_E_NSPREFIXWITHEMPTYNSURI },
+        { NULL, L"local", L"http://www.w3.org/2000/xmlns/", L"value", NULL, WR_E_XMLNSPREFIXDECLARATION },
+        { L"prefix", L"local", L"http://www.w3.org/2000/xmlns/", L"value", NULL, WR_E_XMLNSURIDECLARATION },
     };
     IXmlWriter *writer;
     IStream *stream;
@@ -1073,48 +991,48 @@ static void test_WriteElementString(void)
     hr = CreateXmlWriter(&IID_IXmlWriter, (void**)&writer, NULL);
     ok(hr == S_OK, "Unexpected hr %#lx.\n", hr);
 
-    hr = write_element_string(writer, NULL, "b", NULL, "value");
+    hr = IXmlWriter_WriteElementString(writer, NULL, L"b", NULL, L"value");
     ok(hr == E_UNEXPECTED, "Unexpected hr %#lx.\n", hr);
 
     stream = writer_set_output(writer);
 
-    hr = write_start_element(writer, NULL, "a", NULL);
+    hr = IXmlWriter_WriteStartElement(writer, NULL, L"a", NULL);
     ok(hr == S_OK, "Unexpected hr %#lx.\n", hr);
 
-    hr = write_element_string(writer, NULL, "b", NULL, "value");
+    hr = IXmlWriter_WriteElementString(writer, NULL, L"b", NULL, L"value");
     ok(hr == S_OK, "Unexpected hr %#lx.\n", hr);
 
-    hr = write_element_string(writer, NULL, "b", NULL, NULL);
+    hr = IXmlWriter_WriteElementString(writer, NULL, L"b", NULL, NULL);
     ok(hr == S_OK, "Unexpected hr %#lx.\n", hr);
 
-    hr = write_element_string(writer, "prefix", "b", "uri", NULL);
+    hr = IXmlWriter_WriteElementString(writer, L"prefix", L"b", L"uri", NULL);
     ok(hr == S_OK, "Unexpected hr %#lx.\n", hr);
 
-    hr = write_start_element(writer, "prefix", "c", "uri");
+    hr = IXmlWriter_WriteStartElement(writer, L"prefix", L"c", L"uri");
     ok(hr == S_OK, "Failed to start element, hr %#lx.\n", hr);
 
-    hr = write_element_string(writer, "prefix", "d", NULL, NULL);
+    hr = IXmlWriter_WriteElementString(writer, L"prefix", L"d", NULL, NULL);
     ok(hr == S_OK, "Failed to write element, hr %#lx.\n", hr);
 
-    hr = write_element_string(writer, "prefix2", "d", "uri", NULL);
+    hr = IXmlWriter_WriteElementString(writer, L"prefix2", L"d", L"uri", NULL);
     ok(hr == S_OK, "Failed to write element, hr %#lx.\n", hr);
 
-    hr = write_element_string(writer, NULL, "e", "uri", NULL);
+    hr = IXmlWriter_WriteElementString(writer, NULL, L"e", L"uri", NULL);
     ok(hr == S_OK, "Failed to write element, hr %#lx.\n", hr);
 
-    hr = write_element_string(writer, "prefix", "f", "uri2", NULL);
+    hr = IXmlWriter_WriteElementString(writer, L"prefix", L"f", L"uri2", NULL);
     ok(hr == S_OK, "Failed to write element, hr %#lx.\n", hr);
 
-    hr = write_element_string(writer, NULL, "g", "uri3", NULL);
+    hr = IXmlWriter_WriteElementString(writer, NULL, L"g", L"uri3", NULL);
     ok(hr == S_OK, "Failed to write element, hr %#lx.\n", hr);
 
-    hr = write_element_string(writer, "prefix", "h", NULL, NULL);
+    hr = IXmlWriter_WriteElementString(writer, L"prefix", L"h", NULL, NULL);
     ok(hr == S_OK, "Failed to write element, hr %#lx.\n", hr);
 
-    hr = write_element_string(writer, "prefix_i", "i", NULL, NULL);
+    hr = IXmlWriter_WriteElementString(writer, L"prefix_i", L"i", NULL, NULL);
     ok(hr == WR_E_NSPREFIXWITHEMPTYNSURI, "Failed to write element, hr %#lx.\n", hr);
 
-    hr = write_element_string(writer, "", "j", "uri", NULL);
+    hr = IXmlWriter_WriteElementString(writer, L"", L"j", L"uri", NULL);
     ok(hr == S_OK, "Failed to write element, hr %#lx.\n", hr);
 
     hr = IXmlWriter_Flush(writer);
@@ -1143,7 +1061,7 @@ static void test_WriteElementString(void)
         hr = IXmlWriter_WriteStartDocument(writer, XmlStandalone_Omit);
         ok(hr == S_OK, "Failed to start document, hr %#lx.\n", hr);
 
-        hr = write_element_string(writer, element_string_tests[i].prefix, element_string_tests[i].local,
+        hr = IXmlWriter_WriteElementString(writer, element_string_tests[i].prefix, element_string_tests[i].local,
                 element_string_tests[i].uri, element_string_tests[i].value);
         ok(hr == element_string_tests[i].hr, "%u: unexpected hr %#lx.\n", i, hr);
 
@@ -1180,10 +1098,10 @@ static void test_WriteEndElement(void)
 
     stream = writer_set_output(writer);
 
-    hr = write_start_element(writer, NULL, "a", NULL);
+    hr = IXmlWriter_WriteStartElement(writer, NULL, L"a", NULL);
     ok(hr == S_OK, "Unexpected hr %#lx.\n", hr);
 
-    hr = write_start_element(writer, NULL, "b", NULL);
+    hr = IXmlWriter_WriteStartElement(writer, NULL, L"b", NULL);
     ok(hr == S_OK, "Unexpected hr %#lx.\n", hr);
 
     hr = IXmlWriter_WriteEndElement(writer);
@@ -1203,8 +1121,6 @@ static void test_WriteEndElement(void)
 
 static void test_writeenddocument(void)
 {
-    static const WCHAR aW[] = {'a',0};
-    static const WCHAR bW[] = {'b',0};
     IXmlWriter *writer;
     IStream *stream;
     HGLOBAL hglobal;
@@ -1229,16 +1145,16 @@ static void test_writeenddocument(void)
     hr = IXmlWriter_WriteStartDocument(writer, XmlStandalone_Omit);
     ok(hr == WR_E_INVALIDACTION, "Unexpected hr %#lx.\n", hr);
 
-    hr = IXmlWriter_WriteStartElement(writer, NULL, aW, NULL);
+    hr = IXmlWriter_WriteStartElement(writer, NULL, L"a", NULL);
     ok(hr == WR_E_INVALIDACTION, "Unexpected hr %#lx.\n", hr);
 
     hr = IXmlWriter_SetOutput(writer, (IUnknown*)stream);
     ok(hr == S_OK, "Unexpected hr %#lx.\n", hr);
 
-    hr = IXmlWriter_WriteStartElement(writer, NULL, aW, NULL);
+    hr = IXmlWriter_WriteStartElement(writer, NULL, L"a", NULL);
     ok(hr == S_OK, "Unexpected hr %#lx.\n", hr);
 
-    hr = IXmlWriter_WriteStartElement(writer, NULL, bW, NULL);
+    hr = IXmlWriter_WriteStartElement(writer, NULL, L"b", NULL);
     ok(hr == S_OK, "Unexpected hr %#lx.\n", hr);
 
     hr = IXmlWriter_WriteEndDocument(writer);
@@ -1262,9 +1178,6 @@ static void test_writeenddocument(void)
 
 static void test_WriteComment(void)
 {
-    static const WCHAR closeW[] = {'-','-','>',0};
-    static const WCHAR aW[] = {'a',0};
-    static const WCHAR bW[] = {'b',0};
     IXmlWriter *writer;
     IStream *stream;
     HRESULT hr;
@@ -1274,7 +1187,7 @@ static void test_WriteComment(void)
 
     writer_set_property(writer, XmlWriterProperty_OmitXmlDeclaration);
 
-    hr = IXmlWriter_WriteComment(writer, aW);
+    hr = IXmlWriter_WriteComment(writer, L"a");
     ok(hr == E_UNEXPECTED, "Unexpected hr %#lx.\n", hr);
 
     stream = writer_set_output(writer);
@@ -1282,19 +1195,19 @@ static void test_WriteComment(void)
     hr = IXmlWriter_WriteStartDocument(writer, XmlStandalone_Omit);
     ok(hr == S_OK, "Unexpected hr %#lx.\n", hr);
 
-    hr = IXmlWriter_WriteComment(writer, aW);
+    hr = IXmlWriter_WriteComment(writer, L"a");
     ok(hr == S_OK, "Unexpected hr %#lx.\n", hr);
 
-    hr = IXmlWriter_WriteStartElement(writer, NULL, bW, NULL);
+    hr = IXmlWriter_WriteStartElement(writer, NULL, L"b", NULL);
     ok(hr == S_OK, "Unexpected hr %#lx.\n", hr);
 
-    hr = IXmlWriter_WriteComment(writer, aW);
+    hr = IXmlWriter_WriteComment(writer, L"a");
     ok(hr == S_OK, "Unexpected hr %#lx.\n", hr);
 
     hr = IXmlWriter_WriteComment(writer, NULL);
     ok(hr == S_OK, "Unexpected hr %#lx.\n", hr);
 
-    hr = IXmlWriter_WriteComment(writer, closeW);
+    hr = IXmlWriter_WriteComment(writer, L"-->");
     ok(hr == S_OK, "Unexpected hr %#lx.\n", hr);
 
     hr = IXmlWriter_Flush(writer);
@@ -1308,10 +1221,6 @@ static void test_WriteComment(void)
 
 static void test_WriteCData(void)
 {
-    static const WCHAR closeW[] = {']',']','>',0};
-    static const WCHAR close2W[] = {'a',']',']','>','b',0};
-    static const WCHAR aW[] = {'a',0};
-    static const WCHAR bW[] = {'b',0};
     IXmlWriter *writer;
     IStream *stream;
     HRESULT hr;
@@ -1321,24 +1230,24 @@ static void test_WriteCData(void)
 
     writer_set_property(writer, XmlWriterProperty_OmitXmlDeclaration);
 
-    hr = IXmlWriter_WriteCData(writer, aW);
+    hr = IXmlWriter_WriteCData(writer, L"a");
     ok(hr == E_UNEXPECTED, "Unexpected hr %#lx.\n", hr);
 
     stream = writer_set_output(writer);
 
-    hr = IXmlWriter_WriteStartElement(writer, NULL, bW, NULL);
+    hr = IXmlWriter_WriteStartElement(writer, NULL, L"b", NULL);
     ok(hr == S_OK, "Unexpected hr %#lx.\n", hr);
 
-    hr = IXmlWriter_WriteCData(writer, aW);
+    hr = IXmlWriter_WriteCData(writer, L"a");
     ok(hr == S_OK, "Unexpected hr %#lx.\n", hr);
 
     hr = IXmlWriter_WriteCData(writer, NULL);
     ok(hr == S_OK, "Unexpected hr %#lx.\n", hr);
 
-    hr = IXmlWriter_WriteCData(writer, closeW);
+    hr = IXmlWriter_WriteCData(writer, L"]]>");
     ok(hr == S_OK, "Unexpected hr %#lx.\n", hr);
 
-    hr = IXmlWriter_WriteCData(writer, close2W);
+    hr = IXmlWriter_WriteCData(writer, L"a]]>b");
     ok(hr == S_OK, "Unexpected hr %#lx.\n", hr);
 
     hr = IXmlWriter_Flush(writer);
@@ -1359,8 +1268,7 @@ static void test_WriteCData(void)
 
 static void test_WriteRaw(void)
 {
-    static const WCHAR rawW[] = {'a','<',':',0};
-    static const WCHAR aW[] = {'a',0};
+    static const WCHAR rawW[] = L"a<:";
     IXmlWriter *writer;
     IStream *stream;
     HRESULT hr;
@@ -1391,7 +1299,7 @@ static void test_WriteRaw(void)
     hr = IXmlWriter_WriteRaw(writer, rawW);
     ok(hr == S_OK, "Unexpected hr %#lx.\n", hr);
 
-    hr = IXmlWriter_WriteElementString(writer, NULL, aW, NULL, aW);
+    hr = IXmlWriter_WriteElementString(writer, NULL, L"a", NULL, L"a");
     ok(hr == S_OK, "Unexpected hr %#lx.\n", hr);
 
     hr = IXmlWriter_WriteStartDocument(writer, XmlStandalone_Yes);
@@ -1417,7 +1325,6 @@ static void test_WriteRaw(void)
 
 static void test_writer_state(void)
 {
-    static const WCHAR aW[] = {'a',0};
     IXmlWriter *writer;
     IStream *stream;
     HRESULT hr;
@@ -1440,7 +1347,7 @@ static void test_writer_state(void)
     /* WriteAttributeString */
     stream = writer_set_output(writer);
 
-    hr = IXmlWriter_WriteAttributeString(writer, NULL, aW, NULL, aW);
+    hr = IXmlWriter_WriteAttributeString(writer, NULL, L"a", NULL, L"a");
     ok(hr == WR_E_INVALIDACTION, "Unexpected hr %#lx.\n", hr);
 
     check_writer_state(writer, WR_E_INVALIDACTION);
@@ -1467,7 +1374,7 @@ static void test_writer_state(void)
     /* WriteCData */
     stream = writer_set_output(writer);
 
-    hr = IXmlWriter_WriteCData(writer, aW);
+    hr = IXmlWriter_WriteCData(writer, L"a");
     ok(hr == WR_E_INVALIDACTION, "Unexpected hr %#lx.\n", hr);
 
     check_writer_state(writer, WR_E_INVALIDACTION);
@@ -1476,7 +1383,7 @@ static void test_writer_state(void)
     /* WriteName */
     stream = writer_set_output(writer);
 
-    hr = IXmlWriter_WriteName(writer, aW);
+    hr = IXmlWriter_WriteName(writer, L"a");
     ok(hr == WR_E_INVALIDACTION, "Unexpected hr %#lx.\n", hr);
 
     check_writer_state(writer, WR_E_INVALIDACTION);
@@ -1485,7 +1392,7 @@ static void test_writer_state(void)
     /* WriteNmToken */
     stream = writer_set_output(writer);
 
-    hr = IXmlWriter_WriteNmToken(writer, aW);
+    hr = IXmlWriter_WriteNmToken(writer, L"a");
     ok(hr == WR_E_INVALIDACTION, "Unexpected hr %#lx.\n", hr);
 
     check_writer_state(writer, WR_E_INVALIDACTION);
@@ -1494,7 +1401,7 @@ static void test_writer_state(void)
     /* WriteString */
     stream = writer_set_output(writer);
 
-    hr = IXmlWriter_WriteString(writer, aW);
+    hr = IXmlWriter_WriteString(writer, L"a");
     ok(hr == WR_E_INVALIDACTION, "Unexpected hr %#lx.\n", hr);
 
     check_writer_state(writer, WR_E_INVALIDACTION);
@@ -1505,9 +1412,6 @@ static void test_writer_state(void)
 
 static void test_indentation(void)
 {
-    static const WCHAR commentW[] = {'c','o','m','m','e','n','t',0};
-    static const WCHAR aW[] = {'a',0};
-    static const WCHAR bW[] = {'b',0};
     IXmlWriter *writer;
     IStream *stream;
     HRESULT hr;
@@ -1523,13 +1427,13 @@ static void test_indentation(void)
     hr = IXmlWriter_WriteStartDocument(writer, XmlStandalone_Omit);
     ok(hr == S_OK, "Unexpected hr %#lx.\n", hr);
 
-    hr = IXmlWriter_WriteStartElement(writer, NULL, aW, NULL);
+    hr = IXmlWriter_WriteStartElement(writer, NULL, L"a", NULL);
     ok(hr == S_OK, "Unexpected hr %#lx.\n", hr);
 
-    hr = IXmlWriter_WriteComment(writer, commentW);
+    hr = IXmlWriter_WriteComment(writer, L"comment");
     ok(hr == S_OK, "Unexpected hr %#lx.\n", hr);
 
-    hr = IXmlWriter_WriteStartElement(writer, NULL, bW, NULL);
+    hr = IXmlWriter_WriteStartElement(writer, NULL, L"b", NULL);
     ok(hr == S_OK, "Unexpected hr %#lx.\n", hr);
 
     hr = IXmlWriter_WriteEndDocument(writer);
@@ -1549,13 +1453,13 @@ static void test_indentation(void)
     /* WriteElementString */
     stream = writer_set_output(writer);
 
-    hr = IXmlWriter_WriteStartElement(writer, NULL, aW, NULL);
+    hr = IXmlWriter_WriteStartElement(writer, NULL, L"a", NULL);
     ok(hr == S_OK, "Unexpected hr %#lx.\n", hr);
 
-    hr = IXmlWriter_WriteElementString(writer, NULL, bW, NULL, NULL);
+    hr = IXmlWriter_WriteElementString(writer, NULL, L"b", NULL, NULL);
     ok(hr == S_OK, "Unexpected hr %#lx.\n", hr);
 
-    hr = IXmlWriter_WriteElementString(writer, NULL, bW, NULL, NULL);
+    hr = IXmlWriter_WriteElementString(writer, NULL, L"b", NULL, NULL);
     ok(hr == S_OK, "Unexpected hr %#lx.\n", hr);
 
     hr = IXmlWriter_WriteEndElement(writer);
@@ -1575,35 +1479,14 @@ static void test_indentation(void)
     IXmlWriter_Release(writer);
 }
 
-static HRESULT write_attribute_string(IXmlWriter *writer, const char *prefix, const char *local,
-        const char *uri, const char *value)
-{
-    WCHAR *prefixW, *localW, *uriW, *valueW;
-    HRESULT hr;
-
-    prefixW = strdupAtoW(prefix);
-    localW = strdupAtoW(local);
-    uriW = strdupAtoW(uri);
-    valueW = strdupAtoW(value);
-
-    hr = IXmlWriter_WriteAttributeString(writer, prefixW, localW, uriW, valueW);
-
-    free(prefixW);
-    free(localW);
-    free(uriW);
-    free(valueW);
-
-    return hr;
-}
-
 static void test_WriteAttributeString(void)
 {
     static const struct
     {
-        const char *prefix;
-        const char *local;
-        const char *uri;
-        const char *value;
+        const WCHAR *prefix;
+        const WCHAR *local;
+        const WCHAR *uri;
+        const WCHAR *value;
         const char *output;
         const char *output_partial;
         HRESULT hr;
@@ -1613,62 +1496,62 @@ static void test_WriteAttributeString(void)
     }
     attribute_tests[] =
     {
-        { NULL, "a", NULL, "b", "<e a=\"b\" />", "<e a=\"b\"" },
-        { "", "a", NULL, "b", "<e a=\"b\" />", "<e a=\"b\"" },
-        { NULL, "a", "", "b", "<e a=\"b\" />", "<e a=\"b\"" },
-        { "", "a", "", "b", "<e a=\"b\" />", "<e a=\"b\"" },
-        { "prefix", "local", "uri", "b", "<e prefix:local=\"b\" xmlns:prefix=\"uri\" />", "<e prefix:local=\"b\"" },
-        { NULL, "a", "http://www.w3.org/2000/xmlns/", "defuri", "<e xmlns:a=\"defuri\" />", "<e xmlns:a=\"defuri\"" },
-        { "xmlns", "a", NULL, "uri", "<e xmlns:a=\"uri\" />", "<e xmlns:a=\"uri\"" },
-        { "xmlns", "a", "", "uri", "<e xmlns:a=\"uri\" />", "<e xmlns:a=\"uri\"" },
-        { "prefix", "xmlns", "uri", "value", "<e prefix:xmlns=\"value\" xmlns:prefix=\"uri\" />", "<e prefix:xmlns=\"value\"" },
-        { "prefix", "xmlns", "uri", NULL, "<e prefix:xmlns=\"\" xmlns:prefix=\"uri\" />", "<e prefix:xmlns=\"\"" },
-        { "prefix", "xmlns", "uri", "", "<e prefix:xmlns=\"\" xmlns:prefix=\"uri\" />", "<e prefix:xmlns=\"\"" },
-        { "prefix", "xmlns", NULL, "uri", "<e xmlns=\"uri\" />", "<e xmlns=\"uri\"" },
-        { "prefix", "xmlns", "", "uri", "<e xmlns=\"uri\" />", "<e xmlns=\"uri\"" },
-        { "xml", "space", NULL, "preserve", "<e xml:space=\"preserve\" />", "<e xml:space=\"preserve\"" },
-        { "xml", "space", "", "preserve", "<e xml:space=\"preserve\" />", "<e xml:space=\"preserve\"" },
-        { "xml", "space", NULL, "default", "<e xml:space=\"default\" />", "<e xml:space=\"default\"" },
-        { "xml", "space", "", "default", "<e xml:space=\"default\" />", "<e xml:space=\"default\"" },
-        { "xml", "a", NULL, "value", "<e xml:a=\"value\" />", "<e xml:a=\"value\"" },
-        { "xml", "a", "", "value", "<e xml:a=\"value\" />", "<e xml:a=\"value\"" },
+        { NULL, L"a", NULL, L"b", "<e a=\"b\" />", "<e a=\"b\"" },
+        { L"", L"a", NULL, L"b", "<e a=\"b\" />", "<e a=\"b\"" },
+        { NULL, L"a", L"", L"b", "<e a=\"b\" />", "<e a=\"b\"" },
+        { L"", L"a", L"", L"b", "<e a=\"b\" />", "<e a=\"b\"" },
+        { L"prefix", L"local", L"uri", L"b", "<e prefix:local=\"b\" xmlns:prefix=\"uri\" />", "<e prefix:local=\"b\"" },
+        { NULL, L"a", L"http://www.w3.org/2000/xmlns/", L"defuri", "<e xmlns:a=\"defuri\" />", "<e xmlns:a=\"defuri\"" },
+        { L"xmlns", L"a", NULL, L"uri", "<e xmlns:a=\"uri\" />", "<e xmlns:a=\"uri\"" },
+        { L"xmlns", L"a", L"", L"uri", "<e xmlns:a=\"uri\" />", "<e xmlns:a=\"uri\"" },
+        { L"prefix", L"xmlns", L"uri", L"value", "<e prefix:xmlns=\"value\" xmlns:prefix=\"uri\" />", "<e prefix:xmlns=\"value\"" },
+        { L"prefix", L"xmlns", L"uri", NULL, "<e prefix:xmlns=\"\" xmlns:prefix=\"uri\" />", "<e prefix:xmlns=\"\"" },
+        { L"prefix", L"xmlns", L"uri", L"", "<e prefix:xmlns=\"\" xmlns:prefix=\"uri\" />", "<e prefix:xmlns=\"\"" },
+        { L"prefix", L"xmlns", NULL, L"uri", "<e xmlns=\"uri\" />", "<e xmlns=\"uri\"" },
+        { L"prefix", L"xmlns", L"", L"uri", "<e xmlns=\"uri\" />", "<e xmlns=\"uri\"" },
+        { L"xml", L"space", NULL, L"preserve", "<e xml:space=\"preserve\" />", "<e xml:space=\"preserve\"" },
+        { L"xml", L"space", L"", L"preserve", "<e xml:space=\"preserve\" />", "<e xml:space=\"preserve\"" },
+        { L"xml", L"space", NULL, L"default", "<e xml:space=\"default\" />", "<e xml:space=\"default\"" },
+        { L"xml", L"space", L"", L"default", "<e xml:space=\"default\" />", "<e xml:space=\"default\"" },
+        { L"xml", L"a", NULL, L"value", "<e xml:a=\"value\" />", "<e xml:a=\"value\"" },
+        { L"xml", L"a", L"", L"value", "<e xml:a=\"value\" />", "<e xml:a=\"value\"" },
 
         /* Autogenerated prefix names. */
-        { NULL, "a", "defuri", NULL, "<e p1:a=\"\" xmlns:p1=\"defuri\" />", "<e p1:a=\"\"", S_OK, 1, 1, 1 },
-        { NULL, "a", "defuri", "b", "<e p1:a=\"b\" xmlns:p1=\"defuri\" />", "<e p1:a=\"b\"", S_OK, 1, 1, 1 },
-        { "", "a", "defuri", NULL, "<e p1:a=\"\" xmlns:p1=\"defuri\" />", "<e p1:a=\"\"", S_OK, 1, 1, 1 },
-        { NULL, "a", "defuri", "", "<e p1:a=\"\" xmlns:p1=\"defuri\" />", "<e p1:a=\"\"", S_OK, 1, 1, 1 },
-        { "", "a", "defuri", "b", "<e p1:a=\"b\" xmlns:p1=\"defuri\" />", "<e p1:a=\"b\"", S_OK, 1, 1, 1 },
+        { NULL, L"a", L"defuri", NULL, "<e p1:a=\"\" xmlns:p1=\"defuri\" />", "<e p1:a=\"\"", S_OK, 1, 1, 1 },
+        { NULL, L"a", L"defuri", L"b", "<e p1:a=\"b\" xmlns:p1=\"defuri\" />", "<e p1:a=\"b\"", S_OK, 1, 1, 1 },
+        { L"", L"a", L"defuri", NULL, "<e p1:a=\"\" xmlns:p1=\"defuri\" />", "<e p1:a=\"\"", S_OK, 1, 1, 1 },
+        { NULL, L"a", L"defuri", L"", "<e p1:a=\"\" xmlns:p1=\"defuri\" />", "<e p1:a=\"\"", S_OK, 1, 1, 1 },
+        { L"", L"a", L"defuri", L"b", "<e p1:a=\"b\" xmlns:p1=\"defuri\" />", "<e p1:a=\"b\"", S_OK, 1, 1, 1 },
 
         /* Failing cases. */
-        { NULL, NULL, "http://www.w3.org/2000/xmlns/", "defuri", "<e />", "<e", E_INVALIDARG },
-        { "", "a", "http://www.w3.org/2000/xmlns/", "defuri", "<e />", "<e", WR_E_XMLNSPREFIXDECLARATION, 1, 1, 1 },
-        { "", NULL, "http://www.w3.org/2000/xmlns/", "defuri", "<e />", "<e", E_INVALIDARG },
-        { "", "", "http://www.w3.org/2000/xmlns/", "defuri", "<e />", "<e", E_INVALIDARG, 1, 1, 1 },
-        { NULL, "", "http://www.w3.org/2000/xmlns/", "defuri", "<e />", "<e", E_INVALIDARG, 1, 1, 1 },
-        { "prefix", "a", "http://www.w3.org/2000/xmlns/", "defuri", "<e />", "<e", WR_E_XMLNSURIDECLARATION, 1, 1, 1 },
-        { "prefix", NULL, "http://www.w3.org/2000/xmlns/", "defuri", "<e />", "<e", E_INVALIDARG },
-        { "prefix", NULL, NULL, "b", "<e />", "<e", E_INVALIDARG },
-        { "prefix", NULL, "uri", NULL, "<e />", "<e", E_INVALIDARG },
-        { "xml", NULL, NULL, "value", "<e />", "<e", E_INVALIDARG },
-        { "xmlns", "a", "defuri", NULL, "<e />", "<e", WR_E_XMLNSPREFIXDECLARATION },
-        { "xmlns", "a", "b", "uri", "<e />", "<e", WR_E_XMLNSPREFIXDECLARATION },
-        { NULL, "xmlns", "uri", NULL, "<e />", "<e", WR_E_XMLNSPREFIXDECLARATION, 0, 0, 1 },
-        { "xmlns", NULL, "uri", NULL, "<e />", "<e", WR_E_XMLNSPREFIXDECLARATION, 0, 0, 1 },
-        { "pre:fix", "local", "uri", "b", "<e />", "<e", WC_E_NAMECHARACTER },
-        { "pre:fix", NULL, "uri", "b", "<e />", "<e", E_INVALIDARG },
-        { "prefix", "lo:cal", "uri", "b", "<e />", "<e", WC_E_NAMECHARACTER },
-        { "xmlns", NULL, NULL, "uri", "<e />", "<e", WR_E_NSPREFIXDECLARED },
-        { "xmlns", NULL, "", "uri", "<e />", "<e", WR_E_NSPREFIXDECLARED },
-        { "xmlns", "", NULL, "uri", "<e />", "<e", WR_E_NSPREFIXDECLARED },
-        { "xmlns", "", "", "uri", "<e />", "<e", WR_E_NSPREFIXDECLARED },
-        { "xml", "space", "", "value", "<e />", "<e", WR_E_INVALIDXMLSPACE },
-        { "xml", "space", NULL, "value", "<e />", "<e", WR_E_INVALIDXMLSPACE },
-        { "xml", "a", "uri", "value", "<e />", "<e", WR_E_XMLPREFIXDECLARATION },
-        { "xml", "space", NULL, "preServe", "<e />", "<e", WR_E_INVALIDXMLSPACE },
-        { "xml", "space", NULL, "defAult", "<e />", "<e", WR_E_INVALIDXMLSPACE },
-        { "xml", "space", NULL, NULL, "<e />", "<e", WR_E_INVALIDXMLSPACE },
-        { "xml", "space", NULL, "", "<e />", "<e", WR_E_INVALIDXMLSPACE },
+        { NULL, NULL, L"http://www.w3.org/2000/xmlns/", L"defuri", "<e />", "<e", E_INVALIDARG },
+        { L"", L"a", L"http://www.w3.org/2000/xmlns/", L"defuri", "<e />", "<e", WR_E_XMLNSPREFIXDECLARATION, 1, 1, 1 },
+        { L"", NULL, L"http://www.w3.org/2000/xmlns/", L"defuri", "<e />", "<e", E_INVALIDARG },
+        { L"", L"", L"http://www.w3.org/2000/xmlns/", L"defuri", "<e />", "<e", E_INVALIDARG, 1, 1, 1 },
+        { NULL, L"", L"http://www.w3.org/2000/xmlns/", L"defuri", "<e />", "<e", E_INVALIDARG, 1, 1, 1 },
+        { L"prefix", L"a", L"http://www.w3.org/2000/xmlns/", L"defuri", "<e />", "<e", WR_E_XMLNSURIDECLARATION, 1, 1, 1 },
+        { L"prefix", NULL, L"http://www.w3.org/2000/xmlns/", L"defuri", "<e />", "<e", E_INVALIDARG },
+        { L"prefix", NULL, NULL, L"b", "<e />", "<e", E_INVALIDARG },
+        { L"prefix", NULL, L"uri", NULL, "<e />", "<e", E_INVALIDARG },
+        { L"xml", NULL, NULL, L"value", "<e />", "<e", E_INVALIDARG },
+        { L"xmlns", L"a", L"defuri", NULL, "<e />", "<e", WR_E_XMLNSPREFIXDECLARATION },
+        { L"xmlns", L"a", L"b", L"uri", "<e />", "<e", WR_E_XMLNSPREFIXDECLARATION },
+        { NULL, L"xmlns", L"uri", NULL, "<e />", "<e", WR_E_XMLNSPREFIXDECLARATION, 0, 0, 1 },
+        { L"xmlns", NULL, L"uri", NULL, "<e />", "<e", WR_E_XMLNSPREFIXDECLARATION, 0, 0, 1 },
+        { L"pre:fix", L"local", L"uri", L"b", "<e />", "<e", WC_E_NAMECHARACTER },
+        { L"pre:fix", NULL, L"uri", L"b", "<e />", "<e", E_INVALIDARG },
+        { L"prefix", L"lo:cal", L"uri", L"b", "<e />", "<e", WC_E_NAMECHARACTER },
+        { L"xmlns", NULL, NULL, L"uri", "<e />", "<e", WR_E_NSPREFIXDECLARED },
+        { L"xmlns", NULL, L"", L"uri", "<e />", "<e", WR_E_NSPREFIXDECLARED },
+        { L"xmlns", L"", NULL, L"uri", "<e />", "<e", WR_E_NSPREFIXDECLARED },
+        { L"xmlns", L"", L"", L"uri", "<e />", "<e", WR_E_NSPREFIXDECLARED },
+        { L"xml", L"space", L"", L"value", "<e />", "<e", WR_E_INVALIDXMLSPACE },
+        { L"xml", L"space", NULL, L"value", "<e />", "<e", WR_E_INVALIDXMLSPACE },
+        { L"xml", L"a", L"uri", L"value", "<e />", "<e", WR_E_XMLPREFIXDECLARATION },
+        { L"xml", L"space", NULL, L"preServe", "<e />", "<e", WR_E_INVALIDXMLSPACE },
+        { L"xml", L"space", NULL, L"defAult", "<e />", "<e", WR_E_INVALIDXMLSPACE },
+        { L"xml", L"space", NULL, NULL, "<e />", "<e", WR_E_INVALIDXMLSPACE },
+        { L"xml", L"space", NULL, L"", "<e />", "<e", WR_E_INVALIDXMLSPACE },
     };
 
     IXmlWriter *writer;
@@ -1688,10 +1571,10 @@ static void test_WriteAttributeString(void)
         hr = IXmlWriter_WriteStartDocument(writer, XmlStandalone_Omit);
         ok(hr == S_OK, "Failed to start document, hr %#lx.\n", hr);
 
-        hr = write_start_element(writer, NULL, "e", NULL);
+        hr = IXmlWriter_WriteStartElement(writer, NULL, L"e", NULL);
         ok(hr == S_OK, "Failed to start element, hr %#lx.\n", hr);
 
-        hr = write_attribute_string(writer, attribute_tests[i].prefix, attribute_tests[i].local,
+        hr = IXmlWriter_WriteAttributeString(writer, attribute_tests[i].prefix, attribute_tests[i].local,
                 attribute_tests[i].uri, attribute_tests[i].value);
         todo_wine_if(attribute_tests[i].todo_hr)
         ok(hr == attribute_tests[i].hr, "%u: unexpected hr %#lx, expected %#lx.\n", i, hr, attribute_tests[i].hr);
@@ -1717,32 +1600,32 @@ static void test_WriteAttributeString(void)
     hr = IXmlWriter_WriteStartDocument(writer, XmlStandalone_Omit);
     ok(hr == S_OK, "Unexpected hr %#lx.\n", hr);
 
-    hr = write_start_element(writer, "p", "a", "outeruri");
+    hr = IXmlWriter_WriteStartElement(writer, L"p", L"a", L"outeruri");
     ok(hr == S_OK, "Unexpected hr %#lx.\n", hr);
 
-    hr = write_attribute_string(writer, "prefix", "local", "uri", "b");
+    hr = IXmlWriter_WriteAttributeString(writer, L"prefix", L"local", L"uri", L"b");
     ok(hr == S_OK, "Unexpected hr %#lx.\n", hr);
 
-    hr = write_attribute_string(writer, NULL, "a", NULL, "b");
+    hr = IXmlWriter_WriteAttributeString(writer, NULL, L"a", NULL, L"b");
     ok(hr == S_OK, "Unexpected hr %#lx.\n", hr);
 
-    hr = write_attribute_string(writer, "xmlns", "prefix", NULL, "uri");
+    hr = IXmlWriter_WriteAttributeString(writer, L"xmlns", L"prefix", NULL, L"uri");
     ok(hr == S_OK, "Unexpected hr %#lx.\n", hr);
 
-    hr = write_attribute_string(writer, "p", "attr", NULL, "value");
+    hr = IXmlWriter_WriteAttributeString(writer, L"p", L"attr", NULL, L"value");
     ok(hr == S_OK, "Failed to write attribute string, hr %#lx.\n", hr);
 
-    hr = write_attribute_string(writer, "prefix", "local", NULL, "b");
+    hr = IXmlWriter_WriteAttributeString(writer, L"prefix", L"local", NULL, L"b");
     todo_wine
     ok(hr == WR_E_DUPLICATEATTRIBUTE, "Unexpected hr %#lx.\n", hr);
 
-    hr = write_start_element(writer, NULL, "b", NULL);
+    hr = IXmlWriter_WriteStartElement(writer, NULL, L"b", NULL);
     ok(hr == S_OK, "Unexpected hr %#lx.\n", hr);
 
-    hr = write_attribute_string(writer, NULL, "attr2", "outeruri", "value");
+    hr = IXmlWriter_WriteAttributeString(writer, NULL, L"attr2", L"outeruri", L"value");
     ok(hr == S_OK, "Failed to write attribute string, hr %#lx.\n", hr);
 
-    hr = write_attribute_string(writer, "pr", "attr3", "outeruri", "value");
+    hr = IXmlWriter_WriteAttributeString(writer, L"pr", L"attr3", L"outeruri", L"value");
     ok(hr == S_OK, "Failed to write attribute string, hr %#lx.\n", hr);
 
     hr = IXmlWriter_WriteEndDocument(writer);
@@ -1764,13 +1647,13 @@ static void test_WriteAttributeString(void)
     hr = IXmlWriter_WriteStartDocument(writer, XmlStandalone_Omit);
     ok(hr == S_OK, "Unexpected hr %#lx.\n", hr);
 
-    hr = write_start_element(writer, NULL, "e", NULL);
+    hr = IXmlWriter_WriteStartElement(writer, NULL, L"e", NULL);
     ok(hr == S_OK, "Unexpected hr %#lx.\n", hr);
 
-    hr = write_attribute_string(writer, "xmlns", "prefix", NULL, "uri");
+    hr = IXmlWriter_WriteAttributeString(writer, L"xmlns", L"prefix", NULL, L"uri");
     ok(hr == S_OK, "Unexpected hr %#lx.\n", hr);
 
-    hr = write_attribute_string(writer, "prefix", "attr", NULL, "value");
+    hr = IXmlWriter_WriteAttributeString(writer, L"prefix", L"attr", NULL, L"value");
     ok(hr == S_OK, "Unexpected hr %#lx.\n", hr);
 
     hr = IXmlWriter_WriteEndDocument(writer);
@@ -1789,7 +1672,6 @@ static void test_WriteAttributeString(void)
 
 static void test_WriteFullEndElement(void)
 {
-    static const WCHAR aW[] = {'a',0};
     IXmlWriter *writer;
     IStream *stream;
     HRESULT hr;
@@ -1806,7 +1688,7 @@ static void test_WriteFullEndElement(void)
     hr = IXmlWriter_WriteStartDocument(writer, XmlStandalone_Omit);
     ok(hr == S_OK, "Unexpected hr %#lx.\n", hr);
 
-    hr = IXmlWriter_WriteStartElement(writer, NULL, aW, NULL);
+    hr = IXmlWriter_WriteStartElement(writer, NULL, L"a", NULL);
     ok(hr == S_OK, "Unexpected hr %#lx.\n", hr);
 
     hr = IXmlWriter_WriteFullEndElement(writer);
@@ -1831,10 +1713,10 @@ static void test_WriteFullEndElement(void)
     hr = IXmlWriter_WriteStartDocument(writer, XmlStandalone_Omit);
     ok(hr == S_OK, "Unexpected hr %#lx.\n", hr);
 
-    hr = IXmlWriter_WriteStartElement(writer, NULL, aW, NULL);
+    hr = IXmlWriter_WriteStartElement(writer, NULL, L"a", NULL);
     ok(hr == S_OK, "Unexpected hr %#lx.\n", hr);
 
-    hr = IXmlWriter_WriteStartElement(writer, NULL, aW, NULL);
+    hr = IXmlWriter_WriteStartElement(writer, NULL, L"a", NULL);
     ok(hr == S_OK, "Unexpected hr %#lx.\n", hr);
 
     hr = IXmlWriter_WriteFullEndElement(writer);
@@ -1857,7 +1739,6 @@ static void test_WriteFullEndElement(void)
 
 static void test_WriteCharEntity(void)
 {
-    static const WCHAR aW[] = {'a',0};
     IXmlWriter *writer;
     IStream *stream;
     HRESULT hr;
@@ -1873,13 +1754,13 @@ static void test_WriteCharEntity(void)
     hr = IXmlWriter_WriteStartDocument(writer, XmlStandalone_Omit);
     ok(hr == S_OK, "Unexpected hr %#lx.\n", hr);
 
-    hr = IXmlWriter_WriteStartElement(writer, NULL, aW, NULL);
+    hr = IXmlWriter_WriteStartElement(writer, NULL, L"a", NULL);
     ok(hr == S_OK, "Unexpected hr %#lx.\n", hr);
 
     hr = IXmlWriter_WriteCharEntity(writer, 0x100);
     ok(hr == S_OK, "Unexpected hr %#lx.\n", hr);
 
-    hr = IXmlWriter_WriteStartElement(writer, NULL, aW, NULL);
+    hr = IXmlWriter_WriteStartElement(writer, NULL, L"a", NULL);
     ok(hr == S_OK, "Unexpected hr %#lx.\n", hr);
 
     hr = IXmlWriter_WriteEndDocument(writer);
@@ -1906,31 +1787,31 @@ static void test_WriteString(void)
 
     writer_set_property(writer, XmlWriterProperty_OmitXmlDeclaration);
 
-    hr = write_string(writer, "a");
+    hr = IXmlWriter_WriteString(writer, L"a");
     ok(hr == E_UNEXPECTED, "Unexpected hr %#lx.\n", hr);
 
-    hr = write_string(writer, NULL);
+    hr = IXmlWriter_WriteString(writer, NULL);
     ok(hr == S_OK, "Unexpected hr %#lx.\n", hr);
 
-    hr = write_string(writer, "");
+    hr = IXmlWriter_WriteString(writer, L"");
     ok(hr == E_UNEXPECTED, "Unexpected hr %#lx.\n", hr);
 
     stream = writer_set_output(writer);
 
-    hr = write_start_element(writer, NULL, "b", NULL);
+    hr = IXmlWriter_WriteStartElement(writer, NULL, L"b", NULL);
     ok(hr == S_OK, "Unexpected hr %#lx.\n", hr);
 
-    hr = write_string(writer, NULL);
+    hr = IXmlWriter_WriteString(writer, NULL);
     ok(hr == S_OK, "Unexpected hr %#lx.\n", hr);
 
-    hr = write_string(writer, "");
+    hr = IXmlWriter_WriteString(writer, L"");
     ok(hr == S_OK, "Unexpected hr %#lx.\n", hr);
 
-    hr = write_string(writer, "a");
+    hr = IXmlWriter_WriteString(writer, L"a");
     ok(hr == S_OK, "Unexpected hr %#lx.\n", hr);
 
     /* WriteString automatically escapes markup characters */
-    hr = write_string(writer, "<&\">=");
+    hr = IXmlWriter_WriteString(writer, L"<&\">=");
     ok(hr == S_OK, "Unexpected hr %#lx.\n", hr);
 
     hr = IXmlWriter_Flush(writer);
@@ -1942,10 +1823,10 @@ static void test_WriteString(void)
 
     stream = writer_set_output(writer);
 
-    hr = write_start_element(writer, NULL, "b", NULL);
+    hr = IXmlWriter_WriteStartElement(writer, NULL, L"b", NULL);
     ok(hr == S_OK, "Unexpected hr %#lx.\n", hr);
 
-    hr = write_string(writer, NULL);
+    hr = IXmlWriter_WriteString(writer, NULL);
     ok(hr == S_OK, "Unexpected hr %#lx.\n", hr);
 
     hr = IXmlWriter_Flush(writer);
@@ -1954,7 +1835,7 @@ static void test_WriteString(void)
     CHECK_OUTPUT(stream,
         "<b");
 
-    hr = write_string(writer, "");
+    hr = IXmlWriter_WriteString(writer, L"");
     ok(hr == S_OK, "Unexpected hr %#lx.\n", hr);
 
     hr = IXmlWriter_Flush(writer);
@@ -1974,13 +1855,13 @@ static void test_WriteString(void)
 
     writer_set_property(writer, XmlWriterProperty_Indent);
 
-    hr = write_start_element(writer, NULL, "a", NULL);
+    hr = IXmlWriter_WriteStartElement(writer, NULL, L"a", NULL);
     ok(hr == S_OK, "Failed to start element, hr %#lx.\n", hr);
 
-    hr = write_start_element(writer, NULL, "b", NULL);
+    hr = IXmlWriter_WriteStartElement(writer, NULL, L"b", NULL);
     ok(hr == S_OK, "Failed to start element, hr %#lx.\n", hr);
 
-    hr = write_string(writer, "text");
+    hr = IXmlWriter_WriteString(writer, L"text");
     ok(hr == S_OK, "Failed to write a string, hr %#lx.\n", hr);
 
     hr = IXmlWriter_Flush(writer);
@@ -2015,10 +1896,10 @@ static void test_WriteString(void)
 
     stream = writer_set_output(writer);
 
-    hr = write_start_element(writer, NULL, "a", NULL);
+    hr = IXmlWriter_WriteStartElement(writer, NULL, L"a", NULL);
     ok(hr == S_OK, "Failed to start element, hr %#lx.\n", hr);
 
-    hr = write_start_element(writer, NULL, "b", NULL);
+    hr = IXmlWriter_WriteStartElement(writer, NULL, L"b", NULL);
     ok(hr == S_OK, "Failed to start element, hr %#lx.\n", hr);
 
     hr = IXmlWriter_WriteEndElement(writer);
@@ -2031,10 +1912,10 @@ static void test_WriteString(void)
         "<a>\r\n"
         "  <b />");
 
-    hr = write_start_element(writer, NULL, "c", NULL);
+    hr = IXmlWriter_WriteStartElement(writer, NULL, L"c", NULL);
     ok(hr == S_OK, "Failed to start element, hr %#lx.\n", hr);
 
-    hr = write_attribute_string(writer, NULL, "attr", NULL, "value");
+    hr = IXmlWriter_WriteAttributeString(writer, NULL, L"attr", NULL, L"value");
     ok(hr == S_OK, "Failed to write attribute string, hr %#lx.\n", hr);
 
     hr = IXmlWriter_Flush(writer);
@@ -2045,7 +1926,7 @@ static void test_WriteString(void)
         "  <b />\r\n"
         "  <c attr=\"value\"");
 
-    hr = write_string(writer, "text");
+    hr = IXmlWriter_WriteString(writer, L"text");
     ok(hr == S_OK, "Failed to write a string, hr %#lx.\n", hr);
 
     hr = IXmlWriter_Flush(writer);
@@ -2067,10 +1948,10 @@ static void test_WriteString(void)
         "  <b />\r\n"
         "  <c attr=\"value\">text</c>");
 
-    hr = write_start_element(writer, NULL, "d", NULL);
+    hr = IXmlWriter_WriteStartElement(writer, NULL, L"d", NULL);
     ok(hr == S_OK, "Failed to start element, hr %#lx.\n", hr);
 
-    hr = write_string(writer, "");
+    hr = IXmlWriter_WriteString(writer, L"");
     ok(hr == S_OK, "Failed to write a string, hr %#lx.\n", hr);
 
     hr = IXmlWriter_WriteEndElement(writer);
@@ -2102,60 +1983,37 @@ static void test_WriteString(void)
     IStream_Release(stream);
 }
 
-static HRESULT write_doctype(IXmlWriter *writer, const char *name, const char *pubid, const char *sysid,
-        const char *subset)
-{
-    WCHAR *nameW, *pubidW, *sysidW, *subsetW;
-    HRESULT hr;
-
-    nameW = strdupAtoW(name);
-    pubidW = strdupAtoW(pubid);
-    sysidW = strdupAtoW(sysid);
-    subsetW = strdupAtoW(subset);
-
-    hr = IXmlWriter_WriteDocType(writer, nameW, pubidW, sysidW, subsetW);
-
-    free(nameW);
-    free(pubidW);
-    free(sysidW);
-    free(subsetW);
-
-    return hr;
-}
-
 static void test_WriteDocType(void)
 {
     static const struct
     {
-        const char *name;
-        const char *pubid;
-        const char *sysid;
-        const char *subset;
+        const WCHAR *name;
+        const WCHAR *pubid;
+        const WCHAR *sysid;
+        const WCHAR *subset;
         const char *output;
     }
     doctype_tests[] =
     {
-        { "a", "", NULL, NULL, "<!DOCTYPE a PUBLIC \"\" \"\">" },
-        { "a", NULL, NULL, NULL, "<!DOCTYPE a>" },
-        { "a", NULL, "", NULL, "<!DOCTYPE a SYSTEM \"\">" },
-        { "a", "", "", NULL, "<!DOCTYPE a PUBLIC \"\" \"\">" },
-        { "a", "pubid", "", NULL, "<!DOCTYPE a PUBLIC \"pubid\" \"\">" },
-        { "a", "pubid", NULL, NULL, "<!DOCTYPE a PUBLIC \"pubid\" \"\">" },
-        { "a", "", "sysid", NULL, "<!DOCTYPE a PUBLIC \"\" \"sysid\">" },
-        { "a", NULL, NULL, "", "<!DOCTYPE a []>" },
-        { "a", NULL, NULL, "subset", "<!DOCTYPE a [subset]>" },
-        { "a", "", NULL, "subset", "<!DOCTYPE a PUBLIC \"\" \"\" [subset]>" },
-        { "a", NULL, "", "subset", "<!DOCTYPE a SYSTEM \"\" [subset]>" },
-        { "a", "", "", "subset", "<!DOCTYPE a PUBLIC \"\" \"\" [subset]>" },
-        { "a", "pubid", NULL, "subset", "<!DOCTYPE a PUBLIC \"pubid\" \"\" [subset]>" },
-        { "a", "pubid", "", "subset", "<!DOCTYPE a PUBLIC \"pubid\" \"\" [subset]>" },
-        { "a", NULL, "sysid", "subset", "<!DOCTYPE a SYSTEM \"sysid\" [subset]>" },
-        { "a", "", "sysid", "subset", "<!DOCTYPE a PUBLIC \"\" \"sysid\" [subset]>" },
-        { "a", "pubid", "sysid", "subset", "<!DOCTYPE a PUBLIC \"pubid\" \"sysid\" [subset]>" },
+        { L"a", L"", NULL, NULL, "<!DOCTYPE a PUBLIC \"\" \"\">" },
+        { L"a", NULL, NULL, NULL, "<!DOCTYPE a>" },
+        { L"a", NULL, L"", NULL, "<!DOCTYPE a SYSTEM \"\">" },
+        { L"a", L"", L"", NULL, "<!DOCTYPE a PUBLIC \"\" \"\">" },
+        { L"a", L"pubid", L"", NULL, "<!DOCTYPE a PUBLIC \"pubid\" \"\">" },
+        { L"a", L"pubid", NULL, NULL, "<!DOCTYPE a PUBLIC \"pubid\" \"\">" },
+        { L"a", L"", L"sysid", NULL, "<!DOCTYPE a PUBLIC \"\" \"sysid\">" },
+        { L"a", NULL, NULL, L"", "<!DOCTYPE a []>" },
+        { L"a", NULL, NULL, L"subset", "<!DOCTYPE a [subset]>" },
+        { L"a", L"", NULL, L"subset", "<!DOCTYPE a PUBLIC \"\" \"\" [subset]>" },
+        { L"a", NULL, L"", L"subset", "<!DOCTYPE a SYSTEM \"\" [subset]>" },
+        { L"a", L"", L"", L"subset", "<!DOCTYPE a PUBLIC \"\" \"\" [subset]>" },
+        { L"a", L"pubid", NULL, L"subset", "<!DOCTYPE a PUBLIC \"pubid\" \"\" [subset]>" },
+        { L"a", L"pubid", L"", L"subset", "<!DOCTYPE a PUBLIC \"pubid\" \"\" [subset]>" },
+        { L"a", NULL, L"sysid", L"subset", "<!DOCTYPE a SYSTEM \"sysid\" [subset]>" },
+        { L"a", L"", L"sysid", L"subset", "<!DOCTYPE a PUBLIC \"\" \"sysid\" [subset]>" },
+        { L"a", L"pubid", L"sysid", L"subset", "<!DOCTYPE a PUBLIC \"pubid\" \"sysid\" [subset]>" },
     };
     static const WCHAR pubidW[] = {'p',0x100,'i','d',0};
-    static const WCHAR nameW[] = {'-','a',0};
-    static const WCHAR emptyW[] = { 0 };
     IXmlWriter *writer;
     IStream *stream;
     unsigned int i;
@@ -2169,15 +2027,15 @@ static void test_WriteDocType(void)
     hr = IXmlWriter_WriteDocType(writer, NULL, NULL, NULL, NULL);
     ok(hr == E_INVALIDARG, "Unexpected hr %#lx.\n", hr);
 
-    hr = IXmlWriter_WriteDocType(writer, emptyW, NULL, NULL, NULL);
+    hr = IXmlWriter_WriteDocType(writer, L"", NULL, NULL, NULL);
     ok(hr == E_INVALIDARG, "Unexpected hr %#lx.\n", hr);
 
     /* Name validation. */
-    hr = IXmlWriter_WriteDocType(writer, nameW, NULL, NULL, NULL);
+    hr = IXmlWriter_WriteDocType(writer, L"-a", NULL, NULL, NULL);
     ok(hr == WC_E_NAMECHARACTER, "Unexpected hr %#lx.\n", hr);
 
     /* Pubid validation. */
-    hr = IXmlWriter_WriteDocType(writer, aW, pubidW, NULL, NULL);
+    hr = IXmlWriter_WriteDocType(writer, L"a", pubidW, NULL, NULL);
     ok(hr == WC_E_PUBLICID, "Unexpected hr %#lx.\n", hr);
 
     IStream_Release(stream);
@@ -2186,7 +2044,7 @@ static void test_WriteDocType(void)
     {
         stream = writer_set_output(writer);
 
-        hr = write_doctype(writer, doctype_tests[i].name, doctype_tests[i].pubid, doctype_tests[i].sysid,
+        hr = IXmlWriter_WriteDocType(writer, doctype_tests[i].name, doctype_tests[i].pubid, doctype_tests[i].sysid,
                 doctype_tests[i].subset);
         ok(hr == S_OK, "%u: failed to write doctype, hr %#lx.\n", i, hr);
 
@@ -2195,7 +2053,7 @@ static void test_WriteDocType(void)
 
         CHECK_OUTPUT(stream, doctype_tests[i].output);
 
-        hr = write_doctype(writer, doctype_tests[i].name, doctype_tests[i].pubid, doctype_tests[i].sysid,
+        hr = IXmlWriter_WriteDocType(writer, doctype_tests[i].name, doctype_tests[i].pubid, doctype_tests[i].sysid,
                 doctype_tests[i].subset);
         ok(hr == WR_E_INVALIDACTION, "Unexpected hr %#lx.\n", hr);
 
-- 
2.35.1




More information about the wine-devel mailing list