]>
Commit | Line | Data |
---|---|---|
14228c0d MB |
1 | /*-*- Mode: C; c-basic-offset: 8; indent-tabs-mode: nil -*-*/ |
2 | ||
3 | /*** | |
4 | This file is part of systemd. | |
5 | ||
6 | Copyright 2013 Dave Reisner | |
7 | ||
8 | systemd is free software; you can redistribute it and/or modify it | |
9 | under the terms of the GNU Lesser General Public License as published by | |
10 | the Free Software Foundation; either version 2.1 of the License, or | |
11 | (at your option) any later version. | |
12 | ||
13 | systemd is distributed in the hope that it will be useful, but | |
14 | WITHOUT ANY WARRANTY; without even the implied warranty of | |
15 | MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU | |
16 | Lesser General Public License for more details. | |
17 | ||
18 | You should have received a copy of the GNU Lesser General Public License | |
19 | along with systemd; If not, see <http://www.gnu.org/licenses/>. | |
20 | ***/ | |
21 | ||
22 | #include "utf8.h" | |
23 | #include "util.h" | |
24 | ||
25 | static void test_utf8_is_printable(void) { | |
26 | assert_se(utf8_is_printable("ascii is valid\tunicode", 22)); | |
27 | assert_se(utf8_is_printable("\342\204\242", 3)); | |
28 | assert_se(!utf8_is_printable("\341\204", 2)); | |
60f067b4 | 29 | assert_se(utf8_is_printable("ąę", 4)); |
14228c0d MB |
30 | } |
31 | ||
32 | static void test_utf8_is_valid(void) { | |
33 | assert_se(utf8_is_valid("ascii is valid unicode")); | |
34 | assert_se(utf8_is_valid("\342\204\242")); | |
35 | assert_se(!utf8_is_valid("\341\204")); | |
36 | } | |
37 | ||
38 | static void test_ascii_is_valid(void) { | |
39 | assert_se(ascii_is_valid("alsdjf\t\vbarr\nba z")); | |
40 | assert_se(!ascii_is_valid("\342\204\242")); | |
41 | assert_se(!ascii_is_valid("\341\204")); | |
42 | } | |
43 | ||
14228c0d MB |
44 | static void test_utf8_encoded_valid_unichar(void) { |
45 | assert_se(utf8_encoded_valid_unichar("\342\204\242") == 3); | |
46 | assert_se(utf8_encoded_valid_unichar("\302\256") == 2); | |
47 | assert_se(utf8_encoded_valid_unichar("a") == 1); | |
48 | assert_se(utf8_encoded_valid_unichar("\341\204") < 0); | |
49 | assert_se(utf8_encoded_valid_unichar("\341\204\341\204") < 0); | |
14228c0d MB |
50 | } |
51 | ||
60f067b4 JS |
52 | static void test_utf8_escaping(void) { |
53 | _cleanup_free_ char *p1, *p2, *p3; | |
54 | ||
55 | p1 = utf8_escape_invalid("goo goo goo"); | |
56 | puts(p1); | |
57 | assert_se(utf8_is_valid(p1)); | |
58 | ||
59 | p2 = utf8_escape_invalid("\341\204\341\204"); | |
60 | puts(p2); | |
61 | assert_se(utf8_is_valid(p2)); | |
62 | ||
63 | p3 = utf8_escape_invalid("\341\204"); | |
64 | puts(p3); | |
65 | assert_se(utf8_is_valid(p3)); | |
66 | } | |
67 | ||
f47781d8 MP |
68 | static void test_utf8_escaping_printable(void) { |
69 | _cleanup_free_ char *p1, *p2, *p3, *p4, *p5, *p6; | |
70 | ||
71 | p1 = utf8_escape_non_printable("goo goo goo"); | |
72 | puts(p1); | |
73 | assert_se(utf8_is_valid(p1)); | |
74 | ||
75 | p2 = utf8_escape_non_printable("\341\204\341\204"); | |
76 | puts(p2); | |
77 | assert_se(utf8_is_valid(p2)); | |
78 | ||
79 | p3 = utf8_escape_non_printable("\341\204"); | |
80 | puts(p3); | |
81 | assert_se(utf8_is_valid(p3)); | |
82 | ||
83 | p4 = utf8_escape_non_printable("ąę\n가너도루\n1234\n\341\204\341\204\n\001 \019\20\a"); | |
84 | puts(p4); | |
85 | assert_se(utf8_is_valid(p4)); | |
86 | ||
87 | p5 = utf8_escape_non_printable("\001 \019\20\a"); | |
88 | puts(p5); | |
89 | assert_se(utf8_is_valid(p5)); | |
90 | ||
91 | p6 = utf8_escape_non_printable("\xef\xbf\x30\x13"); | |
92 | puts(p6); | |
93 | assert_se(utf8_is_valid(p6)); | |
94 | } | |
95 | ||
e735f4d4 MP |
96 | static void test_utf16_to_utf8(void) { |
97 | char *a = NULL; | |
e3bff60a | 98 | const uint16_t utf16[] = { htole16('a'), htole16(0xd800), htole16('b'), htole16(0xdc00), htole16('c'), htole16(0xd801), htole16(0xdc37) }; |
e735f4d4 MP |
99 | const char utf8[] = { 'a', 'b', 'c', 0xf0, 0x90, 0x90, 0xb7, 0 }; |
100 | ||
101 | a = utf16_to_utf8(utf16, 14); | |
102 | assert_se(a); | |
103 | assert_se(streq(a, utf8)); | |
104 | ||
105 | free(a); | |
106 | } | |
107 | ||
14228c0d MB |
108 | int main(int argc, char *argv[]) { |
109 | test_utf8_is_valid(); | |
110 | test_utf8_is_printable(); | |
111 | test_ascii_is_valid(); | |
14228c0d | 112 | test_utf8_encoded_valid_unichar(); |
60f067b4 | 113 | test_utf8_escaping(); |
f47781d8 | 114 | test_utf8_escaping_printable(); |
e735f4d4 | 115 | test_utf16_to_utf8(); |
14228c0d MB |
116 | |
117 | return 0; | |
118 | } |