]>
Commit | Line | Data |
---|---|---|
db9ecf05 | 1 | /* SPDX-License-Identifier: LGPL-2.1-or-later */ |
c62c294f | 2 | |
442ac269 | 3 | #include <stdio.h> |
c62c294f | 4 | |
07630cea | 5 | #include "string-util.h" |
c62c294f | 6 | #include "strxcpyx.h" |
4f7452a8 | 7 | #include "tests.h" |
c62c294f | 8 | |
4f7452a8 | 9 | TEST(strpcpy) { |
c62c294f TA |
10 | char target[25]; |
11 | char *s = target; | |
12 | size_t space_left; | |
648a799f | 13 | bool truncated; |
c62c294f TA |
14 | |
15 | space_left = sizeof(target); | |
648a799f YW |
16 | space_left = strpcpy_full(&s, space_left, "12345", &truncated); |
17 | assert_se(!truncated); | |
18 | space_left = strpcpy_full(&s, space_left, "hey hey hey", &truncated); | |
19 | assert_se(!truncated); | |
20 | space_left = strpcpy_full(&s, space_left, "waldo", &truncated); | |
21 | assert_se(!truncated); | |
22 | space_left = strpcpy_full(&s, space_left, "ba", &truncated); | |
23 | assert_se(!truncated); | |
24 | space_left = strpcpy_full(&s, space_left, "r", &truncated); | |
25 | assert_se(!truncated); | |
26 | assert_se(space_left == 1); | |
c79e88b3 | 27 | ASSERT_STREQ(target, "12345hey hey heywaldobar"); |
c62c294f | 28 | |
648a799f YW |
29 | space_left = strpcpy_full(&s, space_left, "", &truncated); |
30 | assert_se(!truncated); | |
31 | assert_se(space_left == 1); | |
c79e88b3 | 32 | ASSERT_STREQ(target, "12345hey hey heywaldobar"); |
648a799f YW |
33 | |
34 | space_left = strpcpy_full(&s, space_left, "f", &truncated); | |
35 | assert_se(truncated); | |
bdf7026e | 36 | assert_se(space_left == 0); |
c79e88b3 | 37 | ASSERT_STREQ(target, "12345hey hey heywaldobar"); |
648a799f YW |
38 | |
39 | space_left = strpcpy_full(&s, space_left, "", &truncated); | |
40 | assert_se(!truncated); | |
41 | assert_se(space_left == 0); | |
c79e88b3 | 42 | ASSERT_STREQ(target, "12345hey hey heywaldobar"); |
648a799f YW |
43 | |
44 | space_left = strpcpy_full(&s, space_left, "foo", &truncated); | |
45 | assert_se(truncated); | |
46 | assert_se(space_left == 0); | |
c79e88b3 | 47 | ASSERT_STREQ(target, "12345hey hey heywaldobar"); |
c62c294f TA |
48 | } |
49 | ||
4f7452a8 | 50 | TEST(strpcpyf) { |
c62c294f TA |
51 | char target[25]; |
52 | char *s = target; | |
53 | size_t space_left; | |
648a799f | 54 | bool truncated; |
c62c294f TA |
55 | |
56 | space_left = sizeof(target); | |
648a799f YW |
57 | space_left = strpcpyf_full(&s, space_left, &truncated, "space left: %zu. ", space_left); |
58 | assert_se(!truncated); | |
59 | space_left = strpcpyf_full(&s, space_left, &truncated, "foo%s", "bar"); | |
60 | assert_se(!truncated); | |
bdf7026e | 61 | assert_se(space_left == 3); |
c79e88b3 | 62 | ASSERT_STREQ(target, "space left: 25. foobar"); |
648a799f YW |
63 | |
64 | space_left = strpcpyf_full(&s, space_left, &truncated, "%i", 42); | |
65 | assert_se(!truncated); | |
66 | assert_se(space_left == 1); | |
c79e88b3 | 67 | ASSERT_STREQ(target, "space left: 25. foobar42"); |
648a799f YW |
68 | |
69 | space_left = strpcpyf_full(&s, space_left, &truncated, "%s", ""); | |
70 | assert_se(!truncated); | |
71 | assert_se(space_left == 1); | |
c79e88b3 | 72 | ASSERT_STREQ(target, "space left: 25. foobar42"); |
648a799f YW |
73 | |
74 | space_left = strpcpyf_full(&s, space_left, &truncated, "%c", 'x'); | |
75 | assert_se(truncated); | |
76 | assert_se(space_left == 0); | |
c79e88b3 | 77 | ASSERT_STREQ(target, "space left: 25. foobar42"); |
648a799f YW |
78 | |
79 | space_left = strpcpyf_full(&s, space_left, &truncated, "%s", ""); | |
80 | assert_se(!truncated); | |
81 | assert_se(space_left == 0); | |
c79e88b3 | 82 | ASSERT_STREQ(target, "space left: 25. foobar42"); |
648a799f YW |
83 | |
84 | space_left = strpcpyf_full(&s, space_left, &truncated, "abc%s", "hoge"); | |
85 | assert_se(truncated); | |
86 | assert_se(space_left == 0); | |
c79e88b3 | 87 | ASSERT_STREQ(target, "space left: 25. foobar42"); |
54d46a78 ZJS |
88 | |
89 | /* test overflow */ | |
90 | s = target; | |
648a799f YW |
91 | space_left = strpcpyf_full(&s, 12, &truncated, "00 left: %i. ", 999); |
92 | assert_se(truncated); | |
c79e88b3 | 93 | ASSERT_STREQ(target, "00 left: 99"); |
54d46a78 ZJS |
94 | assert_se(space_left == 0); |
95 | assert_se(target[12] == '2'); | |
c62c294f TA |
96 | } |
97 | ||
4f7452a8 | 98 | TEST(strpcpyl) { |
c62c294f TA |
99 | char target[25]; |
100 | char *s = target; | |
101 | size_t space_left; | |
648a799f | 102 | bool truncated; |
c62c294f TA |
103 | |
104 | space_left = sizeof(target); | |
648a799f YW |
105 | space_left = strpcpyl_full(&s, space_left, &truncated, "waldo", " test", " waldo. ", NULL); |
106 | assert_se(!truncated); | |
107 | space_left = strpcpyl_full(&s, space_left, &truncated, "Banana", NULL); | |
108 | assert_se(!truncated); | |
109 | assert_se(space_left == 1); | |
c79e88b3 | 110 | ASSERT_STREQ(target, "waldo test waldo. Banana"); |
648a799f YW |
111 | |
112 | space_left = strpcpyl_full(&s, space_left, &truncated, "", "", "", NULL); | |
113 | assert_se(!truncated); | |
bdf7026e | 114 | assert_se(space_left == 1); |
c79e88b3 | 115 | ASSERT_STREQ(target, "waldo test waldo. Banana"); |
648a799f YW |
116 | |
117 | space_left = strpcpyl_full(&s, space_left, &truncated, "", "x", "", NULL); | |
118 | assert_se(truncated); | |
119 | assert_se(space_left == 0); | |
c79e88b3 | 120 | ASSERT_STREQ(target, "waldo test waldo. Banana"); |
648a799f YW |
121 | |
122 | space_left = strpcpyl_full(&s, space_left, &truncated, "hoge", NULL); | |
123 | assert_se(truncated); | |
124 | assert_se(space_left == 0); | |
c79e88b3 | 125 | ASSERT_STREQ(target, "waldo test waldo. Banana"); |
c62c294f TA |
126 | } |
127 | ||
4f7452a8 | 128 | TEST(strscpy) { |
c62c294f TA |
129 | char target[25]; |
130 | size_t space_left; | |
648a799f | 131 | bool truncated; |
c62c294f TA |
132 | |
133 | space_left = sizeof(target); | |
648a799f YW |
134 | space_left = strscpy_full(target, space_left, "12345", &truncated); |
135 | assert_se(!truncated); | |
c62c294f | 136 | |
c79e88b3 | 137 | ASSERT_STREQ(target, "12345"); |
bdf7026e | 138 | assert_se(space_left == 20); |
c62c294f TA |
139 | } |
140 | ||
4f7452a8 | 141 | TEST(strscpyl) { |
c62c294f TA |
142 | char target[25]; |
143 | size_t space_left; | |
648a799f | 144 | bool truncated; |
c62c294f TA |
145 | |
146 | space_left = sizeof(target); | |
648a799f YW |
147 | space_left = strscpyl_full(target, space_left, &truncated, "12345", "waldo", "waldo", NULL); |
148 | assert_se(!truncated); | |
c62c294f | 149 | |
c79e88b3 | 150 | ASSERT_STREQ(target, "12345waldowaldo"); |
bdf7026e | 151 | assert_se(space_left == 10); |
c62c294f TA |
152 | } |
153 | ||
4f7452a8 | 154 | TEST(sd_event_code_migration) { |
442ac269 YW |
155 | char b[100 * DECIMAL_STR_MAX(unsigned) + 1]; |
156 | char c[100 * DECIMAL_STR_MAX(unsigned) + 1], *p; | |
157 | unsigned i; | |
158 | size_t l; | |
b798490f | 159 | int o, r; |
442ac269 | 160 | |
b798490f LB |
161 | for (i = o = 0; i < 100; i++) { |
162 | r = snprintf(&b[o], sizeof(b) - o, "%u ", i); | |
163 | assert_se(r >= 0 && r < (int) sizeof(b) - o); | |
164 | o += r; | |
165 | } | |
442ac269 YW |
166 | |
167 | p = c; | |
168 | l = sizeof(c); | |
169 | for (i = 0; i < 100; i++) | |
170 | l = strpcpyf(&p, l, "%u ", i); | |
171 | ||
c79e88b3 | 172 | ASSERT_STREQ(b, c); |
442ac269 YW |
173 | } |
174 | ||
4f7452a8 | 175 | DEFINE_TEST_MAIN(LOG_INFO); |