xref: /src/contrib/kyua/cli/cmd_about_test.cpp (revision b0d29bc47dba79f6f38e67eabadfb4b32ffd9390)
108334c51SBrooks Davis // Copyright 2010 The Kyua Authors.
208334c51SBrooks Davis // All rights reserved.
308334c51SBrooks Davis //
408334c51SBrooks Davis // Redistribution and use in source and binary forms, with or without
508334c51SBrooks Davis // modification, are permitted provided that the following conditions are
608334c51SBrooks Davis // met:
708334c51SBrooks Davis //
808334c51SBrooks Davis // * Redistributions of source code must retain the above copyright
908334c51SBrooks Davis //   notice, this list of conditions and the following disclaimer.
1008334c51SBrooks Davis // * Redistributions in binary form must reproduce the above copyright
1108334c51SBrooks Davis //   notice, this list of conditions and the following disclaimer in the
1208334c51SBrooks Davis //   documentation and/or other materials provided with the distribution.
1308334c51SBrooks Davis // * Neither the name of Google Inc. nor the names of its contributors
1408334c51SBrooks Davis //   may be used to endorse or promote products derived from this software
1508334c51SBrooks Davis //   without specific prior written permission.
1608334c51SBrooks Davis //
1708334c51SBrooks Davis // THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
1808334c51SBrooks Davis // "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
1908334c51SBrooks Davis // LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
2008334c51SBrooks Davis // A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
2108334c51SBrooks Davis // OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
2208334c51SBrooks Davis // SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
2308334c51SBrooks Davis // LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
2408334c51SBrooks Davis // DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
2508334c51SBrooks Davis // THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
2608334c51SBrooks Davis // (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
2708334c51SBrooks Davis // OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
2808334c51SBrooks Davis 
2908334c51SBrooks Davis #include "cli/cmd_about.hpp"
3008334c51SBrooks Davis 
3108334c51SBrooks Davis #if defined(HAVE_CONFIG_H)
3208334c51SBrooks Davis #   include "config.h"
3308334c51SBrooks Davis #endif
3408334c51SBrooks Davis 
3508334c51SBrooks Davis #include <cstdlib>
3608334c51SBrooks Davis 
3708334c51SBrooks Davis #include <atf-c++.hpp>
3808334c51SBrooks Davis 
3908334c51SBrooks Davis #include "cli/common.ipp"
4008334c51SBrooks Davis #include "engine/config.hpp"
4108334c51SBrooks Davis #include "utils/cmdline/exceptions.hpp"
4208334c51SBrooks Davis #include "utils/cmdline/parser.hpp"
4308334c51SBrooks Davis #include "utils/cmdline/ui_mock.hpp"
4408334c51SBrooks Davis #include "utils/config/tree.ipp"
4508334c51SBrooks Davis #include "utils/env.hpp"
4608334c51SBrooks Davis #include "utils/fs/operations.hpp"
4708334c51SBrooks Davis #include "utils/fs/path.hpp"
4808334c51SBrooks Davis 
4908334c51SBrooks Davis namespace cmdline = utils::cmdline;
5008334c51SBrooks Davis namespace fs = utils::fs;
5108334c51SBrooks Davis 
5208334c51SBrooks Davis using cli::cmd_about;
5308334c51SBrooks Davis 
5408334c51SBrooks Davis 
5508334c51SBrooks Davis ATF_TEST_CASE_WITHOUT_HEAD(all_topics__ok);
ATF_TEST_CASE_BODY(all_topics__ok)5608334c51SBrooks Davis ATF_TEST_CASE_BODY(all_topics__ok)
5708334c51SBrooks Davis {
5808334c51SBrooks Davis     cmdline::args_vector args;
5908334c51SBrooks Davis     args.push_back("about");
6008334c51SBrooks Davis 
6108334c51SBrooks Davis     fs::mkdir(fs::path("fake-docs"), 0755);
6208334c51SBrooks Davis     atf::utils::create_file("fake-docs/AUTHORS",
6308334c51SBrooks Davis                             "Content of AUTHORS\n"
6408334c51SBrooks Davis                             "* First author\n"
6508334c51SBrooks Davis                             " * garbage\n"
6608334c51SBrooks Davis                             "* Second author\n");
6708334c51SBrooks Davis     atf::utils::create_file("fake-docs/CONTRIBUTORS",
6808334c51SBrooks Davis                             "Content of CONTRIBUTORS\n"
6908334c51SBrooks Davis                             "* First contributor\n"
7008334c51SBrooks Davis                             " * garbage\n"
7108334c51SBrooks Davis                             "* Second contributor\n");
7208334c51SBrooks Davis     atf::utils::create_file("fake-docs/LICENSE", "Content of LICENSE\n");
7308334c51SBrooks Davis 
7408334c51SBrooks Davis     utils::setenv("KYUA_DOCDIR", "fake-docs");
7508334c51SBrooks Davis     cmd_about cmd;
7608334c51SBrooks Davis     cmdline::ui_mock ui;
7708334c51SBrooks Davis     ATF_REQUIRE_EQ(EXIT_SUCCESS, cmd.main(&ui, args, engine::default_config()));
7808334c51SBrooks Davis 
7908334c51SBrooks Davis     ATF_REQUIRE(atf::utils::grep_string(PACKAGE_NAME, ui.out_log()[0]));
8008334c51SBrooks Davis     ATF_REQUIRE(atf::utils::grep_string(PACKAGE_VERSION, ui.out_log()[0]));
8108334c51SBrooks Davis 
8208334c51SBrooks Davis     ATF_REQUIRE(!atf::utils::grep_collection("Content of AUTHORS",
8308334c51SBrooks Davis                                              ui.out_log()));
8408334c51SBrooks Davis     ATF_REQUIRE(atf::utils::grep_collection("\\* First author", ui.out_log()));
8508334c51SBrooks Davis     ATF_REQUIRE(!atf::utils::grep_collection("garbage", ui.out_log()));
8608334c51SBrooks Davis     ATF_REQUIRE(atf::utils::grep_collection("\\* Second author", ui.out_log()));
8708334c51SBrooks Davis 
8808334c51SBrooks Davis     ATF_REQUIRE(!atf::utils::grep_collection("Content of CONTRIBUTORS",
8908334c51SBrooks Davis                                              ui.out_log()));
9008334c51SBrooks Davis     ATF_REQUIRE(atf::utils::grep_collection("\\* First contributor",
9108334c51SBrooks Davis                                             ui.out_log()));
9208334c51SBrooks Davis     ATF_REQUIRE(!atf::utils::grep_collection("garbage", ui.out_log()));
9308334c51SBrooks Davis     ATF_REQUIRE(atf::utils::grep_collection("\\* Second contributor",
9408334c51SBrooks Davis                                             ui.out_log()));
9508334c51SBrooks Davis 
9608334c51SBrooks Davis     ATF_REQUIRE(atf::utils::grep_collection("Content of LICENSE",
9708334c51SBrooks Davis                                             ui.out_log()));
9808334c51SBrooks Davis 
9908334c51SBrooks Davis     ATF_REQUIRE(atf::utils::grep_collection("Homepage", ui.out_log()));
10008334c51SBrooks Davis     ATF_REQUIRE(ui.err_log().empty());
10108334c51SBrooks Davis }
10208334c51SBrooks Davis 
10308334c51SBrooks Davis 
10408334c51SBrooks Davis ATF_TEST_CASE_WITHOUT_HEAD(all_topics__missing_docs);
ATF_TEST_CASE_BODY(all_topics__missing_docs)10508334c51SBrooks Davis ATF_TEST_CASE_BODY(all_topics__missing_docs)
10608334c51SBrooks Davis {
10708334c51SBrooks Davis     cmdline::args_vector args;
10808334c51SBrooks Davis     args.push_back("about");
10908334c51SBrooks Davis 
11008334c51SBrooks Davis     utils::setenv("KYUA_DOCDIR", "fake-docs");
11108334c51SBrooks Davis     cmd_about cmd;
11208334c51SBrooks Davis     cmdline::ui_mock ui;
11308334c51SBrooks Davis     ATF_REQUIRE_EQ(EXIT_FAILURE, cmd.main(&ui, args, engine::default_config()));
11408334c51SBrooks Davis 
11508334c51SBrooks Davis     ATF_REQUIRE(atf::utils::grep_string(PACKAGE_NAME, ui.out_log()[0]));
11608334c51SBrooks Davis     ATF_REQUIRE(atf::utils::grep_string(PACKAGE_VERSION, ui.out_log()[0]));
11708334c51SBrooks Davis 
11808334c51SBrooks Davis     ATF_REQUIRE(atf::utils::grep_collection("Homepage", ui.out_log()));
11908334c51SBrooks Davis 
12008334c51SBrooks Davis     ATF_REQUIRE(atf::utils::grep_collection("Failed to open.*AUTHORS",
12108334c51SBrooks Davis                                             ui.err_log()));
12208334c51SBrooks Davis     ATF_REQUIRE(atf::utils::grep_collection("Failed to open.*CONTRIBUTORS",
12308334c51SBrooks Davis                                             ui.err_log()));
12408334c51SBrooks Davis     ATF_REQUIRE(atf::utils::grep_collection("Failed to open.*LICENSE",
12508334c51SBrooks Davis                                             ui.err_log()));
12608334c51SBrooks Davis }
12708334c51SBrooks Davis 
12808334c51SBrooks Davis 
12908334c51SBrooks Davis ATF_TEST_CASE_WITHOUT_HEAD(topic_authors__ok);
ATF_TEST_CASE_BODY(topic_authors__ok)13008334c51SBrooks Davis ATF_TEST_CASE_BODY(topic_authors__ok)
13108334c51SBrooks Davis {
13208334c51SBrooks Davis     cmdline::args_vector args;
13308334c51SBrooks Davis     args.push_back("about");
13408334c51SBrooks Davis     args.push_back("authors");
13508334c51SBrooks Davis 
13608334c51SBrooks Davis     fs::mkdir(fs::path("fake-docs"), 0755);
13708334c51SBrooks Davis     atf::utils::create_file("fake-docs/AUTHORS",
13808334c51SBrooks Davis                             "Content of AUTHORS\n"
13908334c51SBrooks Davis                             "* First author\n"
14008334c51SBrooks Davis                             " * garbage\n"
14108334c51SBrooks Davis                             "* Second author\n");
14208334c51SBrooks Davis     atf::utils::create_file("fake-docs/CONTRIBUTORS",
14308334c51SBrooks Davis                             "Content of CONTRIBUTORS\n"
14408334c51SBrooks Davis                             "* First contributor\n"
14508334c51SBrooks Davis                             " * garbage\n"
14608334c51SBrooks Davis                             "* Second contributor\n");
14708334c51SBrooks Davis 
14808334c51SBrooks Davis     utils::setenv("KYUA_DOCDIR", "fake-docs");
14908334c51SBrooks Davis     cmd_about cmd;
15008334c51SBrooks Davis     cmdline::ui_mock ui;
15108334c51SBrooks Davis     ATF_REQUIRE_EQ(EXIT_SUCCESS, cmd.main(&ui, args, engine::default_config()));
15208334c51SBrooks Davis     ATF_REQUIRE(!atf::utils::grep_string(PACKAGE_NAME, ui.out_log()[0]));
15308334c51SBrooks Davis 
15408334c51SBrooks Davis     ATF_REQUIRE(!atf::utils::grep_collection("Content of AUTHORS",
15508334c51SBrooks Davis                                              ui.out_log()));
15608334c51SBrooks Davis     ATF_REQUIRE(atf::utils::grep_collection("\\* First author", ui.out_log()));
15708334c51SBrooks Davis     ATF_REQUIRE(!atf::utils::grep_collection("garbage", ui.out_log()));
15808334c51SBrooks Davis     ATF_REQUIRE(atf::utils::grep_collection("\\* Second author", ui.out_log()));
15908334c51SBrooks Davis 
16008334c51SBrooks Davis     ATF_REQUIRE(!atf::utils::grep_collection("Content of CONTRIBUTORS",
16108334c51SBrooks Davis                                              ui.out_log()));
16208334c51SBrooks Davis     ATF_REQUIRE(atf::utils::grep_collection("\\* First contributor",
16308334c51SBrooks Davis                                             ui.out_log()));
16408334c51SBrooks Davis     ATF_REQUIRE(!atf::utils::grep_collection("garbage", ui.out_log()));
16508334c51SBrooks Davis     ATF_REQUIRE(atf::utils::grep_collection("\\* Second contributor",
16608334c51SBrooks Davis                                             ui.out_log()));
16708334c51SBrooks Davis 
16808334c51SBrooks Davis     ATF_REQUIRE(!atf::utils::grep_collection("LICENSE", ui.out_log()));
16908334c51SBrooks Davis     ATF_REQUIRE(!atf::utils::grep_collection("Homepage", ui.out_log()));
17008334c51SBrooks Davis     ATF_REQUIRE(ui.err_log().empty());
17108334c51SBrooks Davis }
17208334c51SBrooks Davis 
17308334c51SBrooks Davis 
17408334c51SBrooks Davis ATF_TEST_CASE_WITHOUT_HEAD(topic_authors__missing_doc);
ATF_TEST_CASE_BODY(topic_authors__missing_doc)17508334c51SBrooks Davis ATF_TEST_CASE_BODY(topic_authors__missing_doc)
17608334c51SBrooks Davis {
17708334c51SBrooks Davis     cmdline::args_vector args;
17808334c51SBrooks Davis     args.push_back("about");
17908334c51SBrooks Davis     args.push_back("authors");
18008334c51SBrooks Davis 
18108334c51SBrooks Davis     utils::setenv("KYUA_DOCDIR", "fake-docs");
18208334c51SBrooks Davis     cmd_about cmd;
18308334c51SBrooks Davis     cmdline::ui_mock ui;
18408334c51SBrooks Davis     ATF_REQUIRE_EQ(EXIT_FAILURE, cmd.main(&ui, args, engine::default_config()));
18508334c51SBrooks Davis 
18608334c51SBrooks Davis     ATF_REQUIRE_EQ(0, ui.out_log().size());
18708334c51SBrooks Davis 
18808334c51SBrooks Davis     ATF_REQUIRE(atf::utils::grep_collection("Failed to open.*AUTHORS",
18908334c51SBrooks Davis                                             ui.err_log()));
19008334c51SBrooks Davis     ATF_REQUIRE(atf::utils::grep_collection("Failed to open.*CONTRIBUTORS",
19108334c51SBrooks Davis                                             ui.err_log()));
19208334c51SBrooks Davis     ATF_REQUIRE(!atf::utils::grep_collection("Failed to open.*LICENSE",
19308334c51SBrooks Davis                                              ui.err_log()));
19408334c51SBrooks Davis }
19508334c51SBrooks Davis 
19608334c51SBrooks Davis 
19708334c51SBrooks Davis ATF_TEST_CASE_WITHOUT_HEAD(topic_license__ok);
ATF_TEST_CASE_BODY(topic_license__ok)19808334c51SBrooks Davis ATF_TEST_CASE_BODY(topic_license__ok)
19908334c51SBrooks Davis {
20008334c51SBrooks Davis     cmdline::args_vector args;
20108334c51SBrooks Davis     args.push_back("about");
20208334c51SBrooks Davis     args.push_back("license");
20308334c51SBrooks Davis 
20408334c51SBrooks Davis     fs::mkdir(fs::path("fake-docs"), 0755);
20508334c51SBrooks Davis     atf::utils::create_file("fake-docs/LICENSE", "Content of LICENSE\n");
20608334c51SBrooks Davis 
20708334c51SBrooks Davis     utils::setenv("KYUA_DOCDIR", "fake-docs");
20808334c51SBrooks Davis     cmd_about cmd;
20908334c51SBrooks Davis     cmdline::ui_mock ui;
21008334c51SBrooks Davis     ATF_REQUIRE_EQ(EXIT_SUCCESS, cmd.main(&ui, args, engine::default_config()));
21108334c51SBrooks Davis     ATF_REQUIRE(!atf::utils::grep_string(PACKAGE_NAME, ui.out_log()[0]));
21208334c51SBrooks Davis     ATF_REQUIRE(!atf::utils::grep_collection("AUTHORS", ui.out_log()));
21308334c51SBrooks Davis     ATF_REQUIRE(!atf::utils::grep_collection("CONTRIBUTORS", ui.out_log()));
21408334c51SBrooks Davis     ATF_REQUIRE(atf::utils::grep_collection("Content of LICENSE",
21508334c51SBrooks Davis                                             ui.out_log()));
21608334c51SBrooks Davis     ATF_REQUIRE(!atf::utils::grep_collection("Homepage", ui.out_log()));
21708334c51SBrooks Davis     ATF_REQUIRE(ui.err_log().empty());
21808334c51SBrooks Davis }
21908334c51SBrooks Davis 
22008334c51SBrooks Davis 
22108334c51SBrooks Davis ATF_TEST_CASE_WITHOUT_HEAD(topic_license__missing_doc);
ATF_TEST_CASE_BODY(topic_license__missing_doc)22208334c51SBrooks Davis ATF_TEST_CASE_BODY(topic_license__missing_doc)
22308334c51SBrooks Davis {
22408334c51SBrooks Davis     cmdline::args_vector args;
22508334c51SBrooks Davis     args.push_back("about");
22608334c51SBrooks Davis     args.push_back("license");
22708334c51SBrooks Davis 
22808334c51SBrooks Davis     utils::setenv("KYUA_DOCDIR", "fake-docs");
22908334c51SBrooks Davis     cmd_about cmd;
23008334c51SBrooks Davis     cmdline::ui_mock ui;
23108334c51SBrooks Davis     ATF_REQUIRE_EQ(EXIT_FAILURE, cmd.main(&ui, args, engine::default_config()));
23208334c51SBrooks Davis 
23308334c51SBrooks Davis     ATF_REQUIRE_EQ(0, ui.out_log().size());
23408334c51SBrooks Davis 
23508334c51SBrooks Davis     ATF_REQUIRE(!atf::utils::grep_collection("Failed to open.*AUTHORS",
23608334c51SBrooks Davis                                              ui.err_log()));
23708334c51SBrooks Davis     ATF_REQUIRE(!atf::utils::grep_collection("Failed to open.*CONTRIBUTORS",
23808334c51SBrooks Davis                                              ui.err_log()));
23908334c51SBrooks Davis     ATF_REQUIRE(atf::utils::grep_collection("Failed to open.*LICENSE",
24008334c51SBrooks Davis                                             ui.err_log()));
24108334c51SBrooks Davis }
24208334c51SBrooks Davis 
24308334c51SBrooks Davis 
24408334c51SBrooks Davis ATF_TEST_CASE_WITHOUT_HEAD(topic_version__ok);
ATF_TEST_CASE_BODY(topic_version__ok)24508334c51SBrooks Davis ATF_TEST_CASE_BODY(topic_version__ok)
24608334c51SBrooks Davis {
24708334c51SBrooks Davis     cmdline::args_vector args;
24808334c51SBrooks Davis     args.push_back("about");
24908334c51SBrooks Davis     args.push_back("version");
25008334c51SBrooks Davis 
25108334c51SBrooks Davis     utils::setenv("KYUA_DOCDIR", "fake-docs");
25208334c51SBrooks Davis     cmd_about cmd;
25308334c51SBrooks Davis     cmdline::ui_mock ui;
25408334c51SBrooks Davis     ATF_REQUIRE_EQ(EXIT_SUCCESS, cmd.main(&ui, args, engine::default_config()));
25508334c51SBrooks Davis     ATF_REQUIRE_EQ(1, ui.out_log().size());
25608334c51SBrooks Davis     ATF_REQUIRE(atf::utils::grep_string(PACKAGE_NAME, ui.out_log()[0]));
25708334c51SBrooks Davis     ATF_REQUIRE(atf::utils::grep_string(PACKAGE_VERSION, ui.out_log()[0]));
25808334c51SBrooks Davis     ATF_REQUIRE(ui.err_log().empty());
25908334c51SBrooks Davis }
26008334c51SBrooks Davis 
26108334c51SBrooks Davis 
26208334c51SBrooks Davis ATF_TEST_CASE_WITHOUT_HEAD(invalid_args);
ATF_TEST_CASE_BODY(invalid_args)26308334c51SBrooks Davis ATF_TEST_CASE_BODY(invalid_args)
26408334c51SBrooks Davis {
26508334c51SBrooks Davis     cmdline::args_vector args;
26608334c51SBrooks Davis     args.push_back("about");
26708334c51SBrooks Davis     args.push_back("first");
26808334c51SBrooks Davis     args.push_back("second");
26908334c51SBrooks Davis 
27008334c51SBrooks Davis     cmd_about cmd;
27108334c51SBrooks Davis     cmdline::ui_mock ui;
27208334c51SBrooks Davis     ATF_REQUIRE_THROW_RE(cmdline::usage_error, "Too many arguments",
27308334c51SBrooks Davis                          cmd.main(&ui, args, engine::default_config()));
27408334c51SBrooks Davis     ATF_REQUIRE(ui.out_log().empty());
27508334c51SBrooks Davis     ATF_REQUIRE(ui.err_log().empty());
27608334c51SBrooks Davis }
27708334c51SBrooks Davis 
27808334c51SBrooks Davis 
27908334c51SBrooks Davis ATF_TEST_CASE_WITHOUT_HEAD(invalid_topic);
ATF_TEST_CASE_BODY(invalid_topic)28008334c51SBrooks Davis ATF_TEST_CASE_BODY(invalid_topic)
28108334c51SBrooks Davis {
28208334c51SBrooks Davis     cmdline::args_vector args;
28308334c51SBrooks Davis     args.push_back("about");
28408334c51SBrooks Davis     args.push_back("foo");
28508334c51SBrooks Davis 
28608334c51SBrooks Davis     cmd_about cmd;
28708334c51SBrooks Davis     cmdline::ui_mock ui;
28808334c51SBrooks Davis     ATF_REQUIRE_THROW_RE(cmdline::usage_error, "Invalid about topic 'foo'",
28908334c51SBrooks Davis                          cmd.main(&ui, args, engine::default_config()));
29008334c51SBrooks Davis     ATF_REQUIRE(ui.out_log().empty());
29108334c51SBrooks Davis     ATF_REQUIRE(ui.err_log().empty());
29208334c51SBrooks Davis }
29308334c51SBrooks Davis 
29408334c51SBrooks Davis 
ATF_INIT_TEST_CASES(tcs)29508334c51SBrooks Davis ATF_INIT_TEST_CASES(tcs)
29608334c51SBrooks Davis {
29708334c51SBrooks Davis     ATF_ADD_TEST_CASE(tcs, all_topics__ok);
29808334c51SBrooks Davis     ATF_ADD_TEST_CASE(tcs, all_topics__missing_docs);
29908334c51SBrooks Davis     ATF_ADD_TEST_CASE(tcs, topic_authors__ok);
30008334c51SBrooks Davis     ATF_ADD_TEST_CASE(tcs, topic_authors__missing_doc);
30108334c51SBrooks Davis     ATF_ADD_TEST_CASE(tcs, topic_license__ok);
30208334c51SBrooks Davis     ATF_ADD_TEST_CASE(tcs, topic_license__missing_doc);
30308334c51SBrooks Davis     ATF_ADD_TEST_CASE(tcs, topic_version__ok);
30408334c51SBrooks Davis     ATF_ADD_TEST_CASE(tcs, invalid_args);
30508334c51SBrooks Davis     ATF_ADD_TEST_CASE(tcs, invalid_topic);
30608334c51SBrooks Davis }
307