summaryrefslogtreecommitdiff
path: root/src/test/test-utf8.c
diff options
context:
space:
mode:
authorZbigniew Jędrzejewski-Szmek <zbyszek@in.waw.pl>2019-05-15 10:57:07 +0200
committerZbigniew Jędrzejewski-Szmek <zbyszek@in.waw.pl>2019-05-22 09:50:19 +0200
commitda88f542d9315a341a500897e5e1bf8809d1aeae (patch)
tree3c586903ded13fface6cbe5d8f1be04e6c1c8908 /src/test/test-utf8.c
parent31c294dc4194f60fb5f8ae517e7f5d3caed69566 (diff)
downloadsystemd-da88f542d9315a341a500897e5e1bf8809d1aeae.tar.gz
util-lib: add truncation based on printable width to utf8_escape_non_printable()
Diffstat (limited to 'src/test/test-utf8.c')
-rw-r--r--src/test/test-utf8.c32
1 files changed, 32 insertions, 0 deletions
diff --git a/src/test/test-utf8.c b/src/test/test-utf8.c
index 343cbf4ced..b5c4e3dc34 100644
--- a/src/test/test-utf8.c
+++ b/src/test/test-utf8.c
@@ -111,6 +111,37 @@ static void test_utf8_escape_non_printable(void) {
assert_se(utf8_is_valid(p6));
}
+static void test_utf8_escape_non_printable_full(void) {
+ log_info("/* %s */", __func__);
+
+ for (size_t i = 0; i < 20; i++) {
+ _cleanup_free_ char *p;
+
+ p = utf8_escape_non_printable_full("goo goo goo", i);
+ puts(p);
+ assert_se(utf8_is_valid(p));
+ assert_se(utf8_console_width(p) <= i);
+ }
+
+ for (size_t i = 0; i < 20; i++) {
+ _cleanup_free_ char *p;
+
+ p = utf8_escape_non_printable_full("\001 \019\20\a", i);
+ puts(p);
+ assert_se(utf8_is_valid(p));
+ assert_se(utf8_console_width(p) <= i);
+ }
+
+ for (size_t i = 0; i < 20; i++) {
+ _cleanup_free_ char *p;
+
+ p = utf8_escape_non_printable_full("\xef\xbf\x30\x13", i);
+ puts(p);
+ assert_se(utf8_is_valid(p));
+ assert_se(utf8_console_width(p) <= i);
+ }
+}
+
static void test_utf16_to_utf8(void) {
const char16_t utf16[] = { htole16('a'), htole16(0xd800), htole16('b'), htole16(0xdc00), htole16('c'), htole16(0xd801), htole16(0xdc37) };
static const char utf8[] = { 'a', 'b', 'c', 0xf0, 0x90, 0x90, 0xb7 };
@@ -189,6 +220,7 @@ int main(int argc, char *argv[]) {
test_utf8_encoded_valid_unichar();
test_utf8_escape_invalid();
test_utf8_escape_non_printable();
+ test_utf8_escape_non_printable_full();
test_utf16_to_utf8();
test_utf8_n_codepoints();
test_utf8_console_width();