From: Changhui LIU Subject: kernel32: Add test MultiByteToWideChar for code page is 936. (try 2) Message-Id: Date: Fri, 5 Feb 2016 15:03:28 +0800 Superseded patch 118763 . try 2: Add more dwFlags test. -- Regards, Changhui Liu From 2b814d819d8ef2c6d875d11e8e9f29695c598711 Mon Sep 17 00:00:00 2001 From: Changhui Liu Date: Wed, 3 Feb 2016 15:31:46 +0800 Subject: kernel32: Add test MultiByteToWideChar for code page 936. To: wine-patches Reply-To: wine-devel Signed-off-by: Changhui Liu --- 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