1 // Copyright 2010 The Kyua Authors.
2 // All rights reserved.
4 // Redistribution and use in source and binary forms, with or without
5 // modification, are permitted provided that the following conditions are
8 // * Redistributions of source code must retain the above copyright
9 // notice, this list of conditions and the following disclaimer.
10 // * Redistributions in binary form must reproduce the above copyright
11 // notice, this list of conditions and the following disclaimer in the
12 // documentation and/or other materials provided with the distribution.
13 // * Neither the name of Google Inc. nor the names of its contributors
14 // may be used to endorse or promote products derived from this software
15 // without specific prior written permission.
17 // THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
18 // "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
19 // LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
20 // A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
21 // OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
22 // SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
23 // LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
24 // DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
25 // THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
26 // (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
27 // OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
29 #include "cli/cmd_about.hpp"
31 #if defined(HAVE_CONFIG_H)
37 #include <atf-c++.hpp>
39 #include "cli/common.ipp"
40 #include "engine/config.hpp"
41 #include "utils/cmdline/exceptions.hpp"
42 #include "utils/cmdline/parser.hpp"
43 #include "utils/cmdline/ui_mock.hpp"
44 #include "utils/config/tree.ipp"
45 #include "utils/env.hpp"
46 #include "utils/fs/operations.hpp"
47 #include "utils/fs/path.hpp"
49 namespace cmdline = utils::cmdline;
50 namespace fs = utils::fs;
55 ATF_TEST_CASE_WITHOUT_HEAD(all_topics__ok);
56 ATF_TEST_CASE_BODY(all_topics__ok)
58 cmdline::args_vector args;
59 args.push_back("about");
61 fs::mkdir(fs::path("fake-docs"), 0755);
62 atf::utils::create_file("fake-docs/AUTHORS",
63 "Content of AUTHORS\n"
67 atf::utils::create_file("fake-docs/CONTRIBUTORS",
68 "Content of CONTRIBUTORS\n"
69 "* First contributor\n"
71 "* Second contributor\n");
72 atf::utils::create_file("fake-docs/LICENSE", "Content of LICENSE\n");
74 utils::setenv("KYUA_DOCDIR", "fake-docs");
77 ATF_REQUIRE_EQ(EXIT_SUCCESS, cmd.main(&ui, args, engine::default_config()));
79 ATF_REQUIRE(atf::utils::grep_string(PACKAGE_NAME, ui.out_log()[0]));
80 ATF_REQUIRE(atf::utils::grep_string(PACKAGE_VERSION, ui.out_log()[0]));
82 ATF_REQUIRE(!atf::utils::grep_collection("Content of AUTHORS",
84 ATF_REQUIRE(atf::utils::grep_collection("\\* First author", ui.out_log()));
85 ATF_REQUIRE(!atf::utils::grep_collection("garbage", ui.out_log()));
86 ATF_REQUIRE(atf::utils::grep_collection("\\* Second author", ui.out_log()));
88 ATF_REQUIRE(!atf::utils::grep_collection("Content of CONTRIBUTORS",
90 ATF_REQUIRE(atf::utils::grep_collection("\\* First contributor",
92 ATF_REQUIRE(!atf::utils::grep_collection("garbage", ui.out_log()));
93 ATF_REQUIRE(atf::utils::grep_collection("\\* Second contributor",
96 ATF_REQUIRE(atf::utils::grep_collection("Content of LICENSE",
99 ATF_REQUIRE(atf::utils::grep_collection("Homepage", ui.out_log()));
100 ATF_REQUIRE(ui.err_log().empty());
104 ATF_TEST_CASE_WITHOUT_HEAD(all_topics__missing_docs);
105 ATF_TEST_CASE_BODY(all_topics__missing_docs)
107 cmdline::args_vector args;
108 args.push_back("about");
110 utils::setenv("KYUA_DOCDIR", "fake-docs");
113 ATF_REQUIRE_EQ(EXIT_FAILURE, cmd.main(&ui, args, engine::default_config()));
115 ATF_REQUIRE(atf::utils::grep_string(PACKAGE_NAME, ui.out_log()[0]));
116 ATF_REQUIRE(atf::utils::grep_string(PACKAGE_VERSION, ui.out_log()[0]));
118 ATF_REQUIRE(atf::utils::grep_collection("Homepage", ui.out_log()));
120 ATF_REQUIRE(atf::utils::grep_collection("Failed to open.*AUTHORS",
122 ATF_REQUIRE(atf::utils::grep_collection("Failed to open.*CONTRIBUTORS",
124 ATF_REQUIRE(atf::utils::grep_collection("Failed to open.*LICENSE",
129 ATF_TEST_CASE_WITHOUT_HEAD(topic_authors__ok);
130 ATF_TEST_CASE_BODY(topic_authors__ok)
132 cmdline::args_vector args;
133 args.push_back("about");
134 args.push_back("authors");
136 fs::mkdir(fs::path("fake-docs"), 0755);
137 atf::utils::create_file("fake-docs/AUTHORS",
138 "Content of AUTHORS\n"
141 "* Second author\n");
142 atf::utils::create_file("fake-docs/CONTRIBUTORS",
143 "Content of CONTRIBUTORS\n"
144 "* First contributor\n"
146 "* Second contributor\n");
148 utils::setenv("KYUA_DOCDIR", "fake-docs");
151 ATF_REQUIRE_EQ(EXIT_SUCCESS, cmd.main(&ui, args, engine::default_config()));
152 ATF_REQUIRE(!atf::utils::grep_string(PACKAGE_NAME, ui.out_log()[0]));
154 ATF_REQUIRE(!atf::utils::grep_collection("Content of AUTHORS",
156 ATF_REQUIRE(atf::utils::grep_collection("\\* First author", ui.out_log()));
157 ATF_REQUIRE(!atf::utils::grep_collection("garbage", ui.out_log()));
158 ATF_REQUIRE(atf::utils::grep_collection("\\* Second author", ui.out_log()));
160 ATF_REQUIRE(!atf::utils::grep_collection("Content of CONTRIBUTORS",
162 ATF_REQUIRE(atf::utils::grep_collection("\\* First contributor",
164 ATF_REQUIRE(!atf::utils::grep_collection("garbage", ui.out_log()));
165 ATF_REQUIRE(atf::utils::grep_collection("\\* Second contributor",
168 ATF_REQUIRE(!atf::utils::grep_collection("LICENSE", ui.out_log()));
169 ATF_REQUIRE(!atf::utils::grep_collection("Homepage", ui.out_log()));
170 ATF_REQUIRE(ui.err_log().empty());
174 ATF_TEST_CASE_WITHOUT_HEAD(topic_authors__missing_doc);
175 ATF_TEST_CASE_BODY(topic_authors__missing_doc)
177 cmdline::args_vector args;
178 args.push_back("about");
179 args.push_back("authors");
181 utils::setenv("KYUA_DOCDIR", "fake-docs");
184 ATF_REQUIRE_EQ(EXIT_FAILURE, cmd.main(&ui, args, engine::default_config()));
186 ATF_REQUIRE_EQ(0, ui.out_log().size());
188 ATF_REQUIRE(atf::utils::grep_collection("Failed to open.*AUTHORS",
190 ATF_REQUIRE(atf::utils::grep_collection("Failed to open.*CONTRIBUTORS",
192 ATF_REQUIRE(!atf::utils::grep_collection("Failed to open.*LICENSE",
197 ATF_TEST_CASE_WITHOUT_HEAD(topic_license__ok);
198 ATF_TEST_CASE_BODY(topic_license__ok)
200 cmdline::args_vector args;
201 args.push_back("about");
202 args.push_back("license");
204 fs::mkdir(fs::path("fake-docs"), 0755);
205 atf::utils::create_file("fake-docs/LICENSE", "Content of LICENSE\n");
207 utils::setenv("KYUA_DOCDIR", "fake-docs");
210 ATF_REQUIRE_EQ(EXIT_SUCCESS, cmd.main(&ui, args, engine::default_config()));
211 ATF_REQUIRE(!atf::utils::grep_string(PACKAGE_NAME, ui.out_log()[0]));
212 ATF_REQUIRE(!atf::utils::grep_collection("AUTHORS", ui.out_log()));
213 ATF_REQUIRE(!atf::utils::grep_collection("CONTRIBUTORS", ui.out_log()));
214 ATF_REQUIRE(atf::utils::grep_collection("Content of LICENSE",
216 ATF_REQUIRE(!atf::utils::grep_collection("Homepage", ui.out_log()));
217 ATF_REQUIRE(ui.err_log().empty());
221 ATF_TEST_CASE_WITHOUT_HEAD(topic_license__missing_doc);
222 ATF_TEST_CASE_BODY(topic_license__missing_doc)
224 cmdline::args_vector args;
225 args.push_back("about");
226 args.push_back("license");
228 utils::setenv("KYUA_DOCDIR", "fake-docs");
231 ATF_REQUIRE_EQ(EXIT_FAILURE, cmd.main(&ui, args, engine::default_config()));
233 ATF_REQUIRE_EQ(0, ui.out_log().size());
235 ATF_REQUIRE(!atf::utils::grep_collection("Failed to open.*AUTHORS",
237 ATF_REQUIRE(!atf::utils::grep_collection("Failed to open.*CONTRIBUTORS",
239 ATF_REQUIRE(atf::utils::grep_collection("Failed to open.*LICENSE",
244 ATF_TEST_CASE_WITHOUT_HEAD(topic_version__ok);
245 ATF_TEST_CASE_BODY(topic_version__ok)
247 cmdline::args_vector args;
248 args.push_back("about");
249 args.push_back("version");
251 utils::setenv("KYUA_DOCDIR", "fake-docs");
254 ATF_REQUIRE_EQ(EXIT_SUCCESS, cmd.main(&ui, args, engine::default_config()));
255 ATF_REQUIRE_EQ(1, ui.out_log().size());
256 ATF_REQUIRE(atf::utils::grep_string(PACKAGE_NAME, ui.out_log()[0]));
257 ATF_REQUIRE(atf::utils::grep_string(PACKAGE_VERSION, ui.out_log()[0]));
258 ATF_REQUIRE(ui.err_log().empty());
262 ATF_TEST_CASE_WITHOUT_HEAD(invalid_args);
263 ATF_TEST_CASE_BODY(invalid_args)
265 cmdline::args_vector args;
266 args.push_back("about");
267 args.push_back("first");
268 args.push_back("second");
272 ATF_REQUIRE_THROW_RE(cmdline::usage_error, "Too many arguments",
273 cmd.main(&ui, args, engine::default_config()));
274 ATF_REQUIRE(ui.out_log().empty());
275 ATF_REQUIRE(ui.err_log().empty());
279 ATF_TEST_CASE_WITHOUT_HEAD(invalid_topic);
280 ATF_TEST_CASE_BODY(invalid_topic)
282 cmdline::args_vector args;
283 args.push_back("about");
284 args.push_back("foo");
288 ATF_REQUIRE_THROW_RE(cmdline::usage_error, "Invalid about topic 'foo'",
289 cmd.main(&ui, args, engine::default_config()));
290 ATF_REQUIRE(ui.out_log().empty());
291 ATF_REQUIRE(ui.err_log().empty());
295 ATF_INIT_TEST_CASES(tcs)
297 ATF_ADD_TEST_CASE(tcs, all_topics__ok);
298 ATF_ADD_TEST_CASE(tcs, all_topics__missing_docs);
299 ATF_ADD_TEST_CASE(tcs, topic_authors__ok);
300 ATF_ADD_TEST_CASE(tcs, topic_authors__missing_doc);
301 ATF_ADD_TEST_CASE(tcs, topic_license__ok);
302 ATF_ADD_TEST_CASE(tcs, topic_license__missing_doc);
303 ATF_ADD_TEST_CASE(tcs, topic_version__ok);
304 ATF_ADD_TEST_CASE(tcs, invalid_args);
305 ATF_ADD_TEST_CASE(tcs, invalid_topic);