]> git.ipfire.org Git - thirdparty/systemd.git/blame - src/locale/test-keymap-util.c
tree-wide: beautify remaining copyright statements
[thirdparty/systemd.git] / src / locale / test-keymap-util.c
CommitLineData
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
11static 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
29static 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
51static 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
70static 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
124static 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
194int 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}