]> git.ipfire.org Git - thirdparty/systemd.git/blame - src/test/test-format-table.c
tree-wide: use UINT64_MAX or friends
[thirdparty/systemd.git] / src / test / test-format-table.c
CommitLineData
db9ecf05 1/* SPDX-License-Identifier: LGPL-2.1-or-later */
1960e736 2
0db41a8f
ZJS
3#include <unistd.h>
4
1960e736
LP
5#include "alloc-util.h"
6#include "format-table.h"
7#include "string-util.h"
bbaba574 8#include "strv.h"
1960e736
LP
9#include "time-util.h"
10
a6e96471
YW
11static void test_issue_9549(void) {
12 _cleanup_(table_unrefp) Table *table = NULL;
13 _cleanup_free_ char *formatted = NULL;
14
b0e3d799
ZJS
15 log_info("/* %s */", __func__);
16
9969b542 17 assert_se(table = table_new("name", "type", "ro", "usage", "created", "modified"));
a6e96471
YW
18 assert_se(table_set_align_percent(table, TABLE_HEADER_CELL(3), 100) >= 0);
19 assert_se(table_add_many(table,
20 TABLE_STRING, "foooo",
21 TABLE_STRING, "raw",
22 TABLE_BOOLEAN, false,
23 TABLE_SIZE, (uint64_t) (673.7*1024*1024),
24 TABLE_STRING, "Wed 2018-07-11 00:10:33 JST",
25 TABLE_STRING, "Wed 2018-07-11 00:16:00 JST") >= 0);
26
27 table_set_width(table, 75);
28 assert_se(table_format(table, &formatted) >= 0);
29
30 printf("%s\n", formatted);
31 assert_se(streq(formatted,
71894e18 32 "NAME TYPE RO USAGE CREATED MODIFIED\n"
a6e96471
YW
33 "foooo raw no 673.6M Wed 2018-07-11 00:10:33 J… Wed 2018-07-11 00:16:00 JST\n"
34 ));
35}
36
d91614e7
LP
37static void test_multiline(void) {
38 _cleanup_(table_unrefp) Table *table = NULL;
39 _cleanup_free_ char *formatted = NULL;
40
b0e3d799
ZJS
41 log_info("/* %s */", __func__);
42
d91614e7
LP
43 assert_se(table = table_new("foo", "bar"));
44
45 assert_se(table_set_align_percent(table, TABLE_HEADER_CELL(1), 100) >= 0);
46
47 assert_se(table_add_many(table,
48 TABLE_STRING, "three\ndifferent\nlines",
49 TABLE_STRING, "two\nlines\n") >= 0);
50
51 table_set_cell_height_max(table, 1);
52 assert_se(table_format(table, &formatted) >= 0);
53 fputs(formatted, stdout);
54 assert_se(streq(formatted,
55 "FOO BAR\n"
56 "three… two…\n"));
57 formatted = mfree(formatted);
58
59 table_set_cell_height_max(table, 2);
60 assert_se(table_format(table, &formatted) >= 0);
61 fputs(formatted, stdout);
62 assert_se(streq(formatted,
63 "FOO BAR\n"
64 "three two\n"
65 "different… lines\n"));
66 formatted = mfree(formatted);
67
68 table_set_cell_height_max(table, 3);
69 assert_se(table_format(table, &formatted) >= 0);
70 fputs(formatted, stdout);
71 assert_se(streq(formatted,
72 "FOO BAR\n"
73 "three two\n"
74 "different lines\n"
71894e18 75 "lines \n"));
d91614e7
LP
76 formatted = mfree(formatted);
77
f5fbe71d 78 table_set_cell_height_max(table, SIZE_MAX);
d91614e7
LP
79 assert_se(table_format(table, &formatted) >= 0);
80 fputs(formatted, stdout);
81 assert_se(streq(formatted,
82 "FOO BAR\n"
83 "three two\n"
84 "different lines\n"
71894e18 85 "lines \n"));
d91614e7
LP
86 formatted = mfree(formatted);
87
88 assert_se(table_add_many(table,
89 TABLE_STRING, "short",
90 TABLE_STRING, "a\npair") >= 0);
91
92 assert_se(table_add_many(table,
93 TABLE_STRING, "short2\n",
94 TABLE_STRING, "a\nfour\nline\ncell") >= 0);
95
96 table_set_cell_height_max(table, 1);
97 assert_se(table_format(table, &formatted) >= 0);
98 fputs(formatted, stdout);
99 assert_se(streq(formatted,
100 "FOO BAR\n"
101 "three… two…\n"
102 "short a…\n"
103 "short2 a…\n"));
104 formatted = mfree(formatted);
105
106 table_set_cell_height_max(table, 2);
107 assert_se(table_format(table, &formatted) >= 0);
108 fputs(formatted, stdout);
109 assert_se(streq(formatted,
110 "FOO BAR\n"
111 "three two\n"
112 "different… lines\n"
113 "short a\n"
114 " pair\n"
115 "short2 a\n"
116 " four…\n"));
117 formatted = mfree(formatted);
118
119 table_set_cell_height_max(table, 3);
120 assert_se(table_format(table, &formatted) >= 0);
121 fputs(formatted, stdout);
122 assert_se(streq(formatted,
123 "FOO BAR\n"
124 "three two\n"
125 "different lines\n"
71894e18 126 "lines \n"
d91614e7
LP
127 "short a\n"
128 " pair\n"
129 "short2 a\n"
130 " four\n"
131 " line…\n"));
132 formatted = mfree(formatted);
133
f5fbe71d 134 table_set_cell_height_max(table, SIZE_MAX);
d91614e7
LP
135 assert_se(table_format(table, &formatted) >= 0);
136 fputs(formatted, stdout);
137 assert_se(streq(formatted,
138 "FOO BAR\n"
139 "three two\n"
140 "different lines\n"
71894e18 141 "lines \n"
d91614e7
LP
142 "short a\n"
143 " pair\n"
144 "short2 a\n"
145 " four\n"
146 " line\n"
147 " cell\n"));
148 formatted = mfree(formatted);
149}
150
bbaba574
YW
151static void test_strv(void) {
152 _cleanup_(table_unrefp) Table *table = NULL;
153 _cleanup_free_ char *formatted = NULL;
154
b0e3d799
ZJS
155 log_info("/* %s */", __func__);
156
bbaba574
YW
157 assert_se(table = table_new("foo", "bar"));
158
159 assert_se(table_set_align_percent(table, TABLE_HEADER_CELL(1), 100) >= 0);
160
161 assert_se(table_add_many(table,
162 TABLE_STRV, STRV_MAKE("three", "different", "lines"),
163 TABLE_STRV, STRV_MAKE("two", "lines")) >= 0);
164
165 table_set_cell_height_max(table, 1);
166 assert_se(table_format(table, &formatted) >= 0);
167 fputs(formatted, stdout);
168 assert_se(streq(formatted,
169 "FOO BAR\n"
170 "three… two…\n"));
171 formatted = mfree(formatted);
172
173 table_set_cell_height_max(table, 2);
174 assert_se(table_format(table, &formatted) >= 0);
175 fputs(formatted, stdout);
176 assert_se(streq(formatted,
177 "FOO BAR\n"
178 "three two\n"
179 "different… lines\n"));
180 formatted = mfree(formatted);
181
182 table_set_cell_height_max(table, 3);
183 assert_se(table_format(table, &formatted) >= 0);
184 fputs(formatted, stdout);
185 assert_se(streq(formatted,
186 "FOO BAR\n"
187 "three two\n"
188 "different lines\n"
71894e18 189 "lines \n"));
bbaba574
YW
190 formatted = mfree(formatted);
191
f5fbe71d 192 table_set_cell_height_max(table, SIZE_MAX);
bbaba574
YW
193 assert_se(table_format(table, &formatted) >= 0);
194 fputs(formatted, stdout);
195 assert_se(streq(formatted,
196 "FOO BAR\n"
197 "three two\n"
198 "different lines\n"
71894e18 199 "lines \n"));
bbaba574
YW
200 formatted = mfree(formatted);
201
202 assert_se(table_add_many(table,
203 TABLE_STRING, "short",
204 TABLE_STRV, STRV_MAKE("a", "pair")) >= 0);
205
206 assert_se(table_add_many(table,
207 TABLE_STRV, STRV_MAKE("short2"),
208 TABLE_STRV, STRV_MAKE("a", "four", "line", "cell")) >= 0);
209
210 table_set_cell_height_max(table, 1);
211 assert_se(table_format(table, &formatted) >= 0);
212 fputs(formatted, stdout);
213 assert_se(streq(formatted,
214 "FOO BAR\n"
215 "three… two…\n"
216 "short a…\n"
217 "short2 a…\n"));
218 formatted = mfree(formatted);
219
220 table_set_cell_height_max(table, 2);
221 assert_se(table_format(table, &formatted) >= 0);
222 fputs(formatted, stdout);
223 assert_se(streq(formatted,
224 "FOO BAR\n"
225 "three two\n"
226 "different… lines\n"
227 "short a\n"
228 " pair\n"
229 "short2 a\n"
230 " four…\n"));
231 formatted = mfree(formatted);
232
233 table_set_cell_height_max(table, 3);
234 assert_se(table_format(table, &formatted) >= 0);
235 fputs(formatted, stdout);
236 assert_se(streq(formatted,
237 "FOO BAR\n"
238 "three two\n"
239 "different lines\n"
71894e18 240 "lines \n"
bbaba574
YW
241 "short a\n"
242 " pair\n"
243 "short2 a\n"
244 " four\n"
245 " line…\n"));
246 formatted = mfree(formatted);
247
f5fbe71d 248 table_set_cell_height_max(table, SIZE_MAX);
bbaba574
YW
249 assert_se(table_format(table, &formatted) >= 0);
250 fputs(formatted, stdout);
251 assert_se(streq(formatted,
252 "FOO BAR\n"
253 "three two\n"
254 "different lines\n"
71894e18 255 "lines \n"
bbaba574
YW
256 "short a\n"
257 " pair\n"
258 "short2 a\n"
259 " four\n"
260 " line\n"
261 " cell\n"));
262 formatted = mfree(formatted);
263}
264
b0e3d799
ZJS
265static void test_strv_wrapped(void) {
266 _cleanup_(table_unrefp) Table *table = NULL;
267 _cleanup_free_ char *formatted = NULL;
268
269 log_info("/* %s */", __func__);
270
271 assert_se(table = table_new("foo", "bar"));
272
273 assert_se(table_set_align_percent(table, TABLE_HEADER_CELL(1), 100) >= 0);
274
275 assert_se(table_add_many(table,
276 TABLE_STRV_WRAPPED, STRV_MAKE("three", "different", "lines"),
277 TABLE_STRV_WRAPPED, STRV_MAKE("two", "lines")) >= 0);
278
279 table_set_cell_height_max(table, 1);
280 assert_se(table_format(table, &formatted) >= 0);
281 fputs(formatted, stdout);
282 assert_se(streq(formatted,
283 "FOO BAR\n"
284 "three different lines two lines\n"));
285 formatted = mfree(formatted);
286
287 table_set_cell_height_max(table, 2);
288 assert_se(table_format(table, &formatted) >= 0);
289 fputs(formatted, stdout);
290 assert_se(streq(formatted,
291 "FOO BAR\n"
292 "three different lines two lines\n"));
293 formatted = mfree(formatted);
294
295 table_set_cell_height_max(table, 3);
296 assert_se(table_format(table, &formatted) >= 0);
297 fputs(formatted, stdout);
298 assert_se(streq(formatted,
299 "FOO BAR\n"
300 "three different lines two lines\n"));
301 formatted = mfree(formatted);
302
f5fbe71d 303 table_set_cell_height_max(table, SIZE_MAX);
b0e3d799
ZJS
304 assert_se(table_format(table, &formatted) >= 0);
305 fputs(formatted, stdout);
306 assert_se(streq(formatted,
307 "FOO BAR\n"
308 "three different lines two lines\n"));
309 formatted = mfree(formatted);
310
311 assert_se(table_add_many(table,
312 TABLE_STRING, "short",
313 TABLE_STRV_WRAPPED, STRV_MAKE("a", "pair")) >= 0);
314
315 assert_se(table_add_many(table,
316 TABLE_STRV_WRAPPED, STRV_MAKE("short2"),
317 TABLE_STRV_WRAPPED, STRV_MAKE("a", "eight", "line", "ćęłł",
318 "___5___", "___6___", "___7___", "___8___")) >= 0);
319
320 table_set_cell_height_max(table, 1);
321 assert_se(table_format(table, &formatted) >= 0);
322 fputs(formatted, stdout);
323 assert_se(streq(formatted,
324 "FOO BAR\n"
325 "three different… two lines\n"
326 "short a pair\n"
327 "short2 a eight line ćęłł…\n"));
328 formatted = mfree(formatted);
329
330 table_set_cell_height_max(table, 2);
331 assert_se(table_format(table, &formatted) >= 0);
332 fputs(formatted, stdout);
333 assert_se(streq(formatted,
334 "FOO BAR\n"
335 "three different two lines\n"
71894e18 336 "lines \n"
b0e3d799
ZJS
337 "short a pair\n"
338 "short2 a eight line ćęłł\n"
339 " ___5___ ___6___…\n"));
340 formatted = mfree(formatted);
341
342 table_set_cell_height_max(table, 3);
343 assert_se(table_format(table, &formatted) >= 0);
344 fputs(formatted, stdout);
345 assert_se(streq(formatted,
346 "FOO BAR\n"
347 "three different two lines\n"
71894e18 348 "lines \n"
b0e3d799
ZJS
349 "short a pair\n"
350 "short2 a eight line ćęłł\n"
351 " ___5___ ___6___\n"
352 " ___7___ ___8___\n"));
353 formatted = mfree(formatted);
1960e736 354
f5fbe71d 355 table_set_cell_height_max(table, SIZE_MAX);
b0e3d799
ZJS
356 assert_se(table_format(table, &formatted) >= 0);
357 fputs(formatted, stdout);
358 assert_se(streq(formatted,
359 "FOO BAR\n"
360 "three different two lines\n"
71894e18 361 "lines \n"
b0e3d799
ZJS
362 "short a pair\n"
363 "short2 a eight line ćęłł\n"
364 " ___5___ ___6___\n"
365 " ___7___ ___8___\n"));
366 formatted = mfree(formatted);
367}
368
369int main(int argc, char *argv[]) {
1960e736
LP
370 _cleanup_(table_unrefp) Table *t = NULL;
371 _cleanup_free_ char *formatted = NULL;
372
dea55040 373 assert_se(setenv("SYSTEMD_COLORS", "0", 1) >= 0);
1960e736
LP
374 assert_se(setenv("COLUMNS", "40", 1) >= 0);
375
9969b542 376 assert_se(t = table_new("one", "two", "three"));
1960e736
LP
377
378 assert_se(table_set_align_percent(t, TABLE_HEADER_CELL(2), 100) >= 0);
379
380 assert_se(table_add_many(t,
381 TABLE_STRING, "xxx",
382 TABLE_STRING, "yyy",
383 TABLE_BOOLEAN, true) >= 0);
384
385 assert_se(table_add_many(t,
386 TABLE_STRING, "a long field",
387 TABLE_STRING, "yyy",
8792cecc 388 TABLE_SET_UPPERCASE, 1,
1960e736
LP
389 TABLE_BOOLEAN, false) >= 0);
390
391 assert_se(table_format(t, &formatted) >= 0);
392 printf("%s\n", formatted);
393
394 assert_se(streq(formatted,
395 "ONE TWO THREE\n"
396 "xxx yyy yes\n"
8792cecc 397 "a long field YYY no\n"));
1960e736
LP
398
399 formatted = mfree(formatted);
400
401 table_set_width(t, 40);
402
403 assert_se(table_format(t, &formatted) >= 0);
404 printf("%s\n", formatted);
405
406 assert_se(streq(formatted,
407 "ONE TWO THREE\n"
408 "xxx yyy yes\n"
8792cecc 409 "a long field YYY no\n"));
1960e736
LP
410
411 formatted = mfree(formatted);
412
413 table_set_width(t, 12);
414 assert_se(table_format(t, &formatted) >= 0);
415 printf("%s\n", formatted);
416
417 assert_se(streq(formatted,
418 "ONE TWO THR…\n"
419 "xxx yyy yes\n"
8792cecc 420 "a … YYY no\n"));
1960e736
LP
421
422 formatted = mfree(formatted);
423
424 table_set_width(t, 5);
425 assert_se(table_format(t, &formatted) >= 0);
426 printf("%s\n", formatted);
427
428 assert_se(streq(formatted,
429 "… … …\n"
430 "… … …\n"
431 "… … …\n"));
432
433 formatted = mfree(formatted);
434
435 table_set_width(t, 3);
436 assert_se(table_format(t, &formatted) >= 0);
437 printf("%s\n", formatted);
438
439 assert_se(streq(formatted,
440 "… … …\n"
441 "… … …\n"
442 "… … …\n"));
443
444 formatted = mfree(formatted);
445
f5fbe71d
YW
446 table_set_width(t, SIZE_MAX);
447 assert_se(table_set_sort(t, (size_t) 0, (size_t) 2, SIZE_MAX) >= 0);
1960e736
LP
448
449 assert_se(table_format(t, &formatted) >= 0);
450 printf("%s\n", formatted);
451
452 assert_se(streq(formatted,
453 "ONE TWO THREE\n"
8792cecc 454 "a long field YYY no\n"
1960e736
LP
455 "xxx yyy yes\n"));
456
457 formatted = mfree(formatted);
458
459 table_set_header(t, false);
460
461 assert_se(table_add_many(t,
462 TABLE_STRING, "fäää",
463 TABLE_STRING, "uuu",
464 TABLE_BOOLEAN, true) >= 0);
465
466 assert_se(table_add_many(t,
467 TABLE_STRING, "fäää",
468 TABLE_STRING, "zzz",
469 TABLE_BOOLEAN, false) >= 0);
470
471 assert_se(table_add_many(t,
472 TABLE_EMPTY,
473 TABLE_SIZE, (uint64_t) 4711,
474 TABLE_TIMESPAN, (usec_t) 5*USEC_PER_MINUTE) >= 0);
475
476 assert_se(table_format(t, &formatted) >= 0);
477 printf("%s\n", formatted);
478
479 assert_se(streq(formatted,
8792cecc 480 "a long field YYY no\n"
1960e736
LP
481 "fäää zzz no\n"
482 "fäää uuu yes\n"
483 "xxx yyy yes\n"
484 " 4.6K 5min\n"));
485
486 formatted = mfree(formatted);
487
f5fbe71d 488 assert_se(table_set_display(t, (size_t) 2, (size_t) 0, (size_t) 2, (size_t) 0, (size_t) 0, SIZE_MAX) >= 0);
1960e736
LP
489
490 assert_se(table_format(t, &formatted) >= 0);
491 printf("%s\n", formatted);
492
0db41a8f
ZJS
493 if (isatty(STDOUT_FILENO))
494 assert_se(streq(formatted,
495 " no a long f… no a long f… a long fi…\n"
71894e18
YW
496 " no fäää no fäää fäää\n"
497 " yes fäää yes fäää fäää\n"
498 " yes xxx yes xxx xxx\n"
499 "5min 5min \n"));
0db41a8f
ZJS
500 else
501 assert_se(streq(formatted,
502 " no a long field no a long field a long field\n"
71894e18
YW
503 " no fäää no fäää fäää\n"
504 " yes fäää yes fäää fäää\n"
505 " yes xxx yes xxx xxx\n"
506 "5min 5min \n"));
1960e736 507
a6e96471 508 test_issue_9549();
d91614e7 509 test_multiline();
bbaba574 510 test_strv();
b0e3d799 511 test_strv_wrapped();
a6e96471 512
1960e736
LP
513 return 0;
514}