1*6b3a42afSjmmv // Copyright 2012 Google Inc.
2*6b3a42afSjmmv // All rights reserved.
3*6b3a42afSjmmv //
4*6b3a42afSjmmv // Redistribution and use in source and binary forms, with or without
5*6b3a42afSjmmv // modification, are permitted provided that the following conditions are
6*6b3a42afSjmmv // met:
7*6b3a42afSjmmv //
8*6b3a42afSjmmv // * Redistributions of source code must retain the above copyright
9*6b3a42afSjmmv // notice, this list of conditions and the following disclaimer.
10*6b3a42afSjmmv // * Redistributions in binary form must reproduce the above copyright
11*6b3a42afSjmmv // notice, this list of conditions and the following disclaimer in the
12*6b3a42afSjmmv // documentation and/or other materials provided with the distribution.
13*6b3a42afSjmmv // * Neither the name of Google Inc. nor the names of its contributors
14*6b3a42afSjmmv // may be used to endorse or promote products derived from this software
15*6b3a42afSjmmv // without specific prior written permission.
16*6b3a42afSjmmv //
17*6b3a42afSjmmv // THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
18*6b3a42afSjmmv // "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
19*6b3a42afSjmmv // LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
20*6b3a42afSjmmv // A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
21*6b3a42afSjmmv // OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
22*6b3a42afSjmmv // SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
23*6b3a42afSjmmv // LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
24*6b3a42afSjmmv // DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
25*6b3a42afSjmmv // THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
26*6b3a42afSjmmv // (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
27*6b3a42afSjmmv // OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
28*6b3a42afSjmmv
29*6b3a42afSjmmv #include "utils/text/table.hpp"
30*6b3a42afSjmmv
31*6b3a42afSjmmv #include <algorithm>
32*6b3a42afSjmmv
33*6b3a42afSjmmv #include <atf-c++.hpp>
34*6b3a42afSjmmv
35*6b3a42afSjmmv #include "utils/text/operations.ipp"
36*6b3a42afSjmmv
37*6b3a42afSjmmv namespace text = utils::text;
38*6b3a42afSjmmv
39*6b3a42afSjmmv
40*6b3a42afSjmmv /// Performs a check on text::table_formatter.
41*6b3a42afSjmmv ///
42*6b3a42afSjmmv /// This is provided for test simplicity's sake. Having to match the result of
43*6b3a42afSjmmv /// the formatting on a line by line basis would result in too verbose tests
44*6b3a42afSjmmv /// (maybe not with C++11, but not using this yet).
45*6b3a42afSjmmv ///
46*6b3a42afSjmmv /// Because of the flattening of the formatted table into a string, we risk
47*6b3a42afSjmmv /// misdetecting problems when the algorithm bundles newlines into the lines of
48*6b3a42afSjmmv /// a table. This should not happen, and not accounting for this little detail
49*6b3a42afSjmmv /// makes testing so much easier.
50*6b3a42afSjmmv ///
51*6b3a42afSjmmv /// \param expected Textual representation of the table, as a collection of
52*6b3a42afSjmmv /// lines separated by newline characters.
53*6b3a42afSjmmv /// \param formatter The formatter to use.
54*6b3a42afSjmmv /// \param table The table to format.
55*6b3a42afSjmmv static void
table_formatter_check(const std::string & expected,const text::table_formatter & formatter,const text::table & table)56*6b3a42afSjmmv table_formatter_check(const std::string& expected,
57*6b3a42afSjmmv const text::table_formatter& formatter,
58*6b3a42afSjmmv const text::table& table)
59*6b3a42afSjmmv {
60*6b3a42afSjmmv ATF_REQUIRE_EQ(expected, text::join(formatter.format(table), "\n") + "\n");
61*6b3a42afSjmmv }
62*6b3a42afSjmmv
63*6b3a42afSjmmv
64*6b3a42afSjmmv
65*6b3a42afSjmmv ATF_TEST_CASE_WITHOUT_HEAD(table__ncolumns);
ATF_TEST_CASE_BODY(table__ncolumns)66*6b3a42afSjmmv ATF_TEST_CASE_BODY(table__ncolumns)
67*6b3a42afSjmmv {
68*6b3a42afSjmmv ATF_REQUIRE_EQ(5, text::table(5).ncolumns());
69*6b3a42afSjmmv ATF_REQUIRE_EQ(10, text::table(10).ncolumns());
70*6b3a42afSjmmv }
71*6b3a42afSjmmv
72*6b3a42afSjmmv
73*6b3a42afSjmmv ATF_TEST_CASE_WITHOUT_HEAD(table__column_width);
ATF_TEST_CASE_BODY(table__column_width)74*6b3a42afSjmmv ATF_TEST_CASE_BODY(table__column_width)
75*6b3a42afSjmmv {
76*6b3a42afSjmmv text::table_row row1;
77*6b3a42afSjmmv row1.push_back("1234");
78*6b3a42afSjmmv row1.push_back("123456");
79*6b3a42afSjmmv text::table_row row2;
80*6b3a42afSjmmv row2.push_back("12");
81*6b3a42afSjmmv row2.push_back("12345678");
82*6b3a42afSjmmv
83*6b3a42afSjmmv text::table table(2);
84*6b3a42afSjmmv table.add_row(row1);
85*6b3a42afSjmmv table.add_row(row2);
86*6b3a42afSjmmv
87*6b3a42afSjmmv ATF_REQUIRE_EQ(4, table.column_width(0));
88*6b3a42afSjmmv ATF_REQUIRE_EQ(8, table.column_width(1));
89*6b3a42afSjmmv }
90*6b3a42afSjmmv
91*6b3a42afSjmmv
92*6b3a42afSjmmv ATF_TEST_CASE_WITHOUT_HEAD(table__column_widths);
ATF_TEST_CASE_BODY(table__column_widths)93*6b3a42afSjmmv ATF_TEST_CASE_BODY(table__column_widths)
94*6b3a42afSjmmv {
95*6b3a42afSjmmv text::table_row row1;
96*6b3a42afSjmmv row1.push_back("1234");
97*6b3a42afSjmmv row1.push_back("123456");
98*6b3a42afSjmmv text::table_row row2;
99*6b3a42afSjmmv row2.push_back("12");
100*6b3a42afSjmmv row2.push_back("12345678");
101*6b3a42afSjmmv
102*6b3a42afSjmmv text::table table(2);
103*6b3a42afSjmmv table.add_row(row1);
104*6b3a42afSjmmv table.add_row(row2);
105*6b3a42afSjmmv
106*6b3a42afSjmmv ATF_REQUIRE_EQ(4, table.column_widths()[0]);
107*6b3a42afSjmmv ATF_REQUIRE_EQ(8, table.column_widths()[1]);
108*6b3a42afSjmmv }
109*6b3a42afSjmmv
110*6b3a42afSjmmv
111*6b3a42afSjmmv ATF_TEST_CASE_WITHOUT_HEAD(table__empty);
ATF_TEST_CASE_BODY(table__empty)112*6b3a42afSjmmv ATF_TEST_CASE_BODY(table__empty)
113*6b3a42afSjmmv {
114*6b3a42afSjmmv text::table table(2);
115*6b3a42afSjmmv ATF_REQUIRE(table.empty());
116*6b3a42afSjmmv table.add_row(text::table_row(2));
117*6b3a42afSjmmv ATF_REQUIRE(!table.empty());
118*6b3a42afSjmmv }
119*6b3a42afSjmmv
120*6b3a42afSjmmv
121*6b3a42afSjmmv ATF_TEST_CASE_WITHOUT_HEAD(table__iterate);
ATF_TEST_CASE_BODY(table__iterate)122*6b3a42afSjmmv ATF_TEST_CASE_BODY(table__iterate)
123*6b3a42afSjmmv {
124*6b3a42afSjmmv text::table_row row1;
125*6b3a42afSjmmv row1.push_back("foo");
126*6b3a42afSjmmv text::table_row row2;
127*6b3a42afSjmmv row2.push_back("bar");
128*6b3a42afSjmmv
129*6b3a42afSjmmv text::table table(1);
130*6b3a42afSjmmv table.add_row(row1);
131*6b3a42afSjmmv table.add_row(row2);
132*6b3a42afSjmmv
133*6b3a42afSjmmv text::table::const_iterator iter = table.begin();
134*6b3a42afSjmmv ATF_REQUIRE(iter != table.end());
135*6b3a42afSjmmv ATF_REQUIRE(row1 == *iter);
136*6b3a42afSjmmv ++iter;
137*6b3a42afSjmmv ATF_REQUIRE(iter != table.end());
138*6b3a42afSjmmv ATF_REQUIRE(row2 == *iter);
139*6b3a42afSjmmv ++iter;
140*6b3a42afSjmmv ATF_REQUIRE(iter == table.end());
141*6b3a42afSjmmv }
142*6b3a42afSjmmv
143*6b3a42afSjmmv
144*6b3a42afSjmmv ATF_TEST_CASE_WITHOUT_HEAD(table_formatter__empty);
ATF_TEST_CASE_BODY(table_formatter__empty)145*6b3a42afSjmmv ATF_TEST_CASE_BODY(table_formatter__empty)
146*6b3a42afSjmmv {
147*6b3a42afSjmmv ATF_REQUIRE(text::table_formatter().set_separator(" ")
148*6b3a42afSjmmv .format(text::table(1)).empty());
149*6b3a42afSjmmv ATF_REQUIRE(text::table_formatter().set_separator(" ")
150*6b3a42afSjmmv .format(text::table(10)).empty());
151*6b3a42afSjmmv }
152*6b3a42afSjmmv
153*6b3a42afSjmmv
154*6b3a42afSjmmv ATF_TEST_CASE_WITHOUT_HEAD(table_formatter__defaults);
ATF_TEST_CASE_BODY(table_formatter__defaults)155*6b3a42afSjmmv ATF_TEST_CASE_BODY(table_formatter__defaults)
156*6b3a42afSjmmv {
157*6b3a42afSjmmv text::table table(3);
158*6b3a42afSjmmv {
159*6b3a42afSjmmv text::table_row row;
160*6b3a42afSjmmv row.push_back("First");
161*6b3a42afSjmmv row.push_back("Second");
162*6b3a42afSjmmv row.push_back("Third");
163*6b3a42afSjmmv table.add_row(row);
164*6b3a42afSjmmv }
165*6b3a42afSjmmv {
166*6b3a42afSjmmv text::table_row row;
167*6b3a42afSjmmv row.push_back("Fourth with some text");
168*6b3a42afSjmmv row.push_back("Fifth with some more text");
169*6b3a42afSjmmv row.push_back("Sixth foo");
170*6b3a42afSjmmv table.add_row(row);
171*6b3a42afSjmmv }
172*6b3a42afSjmmv
173*6b3a42afSjmmv table_formatter_check(
174*6b3a42afSjmmv "First Second Third\n"
175*6b3a42afSjmmv "Fourth with some textFifth with some more textSixth foo\n",
176*6b3a42afSjmmv text::table_formatter(), table);
177*6b3a42afSjmmv }
178*6b3a42afSjmmv
179*6b3a42afSjmmv
180*6b3a42afSjmmv ATF_TEST_CASE_WITHOUT_HEAD(table_formatter__one_column__no_max_width);
ATF_TEST_CASE_BODY(table_formatter__one_column__no_max_width)181*6b3a42afSjmmv ATF_TEST_CASE_BODY(table_formatter__one_column__no_max_width)
182*6b3a42afSjmmv {
183*6b3a42afSjmmv text::table table(1);
184*6b3a42afSjmmv {
185*6b3a42afSjmmv text::table_row row;
186*6b3a42afSjmmv row.push_back("First row with some words");
187*6b3a42afSjmmv table.add_row(row);
188*6b3a42afSjmmv }
189*6b3a42afSjmmv {
190*6b3a42afSjmmv text::table_row row;
191*6b3a42afSjmmv row.push_back("Second row with some words");
192*6b3a42afSjmmv table.add_row(row);
193*6b3a42afSjmmv }
194*6b3a42afSjmmv
195*6b3a42afSjmmv table_formatter_check(
196*6b3a42afSjmmv "First row with some words\n"
197*6b3a42afSjmmv "Second row with some words\n",
198*6b3a42afSjmmv text::table_formatter().set_separator(" | "), table);
199*6b3a42afSjmmv }
200*6b3a42afSjmmv
201*6b3a42afSjmmv
202*6b3a42afSjmmv ATF_TEST_CASE_WITHOUT_HEAD(table_formatter__one_column__explicit_width);
ATF_TEST_CASE_BODY(table_formatter__one_column__explicit_width)203*6b3a42afSjmmv ATF_TEST_CASE_BODY(table_formatter__one_column__explicit_width)
204*6b3a42afSjmmv {
205*6b3a42afSjmmv text::table table(1);
206*6b3a42afSjmmv {
207*6b3a42afSjmmv text::table_row row;
208*6b3a42afSjmmv row.push_back("First row with some words");
209*6b3a42afSjmmv table.add_row(row);
210*6b3a42afSjmmv }
211*6b3a42afSjmmv {
212*6b3a42afSjmmv text::table_row row;
213*6b3a42afSjmmv row.push_back("Second row with some words");
214*6b3a42afSjmmv table.add_row(row);
215*6b3a42afSjmmv }
216*6b3a42afSjmmv
217*6b3a42afSjmmv table_formatter_check(
218*6b3a42afSjmmv "First row with some words\n"
219*6b3a42afSjmmv "Second row with some words\n",
220*6b3a42afSjmmv text::table_formatter().set_separator(" | ").set_column_width(0, 1024),
221*6b3a42afSjmmv table);
222*6b3a42afSjmmv }
223*6b3a42afSjmmv
224*6b3a42afSjmmv
225*6b3a42afSjmmv ATF_TEST_CASE_WITHOUT_HEAD(table_formatter__one_column__max_width);
ATF_TEST_CASE_BODY(table_formatter__one_column__max_width)226*6b3a42afSjmmv ATF_TEST_CASE_BODY(table_formatter__one_column__max_width)
227*6b3a42afSjmmv {
228*6b3a42afSjmmv text::table table(1);
229*6b3a42afSjmmv {
230*6b3a42afSjmmv text::table_row row;
231*6b3a42afSjmmv row.push_back("First row with some words");
232*6b3a42afSjmmv table.add_row(row);
233*6b3a42afSjmmv }
234*6b3a42afSjmmv {
235*6b3a42afSjmmv text::table_row row;
236*6b3a42afSjmmv row.push_back("Second row with some words");
237*6b3a42afSjmmv table.add_row(row);
238*6b3a42afSjmmv }
239*6b3a42afSjmmv
240*6b3a42afSjmmv table_formatter_check(
241*6b3a42afSjmmv "First row\nwith some\nwords\n"
242*6b3a42afSjmmv "Second row\nwith some\nwords\n",
243*6b3a42afSjmmv text::table_formatter().set_separator(" | ").set_table_width(11),
244*6b3a42afSjmmv table);
245*6b3a42afSjmmv }
246*6b3a42afSjmmv
247*6b3a42afSjmmv
248*6b3a42afSjmmv ATF_TEST_CASE_WITHOUT_HEAD(table_formatter__many_columns__no_max_width);
ATF_TEST_CASE_BODY(table_formatter__many_columns__no_max_width)249*6b3a42afSjmmv ATF_TEST_CASE_BODY(table_formatter__many_columns__no_max_width)
250*6b3a42afSjmmv {
251*6b3a42afSjmmv text::table table(3);
252*6b3a42afSjmmv {
253*6b3a42afSjmmv text::table_row row;
254*6b3a42afSjmmv row.push_back("First");
255*6b3a42afSjmmv row.push_back("Second");
256*6b3a42afSjmmv row.push_back("Third");
257*6b3a42afSjmmv table.add_row(row);
258*6b3a42afSjmmv }
259*6b3a42afSjmmv {
260*6b3a42afSjmmv text::table_row row;
261*6b3a42afSjmmv row.push_back("Fourth with some text");
262*6b3a42afSjmmv row.push_back("Fifth with some more text");
263*6b3a42afSjmmv row.push_back("Sixth foo");
264*6b3a42afSjmmv table.add_row(row);
265*6b3a42afSjmmv }
266*6b3a42afSjmmv
267*6b3a42afSjmmv table_formatter_check(
268*6b3a42afSjmmv "First | Second | Third\n"
269*6b3a42afSjmmv "Fourth with some text | Fifth with some more text | Sixth foo\n",
270*6b3a42afSjmmv text::table_formatter().set_separator(" | "), table);
271*6b3a42afSjmmv }
272*6b3a42afSjmmv
273*6b3a42afSjmmv
274*6b3a42afSjmmv ATF_TEST_CASE_WITHOUT_HEAD(table_formatter__many_columns__explicit_width);
ATF_TEST_CASE_BODY(table_formatter__many_columns__explicit_width)275*6b3a42afSjmmv ATF_TEST_CASE_BODY(table_formatter__many_columns__explicit_width)
276*6b3a42afSjmmv {
277*6b3a42afSjmmv text::table table(3);
278*6b3a42afSjmmv {
279*6b3a42afSjmmv text::table_row row;
280*6b3a42afSjmmv row.push_back("First");
281*6b3a42afSjmmv row.push_back("Second");
282*6b3a42afSjmmv row.push_back("Third");
283*6b3a42afSjmmv table.add_row(row);
284*6b3a42afSjmmv }
285*6b3a42afSjmmv {
286*6b3a42afSjmmv text::table_row row;
287*6b3a42afSjmmv row.push_back("Fourth with some text");
288*6b3a42afSjmmv row.push_back("Fifth with some more text");
289*6b3a42afSjmmv row.push_back("Sixth foo");
290*6b3a42afSjmmv table.add_row(row);
291*6b3a42afSjmmv }
292*6b3a42afSjmmv
293*6b3a42afSjmmv table_formatter_check(
294*6b3a42afSjmmv "First | Second | Third\n"
295*6b3a42afSjmmv "Fourth with some text | Fifth with some more text | Sixth foo\n",
296*6b3a42afSjmmv text::table_formatter().set_separator(" | ").set_column_width(0, 23)
297*6b3a42afSjmmv .set_column_width(1, 28), table);
298*6b3a42afSjmmv }
299*6b3a42afSjmmv
300*6b3a42afSjmmv
301*6b3a42afSjmmv ATF_TEST_CASE_WITHOUT_HEAD(table_formatter__many_columns__max_width);
ATF_TEST_CASE_BODY(table_formatter__many_columns__max_width)302*6b3a42afSjmmv ATF_TEST_CASE_BODY(table_formatter__many_columns__max_width)
303*6b3a42afSjmmv {
304*6b3a42afSjmmv text::table table(3);
305*6b3a42afSjmmv {
306*6b3a42afSjmmv text::table_row row;
307*6b3a42afSjmmv row.push_back("First");
308*6b3a42afSjmmv row.push_back("Second");
309*6b3a42afSjmmv row.push_back("Third");
310*6b3a42afSjmmv table.add_row(row);
311*6b3a42afSjmmv }
312*6b3a42afSjmmv {
313*6b3a42afSjmmv text::table_row row;
314*6b3a42afSjmmv row.push_back("Fourth with some text");
315*6b3a42afSjmmv row.push_back("Fifth with some more text");
316*6b3a42afSjmmv row.push_back("Sixth foo");
317*6b3a42afSjmmv table.add_row(row);
318*6b3a42afSjmmv }
319*6b3a42afSjmmv
320*6b3a42afSjmmv table_formatter_check(
321*6b3a42afSjmmv "First | Second | Third\n"
322*6b3a42afSjmmv "Fourth with some text | Fifth with | Sixth foo\n"
323*6b3a42afSjmmv " | some more | \n"
324*6b3a42afSjmmv " | text | \n",
325*6b3a42afSjmmv text::table_formatter().set_separator(" | ").set_table_width(46)
326*6b3a42afSjmmv .set_column_width(1, text::table_formatter::width_refill)
327*6b3a42afSjmmv .set_column_width(0, text::table_formatter::width_auto), table);
328*6b3a42afSjmmv
329*6b3a42afSjmmv table_formatter_check(
330*6b3a42afSjmmv "First | Second | Third\n"
331*6b3a42afSjmmv "Fourth with some text | Fifth with | Sixth foo\n"
332*6b3a42afSjmmv " | some more | \n"
333*6b3a42afSjmmv " | text | \n",
334*6b3a42afSjmmv text::table_formatter().set_separator(" | ").set_table_width(48)
335*6b3a42afSjmmv .set_column_width(1, text::table_formatter::width_refill)
336*6b3a42afSjmmv .set_column_width(0, 23), table);
337*6b3a42afSjmmv }
338*6b3a42afSjmmv
339*6b3a42afSjmmv
340*6b3a42afSjmmv ATF_TEST_CASE_WITHOUT_HEAD(table_formatter__use_case__cli_help);
ATF_TEST_CASE_BODY(table_formatter__use_case__cli_help)341*6b3a42afSjmmv ATF_TEST_CASE_BODY(table_formatter__use_case__cli_help)
342*6b3a42afSjmmv {
343*6b3a42afSjmmv text::table options_table(2);
344*6b3a42afSjmmv {
345*6b3a42afSjmmv text::table_row row;
346*6b3a42afSjmmv row.push_back("-a a_value");
347*6b3a42afSjmmv row.push_back("This is the description of the first flag");
348*6b3a42afSjmmv options_table.add_row(row);
349*6b3a42afSjmmv }
350*6b3a42afSjmmv {
351*6b3a42afSjmmv text::table_row row;
352*6b3a42afSjmmv row.push_back("-b");
353*6b3a42afSjmmv row.push_back("And this is the text for the second flag");
354*6b3a42afSjmmv options_table.add_row(row);
355*6b3a42afSjmmv }
356*6b3a42afSjmmv
357*6b3a42afSjmmv text::table commands_table(2);
358*6b3a42afSjmmv {
359*6b3a42afSjmmv text::table_row row;
360*6b3a42afSjmmv row.push_back("first");
361*6b3a42afSjmmv row.push_back("This is the first command");
362*6b3a42afSjmmv commands_table.add_row(row);
363*6b3a42afSjmmv }
364*6b3a42afSjmmv {
365*6b3a42afSjmmv text::table_row row;
366*6b3a42afSjmmv row.push_back("second");
367*6b3a42afSjmmv row.push_back("And this is the second command");
368*6b3a42afSjmmv commands_table.add_row(row);
369*6b3a42afSjmmv }
370*6b3a42afSjmmv
371*6b3a42afSjmmv const text::widths_vector::value_type first_width =
372*6b3a42afSjmmv std::max(options_table.column_width(0), commands_table.column_width(0));
373*6b3a42afSjmmv
374*6b3a42afSjmmv table_formatter_check(
375*6b3a42afSjmmv "-a a_value This is the description\n"
376*6b3a42afSjmmv " of the first flag\n"
377*6b3a42afSjmmv "-b And this is the text for\n"
378*6b3a42afSjmmv " the second flag\n",
379*6b3a42afSjmmv text::table_formatter().set_separator(" ").set_table_width(36)
380*6b3a42afSjmmv .set_column_width(0, first_width)
381*6b3a42afSjmmv .set_column_width(1, text::table_formatter::width_refill),
382*6b3a42afSjmmv options_table);
383*6b3a42afSjmmv
384*6b3a42afSjmmv table_formatter_check(
385*6b3a42afSjmmv "first This is the first\n"
386*6b3a42afSjmmv " command\n"
387*6b3a42afSjmmv "second And this is the second\n"
388*6b3a42afSjmmv " command\n",
389*6b3a42afSjmmv text::table_formatter().set_separator(" ").set_table_width(36)
390*6b3a42afSjmmv .set_column_width(0, first_width)
391*6b3a42afSjmmv .set_column_width(1, text::table_formatter::width_refill),
392*6b3a42afSjmmv commands_table);
393*6b3a42afSjmmv }
394*6b3a42afSjmmv
395*6b3a42afSjmmv
ATF_INIT_TEST_CASES(tcs)396*6b3a42afSjmmv ATF_INIT_TEST_CASES(tcs)
397*6b3a42afSjmmv {
398*6b3a42afSjmmv ATF_ADD_TEST_CASE(tcs, table__ncolumns);
399*6b3a42afSjmmv ATF_ADD_TEST_CASE(tcs, table__column_width);
400*6b3a42afSjmmv ATF_ADD_TEST_CASE(tcs, table__column_widths);
401*6b3a42afSjmmv ATF_ADD_TEST_CASE(tcs, table__empty);
402*6b3a42afSjmmv ATF_ADD_TEST_CASE(tcs, table__iterate);
403*6b3a42afSjmmv
404*6b3a42afSjmmv ATF_ADD_TEST_CASE(tcs, table_formatter__empty);
405*6b3a42afSjmmv ATF_ADD_TEST_CASE(tcs, table_formatter__defaults);
406*6b3a42afSjmmv ATF_ADD_TEST_CASE(tcs, table_formatter__one_column__no_max_width);
407*6b3a42afSjmmv ATF_ADD_TEST_CASE(tcs, table_formatter__one_column__explicit_width);
408*6b3a42afSjmmv ATF_ADD_TEST_CASE(tcs, table_formatter__one_column__max_width);
409*6b3a42afSjmmv ATF_ADD_TEST_CASE(tcs, table_formatter__many_columns__no_max_width);
410*6b3a42afSjmmv ATF_ADD_TEST_CASE(tcs, table_formatter__many_columns__explicit_width);
411*6b3a42afSjmmv ATF_ADD_TEST_CASE(tcs, table_formatter__many_columns__max_width);
412*6b3a42afSjmmv ATF_ADD_TEST_CASE(tcs, table_formatter__use_case__cli_help);
413*6b3a42afSjmmv }
414