[PATCH 3/4] kernel32/tests: Add UTF-7 non-encoded surrounding characters tests.
Alex Henrie
alexhenrie24 at gmail.com
Sun Oct 19 23:41:39 CDT 2014
---
dlls/kernel32/tests/codepage.c | 78 ++++++++++++++++++++++++++++++++++++++++++
1 file changed, 78 insertions(+)
diff --git a/dlls/kernel32/tests/codepage.c b/dlls/kernel32/tests/codepage.c
index 71876e7..bb67019 100644
--- a/dlls/kernel32/tests/codepage.c
+++ b/dlls/kernel32/tests/codepage.c
@@ -576,6 +576,43 @@ static void test_utf7_encoding(void)
}
};
+ static const BOOL directly_encodable_table[] = {
+ /* \0 \x01 \x02 \x03 \x04 \x05 \x06 \a */
+ TRUE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE,
+ /* \b \t \n \v \f \r \x0E \x0F */
+ FALSE, TRUE, TRUE, FALSE, FALSE, TRUE, FALSE, FALSE,
+ /* \x10 \x11 \x12 \x13 \x14 \x15 \x16 \x17 */
+ FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE,
+ /* \x18 \x19 \x1A \e \x1C \x1D \x1E \x1F */
+ FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE,
+ /* ! " # $ % & ' */
+ TRUE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, TRUE,
+ /* ( ) * + , - . / */
+ TRUE, TRUE, FALSE, TRUE, TRUE, TRUE, TRUE, TRUE,
+ /* 0 1 2 3 4 5 6 7 */
+ TRUE, TRUE, TRUE, TRUE, TRUE, TRUE, TRUE, TRUE,
+ /* 8 9 : ; < = > ? */
+ TRUE, TRUE, TRUE, FALSE, FALSE, FALSE, FALSE, TRUE,
+ /* @ A B C D E F G */
+ FALSE, TRUE, TRUE, TRUE, TRUE, TRUE, TRUE, TRUE,
+ /* H I J K L M N O */
+ TRUE, TRUE, TRUE, TRUE, TRUE, TRUE, TRUE, TRUE,
+ /* P Q R S T U V W */
+ TRUE, TRUE, TRUE, TRUE, TRUE, TRUE, TRUE, TRUE,
+ /* X Y Z [ \ ] ^ _ */
+ TRUE, TRUE, TRUE, FALSE, FALSE, FALSE, FALSE, FALSE,
+ /* ` a b c d e f g */
+ FALSE, TRUE, TRUE, TRUE, TRUE, TRUE, TRUE, TRUE,
+ /* h i j k l m n o */
+ TRUE, TRUE, TRUE, TRUE, TRUE, TRUE, TRUE, TRUE,
+ /* p q r s t u v w */
+ TRUE, TRUE, TRUE, TRUE, TRUE, TRUE, TRUE, TRUE,
+ /* x y z */
+ TRUE, TRUE, TRUE
+ };
+
+ static const char base64_encoding_table[] = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/";
+
int i;
for (i = 0; i < sizeof(simple_tests) / sizeof(simple_tests[0]); i++)
@@ -687,6 +724,47 @@ static void test_utf7_encoding(void)
"complex_test failure i=%i len=%i dst=\"%s\"\n", i, len, c_buffer);
ok(GetLastError() == complex_tests[i].error, "error=%x\n", GetLastError());
}
+
+ /* test which characters are encoded if surrounded by non-encoded characters */
+ for (i = 0; i <= 0xFFFF; i++)
+ {
+ WCHAR w_buffer[] = {' ',i,' ',0};
+ char c_buffer[1024];
+ int len;
+
+ memset(c_buffer, '#', sizeof(c_buffer) - 1);
+ c_buffer[sizeof(c_buffer) - 1] = 0;
+ SetLastError(0xdeadbeef);
+
+ len = WideCharToMultiByte(CP_UTF7, 0, w_buffer, sizeof(w_buffer) / sizeof(WCHAR), c_buffer, 1023, NULL, NULL);
+
+ if (i == '+')
+ {
+ /* escapes */
+ ok(len == 5 &&
+ memcmp(c_buffer, " +- \0#", 6) == 0,
+ "non-encoded surrounding characters failure i='+' len=%i dst=\"%s\"\n", len, c_buffer);
+ }
+ else if (i <= 'z' && directly_encodable_table[i])
+ {
+ /* encodes directly */
+ ok(len == 4 &&
+ c_buffer[0] == ' ' && c_buffer[1] == i && memcmp(c_buffer + 2, " \0#", 3) == 0,
+ "non-encoded surrounding characters failure i=0x%04x len=%i dst=\"%s\"\n", i, len, c_buffer);
+ }
+ else
+ {
+ /* base64-encodes */
+ ok(len == 8 &&
+ memcmp(c_buffer, " +", 2) == 0 &&
+ c_buffer[2] == base64_encoding_table[(i & 0xFC00) >> 10] &&
+ c_buffer[3] == base64_encoding_table[(i & 0x03F0) >> 4] &&
+ c_buffer[4] == base64_encoding_table[(i & 0x000F) << 2] &&
+ memcmp(c_buffer + 5, "- \0#", 4) == 0,
+ "non-encoded surrounding characters failure i=0x%04x len=%i dst=\"%s\" %c\n", i, len, c_buffer, base64_encoding_table[i & 0xFC00 >> 10]);
+ }
+ ok(GetLastError() == 0xdeadbeef, "error=%x\n", GetLastError());
+ }
}
static void test_undefined_byte_char(void)
--
2.1.2
More information about the wine-patches
mailing list