From 6dd2a3cf4b16b99933618a0019e6a4cfed2d241b Mon Sep 17 00:00:00 2001 From: Pranav Srinivas Kumar Date: Wed, 21 Sep 2022 07:23:02 -0700 Subject: [PATCH] Added example to README for option=value support --- README.md | 36 ++++++++++++++++++++++++++++++++++++ include/argparse/test.cpp | 15 --------------- test/test_equals_form.cpp | 8 ++++++++ 3 files changed, 44 insertions(+), 15 deletions(-) delete mode 100644 include/argparse/test.cpp diff --git a/README.md b/README.md index 2ac64c7..814dc21 100644 --- a/README.md +++ b/README.md @@ -934,6 +934,42 @@ foo@bar:/home/dev/$ ./main fex baz ``` +## Using `option=value` syntax + +```cpp +#include "argparse.hpp" +#include + +int main(int argc, char *argv[]) { + argparse::ArgumentParser program("test"); + program.add_argument("--foo").implicit_value(true).default_value(false); + program.add_argument("--bar"); + + try { + program.parse_args(argc, argv); + } + catch (const std::runtime_error& err) { + std::cerr << err.what() << std::endl; + std::cerr << program; + std::exit(1); + } + + if (program.is_used("--foo")) { + std::cout << "--foo: " << std::boolalpha << program.get("--foo") << "\n"; + } + + if (program.is_used("--bar")) { + std::cout << "--bar: " << program.get("--bar") << "\n"; + } +} +``` + +```console +foo@bar:/home/dev/$ ./test --bar=BAR --foo +--foo: true +--bar: BAR +``` + ## CMake Integration Use the latest argparse in your CMake project without copying any content. diff --git a/include/argparse/test.cpp b/include/argparse/test.cpp deleted file mode 100644 index 8d96354..0000000 --- a/include/argparse/test.cpp +++ /dev/null @@ -1,15 +0,0 @@ -#include "argparse.hpp" -#include - -int main(int argc, char *argv[]) { - argparse::ArgumentParser program("test"); - program.add_argument("--foo").implicit_value(true).default_value(false); - program.add_argument("bar"); - - auto unknown_args = - program.parse_known_args({"test", "--foo", "--badger", "BAR", "spam"}); - - assert(program.get("--foo") == true); - assert(program.get("bar") == std::string{"BAR"}); - assert((unknown_args == std::vector{"--badger", "spam"})); -} diff --git a/test/test_equals_form.cpp b/test/test_equals_form.cpp index e09b664..81c31f8 100644 --- a/test/test_equals_form.cpp +++ b/test/test_equals_form.cpp @@ -28,4 +28,12 @@ TEST_CASE("Duplicate =-named and standard" * test_suite("equals_form")) { REQUIRE(result == "value"); std::string result2{parser.get("--long")}; REQUIRE(result2 == "NO_VALUE"); +} + +TEST_CASE("Basic --value=value with nargs(2)" * test_suite("equals_form")) { + argparse::ArgumentParser parser("test"); + parser.add_argument("--long").nargs(2); + parser.parse_args({"test", "--long=value1", "value2"}); + REQUIRE((parser.get>("--long") == + std::vector{"value1", "value2"})); } \ No newline at end of file