[NTDLL_APITEST] Add simple tests for RtlUnicodeStringToAnsiString() that were used...
authorPierre Schweitzer <pierre@reactos.org>
Mon, 16 Oct 2017 20:04:22 +0000 (22:04 +0200)
committerPierre Schweitzer <pierre@reactos.org>
Mon, 16 Oct 2017 20:04:22 +0000 (22:04 +0200)
modules/rostests/apitests/ntdll/CMakeLists.txt
modules/rostests/apitests/ntdll/RtlUnicodeStringToAnsiString.c [new file with mode: 0644]
modules/rostests/apitests/ntdll/testlist.c

index 7a56d74..23da6c5 100644 (file)
@@ -50,6 +50,7 @@ list(APPEND SOURCE
     RtlNtPathNameToDosPathName.c
     RtlpEnsureBufferSize.c
     RtlReAllocateHeap.c
+    RtlUnicodeStringToAnsiString.c
     RtlUpcaseUnicodeStringToCountedOemString.c
     StackOverflow.c
     SystemInfo.c
diff --git a/modules/rostests/apitests/ntdll/RtlUnicodeStringToAnsiString.c b/modules/rostests/apitests/ntdll/RtlUnicodeStringToAnsiString.c
new file mode 100644 (file)
index 0000000..a517299
--- /dev/null
@@ -0,0 +1,52 @@
+/*
+ * PROJECT:         ReactOS API tests
+ * LICENSE:         LGPLv2.1+ - See COPYING.LIB in the top level directory
+ * PURPOSE:         Test for RtlUnicodeStringToAnsiString
+ * PROGRAMMERS:     Pierre Schweitzer <pierre@reactos.org>
+ */
+
+#include <apitest.h>
+#include <ndk/rtlfuncs.h>
+
+START_TEST(RtlUnicodeStringToAnsiString)
+{
+    WCHAR BufferU[10];
+    CHAR BufferA[10];
+    UNICODE_STRING StringU;
+    ANSI_STRING StringA;
+    NTSTATUS Status;
+    DWORD i;
+
+    memset(BufferU, 0xAA, sizeof(BufferU));
+    memset(BufferA, 0xAA, sizeof(BufferA));
+
+    BufferU[0] = L'A';
+    BufferU[1] = UNICODE_NULL;
+
+    StringU.Buffer = BufferU;
+    StringU.MaximumLength = 10 * sizeof(WCHAR);
+
+    RtlInitUnicodeString(&StringU, BufferU);
+    ok(StringU.Length == 1 * sizeof(WCHAR), "Invalid size: %d\n", StringU.Length);
+    ok(StringU.MaximumLength == 2 * sizeof(WCHAR), "Invalid size: %d\n", StringU.MaximumLength);
+    ok(StringU.Buffer == BufferU, "Invalid buffer: %p\n", StringU.Buffer);
+
+    StringA.Buffer = BufferA;
+    StringA.MaximumLength = 10 * sizeof(CHAR);
+
+    Status = RtlUnicodeStringToAnsiString(&StringA, &StringU, FALSE);
+    ok(NT_SUCCESS(Status), "RtlUnicodeStringToAnsiString failed: %lx\n", Status);
+    ok(StringA.Length == 1 * sizeof(CHAR), "Invalid size: %d\n", StringA.Length);
+    ok(StringA.MaximumLength == 10 * sizeof(CHAR), "Invalid size: %d\n", StringA.MaximumLength);
+    ok(StringA.Buffer == BufferA, "Invalid buffer: %p\n", StringA.Buffer);
+
+    for (i = 0; i < 10; ++i)
+    {
+        if (BufferA[i] == 0)
+        {
+            break;
+        }
+    }
+
+    ok(i != 10, "String was not null terminated!\n");
+}
index 8b4f8f6..f17f872 100644 (file)
@@ -54,6 +54,7 @@ extern void func_RtlMemoryStream(void);
 extern void func_RtlNtPathNameToDosPathName(void);
 extern void func_RtlpEnsureBufferSize(void);
 extern void func_RtlReAllocateHeap(void);
+extern void func_RtlUnicodeStringToAnsiString(void);
 extern void func_RtlUpcaseUnicodeStringToCountedOemString(void);
 extern void func_StackOverflow(void);
 extern void func_TimerResolution(void);
@@ -111,6 +112,7 @@ const struct test winetest_testlist[] =
     { "RtlNtPathNameToDosPathName",     func_RtlNtPathNameToDosPathName },
     { "RtlpEnsureBufferSize",           func_RtlpEnsureBufferSize },
     { "RtlReAllocateHeap",              func_RtlReAllocateHeap },
+    { "RtlUnicodeStringToAnsiString",   func_RtlUnicodeStringToAnsiString },
     { "RtlUpcaseUnicodeStringToCountedOemString", func_RtlUpcaseUnicodeStringToCountedOemString },
     { "StackOverflow",                  func_StackOverflow },
     { "TimerResolution",                func_TimerResolution },