[PATCH 2/4] kernel32/tests: Add complex UTF-7 encoding tests.
Alex Henrie
alexhenrie24 at gmail.com
Sun Oct 19 23:41:38 CDT 2014
---
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
More information about the wine-patches
mailing list