void ArgumentsTest::prefixedHelpWithoutPrefix() { Arguments args; args.addArgument("file").setHelp("file", "file to read") .addBooleanOption('b', "binary").setHelp("binary", "read as binary") .addSkippedPrefix("read", "reader options") .addSkippedPrefix("write"); const auto expected = R"text(Usage: ./app [--read-...] [--write-...] [-h|--help] [-b|--binary] [--] file Arguments: file file to read -h, --help display this help message and exit -b, --binary read as binary --read-... reader options (see --read-help for details) --write-... (see --write-help for details) )text"; CORRADE_COMPARE(args.help(), expected); } void ArgumentsTest::prefixedHelpWithPrefix() { Arguments args{"read"}; args.addOption("behavior", "buffered").setHelp("behavior", "reader behavior") .addOption("buffer-size").setHelp("buffer-size", "buffer size", "SIZE"); const auto expected = R"text(Usage: ./app [--read-help] [--read-behavior BEHAVIOR] [--read-buffer-size SIZE] ... Arguments: ... main application arguments (see -h or --help for details) --read-help display this help message and exit --read-behavior BEHAVIOR reader behavior (default: buffered) --read-buffer-size SIZE buffer size )text"; CORRADE_COMPARE(args.help(), expected); } void ArgumentsTest::prefixedDisallowedCalls() { std::ostringstream out; Error redirectError{&out}; Arguments args{"reader"}; args.addArgument("foo") .addNamedArgument("bar") .addOption('a', "baz") .addBooleanOption("eh") .setHelp("global help"); CORRADE_COMPARE(out.str(), "Utility::Arguments::addArgument(): argument foo not allowed in prefixed version\n" "Utility::Arguments::addNamedArgument(): argument bar not allowed in prefixed version\n" "Utility::Arguments::addOption(): short option a not allowed in prefixed version\n" "Utility::Arguments::addBooleanOption(): boolean option eh not allowed in prefixed version\n" "Utility::Arguments::setHelp(): global help text only allowed in unprefixed version\n"); }
void ArgumentsTest::parseMissingArgument() { Arguments args; args.addArgument("file").setHelp("file", "", "file.dat"); const char* argv[] = { "" }; const int argc = std::extent<decltype(argv)>(); std::ostringstream out; Error redirectError{&out}; CORRADE_VERIFY(!args.tryParse(argc, argv)); CORRADE_COMPARE(out.str(), "Missing command-line argument file.dat\n"); }
void ArgumentsTest::parseArguments() { Arguments args; args.addArgument("name") .addArgument("input") .addArgument("output"); const char* argv[] = { "", "hello", "in.txt", "out.bin" }; const int argc = std::extent<decltype(argv)>(); CORRADE_VERIFY(args.tryParse(argc, argv)); CORRADE_COMPARE(args.value("name"), "hello"); CORRADE_COMPARE(args.value("input"), "in.txt"); CORRADE_COMPARE(args.value("output"), "out.bin"); }
void ArgumentsTest::parseMixed() { Arguments args; args.addArgument("file") .addNamedArgument('o', "output") .addOption("size", "56") .addBooleanOption('v', "verbose") .addBooleanOption('l', "loud"); const char* argv[] = { "", "-o", "log.txt", "-v", "input.txt" }; const int argc = std::extent<decltype(argv)>(); CORRADE_VERIFY(args.tryParse(argc, argv)); CORRADE_VERIFY(!args.isSet("help")); CORRADE_VERIFY(args.isSet("verbose")); CORRADE_COMPARE(args.value("file"), "input.txt"); /* Default values */ CORRADE_COMPARE(args.value("size"), "56"); CORRADE_VERIFY(!args.isSet("loud")); }
static void BuildArgument( char const * const iValue, Arguments & ioArguments) { ioArguments.addArgument(iValue); }