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