File: test_as_container.cpp

package info (click to toggle)
libargparse 3.2-1
  • links: PTS, VCS
  • area: main
  • in suites: forky, sid, trixie
  • size: 896 kB
  • sloc: cpp: 11,319; python: 8; makefile: 4; sh: 3
file content (57 lines) | stat: -rw-r--r-- 1,908 bytes parent folder | download | duplicates (5)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
#ifdef WITH_MODULE
import argparse;
#else
#include <argparse/argparse.hpp>
#endif
#include <doctest.hpp>

using doctest::test_suite;

TEST_CASE("Get argument with .at()" * test_suite("as_container")) {
  argparse::ArgumentParser program("test");
  auto &dir_arg = program.add_argument("--dir");
  program.at("--dir").default_value(std::string("/home/user"));

  SUBCASE("and default value") {
    program.parse_args({"test"});
    REQUIRE(&(program.at("--dir")) == &dir_arg);
    REQUIRE(program["--dir"] == std::string("/home/user"));
    REQUIRE(program.at("--dir") == std::string("/home/user"));
  }

  SUBCASE("and user-supplied value") {
    program.parse_args({"test", "--dir", "/usr/local/database"});
    REQUIRE(&(program.at("--dir")) == &dir_arg);
    REQUIRE(program["--dir"] == std::string("/usr/local/database"));
    REQUIRE(program.at("--dir") == std::string("/usr/local/database"));
  }

  SUBCASE("with unknown argument") {
    program.parse_args({"test"});
    REQUIRE_THROWS_WITH_AS(program.at("--folder"), "No such argument: --folder",
                           std::logic_error);
  }
}

TEST_CASE("Get subparser with .at()" * test_suite("as_container")) {
  argparse::ArgumentParser program("test");

  argparse::ArgumentParser walk_cmd("walk");
  auto &speed = walk_cmd.add_argument("speed");

  program.add_subparser(walk_cmd);

  SUBCASE("and its argument") {
    program.parse_args({"test", "walk", "4km/h"});
    REQUIRE(&(program.at<argparse::ArgumentParser>("walk")) == &walk_cmd);
    REQUIRE(&(program.at<argparse::ArgumentParser>("walk").at("speed")) ==
            &speed);
    REQUIRE(program.at<argparse::ArgumentParser>("walk").is_used("speed"));
  }

  SUBCASE("with unknown command") {
    program.parse_args({"test"});
    REQUIRE_THROWS_WITH_AS(program.at<argparse::ArgumentParser>("fly"),
                           "No such subparser: fly", std::logic_error);
  }
}