From 413a1eace862a03d48dcfe047c91bf5bbcaf6786 Mon Sep 17 00:00:00 2001 From: Timo Kreuzer Date: Thu, 21 May 2026 20:48:51 +0300 Subject: [PATCH] [KERNEL32_APITEST] Add tests for MultiByteToWideChar Test for UTF-8 -> UTF-16 surrogate pair. --- .../rostests/apitests/kernel32/MultiByteToWideChar.c | 12 ++++++++++++ 1 file changed, 12 insertions(+) diff --git a/modules/rostests/apitests/kernel32/MultiByteToWideChar.c b/modules/rostests/apitests/kernel32/MultiByteToWideChar.c index 6bc59210328..5a659dadccd 100644 --- a/modules/rostests/apitests/kernel32/MultiByteToWideChar.c +++ b/modules/rostests/apitests/kernel32/MultiByteToWideChar.c @@ -223,6 +223,18 @@ static const ENTRY Entries[] = { __LINE__, {0x600,0xA00}, 8, 0xBEAF, CP_UTF8, 0, "\xFF\xA3\xA3\xA3\xA3\xA3\xA3\xA3", 8, 8, {0xFFFD, 0xFFFD, 0xFFFD, 0xFFFD, 0xFFFD, 0xFFFD, 0xFFFD, 0xFFFD, 0x7F7F}, 9 }, { __LINE__, {0x000,0x502}, 1, 0xBEAF, CP_UTF8, 0, "\xFF\xA3\xA3\xA3\xA3\xA3\xA3\xA3", 9, 8, {0, 0x7F7F, 0x7F7F, 0x7F7F, 0x7F7F, 0x7F7F, 0x7F7F, 0x7F7F, 0x7F7F}, 9 }, { __LINE__, {0x600,0xA00}, 0, ERROR_INSUFFICIENT_BUFFER, CP_UTF8, 0, "\xFF\xA3\xA3\xA3\xA3\xA3\xA3\xA3", 9, 8, {0xFFFD, 0xFFFD, 0xFFFD, 0xFFFD, 0xFFFD, 0xFFFD, 0xFFFD, 0xFFFD, 0x7F7F}, 9 }, + + /* From wine test for UrlUnescapeW: U+1F377 🍷 (WINE GLASS) -> UTF-16 surrogate pair */ + { __LINE__, {0x000,0xA00}, 2, 0xBEAF, CP_UTF8, MB_ERR_INVALID_CHARS, "\xF0\x9F\x8D\xB7", 4, 0 }, + { __LINE__, {0x000,0xA00}, 2, 0xBEAF, CP_UTF8, MB_ERR_INVALID_CHARS, "\xF0\x9F\x8D\xB7", 4, 2, {0xD83C, 0xDF77 }, 2 }, + { __LINE__, {0x000,0x502}, 0, ERROR_INSUFFICIENT_BUFFER, CP_UTF8, MB_ERR_INVALID_CHARS, "\xF0\x9F\x8D\xB7", 4, 1, {0x7F7F}, 1 }, + { __LINE__, {0x600,0xA00}, 0, ERROR_INSUFFICIENT_BUFFER, CP_UTF8, MB_ERR_INVALID_CHARS, "\xF0\x9F\x8D\xB7", 4, 1, {0xD83C}, 1 }, + + /* For good measure without flags: U+1F37A 🍺 (BEER MUG) -> UTF-16 surrogate pair */ + { __LINE__, {0x000,0xA00}, 2, 0xBEAF, CP_UTF8, 0, "\xF0\x9F\x8D\xBA", 4, 0 }, + { __LINE__, {0x000,0xA00}, 2, 0xBEAF, CP_UTF8, 0, "\xF0\x9F\x8D\xBA", 4, 2, {0xD83C, 0xDF7A }, 2 }, + { __LINE__, {0x000,0x502}, 0, ERROR_INSUFFICIENT_BUFFER, CP_UTF8, 0, "\xF0\x9F\x8D\xBA", 4, 1, {0x7F7F}, 1 }, + { __LINE__, {0x600,0xA00}, 0, ERROR_INSUFFICIENT_BUFFER, CP_UTF8, 0, "\xF0\x9F\x8D\xBA", 4, 1, {0xD83C}, 1 }, }; static void TestEntry(const ENTRY *pEntry)