1 #include <stic.h>
2
3 #include <curses.h> /* KEY_BACKSPACE */
4
5 #include <stddef.h> /* wchar_t */
6 #include <stdlib.h> /* free() */
7
8 #include <test-utils.h>
9
10 #include "../../src/compat/curses.h"
11 #include "../../src/modes/wk.h"
12 #include "../../src/utils/utils.h"
13 #include "../../src/bracket_notation.h"
14
SETUP_ONCE()15 SETUP_ONCE()
16 {
17 try_enable_utf8_locale();
18 }
19
TEST(c_h_is_bs_at_start_only,IF (utf8_locale))20 TEST(c_h_is_bs_at_start_only, IF(utf8_locale))
21 {
22 char *spec;
23
24 spec = wstr_to_spec(WK_C_h);
25 assert_string_equal("<bs>", spec);
26 free(spec);
27
28 spec = wstr_to_spec(WK_C_w WK_C_h);
29 assert_string_equal("<c-w><c-h>", spec);
30 free(spec);
31 }
32
TEST(backspace_is_bs_always,IF (utf8_locale))33 TEST(backspace_is_bs_always, IF(utf8_locale))
34 {
35 {
36 const wchar_t key_seq[] = { K(KEY_BACKSPACE), L'\0' };
37 char *const spec = wstr_to_spec(key_seq);
38 assert_string_equal("<bs>", spec);
39 free(spec);
40 }
41
42 {
43 const wchar_t key_seq[] = { WC_C_w, K(KEY_BACKSPACE), L'\0' };
44 char *const spec = wstr_to_spec(key_seq);
45 assert_string_equal("<c-w><bs>", spec);
46 free(spec);
47 }
48 }
49
TEST(functional_keys_do_not_clash_with_characters,IF (utf8_locale))50 TEST(functional_keys_do_not_clash_with_characters, IF(utf8_locale))
51 {
52 {
53 const wchar_t key_seq[] = { L'š', L'\0' };
54 char *const spec = wstr_to_spec(key_seq);
55 assert_string_equal("š", spec);
56 free(spec);
57 }
58
59 {
60 const wchar_t key_seq[] = { WC_C_w, L'ć', L'\0' };
61 char *const spec = wstr_to_spec(key_seq);
62 assert_string_equal("<c-w>ć", spec);
63 free(spec);
64 }
65 }
66
TEST(non_ascii_chars_are_handled_correctly,IF (utf8_locale))67 TEST(non_ascii_chars_are_handled_correctly, IF(utf8_locale))
68 {
69 char *const spec = wstr_to_spec(L"П");
70 assert_string_equal("П", spec);
71 free(spec);
72 }
73
TEST(more_non_ascii_chars_are_handled_correctly,IF (utf8_locale))74 TEST(more_non_ascii_chars_are_handled_correctly, IF(utf8_locale))
75 {
76 char *spec;
77
78 spec = wstr_to_spec(L"Д");
79 assert_string_equal("Д", spec);
80 free(spec);
81
82 spec = wstr_to_spec(L"Д");
83 assert_string_equal("Д", spec);
84 free(spec);
85
86 spec = wstr_to_spec(L"Ж");
87 assert_string_equal("Ж", spec);
88 free(spec);
89
90 spec = wstr_to_spec(L"М");
91 assert_string_equal("М", spec);
92 free(spec);
93
94 spec = wstr_to_spec(L"О");
95 assert_string_equal("О", spec);
96 free(spec);
97
98 spec = wstr_to_spec(L"Ф");
99 assert_string_equal("Ф", spec);
100 free(spec);
101
102 spec = wstr_to_spec(L"Ц");
103 assert_string_equal("Ц", spec);
104 free(spec);
105
106 spec = wstr_to_spec(L"Ь");
107 assert_string_equal("Ь", spec);
108 free(spec);
109
110 spec = wstr_to_spec(L"Ю");
111 assert_string_equal("Ю", spec);
112 free(spec);
113
114 spec = wstr_to_spec(L"д");
115 assert_string_equal("д", spec);
116 free(spec);
117
118 spec = wstr_to_spec(L"ж");
119 assert_string_equal("ж", spec);
120 free(spec);
121
122 spec = wstr_to_spec(L"м");
123 assert_string_equal("м", spec);
124 free(spec);
125
126 spec = wstr_to_spec(L"о");
127 assert_string_equal("о", spec);
128 free(spec);
129
130 spec = wstr_to_spec(L"ф");
131 assert_string_equal("ф", spec);
132 free(spec);
133
134 spec = wstr_to_spec(L"ц");
135 assert_string_equal("ц", spec);
136 free(spec);
137
138 spec = wstr_to_spec(L"ь");
139 assert_string_equal("ь", spec);
140 free(spec);
141
142 spec = wstr_to_spec(L"ю");
143 assert_string_equal("ю", spec);
144 free(spec);
145 }
146
147 /* vim: set tabstop=2 softtabstop=2 shiftwidth=2 noexpandtab cinoptions-=(0 : */
148 /* vim: set cinoptions+=t0 : */
149