Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
8 changes: 6 additions & 2 deletions include/argparse/argparse.hpp
Original file line number Diff line number Diff line change
Expand Up @@ -2356,7 +2356,9 @@ class ArgumentParser {
}
auto end = std::end(arguments);
auto positional_argument_it = std::begin(m_positional_arguments);
for (auto it = std::next(std::begin(arguments)); it != end;) {
for (auto it = arguments.empty() ? std::begin(arguments)
: std::next(std::begin(arguments));
it != end;) {
const auto &current_argument = *it;
if (Argument::is_positional(current_argument, m_prefix_chars)) {
if (positional_argument_it == std::end(m_positional_arguments)) {
Expand Down Expand Up @@ -2473,7 +2475,9 @@ class ArgumentParser {
}
auto end = std::end(arguments);
auto positional_argument_it = std::begin(m_positional_arguments);
for (auto it = std::next(std::begin(arguments)); it != end;) {
for (auto it = arguments.empty() ? std::begin(arguments)
: std::next(std::begin(arguments));
it != end;) {
const auto &current_argument = *it;
if (Argument::is_positional(current_argument, m_prefix_chars)) {
if (positional_argument_it == std::end(m_positional_arguments)) {
Expand Down
16 changes: 16 additions & 0 deletions test/test_parse_args.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -6,9 +6,25 @@ import argparse;
#include <doctest.hpp>

#include <optional>
#include <vector>

using doctest::test_suite;

TEST_CASE("Parse empty argument vector" * test_suite("parse_args")) {
argparse::ArgumentParser program("test");

REQUIRE_NOTHROW(program.parse_args(std::vector<std::string>{}));
}

TEST_CASE("Parse empty argument vector with required argument" *
test_suite("parse_args")) {
argparse::ArgumentParser program("test");
program.add_argument("config");

REQUIRE_THROWS_AS(program.parse_args(std::vector<std::string>{}),
std::runtime_error);
}

TEST_CASE("Missing argument" * test_suite("parse_args")) {
argparse::ArgumentParser program("test");
program.add_argument("--config").nargs(1);
Expand Down
8 changes: 8 additions & 0 deletions test/test_parse_known_args.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -10,6 +10,14 @@ import argparse;

using doctest::test_suite;

TEST_CASE("Parse empty argument vector without exceptions" *
test_suite("parse_known_args")) {
argparse::ArgumentParser program("test");

auto unknown_args = program.parse_known_args(std::vector<std::string>{});
REQUIRE(unknown_args.empty());
}

TEST_CASE("Parse unknown optional and positional arguments without exceptions" *
test_suite("parse_known_args")) {
argparse::ArgumentParser program("test");
Expand Down