diff options
Diffstat (limited to 'libtests/arg_parser.cc')
-rw-r--r-- | libtests/arg_parser.cc | 106 |
1 files changed, 58 insertions, 48 deletions
diff --git a/libtests/arg_parser.cc b/libtests/arg_parser.cc index 3da0206e..340bd8d4 100644 --- a/libtests/arg_parser.cc +++ b/libtests/arg_parser.cc @@ -68,6 +68,18 @@ ArgParser::initOptions() ap.addBare("sheep", [this](){ this->ap.selectOptionTable("sheep"); }); ap.registerOptionTable("sheep", nullptr); ap.copyFromOtherTable("ewe", "baaa"); + + ap.addHelpFooter("For more help, read the manual.\n"); + ap.addHelpTopic( + "quack", "Quack Options", + "Just put stuff after quack to get a count at the end.\n"); + ap.addHelpTopic( + "baaa", "Baaa Options", + "Ewe can do sheepish things.\n" + "For example, ewe can add more ram to your computer.\n"); + ap.addOptionHelp("--ewe", "baaa", + "just for ewe", "You are not a ewe.\n"); + ap.addOptionHelp("--ram", "baaa", "curly horns", ""); } void @@ -152,62 +164,60 @@ ArgParser::finalChecks() void ArgParser::test_exceptions() { - try - { + auto err = [](char const* msg, std::function<void()> fn) { + try + { + fn(); + assert(msg == nullptr); + } + catch (std::exception& e) + { + std::cout << msg << ": " << e.what() << std::endl; + } + }; + + err("duplicate handler", [this]() { ap.selectMainOptionTable(); ap.addBare("potato", [](){}); - assert(false); - } - catch (std::exception& e) - { - std::cout << "duplicate handler: " << e.what() << std::endl; - } - try - { + }); + err("duplicate handler", [this]() { ap.selectOptionTable("baaa"); ap.addBare("ram", [](){}); - assert(false); - } - catch (std::exception& e) - { - std::cout << "duplicate handler: " << e.what() << std::endl; - } - try - { + }); + err("duplicate table", [this]() { ap.registerOptionTable("baaa", nullptr); - assert(false); - } - catch (std::exception& e) - { - std::cout << "duplicate table: " << e.what() << std::endl; - } - try - { + }); + err("unknown table", [this]() { ap.selectOptionTable("aardvark"); - assert(false); - } - catch (std::exception& e) - { - std::cout << "unknown table: " << e.what() << std::endl; - } - try - { + }); + err("copy from unknown table", [this]() { ap.copyFromOtherTable("one", "two"); - assert(false); - } - catch (std::exception& e) - { - std::cout << "copy from unknown table: " << e.what() << std::endl; - } - try - { + }); + err("copy unknown from other table", [this]() { ap.copyFromOtherTable("two", "baaa"); - assert(false); - } - catch (std::exception& e) - { - std::cout << "copy unknown from other table: " << e.what() << std::endl; - } + }); + err("add existing help topic", [this]() { + ap.addHelpTopic("baaa", "potato", "salad"); + }); + err("add reserved help topic", [this]() { + ap.addHelpTopic("all", "potato", "salad"); + }); + err("add to unknown topic", [this]() { + ap.addOptionHelp("--new", "oops", "potato", "salad"); + }); + err("bad option for help", [this]() { + ap.addOptionHelp("nodash", "baaa", "potato", "salad"); + }); + err("bad topic for help", [this]() { + ap.addHelpTopic("--dashes", "potato", "salad"); + }); + err("duplicate option help", [this]() { + ap.addOptionHelp("--ewe", "baaa", "potato", "salad"); + }); + err("invalid choice handler to unknown", [this]() { + ap.addInvalidChoiceHandler( + "elephant", [](char*){}); + }); } int main(int argc, char* argv[]) |