Skip to content

Commit

Permalink
code formatting
Browse files Browse the repository at this point in the history
  • Loading branch information
SpectraL519 committed Mar 12, 2024
1 parent e387b1e commit 11e05c6
Show file tree
Hide file tree
Showing 3 changed files with 66 additions and 86 deletions.
99 changes: 51 additions & 48 deletions include/ap/argument_parser.hpp
Original file line number Diff line number Diff line change
Expand Up @@ -36,6 +36,7 @@ SOFTWARE.

#pragma once

#include <algorithm>
#include <any>
#include <compare>
#include <concepts>
Expand Down Expand Up @@ -1221,9 +1222,11 @@ class argument_parser {
// TODO: check forbidden characters

if (this->_is_arg_name_used(primary_name, secondary_name))
throw error::argument_name_used_error({primary_name, secondary_name});
throw error::argument_name_used_error({ primary_name, secondary_name });

this->_positional_args.push_back(std::make_unique<argument::positional_argument<T>>(primary_name, secondary_name));
this->_positional_args.push_back(
std::make_unique<argument::positional_argument<T>>(primary_name, secondary_name)
);
return static_cast<argument::positional_argument<T>&>(*this->_positional_args.back());
}

Expand Down Expand Up @@ -1256,9 +1259,10 @@ class argument_parser {
// TODO: check forbidden characters

if (this->_is_arg_name_used(primary_name, secondary_name))
throw error::argument_name_used_error({primary_name, secondary_name});
throw error::argument_name_used_error({ primary_name, secondary_name });

this->_optional_args.push_back(std::make_unique<argument::optional_argument<T>>(primary_name, secondary_name));
this->_optional_args.push_back(std::make_unique<argument::optional_argument<T>>(primary_name, secondary_name)
);
return static_cast<argument::optional_argument<T>&>(*this->_optional_args.back());
}

Expand Down Expand Up @@ -1407,6 +1411,48 @@ class argument_parser {
#endif

private:
/// @brief Structure representing a command-line argument.
struct cmd_argument {
enum class type_discriminator : bool { flag, value };

cmd_argument() = default;
cmd_argument(const cmd_argument&) = default;
cmd_argument(cmd_argument&&) = default;
cmd_argument& operator=(const cmd_argument&) = default;

/**
* @brief Constructor of a command-line argument.
* @param discriminator Type discriminator (flag or value).
* @param value The value of the argument.
*/
cmd_argument(const type_discriminator discriminator, const std::string& value)
: discriminator(discriminator), value(value) {}

~cmd_argument() = default;

/**
* @brief Equality operator for comparing cmd_argument instances.
* @param other Another cmd_argument to compare with.
* @return Boolean statement of equality comparison.
*/
inline bool operator==(const cmd_argument& other) const {
return this->discriminator == other.discriminator and this->value == other.value;
}

type_discriminator discriminator;
std::string value;
};

using cmd_argument_list = std::vector<cmd_argument>;
using cmd_argument_list_iterator = typename cmd_argument_list::const_iterator;

using argument_ptr_type = std::unique_ptr<argument::detail::argument_interface>;
using argument_opt_type = std::optional<std::reference_wrapper<argument::detail::argument_interface>>;
using argument_list_type = std::vector<argument_ptr_type>;
using argument_list_iterator_type = typename argument_list_type::iterator;
using argument_list_const_iterator_type = typename argument_list_type::const_iterator;
using argument_predicate_type = std::function<bool(const argument_ptr_type&)>;

/**
* @brief Add default positional argument based on the specified category.
* @param arg The default positional argument category.
Expand Down Expand Up @@ -1461,48 +1507,6 @@ class argument_parser {
}
}

/// @brief Structure representing a command-line argument.
struct cmd_argument {
enum class type_discriminator : bool { flag, value };

cmd_argument() = default;
cmd_argument(const cmd_argument&) = default;
cmd_argument(cmd_argument&&) = default;
cmd_argument& operator=(const cmd_argument&) = default;

/**
* @brief Constructor of a command-line argument.
* @param discriminator Type discriminator (flag or value).
* @param value The value of the argument.
*/
cmd_argument(const type_discriminator discriminator, const std::string& value)
: discriminator(discriminator), value(value) {}

~cmd_argument() = default;

/**
* @brief Equality operator for comparing cmd_argument instances.
* @param other Another cmd_argument to compare with.
* @return Boolean statement of equality comparison.
*/
inline bool operator==(const cmd_argument& other) const {
return this->discriminator == other.discriminator and this->value == other.value;
}

type_discriminator discriminator;
std::string value;
};

