|
|
@@ -11,6 +11,7 @@
|
|
|
|
|
|
using testing::ElementsAre;
|
|
|
using testing::Eq;
|
|
|
+using testing::IsEmpty;
|
|
|
|
|
|
template <typename T, size_t N> static T parse(char const * const (&argv)[N]) {
|
|
|
return T(N, argv);
|
|
|
@@ -93,3 +94,22 @@ struct OOOArgumentTest : program::Arguments<OOOArgumentTest> {
|
|
|
TEST(OOOArgumentTest, ThrowsOnConstruction) {
|
|
|
EXPECT_THROW(OOOArgumentTest(), program::ArgumentStructureError);
|
|
|
}
|
|
|
+
|
|
|
+struct RestArgsTest : program::Arguments<RestArgsTest> {
|
|
|
+ using Arguments::Arguments;
|
|
|
+
|
|
|
+ std::string arg0 = argument(0, "arg0") = "";
|
|
|
+ std::vector<std::string> args = rest();
|
|
|
+};
|
|
|
+
|
|
|
+TEST(RestArgsTest, SetsOptionalArgFirst) {
|
|
|
+ auto const options = parse<RestArgsTest>({"", "A"});
|
|
|
+ EXPECT_THAT(options.arg0, "A");
|
|
|
+ EXPECT_THAT(options.args, IsEmpty());
|
|
|
+}
|
|
|
+
|
|
|
+TEST(RestArgsTest, ForwardsOverflowIntoRest) {
|
|
|
+ auto const options = parse<RestArgsTest>({"", "A", "B", "C"});
|
|
|
+ EXPECT_THAT(options.arg0, "A");
|
|
|
+ EXPECT_THAT(options.args, ElementsAre("B", "C"));
|
|
|
+}
|