]>
Commit | Line | Data |
---|---|---|
53e1b683 | 1 | /* SPDX-License-Identifier: LGPL-2.1+ */ |
aa63b56f | 2 | /*** |
96b2fb93 | 3 | Copyright © 2016 Zbigniew Jędrzejewski-Szmek |
aa63b56f ZJS |
4 | ***/ |
5 | ||
6 | #include "alloc-util.h" | |
7 | #include "keymap-util.h" | |
8 | #include "log.h" | |
9 | #include "string-util.h" | |
10 | ||
11 | static void test_find_language_fallback(void) { | |
12 | _cleanup_free_ char *ans = NULL, *ans2 = NULL; | |
aa63b56f | 13 | |
cabffaf8 | 14 | log_info("/*** %s ***/", __func__); |
aa63b56f | 15 | |
cabffaf8 | 16 | assert_se(find_language_fallback("foobar", &ans) == 0); |
aa63b56f ZJS |
17 | assert_se(ans == NULL); |
18 | ||
19 | assert_se(find_language_fallback("csb", &ans) == 0); | |
20 | assert_se(ans == NULL); | |
21 | ||
22 | assert_se(find_language_fallback("csb_PL", &ans) == 1); | |
23 | assert_se(streq(ans, "csb:pl")); | |
24 | ||
25 | assert_se(find_language_fallback("szl_PL", &ans2) == 1); | |
26 | assert_se(streq(ans2, "szl:pl")); | |
27 | } | |
28 | ||
29 | static void test_find_converted_keymap(void) { | |
30 | _cleanup_free_ char *ans = NULL, *ans2 = NULL; | |
31 | int r; | |
32 | ||
cabffaf8 | 33 | log_info("/*** %s ***/", __func__); |
aa63b56f ZJS |
34 | |
35 | assert_se(find_converted_keymap("pl", "foobar", &ans) == 0); | |
36 | assert_se(ans == NULL); | |
37 | ||
38 | r = find_converted_keymap("pl", NULL, &ans); | |
39 | if (r == 0) { | |
cabffaf8 | 40 | log_info("Skipping rest of %s: keymaps are not installed", __func__); |
aa63b56f ZJS |
41 | return; |
42 | } | |
cabffaf8 | 43 | |
aa63b56f ZJS |
44 | assert_se(r == 1); |
45 | assert_se(streq(ans, "pl")); | |
46 | ||
b774852a EV |
47 | assert_se(find_converted_keymap("pl", "dvorak", &ans2) == 1); |
48 | assert_se(streq(ans2, "pl-dvorak")); | |
aa63b56f ZJS |
49 | } |
50 | ||
51 | static void test_find_legacy_keymap(void) { | |
52 | Context c = {}; | |
53 | _cleanup_free_ char *ans = NULL, *ans2 = NULL; | |
aa63b56f | 54 | |
cabffaf8 | 55 | log_info("/*** %s ***/", __func__); |
aa63b56f ZJS |
56 | |
57 | c.x11_layout = (char*) "foobar"; | |
cabffaf8 | 58 | assert_se(find_legacy_keymap(&c, &ans) == 0); |
aa63b56f ZJS |
59 | assert_se(ans == NULL); |
60 | ||
61 | c.x11_layout = (char*) "pl"; | |
5ad327dd | 62 | assert_se(find_legacy_keymap(&c, &ans) == 1); |
aa63b56f ZJS |
63 | assert_se(streq(ans, "pl2")); |
64 | ||
65 | c.x11_layout = (char*) "pl,ru"; | |
5ad327dd | 66 | assert_se(find_legacy_keymap(&c, &ans2) == 1); |
aa63b56f ZJS |
67 | assert_se(streq(ans, "pl2")); |
68 | } | |
69 | ||
70 | static void test_vconsole_convert_to_x11(void) { | |
71 | _cleanup_(context_free) Context c = {}; | |
72 | ||
cabffaf8 | 73 | log_info("/*** %s ***/", __func__); |
aa63b56f ZJS |
74 | |
75 | log_info("/* test emptying first (:) */"); | |
76 | assert_se(free_and_strdup(&c.x11_layout, "foo") >= 0); | |
77 | assert_se(free_and_strdup(&c.x11_variant, "bar") >= 0); | |
78 | assert_se(vconsole_convert_to_x11(&c) == 1); | |
79 | assert_se(c.x11_layout == NULL); | |
80 | assert_se(c.x11_variant == NULL); | |
81 | ||
82 | log_info("/* test emptying second (:) */"); | |
83 | ||
84 | assert_se(vconsole_convert_to_x11(&c) == 0); | |
85 | assert_se(c.x11_layout == NULL); | |
86 | assert_se(c.x11_variant == NULL); | |
87 | ||
88 | log_info("/* test without variant, new mapping (es:) */"); | |
89 | assert_se(free_and_strdup(&c.vc_keymap, "es") >= 0); | |
90 | ||
91 | assert_se(vconsole_convert_to_x11(&c) == 1); | |
92 | assert_se(streq(c.x11_layout, "es")); | |
93 | assert_se(c.x11_variant == NULL); | |
94 | ||
95 | log_info("/* test with known variant, new mapping (es:dvorak) */"); | |
96 | assert_se(free_and_strdup(&c.vc_keymap, "es-dvorak") >= 0); | |
97 | ||
98 | assert_se(vconsole_convert_to_x11(&c) == 0); // FIXME | |
99 | assert_se(streq(c.x11_layout, "es")); | |
100 | assert_se(c.x11_variant == NULL); // FIXME: "dvorak" | |
101 | ||
102 | log_info("/* test with old mapping (fr:latin9) */"); | |
103 | assert_se(free_and_strdup(&c.vc_keymap, "fr-latin9") >= 0); | |
104 | ||
105 | assert_se(vconsole_convert_to_x11(&c) == 1); | |
106 | assert_se(streq(c.x11_layout, "fr")); | |
107 | assert_se(streq(c.x11_variant, "latin9")); | |
108 | ||
109 | log_info("/* test with a compound mapping (ru,us) */"); | |
110 | assert_se(free_and_strdup(&c.vc_keymap, "ru") >= 0); | |
111 | ||
112 | assert_se(vconsole_convert_to_x11(&c) == 1); | |
113 | assert_se(streq(c.x11_layout, "ru,us")); | |
114 | assert_se(c.x11_variant == NULL); | |
115 | ||
116 | log_info("/* test with a simple mapping (us) */"); | |
117 | assert_se(free_and_strdup(&c.vc_keymap, "us") >= 0); | |
118 | ||
119 | assert_se(vconsole_convert_to_x11(&c) == 1); | |
120 | assert_se(streq(c.x11_layout, "us")); | |
121 | assert_se(c.x11_variant == NULL); | |
122 | } | |
123 | ||
124 | static void test_x11_convert_to_vconsole(void) { | |
125 | _cleanup_(context_free) Context c = {}; | |
cabffaf8 | 126 | int r; |
aa63b56f | 127 | |
cabffaf8 | 128 | log_info("/*** %s ***/", __func__); |
aa63b56f ZJS |
129 | |
130 | log_info("/* test emptying first (:) */"); | |
131 | assert_se(free_and_strdup(&c.vc_keymap, "foobar") >= 0); | |
132 | assert_se(x11_convert_to_vconsole(&c) == 1); | |
133 | assert_se(c.vc_keymap == NULL); | |
134 | ||
135 | log_info("/* test emptying second (:) */"); | |
136 | ||
137 | assert_se(x11_convert_to_vconsole(&c) == 0); | |
138 | assert_se(c.vc_keymap == NULL); | |
139 | ||
140 | log_info("/* test without variant, new mapping (es:) */"); | |
141 | assert_se(free_and_strdup(&c.x11_layout, "es") >= 0); | |
142 | ||
143 | assert_se(x11_convert_to_vconsole(&c) == 1); | |
144 | assert_se(streq(c.vc_keymap, "es")); | |
145 | ||
146 | log_info("/* test with unknown variant, new mapping (es:foobar) */"); | |
147 | assert_se(free_and_strdup(&c.x11_variant, "foobar") >= 0); | |
148 | ||
149 | assert_se(x11_convert_to_vconsole(&c) == 0); | |
150 | assert_se(streq(c.vc_keymap, "es")); | |
151 | ||
152 | log_info("/* test with known variant, new mapping (es:dvorak) */"); | |
153 | assert_se(free_and_strdup(&c.x11_variant, "dvorak") >= 0); | |
154 | ||
cabffaf8 ZJS |
155 | r = x11_convert_to_vconsole(&c); |
156 | if (r == 0) { | |
157 | log_info("Skipping rest of %s: keymaps are not installed", __func__); | |
158 | return; | |
159 | } | |
160 | ||
161 | assert_se(r == 1); | |
aa63b56f ZJS |
162 | assert_se(streq(c.vc_keymap, "es-dvorak")); |
163 | ||
164 | log_info("/* test with old mapping (fr:latin9) */"); | |
165 | assert_se(free_and_strdup(&c.x11_layout, "fr") >= 0); | |
166 | assert_se(free_and_strdup(&c.x11_variant, "latin9") >= 0); | |
167 | ||
168 | assert_se(x11_convert_to_vconsole(&c) == 1); | |
169 | assert_se(streq(c.vc_keymap, "fr-latin9")); | |
170 | ||
171 | log_info("/* test with a compound mapping (us,ru:) */"); | |
172 | assert_se(free_and_strdup(&c.x11_layout, "us,ru") >= 0); | |
173 | assert_se(free_and_strdup(&c.x11_variant, NULL) >= 0); | |
174 | ||
175 | assert_se(x11_convert_to_vconsole(&c) == 1); | |
176 | assert_se(streq(c.vc_keymap, "us")); | |
177 | ||
178 | log_info("/* test with a compound mapping (ru,us:) */"); | |
179 | assert_se(free_and_strdup(&c.x11_layout, "ru,us") >= 0); | |
180 | assert_se(free_and_strdup(&c.x11_variant, NULL) >= 0); | |
181 | ||
182 | assert_se(x11_convert_to_vconsole(&c) == 1); | |
183 | assert_se(streq(c.vc_keymap, "ru")); | |
03a44125 ZJS |
184 | |
185 | /* https://bugzilla.redhat.com/show_bug.cgi?id=1333998 */ | |
186 | log_info("/* test with a simple new mapping (ru:) */"); | |
187 | assert_se(free_and_strdup(&c.x11_layout, "ru") >= 0); | |
188 | assert_se(free_and_strdup(&c.x11_variant, NULL) >= 0); | |
189 | ||
190 | assert_se(x11_convert_to_vconsole(&c) == 0); | |
191 | assert_se(streq(c.vc_keymap, "ru")); | |
aa63b56f ZJS |
192 | } |
193 | ||
194 | int main(int argc, char **argv) { | |
195 | log_set_max_level(LOG_DEBUG); | |
196 | log_parse_environment(); | |
197 | ||
198 | test_find_language_fallback(); | |
199 | test_find_converted_keymap(); | |
200 | test_find_legacy_keymap(); | |
201 | ||
202 | test_vconsole_convert_to_x11(); | |
203 | test_x11_convert_to_vconsole(); | |
204 | ||
205 | return 0; | |
206 | } |