using cmd_argument_list = std::vector<cmd_argument>;
using cmd_argument_list_iterator = typename cmd_argument_list::const_iterator;

using argument_ptr_type = std::unique_ptr<argument::detail::argument_interface>;
using argument_opt_type = std::optional<std::reference_wrapper<argument::detail::argument_interface>>;
using argument_list_type = std::vector<argument_ptr_type>;
using argument_list_iterator_type = typename argument_list_type::iterator;
using argument_list_const_iterator_type = typename argument_list_type::const_iterator;
using argument_predicate_type = std::function<bool(const argument_ptr_type&)>;

/**
* @brief Function to create a predicate for finding arguments by thename.
* @param name The name of the argument.
Expand Down Expand Up @@ -1532,7 +1536,6 @@ class argument_parser {
* @return True if the argument name is already used.
*/
[[nodiscard]] bool _is_arg_name_used(const std::string_view& name) const {
// TODO: replace with a single function which takes the argument_name structure
// same for _name_eq_predicate
const auto predicate = this->_name_eq_predicate(name);

Expand Down Expand Up @@ -1680,7 +1683,7 @@ class argument_parser {
* @return True if optional arguments can bypass required arguments, false otherwise.
*/
[[nodiscard]] inline bool _bypass_required_args() const {
return std::any_of(std::cbegin(this->_optional_args), std::cend(this->_optional_args), [](const argument_ptr_type& arg) {
return std::ranges::any_of(this->_optional_args, [](const argument_ptr_type& arg) {
return arg->is_used() and arg->bypass_required_enabled();
});
}
Expand Down
16 changes: 12 additions & 4 deletions test/source/test_argument_parser_add_argument.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -66,11 +66,15 @@ TEST_CASE_FIXTURE(
}

SUBCASE("adding argument with a previously used primary name") {
REQUIRE_THROWS_AS(sut.add_positional_argument(primary_name, other_secondary_name), ap::error::argument_name_used_error);
REQUIRE_THROWS_AS(
sut.add_positional_argument(primary_name, other_secondary_name), ap::error::argument_name_used_error
);
}

SUBCASE("adding argument with a previously used secondary name") {
REQUIRE_THROWS_AS(sut.add_positional_argument(other_primary_name, secondary_name), ap::error::argument_name_used_error);
REQUIRE_THROWS_AS(
sut.add_positional_argument(other_primary_name, secondary_name), ap::error::argument_name_used_error
);
}
}

Expand All @@ -91,11 +95,15 @@ TEST_CASE_FIXTURE(
}

SUBCASE("adding argument with a previously used primary name") {
REQUIRE_THROWS_AS(sut.add_optional_argument(primary_name, other_secondary_name), ap::error::argument_name_used_error);
REQUIRE_THROWS_AS(
sut.add_optional_argument(primary_name, other_secondary_name), ap::error::argument_name_used_error
);
}

SUBCASE("adding argument with a previously used secondary name") {
REQUIRE_THROWS_AS(sut.add_optional_argument(other_primary_name, secondary_name), ap::error::argument_name_used_error);
REQUIRE_THROWS_AS(
sut.add_optional_argument(other_primary_name, secondary_name), ap::error::argument_name_used_error
);
}
}

Expand Down
37 changes: 3 additions & 34 deletions test/source/test_argument_parser_parse_args.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -31,8 +31,6 @@ const std::string optional_arg_name_secondary = "oa";

TEST_SUITE_BEGIN("test_argument_parser_parse_args");

TEST_SUITE_BEGIN("test_argument_parser_parse_args::_preprocess_input");

TEST_CASE_FIXTURE(argument_parser_test_fixture, "_preprocess_input should return an empty vector for no command-line arguments") {
const auto argc = get_argc(default_num_args, default_num_args);
auto argv = prepare_argv(default_num_args, default_num_args);
Expand Down Expand Up @@ -71,11 +69,6 @@ TEST_CASE_FIXTURE(argument_parser_test_fixture, "_preprocess_input should return
free_argv(argc, argv);
}

TEST_SUITE_END(); // test_argument_parser_parse_args::_preprocess_input


TEST_SUITE_BEGIN("test_argument_parser_parse_args::_parse_args_impl");

TEST_CASE_FIXTURE(
argument_parser_test_fixture,
"_parse_args_impl should throw when there is a non-positional value specified "
Expand All @@ -97,11 +90,6 @@ TEST_CASE_FIXTURE(argument_parser_test_fixture, "_parse_args_impl should not thr
REQUIRE_NOTHROW(sut_parse_args_impl(cmd_args));
}

TEST_SUITE_END(); // test_argument_parser_parse_args::_parse_args_impl


TEST_SUITE_BEGIN("test_argument_parser_parse_args::_get_argument");

TEST_CASE_FIXTURE(
argument_parser_test_fixture,
"_get_argument should return nullopt if "
Expand All @@ -126,8 +114,6 @@ TEST_CASE_FIXTURE(
}
}

TEST_SUITE_END(); // test_argument_parser_parse_args::_get_argument

TEST_CASE_FIXTURE(argument_parser_test_fixture, "parse_args should throw when there is no value specified for a required optional argument") {
add_arguments(sut, non_default_num_args, non_default_args_split);

Expand Down Expand Up @@ -234,8 +220,6 @@ TEST_CASE_FIXTURE(
free_argv(argc, argv);
}

TEST_SUITE_BEGIN("test_argument_parser_parse_args::has_value");

TEST_CASE_FIXTURE(argument_parser_test_fixture, "has_value should return false if there is no argument with given name present") {
add_arguments(sut, non_default_num_args, non_default_args_split);

Expand Down Expand Up @@ -307,11 +291,6 @@ TEST_CASE_FIXTURE(argument_parser_test_fixture, "has_value should return false w
free_argv(argc, argv);
}

TEST_SUITE_END(); // test_argument_parser_parse_args::has_value


TEST_SUITE_BEGIN("test_argument_parser_parse_args::value");

TEST_CASE_FIXTURE(argument_parser_test_fixture, "value() should throw if there is no argument with given name present") {
add_arguments(sut, non_default_num_args, non_default_args_split);

Expand Down Expand Up @@ -425,11 +404,6 @@ TEST_CASE_FIXTURE(
free_argv(argc, argv);
}

TEST_SUITE_END(); // test_argument_parser_parse_args::value


TEST_SUITE_BEGIN("test_argument_parser_parse_args::count");

TEST_CASE_FIXTURE(argument_parser_test_fixture, "count should return 0 before calling parse_args") {
add_arguments(sut, non_default_num_args, non_default_args_split);

Expand Down Expand Up @@ -499,11 +473,6 @@ TEST_CASE_FIXTURE(argument_parser_test_fixture, "count should return the number
free_argv(argc, argv);
}

TEST_SUITE_END(); // test_argument_parser_parse_args::count


TEST_SUITE_BEGIN("test_argument_parser_parse_args::values");

TEST_CASE_FIXTURE(argument_parser_test_fixture, "values() should throw when calling with a positional argument's name") {
sut.add_positional_argument(positional_arg_name_primary, positional_arg_name_secondary);

Expand Down Expand Up @@ -547,7 +516,9 @@ TEST_CASE_FIXTURE(argument_parser_test_fixture, "values() should throw when an a
// parse args
sut.parse_args(argc, argv);

REQUIRE_THROWS_AS(sut.values<invalid_argument_value_type>(optional_arg_name_primary), ap::error::invalid_value_type_error);
REQUIRE_THROWS_AS(
sut.values<invalid_argument_value_type>(optional_arg_name_primary), ap::error::invalid_value_type_error
);
REQUIRE_THROWS_AS(
sut.values<invalid_argument_value_type>(optional_arg_name_secondary), ap::error::invalid_value_type_error
);
Expand Down Expand Up @@ -645,6 +616,4 @@ TEST_CASE_FIXTURE(
free_argv(argc, argv);
}

TEST_SUITE_END(); // test_argument_parser_parse_args::values

TEST_SUITE_END(); // test_argument_parser_parse_args

0 comments on commit 11e05c6

Please sign in to comment.