diff --git a/src/argparse.hpp b/src/argparse.hpp index 9205019..1d68ede 100644 --- a/src/argparse.hpp +++ b/src/argparse.hpp @@ -1,3 +1,4 @@ +#pragma once #include #include #include @@ -201,6 +202,10 @@ class ArgumentParser { return T(); } + std::map> get_arguments() const { + return mArgumentMap; + } + private: Argument& add_argument_internal(std::shared_ptr aArgument) { return *aArgument; diff --git a/tests/CMakeLists.txt b/tests/CMakeLists.txt index c4eee41..76fda4c 100644 --- a/tests/CMakeLists.txt +++ b/tests/CMakeLists.txt @@ -17,7 +17,7 @@ file(GLOB ARGPARSE_TEST_SOURCES "../src/argparse.hpp" ) ADD_EXECUTABLE(ARGPARSE ${ARGPARSE_TEST_SOURCES}) -INCLUDE_DIRECTORIES("../src") +INCLUDE_DIRECTORIES("../src" ".") set_target_properties(ARGPARSE PROPERTIES OUTPUT_NAME tests) set_property(TARGET ARGPARSE PROPERTY CXX_STANDARD 17) diff --git a/tests/main.cpp b/tests/main.cpp index 7bd8c06..c866956 100644 --- a/tests/main.cpp +++ b/tests/main.cpp @@ -1,39 +1,4 @@ +#define CATCH_CONFIG_MAIN #include #include -using namespace argparse; - -int main(int argc, char * argv[]) { - ArgumentParser program("test"); - - program.add_argument("--config") - .help("Path to input file") - .default_value([]() { return std::string{"config.yml"}; }); - - program.add_argument("-n", "--num_iterations") - .help("Number of iterations") - .action([](const std::string& value) { return std::stoi(value); }); - - program.add_argument("-v", "--verbose", "VERBOSE") - .nargs(0) - .default_value([]() { return false; }); - - program.add_argument("--test_inputs") - .nargs(3) - .default_value([]() { return std::vector{ 1, 2, 3 }; }) - .action([](const std::string& value) { return std::stoi(value); }); - - program.parse_args(argc, argv); - - auto config_file = program.get("--config"); - auto num_iters = program.get("-n"); - auto verbose = program.get("-v"); - auto test_inputs = program.get>("--test_inputs"); - - std::cout << config_file << std::endl; - std::cout << num_iters << std::endl; - std::cout << verbose << std::endl; - for (auto& input : test_inputs) - std::cout << input << std::endl; - - return 0; -} \ No newline at end of file +#include \ No newline at end of file diff --git a/tests/test_add_argument.hpp b/tests/test_add_argument.hpp new file mode 100644 index 0000000..4c83a70 --- /dev/null +++ b/tests/test_add_argument.hpp @@ -0,0 +1,16 @@ +#include +#include + +TEST_CASE("Add a simple argument", "[add_argument]") { + argparse::ArgumentParser program("test"); + program.add_argument("--foo"); + + auto arguments = program.get_arguments(); + REQUIRE(arguments.size() == 1); + REQUIRE(arguments["--foo"] != nullptr); + REQUIRE(arguments["--foo"]->mNames == std::vector{"--foo"}); + REQUIRE(arguments["--foo"]->mHelp == ""); + REQUIRE(arguments["--foo"]->mNumArgs == 1); + REQUIRE(arguments["--foo"]->mRawValues.size() == 0); + REQUIRE(arguments["--foo"]->mValues.size() == 0); +} \ No newline at end of file