Test HelpArgument
This commit is contained in:
parent
db60e39630
commit
f62ed9f63d
|
@ -32,6 +32,7 @@ class ArgumentParserTests : public TestFixture {
|
|||
CPPUNIT_TEST(testParsing);
|
||||
CPPUNIT_TEST(testCallbacks);
|
||||
CPPUNIT_TEST(testBashCompletion);
|
||||
CPPUNIT_TEST(testHelp);
|
||||
CPPUNIT_TEST_SUITE_END();
|
||||
|
||||
public:
|
||||
|
@ -42,6 +43,7 @@ public:
|
|||
void testParsing();
|
||||
void testCallbacks();
|
||||
void testBashCompletion();
|
||||
void testHelp();
|
||||
|
||||
private:
|
||||
void callback();
|
||||
|
@ -590,3 +592,69 @@ void ArgumentParserTests::testBashCompletion()
|
|||
throw;
|
||||
}
|
||||
}
|
||||
|
||||
/*!
|
||||
* \brief Tests --help output.
|
||||
*/
|
||||
void ArgumentParserTests::testHelp()
|
||||
{
|
||||
// redirect cout to custom buffer
|
||||
stringstream buffer;
|
||||
streambuf *regularCoutBuffer = cout.rdbuf(buffer.rdbuf());
|
||||
|
||||
// setup parser
|
||||
ArgumentParser parser;
|
||||
HelpArgument helpArg(parser);
|
||||
helpArg.setRequired(true);
|
||||
OperationArgument verboseArg("verbose", 'v', "be verbose", "actually not an operation");
|
||||
verboseArg.setCombinable(true);
|
||||
ConfigValueArgument nestedSubArg("nested-sub", '\0', "nested sub arg", { "value1", "value2" });
|
||||
nestedSubArg.setRequiredValueCount(-1);
|
||||
Argument subArg("sub", '\0', "sub arg");
|
||||
subArg.setRequired(true);
|
||||
subArg.addSubArgument(&nestedSubArg);
|
||||
Argument filesArg("files", 'f', "specifies the path of the file(s) to be opened");
|
||||
filesArg.setCombinable(true);
|
||||
filesArg.addSubArgument(&subArg);
|
||||
Argument envArg("env", '\0', "env");
|
||||
envArg.setEnvironmentVariable("FILES");
|
||||
envArg.setRequiredValueCount(2);
|
||||
envArg.setValueNames({ "file" });
|
||||
parser.addMainArgument(&helpArg);
|
||||
parser.addMainArgument(&verboseArg);
|
||||
parser.addMainArgument(&filesArg);
|
||||
parser.addMainArgument(&envArg);
|
||||
|
||||
// parse args
|
||||
const char *const argv[] = { "app", "-h" };
|
||||
buffer.str(string());
|
||||
cout.rdbuf(buffer.rdbuf());
|
||||
parser.parseArgs(2, argv);
|
||||
cout.rdbuf(regularCoutBuffer);
|
||||
CPPUNIT_ASSERT_EQUAL("\e[1m" APP_NAME ", version " APP_VERSION "\n"
|
||||
"\n\e[0m"
|
||||
"Available arguments:\n"
|
||||
"\e[1m--help, -h\e[0m\n"
|
||||
" shows this information\n"
|
||||
" particularities: mandatory\n"
|
||||
"\n"
|
||||
"\e[1m--verbose, -v\e[0m\n"
|
||||
" be verbose\n"
|
||||
" \n"
|
||||
"usage: actually not an operation\n"
|
||||
"\n"
|
||||
"\e[1m--files, -f\e[0m\n"
|
||||
" specifies the path of the file(s) to be opened\n"
|
||||
" \e[1m--sub\e[0m\n"
|
||||
" sub arg\n"
|
||||
" particularities: mandatory if parent argument is present\n"
|
||||
" \e[1m--nested-sub\e[0m [value1] [value2] ...\n"
|
||||
" nested sub arg\n"
|
||||
"\n"
|
||||
"\e[1m--env\e[0m [file] [value 2]\n"
|
||||
" env\n"
|
||||
" default environment variable: FILES\n"
|
||||
"\n"
|
||||
"Project website: " APP_URL "\n"s,
|
||||
buffer.str());
|
||||
}
|
||||
|
|
Loading…
Reference in New Issue