xref: /netbsd-src/external/bsd/kyua-cli/dist/utils/text/table_test.cpp (revision 6b3a42af15b5e090c339512c790dd68f3d11a9d8)
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