kernel32: Add test MultiByteToWideChar for code page is 936. (try 2)

Changhui LIU chliu027028 at gmail.com
Fri Feb 5 01:03:28 CST 2016


Superseded patch 118763 .

try 2:
Add more dwFlags test.

-- 
Regards,
Changhui Liu
-------------- next part --------------
From 2b814d819d8ef2c6d875d11e8e9f29695c598711 Mon Sep 17 00:00:00 2001
From: Changhui Liu <liuchanghui at linuxdeepin.com>
Date: Wed, 3 Feb 2016 15:31:46 +0800
Subject: kernel32: Add test MultiByteToWideChar for code page 936.
To: wine-patches <wine-patches at winehq.org>
Reply-To: wine-devel <wine-devel at winehq.org>

Signed-off-by: Changhui Liu <liuchanghui at linuxdeepin.com>
---
 dlls/kernel32/tests/codepage.c | 72 ++++++++++++++++++++++++++++++++++++++++++
 1 file changed, 72 insertions(+)

diff --git a/dlls/kernel32/tests/codepage.c b/dlls/kernel32/tests/codepage.c
index 6718a3b..b304863 100644
--- a/dlls/kernel32/tests/codepage.c
+++ b/dlls/kernel32/tests/codepage.c
@@ -1136,6 +1136,76 @@ static void test_threadcp(void)
     SetThreadLocale(last);
 }
 
+static void test_cp936_to_widechar(void)
+{
+    int i;
+    int count = 0;
+    int count2 = 0;
+    WCHAR wbuf[2];
+    unsigned char buf[] = {0xbf, 0xb4, 0xc7};
+    DWORD dwFlags[] = {
+        MB_PRECOMPOSED,
+        MB_COMPOSITE,
+
+        MB_PRECOMPOSED|MB_USEGLYPHCHARS,
+        MB_COMPOSITE  |MB_USEGLYPHCHARS,
+
+        MB_PRECOMPOSED|MB_ERR_INVALID_CHARS,
+        MB_COMPOSITE  |MB_ERR_INVALID_CHARS,
+
+        MB_PRECOMPOSED|MB_ERR_INVALID_CHARS|MB_USEGLYPHCHARS,
+        MB_COMPOSITE  |MB_ERR_INVALID_CHARS|MB_USEGLYPHCHARS,
+    };
+
+    BOOL vistaOrLater = FALSE;
+    OSVERSIONINFOA osvi;
+
+    memset(&osvi, 0, sizeof(osvi));
+    osvi.dwOSVersionInfoSize = sizeof(osvi);
+    GetVersionExA(&osvi);
+    vistaOrLater = (osvi.dwMajorVersion > 5);
+
+    for (i = 0; i < sizeof(dwFlags)/sizeof(DWORD); ++i)
+    {
+        wbuf[0] = 0xffff;
+        wbuf[1] = 0xffff;
+        count = MultiByteToWideChar(936, dwFlags[i], (char*)&buf[0], 2, NULL, 0);
+        count2 = MultiByteToWideChar(936, dwFlags[i], (char*)&buf[0], 2, wbuf, count);
+
+        ok(1 == count, "returned %d (expected 1)\n", count);
+        ok(1 == count2, "returned %d (expected 1)\n", count2);
+        ok(0x770b == wbuf[0], "returned %04x (expected 770b)\n", wbuf[0]);
+        ok(0xffff == wbuf[1], "returned %04x (expected ffff)\n", wbuf[1]);
+    }
+
+    for (i = 0; i < sizeof(dwFlags)/sizeof(DWORD); ++i)
+    {
+        wbuf[0] = 0xffff;
+        wbuf[1] = 0xffff;
+        count = MultiByteToWideChar(936, dwFlags[i], (char*)&buf[0], 3, NULL, 0);
+        count2 = MultiByteToWideChar(936, dwFlags[i], (char*)&buf[0], 3, wbuf, count);
+
+        if (dwFlags[i] & MB_ERR_INVALID_CHARS)
+        {
+            ok(0 == count, "returned %d (expected 2)\n", count);
+            ok(0 == count2, "returned %d (expected 2)\n", count2);
+            ok(ERROR_NO_UNICODE_TRANSLATION == GetLastError(), "returned %d (expected %d)\n",
+                GetLastError(), ERROR_NO_UNICODE_TRANSLATION);
+            SetLastError(0);
+        }
+        else
+        {
+            todo_wine ok(2 == count, "returned %d (expected 2)\n", count);
+            todo_wine ok(2 == count2, "returned %d (expected 2)\n", count2);
+            todo_wine ok(0x770b == wbuf[0], "returned %04x (expected 770b)\n", wbuf[0]);
+            if (vistaOrLater)
+                todo_wine ok(0x003f == wbuf[1], "returned %04x (expected 003f)\n", wbuf[1]);
+            else
+                todo_wine ok(0x0000 == wbuf[1], "returned %04x (expected 0000)\n", wbuf[1]);
+        }
+    }
+}
+
 START_TEST(codepage)
 {
     BOOL bUsedDefaultChar;
@@ -1156,4 +1226,6 @@ START_TEST(codepage)
 
     test_undefined_byte_char();
     test_threadcp();
+
+    test_cp936_to_widechar();
 }
-- 
1.9.1



More information about the wine-patches mailing list