]>
git.ipfire.org Git - thirdparty/systemd.git/blob - src/locale/test-localed-util.c
1 /* SPDX-License-Identifier: LGPL-2.1-or-later */
3 #include "alloc-util.h"
4 #include "localed-util.h"
6 #include "string-util.h"
9 TEST(find_language_fallback
) {
10 _cleanup_free_
char *ans
= NULL
, *ans2
= NULL
;
12 assert_se(find_language_fallback("foobar", &ans
) == 0);
13 assert_se(ans
== NULL
);
15 assert_se(find_language_fallback("csb", &ans
) == 0);
16 assert_se(ans
== NULL
);
18 assert_se(find_language_fallback("csb_PL", &ans
) == 1);
19 assert_se(streq(ans
, "csb:pl"));
21 assert_se(find_language_fallback("szl_PL", &ans2
) == 1);
22 assert_se(streq(ans2
, "szl:pl"));
25 TEST(find_converted_keymap
) {
26 _cleanup_free_
char *ans
= NULL
, *ans2
= NULL
;
29 assert_se(find_converted_keymap(
31 .layout
= (char*) "pl",
32 .variant
= (char*) "foobar",
34 assert_se(ans
== NULL
);
36 r
= find_converted_keymap(
38 .layout
= (char*) "pl",
41 log_info("Skipping rest of %s: keymaps are not installed", __func__
);
46 assert_se(streq(ans
, "pl"));
48 assert_se(find_converted_keymap(
50 .layout
= (char*) "pl",
51 .variant
= (char*) "dvorak",
53 assert_se(streq(ans2
, "pl-dvorak"));
56 TEST(find_legacy_keymap
) {
58 _cleanup_free_
char *ans
= NULL
, *ans2
= NULL
;
60 xc
.layout
= (char*) "foobar";
61 assert_se(find_legacy_keymap(&xc
, &ans
) == 0);
62 assert_se(ans
== NULL
);
64 xc
.layout
= (char*) "pl";
65 assert_se(find_legacy_keymap(&xc
, &ans
) == 1);
66 assert_se(streq(ans
, "pl2"));
68 xc
.layout
= (char*) "pl,ru";
69 assert_se(find_legacy_keymap(&xc
, &ans2
) == 1);
70 assert_se(streq(ans
, "pl2"));
73 TEST(vconsole_convert_to_x11
) {
74 _cleanup_(context_clear
) Context c
= {};
75 X11Context
*xc
= &c
.x11_from_xorg
;
77 log_info("/* test emptying first (:) */");
78 assert_se(free_and_strdup(&xc
->layout
, "foo") >= 0);
79 assert_se(free_and_strdup(&xc
->variant
, "bar") >= 0);
80 assert_se(vconsole_convert_to_x11(&c
) == 1);
81 assert_se(xc
->layout
== NULL
);
82 assert_se(xc
->variant
== NULL
);
84 log_info("/* test emptying second (:) */");
86 assert_se(vconsole_convert_to_x11(&c
) == 0);
87 assert_se(xc
->layout
== NULL
);
88 assert_se(xc
->variant
== NULL
);
90 log_info("/* test without variant, new mapping (es:) */");
91 assert_se(free_and_strdup(&c
.vc_keymap
, "es") >= 0);
93 assert_se(vconsole_convert_to_x11(&c
) == 1);
94 assert_se(streq(xc
->layout
, "es"));
95 assert_se(xc
->variant
== NULL
);
97 log_info("/* test with known variant, new mapping (es:dvorak) */");
98 assert_se(free_and_strdup(&c
.vc_keymap
, "es-dvorak") >= 0);
100 assert_se(vconsole_convert_to_x11(&c
) == 1);
101 assert_se(streq(xc
->layout
, "es"));
102 assert_se(streq(xc
->variant
, "dvorak"));
104 log_info("/* test with old mapping (fr:latin9) */");
105 assert_se(free_and_strdup(&c
.vc_keymap
, "fr-latin9") >= 0);
107 assert_se(vconsole_convert_to_x11(&c
) == 1);
108 assert_se(streq(xc
->layout
, "fr"));
109 assert_se(streq(xc
->variant
, "latin9"));
111 log_info("/* test with a compound mapping (ru,us) */");
112 assert_se(free_and_strdup(&c
.vc_keymap
, "ru") >= 0);
114 assert_se(vconsole_convert_to_x11(&c
) == 1);
115 assert_se(streq(xc
->layout
, "ru,us"));
116 assert_se(xc
->variant
== NULL
);
118 log_info("/* test with a simple mapping (us) */");
119 assert_se(free_and_strdup(&c
.vc_keymap
, "us") >= 0);
121 assert_se(vconsole_convert_to_x11(&c
) == 1);
122 assert_se(streq(xc
->layout
, "us"));
123 assert_se(xc
->variant
== NULL
);
126 TEST(x11_convert_to_vconsole
) {
127 _cleanup_(context_clear
) Context c
= {};
128 X11Context
*xc
= &c
.x11_from_xorg
;
131 log_info("/* test emptying first (:) */");
132 assert_se(free_and_strdup(&c
.vc_keymap
, "foobar") >= 0);
133 assert_se(x11_convert_to_vconsole(&c
) == 1);
134 assert_se(c
.vc_keymap
== NULL
);
136 log_info("/* test emptying second (:) */");
138 assert_se(x11_convert_to_vconsole(&c
) == 0);
139 assert_se(c
.vc_keymap
== NULL
);
141 log_info("/* test without variant, new mapping (es:) */");
142 assert_se(free_and_strdup(&xc
->layout
, "es") >= 0);
144 assert_se(x11_convert_to_vconsole(&c
) == 1);
145 assert_se(streq(c
.vc_keymap
, "es"));
147 log_info("/* test with unknown variant, new mapping (es:foobar) */");
148 assert_se(free_and_strdup(&xc
->variant
, "foobar") >= 0);
150 assert_se(x11_convert_to_vconsole(&c
) == 0);
151 assert_se(streq(c
.vc_keymap
, "es"));
153 log_info("/* test with known variant, new mapping (es:dvorak) */");
154 assert_se(free_and_strdup(&xc
->variant
, "dvorak") >= 0);
156 r
= x11_convert_to_vconsole(&c
);
158 log_info("Skipping rest of %s: keymaps are not installed", __func__
);
163 assert_se(streq(c
.vc_keymap
, "es-dvorak"));
165 log_info("/* test with old mapping (fr:latin9) */");
166 assert_se(free_and_strdup(&xc
->layout
, "fr") >= 0);
167 assert_se(free_and_strdup(&xc
->variant
, "latin9") >= 0);
169 assert_se(x11_convert_to_vconsole(&c
) == 1);
170 assert_se(streq(c
.vc_keymap
, "fr-latin9"));
172 log_info("/* test with a compound mapping (us,ru:) */");
173 assert_se(free_and_strdup(&xc
->layout
, "us,ru") >= 0);
174 assert_se(free_and_strdup(&xc
->variant
, NULL
) >= 0);
176 assert_se(x11_convert_to_vconsole(&c
) == 1);
177 assert_se(streq(c
.vc_keymap
, "us"));
179 log_info("/* test with a compound mapping (ru,us:) */");
180 assert_se(free_and_strdup(&xc
->layout
, "ru,us") >= 0);
181 assert_se(free_and_strdup(&xc
->variant
, NULL
) >= 0);
183 assert_se(x11_convert_to_vconsole(&c
) == 1);
184 assert_se(streq(c
.vc_keymap
, "ru"));
186 /* https://bugzilla.redhat.com/show_bug.cgi?id=1333998 */
187 log_info("/* test with a simple new mapping (ru:) */");
188 assert_se(free_and_strdup(&xc
->layout
, "ru") >= 0);
189 assert_se(free_and_strdup(&xc
->variant
, NULL
) >= 0);
191 assert_se(x11_convert_to_vconsole(&c
) == 0);
192 assert_se(streq(c
.vc_keymap
, "ru"));
195 static int intro(void) {
196 _cleanup_free_
char *map
= NULL
;
198 assert_se(get_testdata_dir("test-keymap-util/kbd-model-map", &map
) >= 0);
199 assert_se(setenv("SYSTEMD_KBD_MODEL_MAP", map
, 1) == 0);
204 DEFINE_TEST_MAIN_WITH_INTRO(LOG_DEBUG
, intro
);