From: Alex Henrie Subject: [PATCH 2/4] kernel32/tests: Add complex UTF-7 encoding tests. Message-Id: <1413780100-8876-2-git-send-email-alexhenrie24@gmail.com> Date: Sun, 19 Oct 2014 22:41:38 -0600 --- dlls/kernel32/tests/codepage.c | 145 +++++++++++++++++++++++++++++++++++++++++ 1 file changed, 145 insertions(+) diff --git a/dlls/kernel32/tests/codepage.c b/dlls/kernel32/tests/codepage.c index 684ede1..71876e7 100644 --- a/dlls/kernel32/tests/codepage.c +++ b/dlls/kernel32/tests/codepage.c @@ -448,6 +448,134 @@ static void test_utf7_encoding(void) } }; + struct complex_test + { + /* inputs */ + WCHAR src[1024]; + int srclen; + int dstlen; + /* expected outputs */ + char dst[1024]; + int chars_written; + int len; + DWORD error; + }; + + static const struct complex_test complex_tests[] = { + /* tests srclen > strlenW(src) */ + { + {'a',0,'b',0}, + 4, + 1023, + "a\0b", + 4, + 4, + 0xdeadbeef + }, + /* tests srclen < strlenW(src) with directly encodable chars */ + { + {'h','e','l','l','o',0}, + 2, + 1023, + "he", + 2, + 2, + 0xdeadbeef + }, + /* tests srclen < strlenW(src) with non-directly encodable chars */ + { + {0x4F60,0x597D,0x5417,0}, + 2, + 1023, + "+T2BZfQ-", + 8, + 8, + 0xdeadbeef + }, + /* tests a buffer that runs out while not encoding a UTF-7 sequence */ + { + {'h','e','l','l','o',0}, + -1, + 2, + "he", + 2, + 0, + ERROR_INSUFFICIENT_BUFFER + }, + /* tests a buffer that runs out after writing 1 base64 character */ + { + {0x4F60,0x0001,0}, + -1, + 2, + "+T", + 2, + 0, + ERROR_INSUFFICIENT_BUFFER + }, + /* tests a buffer that runs out after writing 2 base64 characters */ + { + {0x4F60,0x0001,0}, + -1, + 3, + "+T2", + 3, + 0, + ERROR_INSUFFICIENT_BUFFER + }, + /* tests a buffer that runs out after writing 3 base64 characters */ + { + {0x4F60,0x0001,0}, + -1, + 4, + "+T2A", + 4, + 0, + ERROR_INSUFFICIENT_BUFFER + }, + /* tests a buffer that runs out just after writing the + sign */ + { + {0x4F60,0}, + -1, + 1, + "+", + 1, + 0, + ERROR_INSUFFICIENT_BUFFER + }, + /* tests a buffer that runs out just before writing the - sign */ + /* the number of bits to encode here is evenly divisible by 6 */ + { + {0x4F60,0x597D,0x5417,0}, + -1, + 9, + "+T2BZfVQX", + 9, + 0, + ERROR_INSUFFICIENT_BUFFER + }, + /* tests a buffer that runs out just before writing the - sign */ + /* the number of bits to encode here is NOT evenly divisible by 6 */ + { + {0x4F60,0}, + -1, + 4, + "+T2", + 3, + 0, + ERROR_INSUFFICIENT_BUFFER + }, + /* tests a buffer that runs out in the middle of escaping a + sign */ + { + {'+',0}, + -1, + 1, + "+", + 1, + 0, + ERROR_INSUFFICIENT_BUFFER + } + }; + int i; for (i = 0; i < sizeof(simple_tests) / sizeof(simple_tests[0]); i++) @@ -542,6 +670,23 @@ static void test_utf7_encoding(void) "simple_test failure i=%i dst=%s len=%i\n", i, wine_dbgstr_w(w_buffer), len); todo_wine ok(GetLastError() == 0xdeadbeef, "error=%x\n", GetLastError()); } + + for (i = 0; i < sizeof(complex_tests) / sizeof(complex_tests[0]); i++) + { + char c_buffer[1024]; + int len; + + c_buffer[sizeof(c_buffer) - 1] = 0; + memset(c_buffer, '#', sizeof(c_buffer) - 1); + SetLastError(0xdeadbeef); + + len = WideCharToMultiByte(CP_UTF7, 0, complex_tests[i].src, complex_tests[i].srclen, c_buffer, complex_tests[i].dstlen, NULL, NULL); + ok(len == complex_tests[i].len && + memcmp(c_buffer, complex_tests[i].dst, complex_tests[i].chars_written) == 0 && + c_buffer[complex_tests[i].chars_written] == '#', + "complex_test failure i=%i len=%i dst=\"%s\"\n", i, len, c_buffer); + ok(GetLastError() == complex_tests[i].error, "error=%x\n", GetLastError()); + } } static void test_undefined_byte_char(void) -- 2.1.2