+#define shift 1
+#define ctrl 2
+
+static const struct tounicode_tests
+{
+ UINT vk;
+ DWORD modifiers;
+ WCHAR chr; /* if vk is 0, lookup vk using this char */
+ int expect_ret;
+ WCHAR expect_buf[4];
+} utests[] =
+{
+ { 'A', 0, 0, 1, {'a',0}},
+ { 'A', ctrl, 0, 1, {1, 0}},
+ { 'A', shift|ctrl, 0, 1, {1, 0}},
+ { VK_TAB, ctrl, 0, 0, {0}},
+ { VK_TAB, shift|ctrl, 0, 0, {0}},
+ { VK_RETURN, ctrl, 0, 1, {'\n', 0}},
+ { VK_RETURN, shift|ctrl, 0, 0, {0}},
+ { '4', ctrl, 0, 0, {0}},
+ { '4', shift|ctrl, 0, 0, {0}},
+ { 0, ctrl, '!', 0, {0}},
+ { 0, ctrl, '\"', 0, {0}},
+ { 0, ctrl, '#', 0, {0}},
+ { 0, ctrl, '$', 0, {0}},
+ { 0, ctrl, '%', 0, {0}},
+ { 0, ctrl, '\'', 0, {0}},
+ { 0, ctrl, '(', 0, {0}},
+ { 0, ctrl, ')', 0, {0}},
+ { 0, ctrl, '*', 0, {0}},
+ { 0, ctrl, '+', 0, {0}},
+ { 0, ctrl, ',', 0, {0}},
+ { 0, ctrl, '-', 0, {0}},
+ { 0, ctrl, '.', 0, {0}},
+ { 0, ctrl, '/', 0, {0}},
+ { 0, ctrl, ':', 0, {0}},
+ { 0, ctrl, ';', 0, {0}},
+ { 0, ctrl, '<', 0, {0}},
+ { 0, ctrl, '=', 0, {0}},
+ { 0, ctrl, '>', 0, {0}},
+ { 0, ctrl, '?', 0, {0}},
+ { 0, ctrl, '@', 1, {0}},
+ { 0, ctrl, '[', 1, {0x1b}},
+ { 0, ctrl, '\\', 1, {0x1c}},
+ { 0, ctrl, ']', 1, {0x1d}},
+ { 0, ctrl, '^', 1, {0x1e}},
+ { 0, ctrl, '_', 1, {0x1f}},
+ { 0, ctrl, '`', 0, {0}},
+};
+