Branch data Line data Source code
1 : : /* SPDX-License-Identifier: LGPL-2.1+ */
2 : :
3 : : #include "alloc-util.h"
4 : : #include "format-table.h"
5 : : #include "string-util.h"
6 : : #include "time-util.h"
7 : :
8 : 4 : static void test_issue_9549(void) {
9 : 4 : _cleanup_(table_unrefp) Table *table = NULL;
10 : 4 : _cleanup_free_ char *formatted = NULL;
11 : :
12 [ - + ]: 4 : assert_se(table = table_new("name", "type", "ro", "usage", "created", "modified"));
13 [ - + ]: 4 : assert_se(table_set_align_percent(table, TABLE_HEADER_CELL(3), 100) >= 0);
14 [ - + ]: 4 : assert_se(table_add_many(table,
15 : : TABLE_STRING, "foooo",
16 : : TABLE_STRING, "raw",
17 : : TABLE_BOOLEAN, false,
18 : : TABLE_SIZE, (uint64_t) (673.7*1024*1024),
19 : : TABLE_STRING, "Wed 2018-07-11 00:10:33 JST",
20 : : TABLE_STRING, "Wed 2018-07-11 00:16:00 JST") >= 0);
21 : :
22 : 4 : table_set_width(table, 75);
23 [ - + ]: 4 : assert_se(table_format(table, &formatted) >= 0);
24 : :
25 : 4 : printf("%s\n", formatted);
26 [ - + ]: 4 : assert_se(streq(formatted,
27 : : "NAME TYPE RO USAGE CREATED MODIFIED \n"
28 : : "foooo raw no 673.6M Wed 2018-07-11 00:10:33 J… Wed 2018-07-11 00:16:00 JST\n"
29 : : ));
30 : 4 : }
31 : :
32 : 4 : int main(int argc, char *argv[]) {
33 : :
34 : 4 : _cleanup_(table_unrefp) Table *t = NULL;
35 : 8 : _cleanup_free_ char *formatted = NULL;
36 : :
37 [ - + ]: 4 : assert_se(setenv("SYSTEMD_COLORS", "0", 1) >= 0);
38 [ - + ]: 4 : assert_se(setenv("COLUMNS", "40", 1) >= 0);
39 : :
40 [ - + ]: 4 : assert_se(t = table_new("one", "two", "three"));
41 : :
42 [ - + ]: 4 : assert_se(table_set_align_percent(t, TABLE_HEADER_CELL(2), 100) >= 0);
43 : :
44 [ - + ]: 4 : assert_se(table_add_many(t,
45 : : TABLE_STRING, "xxx",
46 : : TABLE_STRING, "yyy",
47 : : TABLE_BOOLEAN, true) >= 0);
48 : :
49 [ - + ]: 4 : assert_se(table_add_many(t,
50 : : TABLE_STRING, "a long field",
51 : : TABLE_STRING, "yyy",
52 : : TABLE_SET_UPPERCASE, 1,
53 : : TABLE_BOOLEAN, false) >= 0);
54 : :
55 [ - + ]: 4 : assert_se(table_format(t, &formatted) >= 0);
56 : 4 : printf("%s\n", formatted);
57 : :
58 [ - + ]: 4 : assert_se(streq(formatted,
59 : : "ONE TWO THREE\n"
60 : : "xxx yyy yes\n"
61 : : "a long field YYY no\n"));
62 : :
63 : 4 : formatted = mfree(formatted);
64 : :
65 : 4 : table_set_width(t, 40);
66 : :
67 [ - + ]: 4 : assert_se(table_format(t, &formatted) >= 0);
68 : 4 : printf("%s\n", formatted);
69 : :
70 [ - + ]: 4 : assert_se(streq(formatted,
71 : : "ONE TWO THREE\n"
72 : : "xxx yyy yes\n"
73 : : "a long field YYY no\n"));
74 : :
75 : 4 : formatted = mfree(formatted);
76 : :
77 : 4 : table_set_width(t, 12);
78 [ - + ]: 4 : assert_se(table_format(t, &formatted) >= 0);
79 : 4 : printf("%s\n", formatted);
80 : :
81 [ - + ]: 4 : assert_se(streq(formatted,
82 : : "ONE TWO THR…\n"
83 : : "xxx yyy yes\n"
84 : : "a … YYY no\n"));
85 : :
86 : 4 : formatted = mfree(formatted);
87 : :
88 : 4 : table_set_width(t, 5);
89 [ - + ]: 4 : assert_se(table_format(t, &formatted) >= 0);
90 : 4 : printf("%s\n", formatted);
91 : :
92 [ - + ]: 4 : assert_se(streq(formatted,
93 : : "… … …\n"
94 : : "… … …\n"
95 : : "… … …\n"));
96 : :
97 : 4 : formatted = mfree(formatted);
98 : :
99 : 4 : table_set_width(t, 3);
100 [ - + ]: 4 : assert_se(table_format(t, &formatted) >= 0);
101 : 4 : printf("%s\n", formatted);
102 : :
103 [ - + ]: 4 : assert_se(streq(formatted,
104 : : "… … …\n"
105 : : "… … …\n"
106 : : "… … …\n"));
107 : :
108 : 4 : formatted = mfree(formatted);
109 : :
110 : 4 : table_set_width(t, (size_t) -1);
111 [ - + ]: 4 : assert_se(table_set_sort(t, (size_t) 0, (size_t) 2, (size_t) -1) >= 0);
112 : :
113 [ - + ]: 4 : assert_se(table_format(t, &formatted) >= 0);
114 : 4 : printf("%s\n", formatted);
115 : :
116 [ - + ]: 4 : assert_se(streq(formatted,
117 : : "ONE TWO THREE\n"
118 : : "a long field YYY no\n"
119 : : "xxx yyy yes\n"));
120 : :
121 : 4 : formatted = mfree(formatted);
122 : :
123 : 4 : table_set_header(t, false);
124 : :
125 [ - + ]: 4 : assert_se(table_add_many(t,
126 : : TABLE_STRING, "fäää",
127 : : TABLE_STRING, "uuu",
128 : : TABLE_BOOLEAN, true) >= 0);
129 : :
130 [ - + ]: 4 : assert_se(table_add_many(t,
131 : : TABLE_STRING, "fäää",
132 : : TABLE_STRING, "zzz",
133 : : TABLE_BOOLEAN, false) >= 0);
134 : :
135 [ - + ]: 4 : assert_se(table_add_many(t,
136 : : TABLE_EMPTY,
137 : : TABLE_SIZE, (uint64_t) 4711,
138 : : TABLE_TIMESPAN, (usec_t) 5*USEC_PER_MINUTE) >= 0);
139 : :
140 [ - + ]: 4 : assert_se(table_format(t, &formatted) >= 0);
141 : 4 : printf("%s\n", formatted);
142 : :
143 [ - + ]: 4 : assert_se(streq(formatted,
144 : : "a long field YYY no\n"
145 : : "fäää zzz no\n"
146 : : "fäää uuu yes\n"
147 : : "xxx yyy yes\n"
148 : : " 4.6K 5min\n"));
149 : :
150 : 4 : formatted = mfree(formatted);
151 : :
152 [ - + ]: 4 : assert_se(table_set_display(t, (size_t) 2, (size_t) 0, (size_t) 2, (size_t) 0, (size_t) 0, (size_t) -1) >= 0);
153 : :
154 [ - + ]: 4 : assert_se(table_format(t, &formatted) >= 0);
155 : 4 : printf("%s\n", formatted);
156 : :
157 [ - + ]: 4 : assert_se(streq(formatted,
158 : : " no a long f… no a long f… a long fi…\n"
159 : : " no fäää no fäää fäää \n"
160 : : " yes fäää yes fäää fäää \n"
161 : : " yes xxx yes xxx xxx \n"
162 : : "5min 5min \n"));
163 : :
164 : 4 : test_issue_9549();
165 : :
166 : 4 : return 0;
167 : : }
|