forked from p-ranav/argparse
-
Notifications
You must be signed in to change notification settings - Fork 0
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
fixes: p-ranav#50
- Loading branch information
Showing
3 changed files
with
118 additions
and
1 deletion.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,95 @@ | ||
#pragma once | ||
#include <argparse.hpp> | ||
#include <catch.hpp> | ||
|
||
TEST_CASE("ArgumentParser is MoveConstructible and MoveAssignable", | ||
"[value_semantics]") { | ||
GIVEN("a parser that has two arguments") { | ||
argparse::ArgumentParser parser("test"); | ||
parser.add_argument("foo"); | ||
parser.add_argument("-f"); | ||
|
||
WHEN("move construct a new parser from it") { | ||
auto new_parser = std::move(parser); | ||
|
||
THEN("the old parser replaces the new parser") { | ||
new_parser.parse_args({"test", "bar", "-f", "nul"}); | ||
|
||
REQUIRE(new_parser.get("foo") == "bar"); | ||
REQUIRE(new_parser.get("-f") == "nul"); | ||
} | ||
} | ||
|
||
WHEN("move assign a parser prvalue to it") { | ||
parser = argparse::ArgumentParser("test"); | ||
|
||
THEN("the old parser is replaced") { | ||
REQUIRE_THROWS_AS(parser.parse_args({"test", "bar"}), | ||
std::runtime_error); | ||
REQUIRE_THROWS_AS(parser.parse_args({"test", "-f", "nul"}), | ||
std::runtime_error); | ||
REQUIRE_NOTHROW(parser.parse_args({"test"})); | ||
} | ||
} | ||
} | ||
} | ||
|
||
TEST_CASE("ArgumentParser is CopyConstructible and CopyAssignable", | ||
"[value_semantics]") { | ||
GIVEN("a parser that has two arguments") { | ||
argparse::ArgumentParser parser("test"); | ||
parser.add_argument("foo"); | ||
parser.add_argument("-f"); | ||
|
||
WHEN("copy construct a new parser from it") { | ||
auto new_parser = parser; | ||
|
||
THEN("the new parser has the old parser's capability") { | ||
new_parser.parse_args({"test", "bar", "-f", "nul"}); | ||
|
||
REQUIRE(new_parser.get("foo") == "bar"); | ||
REQUIRE(new_parser.get("-f") == "nul"); | ||
|
||
AND_THEN("but does not share states with the old parser") { | ||
REQUIRE_THROWS_AS(parser.get("foo"), std::logic_error); | ||
REQUIRE_THROWS_AS(parser.get("-f"), std::logic_error); | ||
} | ||
} | ||
|
||
AND_THEN("the old parser works as a distinct copy") { | ||
new_parser.parse_args({"test", "toe", "-f", "/"}); | ||
|
||
REQUIRE(new_parser.get("foo") == "toe"); | ||
REQUIRE(new_parser.get("-f") == "/"); | ||
} | ||
} | ||
|
||
WHEN("copy assign a parser lvalue to it") { | ||
argparse::ArgumentParser optional_parser("test"); | ||
optional_parser.add_argument("-g"); | ||
parser = optional_parser; | ||
|
||
THEN("the old parser is replaced") { | ||
REQUIRE_THROWS_AS(parser.parse_args({"test", "bar"}), | ||
std::runtime_error); | ||
REQUIRE_THROWS_AS(parser.parse_args({"test", "-f", "nul"}), | ||
std::runtime_error); | ||
REQUIRE_NOTHROW(parser.parse_args({"test"})); | ||
REQUIRE_NOTHROW(parser.parse_args({"test", "-g", "nul"})); | ||
|
||
AND_THEN("but does not share states with the other parser") { | ||
REQUIRE(parser.get("-g") == "nul"); | ||
REQUIRE_THROWS_AS(optional_parser.get("-g"), std::logic_error); | ||
} | ||
} | ||
|
||
AND_THEN("the other parser works as a distinct copy") { | ||
REQUIRE_NOTHROW(optional_parser.parse_args({"test"})); | ||
REQUIRE_NOTHROW(optional_parser.parse_args({"test", "-g", "nul"})); | ||
REQUIRE_THROWS_AS( | ||
optional_parser.parse_args({"test", "bar", "-g", "nul"}), | ||
std::runtime_error); | ||
} | ||
} | ||
} | ||
} |