mirror of
https://github.com/CLIUtils/CLI11.git
synced 2025-04-29 12:13:52 +00:00
increment the parse_ variable on unnamed subcommands. update the readme, and add a formatter test for nameless subcommands in nondefault group with other named subcommands. add a test of default arguments add a formatter test add tests for unnamed subcommands and an example of the partitioned subcommands. change the app_p to be a shared_ptr so you can add an App later on and merge them together add the ability to add unnamed subcommands that allow partitioning on options into multiple apps.
164 lines
4.6 KiB
C++
164 lines
4.6 KiB
C++
#ifdef CLI11_SINGLE_FILE
|
|
#include "CLI11.hpp"
|
|
#else
|
|
#include "CLI/CLI.hpp"
|
|
#endif
|
|
|
|
#include "gmock/gmock.h"
|
|
#include "gtest/gtest.h"
|
|
#include <fstream>
|
|
|
|
using ::testing::HasSubstr;
|
|
using ::testing::Not;
|
|
|
|
class SimpleFormatter : public CLI::FormatterBase {
|
|
public:
|
|
SimpleFormatter() : FormatterBase() {}
|
|
|
|
std::string make_help(const CLI::App *, std::string, CLI::AppFormatMode) const override {
|
|
return "This is really simple";
|
|
}
|
|
};
|
|
|
|
TEST(Formatter, Nothing) {
|
|
CLI::App app{"My prog"};
|
|
|
|
app.formatter(std::make_shared<SimpleFormatter>());
|
|
|
|
std::string help = app.help();
|
|
|
|
EXPECT_EQ(help, "This is really simple");
|
|
}
|
|
|
|
TEST(Formatter, NothingLambda) {
|
|
CLI::App app{"My prog"};
|
|
|
|
app.formatter_fn(
|
|
[](const CLI::App *, std::string, CLI::AppFormatMode) { return std::string("This is really simple"); });
|
|
|
|
std::string help = app.help();
|
|
|
|
EXPECT_EQ(help, "This is really simple");
|
|
}
|
|
|
|
TEST(Formatter, OptCustomize) {
|
|
CLI::App app{"My prog"};
|
|
|
|
auto optfmt = std::make_shared<CLI::Formatter>();
|
|
optfmt->column_width(25);
|
|
optfmt->label("REQUIRED", "(MUST HAVE)");
|
|
app.formatter(optfmt);
|
|
|
|
int v;
|
|
app.add_option("--opt", v, "Something")->required();
|
|
|
|
std::string help = app.help();
|
|
|
|
EXPECT_THAT(help, HasSubstr("(MUST HAVE)"));
|
|
EXPECT_EQ(help,
|
|
"My prog\n"
|
|
"Usage: [OPTIONS]\n\n"
|
|
"Options:\n"
|
|
" -h,--help Print this help message and exit\n"
|
|
" --opt INT (MUST HAVE) Something\n");
|
|
}
|
|
|
|
TEST(Formatter, OptCustomizeSimple) {
|
|
CLI::App app{"My prog"};
|
|
|
|
app.get_formatter()->column_width(25);
|
|
app.get_formatter()->label("REQUIRED", "(MUST HAVE)");
|
|
|
|
int v;
|
|
app.add_option("--opt", v, "Something")->required();
|
|
|
|
std::string help = app.help();
|
|
|
|
EXPECT_THAT(help, HasSubstr("(MUST HAVE)"));
|
|
EXPECT_EQ(help,
|
|
"My prog\n"
|
|
"Usage: [OPTIONS]\n\n"
|
|
"Options:\n"
|
|
" -h,--help Print this help message and exit\n"
|
|
" --opt INT (MUST HAVE) Something\n");
|
|
}
|
|
|
|
TEST(Formatter, AppCustomize) {
|
|
CLI::App app{"My prog"};
|
|
app.add_subcommand("subcom1", "This");
|
|
|
|
auto appfmt = std::make_shared<CLI::Formatter>();
|
|
appfmt->column_width(20);
|
|
appfmt->label("Usage", "Run");
|
|
app.formatter(appfmt);
|
|
|
|
app.add_subcommand("subcom2", "This");
|
|
|
|
std::string help = app.help();
|
|
EXPECT_EQ(help,
|
|
"My prog\n"
|
|
"Run: [OPTIONS] [SUBCOMMAND]\n\n"
|
|
"Options:\n"
|
|
" -h,--help Print this help message and exit\n\n"
|
|
"Subcommands:\n"
|
|
" subcom1 This\n"
|
|
" subcom2 This\n");
|
|
}
|
|
|
|
TEST(Formatter, AppCustomizeSimple) {
|
|
CLI::App app{"My prog"};
|
|
app.add_subcommand("subcom1", "This");
|
|
|
|
app.get_formatter()->column_width(20);
|
|
app.get_formatter()->label("Usage", "Run");
|
|
|
|
app.add_subcommand("subcom2", "This");
|
|
|
|
std::string help = app.help();
|
|
EXPECT_EQ(help,
|
|
"My prog\n"
|
|
"Run: [OPTIONS] [SUBCOMMAND]\n\n"
|
|
"Options:\n"
|
|
" -h,--help Print this help message and exit\n\n"
|
|
"Subcommands:\n"
|
|
" subcom1 This\n"
|
|
" subcom2 This\n");
|
|
}
|
|
|
|
TEST(Formatter, AllSub) {
|
|
CLI::App app{"My prog"};
|
|
CLI::App *sub = app.add_subcommand("subcom", "This");
|
|
sub->add_flag("--insub", "MyFlag");
|
|
|
|
std::string help = app.help("", CLI::AppFormatMode::All);
|
|
EXPECT_THAT(help, HasSubstr("--insub"));
|
|
EXPECT_THAT(help, HasSubstr("subcom"));
|
|
}
|
|
|
|
TEST(Formatter, NamelessSub) {
|
|
CLI::App app{"My prog"};
|
|
CLI::App *sub = app.add_subcommand("", "This subcommand");
|
|
sub->add_flag("--insub", "MyFlag");
|
|
|
|
std::string help = app.help("", CLI::AppFormatMode::Normal);
|
|
EXPECT_THAT(help, HasSubstr("--insub"));
|
|
EXPECT_THAT(help, HasSubstr("This subcommand"));
|
|
}
|
|
|
|
TEST(Formatter, NamelessSubInGroup) {
|
|
CLI::App app{"My prog"};
|
|
CLI::App *sub = app.add_subcommand("", "This subcommand");
|
|
CLI::App *sub2 = app.add_subcommand("sub2", "subcommand2");
|
|
sub->add_flag("--insub", "MyFlag");
|
|
int val;
|
|
sub2->add_option("pos", val, "positional");
|
|
sub->group("group1");
|
|
sub2->group("group1");
|
|
std::string help = app.help("", CLI::AppFormatMode::Normal);
|
|
EXPECT_THAT(help, HasSubstr("--insub"));
|
|
EXPECT_THAT(help, HasSubstr("This subcommand"));
|
|
EXPECT_THAT(help, HasSubstr("group1"));
|
|
EXPECT_THAT(help, HasSubstr("sub2"));
|
|
EXPECT_TRUE(help.find("pos") == std::string::npos);
|
|
}
|