]> git.ipfire.org Git - thirdparty/systemd.git/commitdiff
test-gunicode: add new test to show that unichar_iswide() is borked
authorZbigniew Jędrzejewski-Szmek <zbyszek@in.waw.pl>
Fri, 23 Jun 2023 23:24:11 +0000 (17:24 -0600)
committerZbigniew Jędrzejewski-Szmek <zbyszek@in.waw.pl>
Fri, 23 Jun 2023 23:57:30 +0000 (17:57 -0600)
I discovered this while looking at the tests with wide characters in the next
patch. It's something to fix, but not directly relevant to the issue of
skipping ANSI in ellipsization. We will generate output that is wider than
expected in some cases, but wide characters are used very rarely so this isn't
such a big problem.

src/test/meson.build
src/test/test-gunicode.c [new file with mode: 0644]

index b57ba235394e2a9055f5bdbcf9158f3c23561f01..ab0f091756a8f108a45447578d4bf92af6a1d297 100644 (file)
@@ -93,6 +93,7 @@ simple_tests += files(
         'test-fstab-util.c',
         'test-glob-util.c',
         'test-gpt.c',
+        'test-gunicode.c',
         'test-hash-funcs.c',
         'test-hexdecoct.c',
         'test-hmac.c',
diff --git a/src/test/test-gunicode.c b/src/test/test-gunicode.c
new file mode 100644 (file)
index 0000000..1836cdc
--- /dev/null
@@ -0,0 +1,27 @@
+/* SPDX-License-Identifier: LGPL-2.1-or-later */
+
+#include "gunicode.h"
+#include "tests.h"
+#include "utf8.h"
+
+TEST(unichar_iswide) {
+        char32_t c;
+        int r;
+
+        /* FIXME: the cats are wide, but we get this wrong */
+        for (const char *narrow = "abX_…ąęµ!" "😼😿🙀😸😻"; *narrow; narrow += r) {
+                r = utf8_encoded_to_unichar(narrow, &c);
+                bool w = unichar_iswide(c);
+                assert_se(r > 0);
+                assert_se(!w);
+        }
+
+        for (const char *wide = "🐱/¥"; *wide; wide += r) {
+                r = utf8_encoded_to_unichar(wide, &c);
+                bool w = unichar_iswide(c);
+                assert_se(r > 0);
+                assert_se(w);
+        }
+}
+
+DEFINE_TEST_MAIN(LOG_INFO);