1*b0d29bc4SBrooks Davis // Copyright 2010 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 "cli/cmd_about.hpp"
30*b0d29bc4SBrooks Davis
31*b0d29bc4SBrooks Davis #if defined(HAVE_CONFIG_H)
32*b0d29bc4SBrooks Davis # include "config.h"
33*b0d29bc4SBrooks Davis #endif
34*b0d29bc4SBrooks Davis
35*b0d29bc4SBrooks Davis #include <cstdlib>
36*b0d29bc4SBrooks Davis
37*b0d29bc4SBrooks Davis #include <atf-c++.hpp>
38*b0d29bc4SBrooks Davis
39*b0d29bc4SBrooks Davis #include "cli/common.ipp"
40*b0d29bc4SBrooks Davis #include "engine/config.hpp"
41*b0d29bc4SBrooks Davis #include "utils/cmdline/exceptions.hpp"
42*b0d29bc4SBrooks Davis #include "utils/cmdline/parser.hpp"
43*b0d29bc4SBrooks Davis #include "utils/cmdline/ui_mock.hpp"
44*b0d29bc4SBrooks Davis #include "utils/config/tree.ipp"
45*b0d29bc4SBrooks Davis #include "utils/env.hpp"
46*b0d29bc4SBrooks Davis #include "utils/fs/operations.hpp"
47*b0d29bc4SBrooks Davis #include "utils/fs/path.hpp"
48*b0d29bc4SBrooks Davis
49*b0d29bc4SBrooks Davis namespace cmdline = utils::cmdline;
50*b0d29bc4SBrooks Davis namespace fs = utils::fs;
51*b0d29bc4SBrooks Davis
52*b0d29bc4SBrooks Davis using cli::cmd_about;
53*b0d29bc4SBrooks Davis
54*b0d29bc4SBrooks Davis
55*b0d29bc4SBrooks Davis ATF_TEST_CASE_WITHOUT_HEAD(all_topics__ok);
ATF_TEST_CASE_BODY(all_topics__ok)56*b0d29bc4SBrooks Davis ATF_TEST_CASE_BODY(all_topics__ok)
57*b0d29bc4SBrooks Davis {
58*b0d29bc4SBrooks Davis cmdline::args_vector args;
59*b0d29bc4SBrooks Davis args.push_back("about");
60*b0d29bc4SBrooks Davis
61*b0d29bc4SBrooks Davis fs::mkdir(fs::path("fake-docs"), 0755);
62*b0d29bc4SBrooks Davis atf::utils::create_file("fake-docs/AUTHORS",
63*b0d29bc4SBrooks Davis "Content of AUTHORS\n"
64*b0d29bc4SBrooks Davis "* First author\n"
65*b0d29bc4SBrooks Davis " * garbage\n"
66*b0d29bc4SBrooks Davis "* Second author\n");
67*b0d29bc4SBrooks Davis atf::utils::create_file("fake-docs/CONTRIBUTORS",
68*b0d29bc4SBrooks Davis "Content of CONTRIBUTORS\n"
69*b0d29bc4SBrooks Davis "* First contributor\n"
70*b0d29bc4SBrooks Davis " * garbage\n"
71*b0d29bc4SBrooks Davis "* Second contributor\n");
72*b0d29bc4SBrooks Davis atf::utils::create_file("fake-docs/LICENSE", "Content of LICENSE\n");
73*b0d29bc4SBrooks Davis
74*b0d29bc4SBrooks Davis utils::setenv("KYUA_DOCDIR", "fake-docs");
75*b0d29bc4SBrooks Davis cmd_about cmd;
76*b0d29bc4SBrooks Davis cmdline::ui_mock ui;
77*b0d29bc4SBrooks Davis ATF_REQUIRE_EQ(EXIT_SUCCESS, cmd.main(&ui, args, engine::default_config()));
78*b0d29bc4SBrooks Davis
79*b0d29bc4SBrooks Davis ATF_REQUIRE(atf::utils::grep_string(PACKAGE_NAME, ui.out_log()[0]));
80*b0d29bc4SBrooks Davis ATF_REQUIRE(atf::utils::grep_string(PACKAGE_VERSION, ui.out_log()[0]));
81*b0d29bc4SBrooks Davis
82*b0d29bc4SBrooks Davis ATF_REQUIRE(!atf::utils::grep_collection("Content of AUTHORS",
83*b0d29bc4SBrooks Davis ui.out_log()));
84*b0d29bc4SBrooks Davis ATF_REQUIRE(atf::utils::grep_collection("\\* First author", ui.out_log()));
85*b0d29bc4SBrooks Davis ATF_REQUIRE(!atf::utils::grep_collection("garbage", ui.out_log()));
86*b0d29bc4SBrooks Davis ATF_REQUIRE(atf::utils::grep_collection("\\* Second author", ui.out_log()));
87*b0d29bc4SBrooks Davis
88*b0d29bc4SBrooks Davis ATF_REQUIRE(!atf::utils::grep_collection("Content of CONTRIBUTORS",
89*b0d29bc4SBrooks Davis ui.out_log()));
90*b0d29bc4SBrooks Davis ATF_REQUIRE(atf::utils::grep_collection("\\* First contributor",
91*b0d29bc4SBrooks Davis ui.out_log()));
92*b0d29bc4SBrooks Davis ATF_REQUIRE(!atf::utils::grep_collection("garbage", ui.out_log()));
93*b0d29bc4SBrooks Davis ATF_REQUIRE(atf::utils::grep_collection("\\* Second contributor",
94*b0d29bc4SBrooks Davis ui.out_log()));
95*b0d29bc4SBrooks Davis
96*b0d29bc4SBrooks Davis ATF_REQUIRE(atf::utils::grep_collection("Content of LICENSE",
97*b0d29bc4SBrooks Davis ui.out_log()));
98*b0d29bc4SBrooks Davis
99*b0d29bc4SBrooks Davis ATF_REQUIRE(atf::utils::grep_collection("Homepage", ui.out_log()));
100*b0d29bc4SBrooks Davis ATF_REQUIRE(ui.err_log().empty());
101*b0d29bc4SBrooks Davis }
102*b0d29bc4SBrooks Davis
103*b0d29bc4SBrooks Davis
104*b0d29bc4SBrooks Davis ATF_TEST_CASE_WITHOUT_HEAD(all_topics__missing_docs);
ATF_TEST_CASE_BODY(all_topics__missing_docs)105*b0d29bc4SBrooks Davis ATF_TEST_CASE_BODY(all_topics__missing_docs)
106*b0d29bc4SBrooks Davis {
107*b0d29bc4SBrooks Davis cmdline::args_vector args;
108*b0d29bc4SBrooks Davis args.push_back("about");
109*b0d29bc4SBrooks Davis
110*b0d29bc4SBrooks Davis utils::setenv("KYUA_DOCDIR", "fake-docs");
111*b0d29bc4SBrooks Davis cmd_about cmd;
112*b0d29bc4SBrooks Davis cmdline::ui_mock ui;
113*b0d29bc4SBrooks Davis ATF_REQUIRE_EQ(EXIT_FAILURE, cmd.main(&ui, args, engine::default_config()));
114*b0d29bc4SBrooks Davis
115*b0d29bc4SBrooks Davis ATF_REQUIRE(atf::utils::grep_string(PACKAGE_NAME, ui.out_log()[0]));
116*b0d29bc4SBrooks Davis ATF_REQUIRE(atf::utils::grep_string(PACKAGE_VERSION, ui.out_log()[0]));
117*b0d29bc4SBrooks Davis
118*b0d29bc4SBrooks Davis ATF_REQUIRE(atf::utils::grep_collection("Homepage", ui.out_log()));
119*b0d29bc4SBrooks Davis
120*b0d29bc4SBrooks Davis ATF_REQUIRE(atf::utils::grep_collection("Failed to open.*AUTHORS",
121*b0d29bc4SBrooks Davis ui.err_log()));
122*b0d29bc4SBrooks Davis ATF_REQUIRE(atf::utils::grep_collection("Failed to open.*CONTRIBUTORS",
123*b0d29bc4SBrooks Davis ui.err_log()));
124*b0d29bc4SBrooks Davis ATF_REQUIRE(atf::utils::grep_collection("Failed to open.*LICENSE",
125*b0d29bc4SBrooks Davis ui.err_log()));
126*b0d29bc4SBrooks Davis }
127*b0d29bc4SBrooks Davis
128*b0d29bc4SBrooks Davis
129*b0d29bc4SBrooks Davis ATF_TEST_CASE_WITHOUT_HEAD(topic_authors__ok);
ATF_TEST_CASE_BODY(topic_authors__ok)130*b0d29bc4SBrooks Davis ATF_TEST_CASE_BODY(topic_authors__ok)
131*b0d29bc4SBrooks Davis {
132*b0d29bc4SBrooks Davis cmdline::args_vector args;
133*b0d29bc4SBrooks Davis args.push_back("about");
134*b0d29bc4SBrooks Davis args.push_back("authors");
135*b0d29bc4SBrooks Davis
136*b0d29bc4SBrooks Davis fs::mkdir(fs::path("fake-docs"), 0755);
137*b0d29bc4SBrooks Davis atf::utils::create_file("fake-docs/AUTHORS",
138*b0d29bc4SBrooks Davis "Content of AUTHORS\n"
139*b0d29bc4SBrooks Davis "* First author\n"
140*b0d29bc4SBrooks Davis " * garbage\n"
141*b0d29bc4SBrooks Davis "* Second author\n");
142*b0d29bc4SBrooks Davis atf::utils::create_file("fake-docs/CONTRIBUTORS",
143*b0d29bc4SBrooks Davis "Content of CONTRIBUTORS\n"
144*b0d29bc4SBrooks Davis "* First contributor\n"
145*b0d29bc4SBrooks Davis " * garbage\n"
146*b0d29bc4SBrooks Davis "* Second contributor\n");
147*b0d29bc4SBrooks Davis
148*b0d29bc4SBrooks Davis utils::setenv("KYUA_DOCDIR", "fake-docs");
149*b0d29bc4SBrooks Davis cmd_about cmd;
150*b0d29bc4SBrooks Davis cmdline::ui_mock ui;
151*b0d29bc4SBrooks Davis ATF_REQUIRE_EQ(EXIT_SUCCESS, cmd.main(&ui, args, engine::default_config()));
152*b0d29bc4SBrooks Davis ATF_REQUIRE(!atf::utils::grep_string(PACKAGE_NAME, ui.out_log()[0]));
153*b0d29bc4SBrooks Davis
154*b0d29bc4SBrooks Davis ATF_REQUIRE(!atf::utils::grep_collection("Content of AUTHORS",
155*b0d29bc4SBrooks Davis ui.out_log()));
156*b0d29bc4SBrooks Davis ATF_REQUIRE(atf::utils::grep_collection("\\* First author", ui.out_log()));
157*b0d29bc4SBrooks Davis ATF_REQUIRE(!atf::utils::grep_collection("garbage", ui.out_log()));
158*b0d29bc4SBrooks Davis ATF_REQUIRE(atf::utils::grep_collection("\\* Second author", ui.out_log()));
159*b0d29bc4SBrooks Davis
160*b0d29bc4SBrooks Davis ATF_REQUIRE(!atf::utils::grep_collection("Content of CONTRIBUTORS",
161*b0d29bc4SBrooks Davis ui.out_log()));
162*b0d29bc4SBrooks Davis ATF_REQUIRE(atf::utils::grep_collection("\\* First contributor",
163*b0d29bc4SBrooks Davis ui.out_log()));
164*b0d29bc4SBrooks Davis ATF_REQUIRE(!atf::utils::grep_collection("garbage", ui.out_log()));
165*b0d29bc4SBrooks Davis ATF_REQUIRE(atf::utils::grep_collection("\\* Second contributor",
166*b0d29bc4SBrooks Davis ui.out_log()));
167*b0d29bc4SBrooks Davis
168*b0d29bc4SBrooks Davis ATF_REQUIRE(!atf::utils::grep_collection("LICENSE", ui.out_log()));
169*b0d29bc4SBrooks Davis ATF_REQUIRE(!atf::utils::grep_collection("Homepage", ui.out_log()));
170*b0d29bc4SBrooks Davis ATF_REQUIRE(ui.err_log().empty());
171*b0d29bc4SBrooks Davis }
172*b0d29bc4SBrooks Davis
173*b0d29bc4SBrooks Davis
174*b0d29bc4SBrooks Davis ATF_TEST_CASE_WITHOUT_HEAD(topic_authors__missing_doc);
ATF_TEST_CASE_BODY(topic_authors__missing_doc)175*b0d29bc4SBrooks Davis ATF_TEST_CASE_BODY(topic_authors__missing_doc)
176*b0d29bc4SBrooks Davis {
177*b0d29bc4SBrooks Davis cmdline::args_vector args;
178*b0d29bc4SBrooks Davis args.push_back("about");
179*b0d29bc4SBrooks Davis args.push_back("authors");
180*b0d29bc4SBrooks Davis
181*b0d29bc4SBrooks Davis utils::setenv("KYUA_DOCDIR", "fake-docs");
182*b0d29bc4SBrooks Davis cmd_about cmd;
183*b0d29bc4SBrooks Davis cmdline::ui_mock ui;
184*b0d29bc4SBrooks Davis ATF_REQUIRE_EQ(EXIT_FAILURE, cmd.main(&ui, args, engine::default_config()));
185*b0d29bc4SBrooks Davis
186*b0d29bc4SBrooks Davis ATF_REQUIRE_EQ(0, ui.out_log().size());
187*b0d29bc4SBrooks Davis
188*b0d29bc4SBrooks Davis ATF_REQUIRE(atf::utils::grep_collection("Failed to open.*AUTHORS",
189*b0d29bc4SBrooks Davis ui.err_log()));
190*b0d29bc4SBrooks Davis ATF_REQUIRE(atf::utils::grep_collection("Failed to open.*CONTRIBUTORS",
191*b0d29bc4SBrooks Davis ui.err_log()));
192*b0d29bc4SBrooks Davis ATF_REQUIRE(!atf::utils::grep_collection("Failed to open.*LICENSE",
193*b0d29bc4SBrooks Davis ui.err_log()));
194*b0d29bc4SBrooks Davis }
195*b0d29bc4SBrooks Davis
196*b0d29bc4SBrooks Davis
197*b0d29bc4SBrooks Davis ATF_TEST_CASE_WITHOUT_HEAD(topic_license__ok);
ATF_TEST_CASE_BODY(topic_license__ok)198*b0d29bc4SBrooks Davis ATF_TEST_CASE_BODY(topic_license__ok)
199*b0d29bc4SBrooks Davis {
200*b0d29bc4SBrooks Davis cmdline::args_vector args;
201*b0d29bc4SBrooks Davis args.push_back("about");
202*b0d29bc4SBrooks Davis args.push_back("license");
203*b0d29bc4SBrooks Davis
204*b0d29bc4SBrooks Davis fs::mkdir(fs::path("fake-docs"), 0755);
205*b0d29bc4SBrooks Davis atf::utils::create_file("fake-docs/LICENSE", "Content of LICENSE\n");
206*b0d29bc4SBrooks Davis
207*b0d29bc4SBrooks Davis utils::setenv("KYUA_DOCDIR", "fake-docs");
208*b0d29bc4SBrooks Davis cmd_about cmd;
209*b0d29bc4SBrooks Davis cmdline::ui_mock ui;
210*b0d29bc4SBrooks Davis ATF_REQUIRE_EQ(EXIT_SUCCESS, cmd.main(&ui, args, engine::default_config()));
211*b0d29bc4SBrooks Davis ATF_REQUIRE(!atf::utils::grep_string(PACKAGE_NAME, ui.out_log()[0]));
212*b0d29bc4SBrooks Davis ATF_REQUIRE(!atf::utils::grep_collection("AUTHORS", ui.out_log()));
213*b0d29bc4SBrooks Davis ATF_REQUIRE(!atf::utils::grep_collection("CONTRIBUTORS", ui.out_log()));
214*b0d29bc4SBrooks Davis ATF_REQUIRE(atf::utils::grep_collection("Content of LICENSE",
215*b0d29bc4SBrooks Davis ui.out_log()));
216*b0d29bc4SBrooks Davis ATF_REQUIRE(!atf::utils::grep_collection("Homepage", ui.out_log()));
217*b0d29bc4SBrooks Davis ATF_REQUIRE(ui.err_log().empty());
218*b0d29bc4SBrooks Davis }
219*b0d29bc4SBrooks Davis
220*b0d29bc4SBrooks Davis
221*b0d29bc4SBrooks Davis ATF_TEST_CASE_WITHOUT_HEAD(topic_license__missing_doc);
ATF_TEST_CASE_BODY(topic_license__missing_doc)222*b0d29bc4SBrooks Davis ATF_TEST_CASE_BODY(topic_license__missing_doc)
223*b0d29bc4SBrooks Davis {
224*b0d29bc4SBrooks Davis cmdline::args_vector args;
225*b0d29bc4SBrooks Davis args.push_back("about");
226*b0d29bc4SBrooks Davis args.push_back("license");
227*b0d29bc4SBrooks Davis
228*b0d29bc4SBrooks Davis utils::setenv("KYUA_DOCDIR", "fake-docs");
229*b0d29bc4SBrooks Davis cmd_about cmd;
230*b0d29bc4SBrooks Davis cmdline::ui_mock ui;
231*b0d29bc4SBrooks Davis ATF_REQUIRE_EQ(EXIT_FAILURE, cmd.main(&ui, args, engine::default_config()));
232*b0d29bc4SBrooks Davis
233*b0d29bc4SBrooks Davis ATF_REQUIRE_EQ(0, ui.out_log().size());
234*b0d29bc4SBrooks Davis
235*b0d29bc4SBrooks Davis ATF_REQUIRE(!atf::utils::grep_collection("Failed to open.*AUTHORS",
236*b0d29bc4SBrooks Davis ui.err_log()));
237*b0d29bc4SBrooks Davis ATF_REQUIRE(!atf::utils::grep_collection("Failed to open.*CONTRIBUTORS",
238*b0d29bc4SBrooks Davis ui.err_log()));
239*b0d29bc4SBrooks Davis ATF_REQUIRE(atf::utils::grep_collection("Failed to open.*LICENSE",
240*b0d29bc4SBrooks Davis ui.err_log()));
241*b0d29bc4SBrooks Davis }
242*b0d29bc4SBrooks Davis
243*b0d29bc4SBrooks Davis
244*b0d29bc4SBrooks Davis ATF_TEST_CASE_WITHOUT_HEAD(topic_version__ok);
ATF_TEST_CASE_BODY(topic_version__ok)245*b0d29bc4SBrooks Davis ATF_TEST_CASE_BODY(topic_version__ok)
246*b0d29bc4SBrooks Davis {
247*b0d29bc4SBrooks Davis cmdline::args_vector args;
248*b0d29bc4SBrooks Davis args.push_back("about");
249*b0d29bc4SBrooks Davis args.push_back("version");
250*b0d29bc4SBrooks Davis
251*b0d29bc4SBrooks Davis utils::setenv("KYUA_DOCDIR", "fake-docs");
252*b0d29bc4SBrooks Davis cmd_about cmd;
253*b0d29bc4SBrooks Davis cmdline::ui_mock ui;
254*b0d29bc4SBrooks Davis ATF_REQUIRE_EQ(EXIT_SUCCESS, cmd.main(&ui, args, engine::default_config()));
255*b0d29bc4SBrooks Davis ATF_REQUIRE_EQ(1, ui.out_log().size());
256*b0d29bc4SBrooks Davis ATF_REQUIRE(atf::utils::grep_string(PACKAGE_NAME, ui.out_log()[0]));
257*b0d29bc4SBrooks Davis ATF_REQUIRE(atf::utils::grep_string(PACKAGE_VERSION, ui.out_log()[0]));
258*b0d29bc4SBrooks Davis ATF_REQUIRE(ui.err_log().empty());
259*b0d29bc4SBrooks Davis }
260*b0d29bc4SBrooks Davis
261*b0d29bc4SBrooks Davis
262*b0d29bc4SBrooks Davis ATF_TEST_CASE_WITHOUT_HEAD(invalid_args);
ATF_TEST_CASE_BODY(invalid_args)263*b0d29bc4SBrooks Davis ATF_TEST_CASE_BODY(invalid_args)
264*b0d29bc4SBrooks Davis {
265*b0d29bc4SBrooks Davis cmdline::args_vector args;
266*b0d29bc4SBrooks Davis args.push_back("about");
267*b0d29bc4SBrooks Davis args.push_back("first");
268*b0d29bc4SBrooks Davis args.push_back("second");
269*b0d29bc4SBrooks Davis
270*b0d29bc4SBrooks Davis cmd_about cmd;
271*b0d29bc4SBrooks Davis cmdline::ui_mock ui;
272*b0d29bc4SBrooks Davis ATF_REQUIRE_THROW_RE(cmdline::usage_error, "Too many arguments",
273*b0d29bc4SBrooks Davis cmd.main(&ui, args, engine::default_config()));
274*b0d29bc4SBrooks Davis ATF_REQUIRE(ui.out_log().empty());
275*b0d29bc4SBrooks Davis ATF_REQUIRE(ui.err_log().empty());
276*b0d29bc4SBrooks Davis }
277*b0d29bc4SBrooks Davis
278*b0d29bc4SBrooks Davis
279*b0d29bc4SBrooks Davis ATF_TEST_CASE_WITHOUT_HEAD(invalid_topic);
ATF_TEST_CASE_BODY(invalid_topic)280*b0d29bc4SBrooks Davis ATF_TEST_CASE_BODY(invalid_topic)
281*b0d29bc4SBrooks Davis {
282*b0d29bc4SBrooks Davis cmdline::args_vector args;
283*b0d29bc4SBrooks Davis args.push_back("about");
284*b0d29bc4SBrooks Davis args.push_back("foo");
285*b0d29bc4SBrooks Davis
286*b0d29bc4SBrooks Davis cmd_about cmd;
287*b0d29bc4SBrooks Davis cmdline::ui_mock ui;
288*b0d29bc4SBrooks Davis ATF_REQUIRE_THROW_RE(cmdline::usage_error, "Invalid about topic 'foo'",
289*b0d29bc4SBrooks Davis cmd.main(&ui, args, engine::default_config()));
290*b0d29bc4SBrooks Davis ATF_REQUIRE(ui.out_log().empty());
291*b0d29bc4SBrooks Davis ATF_REQUIRE(ui.err_log().empty());
292*b0d29bc4SBrooks Davis }
293*b0d29bc4SBrooks Davis
294*b0d29bc4SBrooks Davis
ATF_INIT_TEST_CASES(tcs)295*b0d29bc4SBrooks Davis ATF_INIT_TEST_CASES(tcs)
296*b0d29bc4SBrooks Davis {
297*b0d29bc4SBrooks Davis ATF_ADD_TEST_CASE(tcs, all_topics__ok);
298*b0d29bc4SBrooks Davis ATF_ADD_TEST_CASE(tcs, all_topics__missing_docs);
299*b0d29bc4SBrooks Davis ATF_ADD_TEST_CASE(tcs, topic_authors__ok);
300*b0d29bc4SBrooks Davis ATF_ADD_TEST_CASE(tcs, topic_authors__missing_doc);
301*b0d29bc4SBrooks Davis ATF_ADD_TEST_CASE(tcs, topic_license__ok);
302*b0d29bc4SBrooks Davis ATF_ADD_TEST_CASE(tcs, topic_license__missing_doc);
303*b0d29bc4SBrooks Davis ATF_ADD_TEST_CASE(tcs, topic_version__ok);
304*b0d29bc4SBrooks Davis ATF_ADD_TEST_CASE(tcs, invalid_args);
305*b0d29bc4SBrooks Davis ATF_ADD_TEST_CASE(tcs, invalid_topic);
306*b0d29bc4SBrooks Davis }
307