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